This course will teach the art of software design: how to decompose large complex systems into classes that can be implemented and maintained easily. Topics include information hiding, deep classes, API design, managing complexity, error handling, and how to write in-code documentation. The class will involve significant system software implementation and will use an iterative approach consisting of implementation, review, and revision. The course will be taught in a studio format consisting mostly of in-class discussions and code reviews. Course enrollment is limited; you must apply for admission.

Instructor: John Ousterhout
Class meetings: MWF 1:30-2:50
Online discussions: Piazza
Office hours: See Google calendar

Full class schedule... »

All projects... »