A Philosophy of Software Design book
Compact treatise on managing complexity in software, centered on the deep-vs-shallow modules distinction.
Compact treatise on managing complexity in software, centered on the deep-vs-shallow modules distinction.
why it matters
Short, opinionated, immediately useful. Ousterhout's thesis — that complexity is the enemy and information hiding is the main weapon — cuts through a lot of software-design noise. The deep-vs-shallow modules concept gives you vocabulary to articulate why some abstractions feel right and others feel like extra work for nothing.
key ideas
- Complexity is the enemy; everything in design is in service of managing it
- Deep modules hide a lot of complexity behind a small interface; shallow modules add interface without hiding complexity
- Information hiding: each module hides one important design decision
- Comments are part of the design, not afterthoughts; they document what code can't
- Tactical tornado vs strategic programmer: short-term velocity vs long-term compounding
- Design it twice — explore at least two approaches before committing
memorable framings
- 'Classitis' — the disease of believing classes are good and therefore many small classes are great
- 'A pretty interface for an ugly internal mess'
who should read it
Every engineer with 3+ years of experience. Short enough to read in a weekend, dense enough to reference for years.