Course Description
Learning Objectives
By the end of this course, students should be able to:
- Write simple-to-moderate programs with core structures (data, variables, functions, conditionals, loops, and lists)
- Build interactive programs (text and visual interaction)
- Find libraries/code online and learn how to use them
This course will introduce you to
computer programming. This field of study involves determining how to build algorithms (specific sets of instructions) that can solve problems, and how to translate those algorithms into a language that a computer can understand and execute. You'll specifically learn how to design and write Python programs to solve simple-to-moderately complex problems. To build these programs, we will cover computational concepts such as: algorithms, data, variables, functions, conditionals, loops, lists, debugging, testing, style, and documentation. By the end of the program you will be able to build simple interactive programs that respond to user input.
Learning Activities
Learning is accomplished through two primary means: participation and homework assignments.
- Participation means attending daily lectures and staying involved in class discussion and work. In general, you should be an active member of the class!
- Homeworks are problems to be completed weekly, related to that week's material. Homeworks are generally released on Mondays and due by Fridays at the end of the day. You are welcome (and encouraged!) to collaborate on homework assignments, but you should always type up your own solutions (see the Collaboration section for more details). The course staff will provide feedback on homework within one week of the due date (usually sooner).
Homework Assignments
Each homework assignment has a written component and a programming component. The two components are completed and submitted separately, but should be considered part of one larger assignment.
Written assignments can be completed by printing the assignment, writing answers by hand, and scanning the result; alternatively, you can type answers in the fillable PDF electronically by using
Adobe Reader (Windows/Macs), Preview (Macs), or Microsoft Edge (Windows).
Programming assignments should be completed in your IDE. Make sure to regularly run your code to make sure your syntax is correct, and try to pass all the test cases before submitting!
Both written and programming assignments can be submitted to
Gradescope. Feedback will be visible on Gradescope as well. Make sure to read your feedback! If you find a grading mistake, you can submit a regrade request on Gradescope, and we'll take a look.
Each assignment has a regular deadline (usually Friday by end of day), but also a
revision deadline. The initial round of grading will happen shortly after the regular deadline; if you find upon checking your feedback that you made some mistakes and you want to fix your work, you can resubmit up until the revision deadline and have your work regraded.
Course Evaluations
On the last day of class, all students will complete a
final evaluation. This will be a small set of problems similar to problems completed in class and on homework assignments. Final evaluations will be graded and given feedback shortly after this final class.
After the program has ended, you will receive an evaluation from Prof. Kelly that you can include in college applications. You will be evaluted on your class interaction, mastery of the concepts taught in class, and engagement with the bonus materials. To receive a positive evaluation, you should make a good-faith effort at all class activities and do your best on homework assignments and the final evaluation. It's okay to not always get things 100% right; if you're learning the material and working hard, that's what matters most.
Mastery Grading
We will use
mastery grading to assess your performance on homeworks and the final evaluation. Each concept being evaluated will be scored on a mastery rubric:
- Mastered [1]: work demonstrates full mastery of the concept
- Sufficient [0.5]: work demonstrates competency with the concept, though there is still room to improve
- Insufficient [0]: work does not yet demonstrate necessary competence with the concept
- Not Attempted [0]: work not attempted
Your goal should be to achieve a rating of Mastered or Sufficient on every concept. If you receive an Insufficient rating on submitted work, you are encouraged to revise and resubmit by the revision deadline, or talk directly to Prof. Kelly if you're having trouble completing work by the revision deadline.
Note: Prof. Kelly is experimenting with Mastery Grading for the first time in this program. If you have feedback on how this system is helping or hindering your learning, please reach out to let her know!
Course Resources
This course does not have a required textbook; all course materials will be posted online.
Required Software
You will need to download
Python and an
IDE to write code. Both of these can be downloaded for free online. We recommend that you download the IDE
Thonny, which comes with Python pre-installed. Download Thonny
here.
If your computer setup does not let you download external applications, you will need to code in a browser instead. You can use the online IDE
repl.it in this case. This system is free, but the free version makes your code publicly viewable. To keep your code private, set up a
GitHub student account with your andrewID or high school email, then connect it to your repl.it account; you can then create private repos for your homework assignments.
Prof. Kelly is trying Thonny for the first time this summer, so it is possible that problems will arise. If you cannot get Thonny to work, you can try downloading our previously-recommended IDE Pyzo instead
here. You will also need to download Python separately here:
python.org.
You may use another IDE of your choice if you'd like, but we will not support it if you have any IDE questions or if it breaks.
Communication Tools
You will probably have questions as you go through the course!
Slack is a great tool for short questions about logistics or general class topics. Post on the computer-science-scholars channel of the Pre-College Slack and Prof. Kelly will get back to you within one working day.
Here are some tips for asking questions about bugs in code:
- Be specific! Clearly reference which content area or homework problem you have a question about.
- If you include any amount of code in a post, put it in a code block. Do not post screenshots of code, as this make debugging more difficult.
- When you ask for debugging help, describe any debugging you've already done and what you think the problem might be.
- Do not post large blocks of code in public view - directly message Prof. Kelly instead.
Further Resources
If you'd like to learn more or get additional practice, additional learning resources can be found on the
Resources tab.
Course Policies
Health and Wellness
Your first priority should always be to take care of yourself. You can do this by eating well, getting enough sleep, exercising, socializing, and taking some time to relax. This will help you achieve your goals and cope with stress.
All of us benefit from support during times of struggle. If you or anyone you know experiences any academic stress, difficult life events, or feelings of anxiety or depression, we strongly encourage you to seek support. In particular, if you are unable to attend class or complete homework due to an external situation (including a medical emergency or family/personal crisis), please contact the CS Scholars staff and Prof. Kelly so that we can provide support and arrange extensions as necessary.
If you or someone you know is in danger of self-harm, please call someone immediately, day or night:
Re:solve Crisis Network: 888-796-8226
Diversity and Inclusion
We warmly welcome students with a wide range of backgrounds and identities in this course. We strive to make every student in this class feel safe and welcome, both because we respect you as human beings with a diverse set of experiences and because we want to make learning computer science as accessible as possible. We acknowledge that computer science as a field currently suffers from a lack of racial and gender diversity, and we want to make the field more broadly accessible for all people.
If something happens that makes you feel unsafe, unwelcome, or discriminated against,
please let us know. You are always encouraged to reach out to the course staff; we will listen and support you. You can email Prof. Kelly directly, or contact the CS Scholars staff if you wish to remain anonymous.
Collaboration and Academic Integrity
Collaboration
You are encouraged to collaborate with other students in the program when learning the material and working on assignments. Here are a list of examples on how to collaborate well within this class.
- Discuss which general concepts might be useful in solving a problem (loops, data representation, etc.)
- Sketch out solutions on a whiteboard together.
- You should sketch out the solution together, discuss it, then erase the solution, do something else for a few minutes, then write up the solutions individually. Don't just copy the solution directly from the whiteboard- then you might not fully understand it!
- Note that this type of problem-solving should involve active participation by all students. You should not have one student solve a problem and present their solution to the rest of the group; this will not lead to good learning, and goes against our policies.
- For programming problems, review test cases together and discuss why the inputs result in specific outputs.
- For programming problems, help each other debug specific parts of assignment code.
- NOTE: do not 'debug' by telling a friend to try your approach instead! Help them figure out what is actually going wrong. To be safe, do not refer to your own code when helping a friend debug.
Academic Integrity in Assignments
There are certain restrictions on how much collaboration is allowed, to ensure that all students understand the material they submit on homework assignments. In general,
all collaborators must contribute intellectually and understand the material they produce, and
each student must write up their own assignment submission individually. If you submit work that you have not contributed intellectually to, or support another student in submitting work they do not fully understsand, this counts as an academic integrity violation. Violations can include:
- Submitting code written by another person, copying or stealing any amount of written text or code from someone else in the class, or providing text or code you have written for an assignment to anyone else in the class.
- Copying is never okay, whether the solution is provided electronically, visually, audibly, or on paper.
- Finding answers online and using them in the assignment, or consulting them while writing your own solution
- Exception: you may use code from the course website or the Official Python Documentation. Please include a citation with a link when you do this.
- Asking questions about the assignments or posting assignment solutions on any online services outside of the course Slack
- In particular, do not post questions about assignment problems on Chegg or CourseHero. These sites are explicitly not allowed for homework assignments.
The course staff will regularly check assignment submissions for academic integrity violations. If a violation is found, you will be asked to meet with Prof. Kelly to discuss the situation, and penalties may be applied.
Mistakes happen. Sometimes, students panic and copy code right before the deadline, then regret what they did afterwards. Therefore,
you may rescind any homework submission up to 24 hours after the submission was made with no questions asked. Simply email Prof. Kelly and ask her to delete the submission in question, and she will do so. Deleted submissions will not be considered during plagiarism detection, though of course they will also not be graded.
Tips for Success
Learning how to program provides great opportunities, but it also may pose great challenges. Here are some tips for how to succeed in this course as you learn a new and exciting set of skills and concepts.
- Participate. You cannot learn how to program passively, by observing someone else; you have to practice. While attending lecture, follow along in your own IDE and try modifying the code the instructor writes to see what happens. Try things out and see what happens!
- Embrace Mistakes. "Bugs" (mistakes) are a common part of the programming process. Even expert programmers commonly produce bugs in their code that they need to fix (you'll see this happen to the course staff a lot!). Run your code to check your work often, and treat every bug as an opportunity to learn, not as a dead end.
- Get Help When You Need It. It's okay (and encouraged!!) to reach out for help when you're struggling with a concept or an assignment. Reach out to Prof. Kelly and she will be more than happy to help you learn. Find a collaborator and talk through the problems with them. In general, don't feel like you need to do everything on your own - embrace your learning community!
- Debug Smarter, Not Harder. It is very easy to get stuck when debugging an error in a program and spend hours on a single mistake with no progress. If you find yourself spending more than 15 minutes debugging the same error, you need to change your approach. First, try to get someone else to help you (a collaborator in the class or Prof. KElly); often a new set of eyes will notice things that you can't see yourself, and explaining your code to someone else may help you notice something new. Second, if no one else is available, take a break and do something else. When you come back to the problem later, you'll be able to see your code in a new light, and it might prove much easier to fix.
- Read Your Feedback. Homeworks are formative - they're an opportunity to learn! When an assignment has been graded, go back and check the feedback written by the course staff. This is your chance to more deeply learn the material.