THE READING ROOM / BOOK GUIDE
How to Design Programs
A programming textbook built around a design method, written for readers who want to understand how programs are planned, tested and revised before they grow complicated.
About the book
How to Design Programs treats programming as a sequence of steps: state the problem, describe the data, sketch examples, define a template, write the function, then test it. Matthias Felleisen and his coauthors built this approach around a small teaching language related to Racket, which lets the book concentrate on reasoning instead of syntax. The subtitle, An Introduction to Programming and Computing, signals that computing stays in view alongside coding.
The book is organized by kinds of data and the problems they invite. Simple numbers and booleans give way to structures, lists and trees, and each new shape of data brings a matching design recipe. Later material moves toward abstraction, generative recursion and an introduction to imperative programming. Recognizing a problem's structure and testing a solution matter more here than memorizing library calls.
Expect a textbook, with exercises throughout and a deliberate pace. The prose explains ideas plainly, but the sequence carries weight. Skipping ahead to trees or abstraction without the earlier recipes makes the later chapters harder to follow than they need to be.
How to read it
Work the exercises. The design recipes are habits, and reading them without applying them to small problems leaves the method abstract. Keep a notebook of data definitions and examples; the book returns to them as functions grow more complex.
The early chapters can feel slow to readers who already program. The point is the discipline of deriving a function from its data, and later chapters assume it. When a new form of data appears, write the template yourself before reading the authors' version.
Who it suits
This suits beginners who want a structured introduction to computing and self-taught programmers who can write code but want a clearer method for planning and testing it. Teachers and tutors can use the design recipes to explain why a program is organized as it is. Readers coming from another language should be ready to set aside familiar idioms and follow the small teaching language on its own terms.
Reading considerations
The book uses a teaching language tied to Racket, so examples will not run unchanged in mainstream languages, and the 2001 edition predates later revisions of the curriculum and tooling. Check which edition you have before relying on setup instructions. The method is presented as the right way to design programs, and that claim is worth testing against problems you care about.
Follow the HN conversation
277 different recommenders are recorded in the upstream dataset. These are AI-classified source counts, not an independent rating.
Search HN comments about this book ↗
Explore videos on the same subject ↗
Book notes prepared with DeepSeek, using catalogue records and Open Library subject information. They are reading guidance, not a personal review or a verified chapter-by-chapter account. Book details can vary by edition. HN data methodology · Book metadata and covers.
