Index / 001 EN
A Philosophy of Software Design cover

Computer Science

Computer Science

A Philosophy of Software Design

John Ousterhout

A short book on the central problem of software design: managing complexity. Drawing on the author's experience teaching a design-focused software course, it argues for deep modules with simple interfaces, information hiding and careful naming and comments, and offers a list of warning signs that indicate a design is becoming harder to understand and change.

Prerequisites: Experience writing and maintaining programs of moderate size in any language, such as a substantial course project.

Difficulty Level
Beginner
Academic Level
Undergraduate
software designcomplexitymodularityabstractioncode quality

01 / Classic Textbook Recommendation

Classic Textbook Recommendation

Who this book is for

Students in a software engineering or software design course who have written enough code to feel the cost of poor structure, and early-career developers who want principles for deciding how to divide a system into modules. It suits readers looking for design ideas they can apply to their own code rather than a survey of processes and tools.

Prerequisites

Experience writing and maintaining programs of moderate size in any language, such as a substantial course project.

What it covers

The nature and causes of complexity; working code versus good design, and strategic versus tactical programming; deep and shallow modules; information hiding and leakage; general-purpose versus special-purpose interfaces; layers of abstraction; pulling complexity downwards; when to combine or separate code; defining errors out of existence; designing things twice; writing comments first and describing what is not obvious; choosing names; consistency; and design red flags.

How to use it

Thomas and Hunt's The Pragmatic Programmer offers wide-ranging advice on the craft and habits of professional programming; this book focuses narrowly on how to structure code so that it stays simple. Prefer it when design decisions are your main concern. Read it in a few sittings, then apply the red flags when reviewing your own projects.

Edition and sources

Second edition, published by Yaknyam Press in July 2021 (paperback, ISBN 9781732102217); it adds a chapter on deciding what matters and a comparison with other design advice. Bibliographic data for this record comes from AbeBooks.