Course Format

The course consists of a mixture of lectures, homeworks, and a final project. Lectures, lecture exercises, and most homeworks will be provided through Jupyter notebooks. Details on each course component can be found below. All course work will be hosted on your private GitHub repo.

Course Workflow

All of your work (except for the class project) will be hosted on your private GitHub repo named githubusername/cs207_<firstname>_<lastname>. (Please use all lowercase letters!)

It is critical that you set up a private repo (free for students) and give the teaching staff access. There are two reasons for keeping this repo private. One is so that other students cannot see your work. The other reason is because the teaching staff will be providing comments and you may not want other students to see these.

Before arriving at each class, you should download the lecture to your local computer, copy it to your coure repo, and push the changes to your remote course repo. Make sure you push all changes to your repo before each deadline. The teaching staff will check out your latest work, grade it, provide comments, and submit a pull request for you to merge back into your private repo. We will be able to see if you've submitted your work on time or not.

The class project will be done in groups of 3 to 4. You should create a GitHub organization with your group members and add the teaching staff to it. The organization will be called cs207_groupname and the project repo should be called project. The group is free to make other repos within the organization for experiments, but project is the one we will grade.

A Note on Jupyter Notebooks

Jupyter notebooks are great for code prototyping and learning how to use new features and APIs. They are also wonderful for creating documentation and interactive reports and even delivering lectures. However, they should not be used for large software development projects! One reason for this is because code development in Jupyter notebooks represents a nonlinear development process.

Therefore, in this class you must turn in all homeworks in Python (.py) files. You are also encouraged to do your main code development in the interactive development environment (IDE) of your choice (e.g. Spyder). Homework assignments and lecture exercises turned in with Jupyter notebooks will not be graded.

A homework workflow is outlined in the Homework section.

Lecture Format

The lectures will be available no earlier than 30 minutes before the class starts.

Lecture Exercises

Most lectures will consist of a few programming exercises. Here's how we'll execute these exercises during lecture:

Students must push their final solution to the exercises to their private repo no later than 24 hours after the end of lecture

The teaching staff will grade selected exercises and check for completeness. Since the correct solution is presented in class, these are almost free points. Please complete the exercises!


There are 7 homework assignments. The homework will be released on Thursday after lecture. The assignments are due at 11:59 PM two weeks after they are released. Exceptions to this policy will be announced in class and can be seen on the Course Schedule.

Grading Scale

Homework will be graded on a 100 point scale:

Example Homework Workflow

Note: Specific instructions provided in each homework assignment override the following instructions.
Note: The following workflow will count for 10 points of each homework assignment.

Suppose homework assignment 3 consists of 4 problems.

Homework Setup

Local Development

Pull Request

Homework Feedback:

Homework rules:

Late Policy

Twenty points will be deducted per day for late homework. Homework will not be accepted that is more than 2 days late. For example, homework due on Thursday at 11:59 PM will no longer be accepted after Saturday at 11:59 PM.

Please contact me as soon as possible in the case of an unforeseen emergency or illness so we can figure out an approprate plan of action on a case by case basis.

Regrade Policy

DO NOT ask a TF any re-grading questions until AFTER the HW grades have been released on Canvas.

Reasonable re-grading requests will be accepted up to 48 hours after the final grades are submitted. All re-grade requests must be sent to Please only send re-grade requests to this email. All other concerns should continue to be posted on Piazza.

Regrade requests will only be accepted for a single problem (do not request regrading for an entire homework set). Note that a requested regrade may cause your grade to go down since the entire problem will be reconsidered.


The course will be using Piazza as a forum for discussion about course topics and questions from lecture or about assignments. Participation on Piazza by asking and answering questions will be considered in your participation grade. Students are encouraged to answer each other's questions. To facilitate this participation, the teaching staff will wait between 12 and 24 hours to respond to conceptual questions in the week that a homework assignment is assigned. In the week that a homework assignment is due and for questions relating to course policies or clarifications of assignment expectations, the teaching staff will try to respond more quickly.

A Note on Groups

You will be assigned a group at the beginning of the semester. The group will have 3 or 4 members. This is the group in which you will work on the in-class programming assignments. It will also be your project group.