How To Design Programs

alex 30th September 2024 at 10:53am

This is a very well-known book in the introductory approaches to programming, but also when coming through functional programming. I read throught it and did some exercises.

It is based in the Racket language, which is a dialect of Lisp. There are some very good moments in the book (I liked the rigour of data definitions). It was good to see I was already following most of the design guidelines in the abstraction chapter.

I might come back later for the fifth and sixth chapters on generative recursion and accumulators.


By “good programming,” we mean an approach to the creation of software that relies on systematic thought, planning, and understanding from the very beginning, at every stage, and for every step.

from the Preface

Very early on, the basic steps to program design are established, and are expanded and worked upon throughout the book.

Good programming is far more than the mechanics of acquiring a language. Most importantly, it is about keeping in mind that programmers create programs for other people to read them in the future. A good program reflects the problem statements and its important concepts. It comes with a concise self-description. Examples illustrate this description and relate it back to the problem. The examples make sure that the future reader knows why and how your code works. In short, good programming is about solving problems systematically and conveying the system within the code. Best of all, this approach to programming actually makes programming accessible to everyone—so it serves two masters at once.

from the Prologue: How to Program

notes on HTDP chapters

I - Fixed-Size Data (HTDP)
III - Abstraction (HTDP)

TitleHow To Design Programs
AuthorRobert Bruce Findler, Matthias Felleisen, Matthew Flatt, Shriram Krishnamurthi
PublisherMIT Press