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, thick 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 with in-class discussions and code reviews in addition to lectures. Course enrollment is limited; you must apply for admission.

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

Full class schedule... »

All projects... »