Coursework
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.
- Lectures are held two times per week.
- Each lecture is 75 minutes long.
- A small portion of the lecture will involve actual lecturing.
- The rest of the time, students will be in small groups (~3 students) working on programming exercises of increasing difficulty related to the topic of the day.
Lecture Exercises
Most lectures will consist of a few programming exercises. Here's how we'll execute these exercises during lecture:
- The number of exercises will depend on the difficulty of each exercise.
- Students should initially work on the exercise individually.
- I will announce when the individual working time is over. Don't worry if you didn't complete the entire exercise on your own in the allotted time!
- After the individual working time ends, students will get together with their group to compare answers and help each other out.
- Once the group collaboration time ends, one group will come to the front of the class to present their solution.
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!
Homework
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.
- Homework is worth 40% of your final grade.
- Your private GitHub repo should contain a
homeworks
directory with subdirectories for each homework assignment. The subdirectories should be namedHWn
wheren
is the assignment number. - Within the subdirectory
HWn
, place the assignment files that you want us to grade in a directory calledHWn-final
wheren
is the assignment number. We will only grade appropriately-labeled assignments! - To emphasize proper Git workflow, all of your homework assignments will need to be completed on Git branches other than
master
. You will then need to make a proper pull request and merge from a development branch, calledHWn-dev
, into yourmaster
branch. Please see the example below. You will lose points if this workflow is not followed. - New homework will be assigned on Thursday after lecture and are due on Thursday night at 11:59 PM two weeks after their initial assignment.
- All assignments will involve programming.
Grading Scale
Homework will be graded on a 100 point scale:
- 100 = Solid / no mistakes (or really minor ones)
- 80 = Good / some mistakes
- 60 = Fair / some major conceptual errors
- 40 = Poor / did not finish
- 20 = Very Poor / little to no attempt.
- 0 = Did not participate / did not hand in
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
- Make sure your
master
branch is up-to-date.- Use the
git pull
to update your localmaster
branch so it is in-sync with your remotemaster
branch.
- Use the
- From your local
master
Git branch, create a new development branch calledHW3-dev
.- Use the
git checkout
command to create a new local development branch. - We will only be grading the work you do on this development branch. You will lose 5 points if you do not do your development on the
HW3-dev
branch. You are free to make other branches off ofHW3-dev
, say for individual problems, but you are responsible for making sure you merge these additional branches into theHW3-dev
branch.
- Use the
- Within your
homeworks/
directory, create subdirectoryHW3/
. - Under the
HW3/
directory, create subdirectoryHW3-final/
. - Only files within
HW3-final/
will be graded.HW3-final/
should consist of onepython
file for each problem::P1.py
,P2.py
,P3.py
,P4.py
- Each file should run and return the required output.
Local Development
- You can now do all of your development within your
HW3/
subdirectory on yourHW3-dev
branch. As you create and change files, please commit early and often to your development branch.- Use the
git add <file_name>
command to stage files you have changed for a commit. - Use
git commit
to create a commit & message for your repo.
- Use the
- Once you have begun some local development, it is a good idea to push your local development branch and current progress to your remote Github repo.
- Use
git push
to push local branch/commits to your remote repo.
- Use
- You may want to undo changes/commits you have made for some reason, say if you find a bug in your code.
- Use
git checkout -- <file_path>
to undo changes to a single file. - Use
git revert <commit_SHA>
to undo the changes in a specific commit. - Use
git reset --hard <commit_SHA>
to undo all changes since the<commit_SHA>
specified. This changes your Git history, so BE CAREFUL using this command.
- Use
- Once you feel that you have completed a problem, please copy the code to an appropriately-labeled file within the
HW3-final
subdirectory. All code for Problem 1 should reside in a file calledP1.py
inHW3-final/
, all code for Problem 2 should reside in a file calledP2.py
inHW3-final/
, and so on.
Pull Request
- Once you have pushed your local development branch and commits to your remote repo, you should create a pull request (PR) to merge the changes in your development branch into your remote
master
branch.- Through the Github website, create a PR to merge your changes from
HW3-dev
intomaster
. - Check that the files you created/changed are correct.
- You will lose 2 points if a PR is not made.
- Please make sure any files you want us to grade are in the
HW3-final/
directory.
- Through the Github website, create a PR to merge your changes from
- Do not merge your PR into your
master
branch because we will be providing feedback on your homework through this PR. You will lose 3 points if you prematurely merge your PR and prevent us from properly providing feedback. - Note: This PR process through Github is not typically the way you would work on a project solely owned by you. This workflow is more typical of how you would work on a group project or at a company in which someone should review your code before you can merge your code to the
master
branch. We want you to become accustomed to this type of workflow. It is a good idea to always use separate development branches. You should not commit straight to yourmaster
branch.
Homework Feedback:
- The teaching staff will provide feedback on your homework through Github pull request you make to merge your
HWn-dev
branch into yourmaster
branch. This will allow us to provide comments about certain lines of code you write. - Once we are done providing comments and grading, you need to merge your
HW3-dev
branch intomaster
. You will lose 3 points if you do not follow this instruction.
Homework rules:
- Assignments must be completed individually
- Collaboration is permitted as long as discussions are limited to high-level
considerations.
- For example, do not discuss implementation details
- Solutions must be your own!
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 cs207.regrades@gmail.com. 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.
Piazza
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.