The goal of this class is to take you from hacking code to designing software (hence the course title). Assignments will be graded on both correctness and clarity. For programming assignments, the files you submit in addition to your code should demonstrate one of these facets. Your JUnit tests should help convince us your design is correct, and your documentation should illuminate your design. As the course progresses, you will start to see how a thoughtful design helps produce correct code. For written homeworks, strive for concise, cogent explanations that feature complete sentences and correct grammar: novels are discouraged.

'Clarity' is a bit nebulous, so there will necessarily be a subjective component to your homework grades. As a rule of thumb, it should be possible to understand your programs after looking code + documentation for less than 20 minutes.

Finally, please follow instructions carefully! We reserve the right to take off an unspecified number of points if you fail to follow them.