Assignments

All assignments are due at 11:59pm of their assigned days. Due dates are posted on the course schedule.

Assignment Overview

Students will develop a cumulative project over the course of the semester. The project is spread over 5 assignments, each of which must be coded individually. Students are allowed to discuss the assignments with each other, but they are not allowed to look at others’ solutions from this or previous years. Writing or looking at pseudo-code together is also not allowed. Viewing general information on the web, i.e., StackOverflow, is permitted.

Assignments will be coded in Go, synced regularly to a git repository, and submitted via that git repository. Assignments will be graded on correctness.

Assignment Submission

Assignments will be submitted by using tags pushed to your github repository. Please follow the instructions given in each assignment for testing and submitting your work. You may push a tag as many times you like, grading and submission time will be based on your last push of each tag.

Late Submission

You should submit your work on an assignment (electronically) before its due time. All assignments will be due at 11:59pm on their selected days. The exception is the final assignment which is due at 5:00pm on Deans Date.

If you submit your work late, we will award you a fraction of the score you would have earned on the assignments had it been turned in on time, according to this sliding scale:

  • 90% for work submitted up to 24 hours late
  • 80% for work submitted up to 2 days late
  • 70% for work submitted up to 3 days late
  • 60% for work submitted up to 5 days late
  • 50% for work submitted after 5 days late

For example, if you would have earned 8/10 points but submitted 36 hours late, you will instead earn 6.4 points.

That said, you are allowed three "free" late days during the semester (that can be applied to one of assignments 1 through 4; the final assignment is due on Dean's Date and cannot be turned in late). You do not need to tell us that you are applying your "late day" -- we'll remove the late penalty at the end of the semester from the assignment(s) that benefits you the most.

We will grant no-penalty extensions only in the case of illness (with a doctor's note) or extraordinary circumstances (with the involvement of the dean of your residential college). If illness or an extraordinary circumstance will cause you to submit an assignment late, then you should discuss the matter with your instructor as soon as possible.

Please plan your work on the assignments so that travel, interviews, athletics, touring, student clubs, extracurricular activities, religious holidays, etc. do not cause you to submit it late. None of the above reasons nor a heavy academic workload constitute an extraordinary circumstance.

Collaboration Policy

Programming, like composition, is an individual creative process. Individuals must reach their own understanding of the problem and discover a path to its solution. During this time, discussions with friends are encouraged. However, when the time comes to write the code that solves the problem, such discussions are no longer appropriate; the program must be your own work.

Do not, under any circumstances, copy another person's program, comments, or any part of the submitted assignment. This includes character-by-character transliteration of another works (whether inspected visually or copied digitally), but it also includes derivative works (i.e., by renaming variable names or subtly shifting around statements in order to try to hide that copying has occurrred). You are also not allowed to use other people's code, comments, or results, even when "citing" them -- all work must be your own. This includes work done by other Princeton students this or past semesters, as well as any other code you find online.

Writing code for use by another or using another's code in any form is academic fraud and will be dealt with firmly according to Princeton's disciplinary policies. You are also responsible for ensuring that the code you write for the assignments is not readable by others, which includes sharing with students in future years or posting publicly on websites like github.

Acknowledgement

These assignments is based on the project used at MIT's distributed systems course (6.824). The 6.824 course materials are available under a CC BY 3.0 US license. We thank Robert Morris, Frans Kaashoek, and Nickolai Zeldovich for sharing their course materials.