| 1 | Course Intro; Procedural Programming | Lab 1. Homework 1. |
| 2 | Arrays; Specs; Tests; Searching | Lab 2. Practice Test. |
| 3 | Sorting; Allocation; Practice Midterm Solutions | Lab 3. |
| 4 | Test overview; Recursion; Complexity | Week 4 test. Lab 4. |
| 5 | Data Structures, Variants | Lab 5. |
| 6 | Classes and Objects; Exceptions; Abstract Data Types | Lab 6. Homework 2 |
| 7 | Abstract Data Types continued; Design (contracts, testing) | |
| 8 | Hashing, more ADTs. | Week 8 test. |
| 9 | Test overview; Graphs and graph algorithms. | Homework 3 |
| 10 | Programming in the large, modularity; Interfaces and the expression problem; Inheritance, subtyping and the LSP | |
| 11 | Advanced programming topics; functional programming in Java | |
| 12 | Exam Revision | Homework submission closes. |