Exam Date Topics
Midterm Friday, May 6th Major: reasoning, specifications, ADTs, and testing
Minor: module design, equality & hashing, exceptions
Final Tuesday, June 7th Major: same as above
Minor: all of the above plus... subtyping, generics, defensive programming, debugging, event-driven programming, GUIs, design patterns

See the course calendar for the exact times and locations.


Both exams will focus on the core ideas of writing correct code: writing specifications, reasoning, and testing. Solutions will be written on paper, allowing students to demonstrate that they can write correct code even without help from a computer (as in a coding interview). The exams will also include smaller questions on the "minor" topics listed above.

Practice Material

The best preparation is likely to come from reviewing the homework assignments and the lectures on the related topics. The last quiz section before each exam should also be useful for reviewing the material that will appear on that exam.

If you want more preparatory material, here are additional resources:

  1. This example final (and solution) has the same types of problems as our exams. (The first problem may actually be slightly harder than the similar problems on your final, but that should make it good practice.) The midterm will be a bit shorter than this, while the final exam will be a bit longer.

  2. The 19wi course web site includes, for each topic covered in the course, the points that I think are most important to remember and a list of exam problems from the midterms and finals of earlier quarters that cover those topics. (I do not think it is necessary to review these in order to do well on the final, but they are available to those who want more preparation.)