CS 190

CS 190: Software Design Studio

Course Description

This course teaches 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 involves significant system software implementation and uses an iterative approach consisting of implementation, review, and revision. The course is taught in a studio format consisting mostly of in-class discussions and code reviews. Course enrollment is limited; you must apply for admission.

Course Staff

John Ousterhout

Add ".stanford.edu" or ".edu" to all e-mail addresses above.

General Information

Class Meetings
MWF 1:30-2:50
Gilbert 117
Office Hours
W 4-5 or by appointment (drop me an email with some suggested times)

Upcoming Class Meetings

Upcoming Projects

Useful Links

Course application form
Raft paper (extended version)
Raft notes from MIT course
Raft visualization
Sample code that uses sockets
Protocol buffer documentation
Getting started with protocol buffers
Google Doc for sharing during class discussions
Information about code review meetings
Ritchie/Thompson paper on Unix (only accessible on campus)
The Grug Brained Developer (a humorous take on software design, with several ideas from APOSD)
Blog post from Rob Pike on software complexity issues at Google