CMU CS Scholars 2021 - Programming Course

Course Syllabus

Course Description

Learning Objectives

By the end of this course, students should be able to: 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 moderately-complex problems. You will learn to use control flow, simple data structures, and interactive systems by the end of the course. The work will culminate in writing code for a game of moderate complexity, Tetris.

Learning Activities

Learning is accomplished through two primary means: participation and homework assignments.

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. Grades and feedback will be visible on Gradescope as well. Make sure to read your feedback! If you find a grading error, 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 the day 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

At the end of the course, you will receive an evaluation from Prof. Kelly that you can include in college applications. You will be evaluted on your participation in lecture, performance on homework assignments, engagement with the bonus materials, and on your performance on the final evaluation. This is a test that will be assigned on the last day of class, Thursday 08/12.

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.

Course Resources

This course does not have a required textbook; all course materials will be posted online.

Required Software

Every required software package we use is available for free on the web. This includes:
You may use another IDE of your choice, but we will not support it if you have any IDE questions or if it breaks. If you temporarily need to code in a browser, is a good choice that requires no set-up.

Communication Tools

You will probably have questions as you go through the course! There are two communication tools that will help.

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 a TA or Prof. Kelly will get back to you within one working day.

Piazza is a great tool for longer questions about homework assigments or particularly tricky concepts. Post on the course Piazza and a TA or Prof. Kelly will get back to you within one working day. Most questions can be made public (so that other students can see and benefit from the information too), but if you're making a post that contains your homework solution, please make the post private instead.

Here are some tips for asking questions about bugs in code:

Office Hours

Sometimes you might have questions that are too hard to resolve over Slack or Piazza. Office hours (OH) is a great solution to this! OH is also just a great place to hang out as you're working on homework problems.

Official OH occur on Tuesdays and Thursdays from 5-6pm EST on the CS Scholars Zoom. We may rearrange OH into breakout groups based on usage after the first week or two.

Two office hours is a bit low for a programming class, so we're also offering one-on-one office hours with the TAs or Prof. Kelly by request. Just message the course staff on Slack and let us know when you're available (make sure to include the timezone!). We're very happy to hold these office hours; just let us know reasonably in advance (at least a few hours lead time)

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

Zoom Interaction

Learning on Zoom is different from learning in person. Here are some guidelines to help us all work together as effectively as possible.

Health and Wellness

Your first priority should always be to take care of yourself, and this is doubly important during remote learning, which can be stressful. Take care of yourself 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


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.

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:

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.

  1. 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!
  2. 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.
  3. 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. Come to office hours and the course staff 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!
  4. 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 TA or a collaborator in the class); 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.
  5. Read Your Feedback. Homeworks are partially summative assignments (they show what you know), but they're also partially formative (they're a chance to learn). When an assignment has been graded, go back and check the feedback written by TAs on the problems you got wrong. This is your chance to more deeply learn the material.
Worried about taking a course online from home? Here are some tips for success.