recall

← recall

A Philosophy of Software Design book

Compact treatise on managing complexity in software, centered on the deep-vs-shallow modules distinction.

John Ousterhout · 2018 · engineering

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.

covers

references: