A review of John Ousterhout's 'A Philosophy of Software Design' (2nd ed. 2021), a ~180-page book that introduces precise vocabulary for discussing software complexity and design quality. Key concepts covered include the three symptoms of complexity (change amplification, cognitive load, unknown unknowns), the two causes (dependencies and obscurity), and the distinction between tactical and strategic programmers. The book also introduces deep vs. shallow modules, temporal decomposition, and practical advice on comments, naming, and iterative design. The reviewer praises the book for giving experienced developers language to articulate intuitions they already have, and recommends it be read early in a developer's career.
Sort: