Michael Fogus, in the latest issue of Read-Eval-Print-λove , writes:
The book in question was Thinking Forth by Leo Brodie (Brodie 1987) and upon reading it I immediately put it into my own "personal pantheon" of influential programming books (along with SICP, AMOP, Object-Oriented Software Construction, Smalltalk Best Practice Patterns, and Programmers Guide to the 1802).
Mr. Fogus has good taste. Programmers Guide to the 1802 is new to me. I guess I need to read it.
The other five books, though, are in my own pantheon influential programming books. Some readers may be unfamiliar with these books or the acronyms, or aware that so many of them are available free online. Here are a few links and details:
- Thinking Forth teaches us how to program in Forth, a concatenative language in which programs run against a global stack. As Fogus writes, though, Brodie teaches us so much more. He teaches a way to think about programs.
- SICP is Structure and Interpretation of Computer Programs , hailed by many as the greatest book on computer programming ever written. I am sympathetic to this claim.
- AMOP is The Art of the Metaobject Protocol , a gem of a book that far too few programmers know about. It presents a very different and more general kind of OOP than most people learn, the kind possible in a language like Common Lisp. I don’t know of an authorized online version of this book, but there is an HTML copy available.
- Object-Oriented Software Construction is Bertrand Meyer’s opus on OOP. It did not affect me as deeply as the other books on this list, but it presents the most complete, internally consistent software engineering philosophy of OOP that I know of. Again, there seems to be an unauthorized version online.
- I love Smalltalk Best Practice Patterns and have mentioned it a couple of times over the years [1 |2 ]. Ounce for ounce, it contains more practical wisdom for programming in the trenches than any book I’ve read. Don’t let "Smalltalk" in the title fool you; this book will help you become a better programmer in almost any language and any style. I have a PDF of a pre-production draft of SBPP, and Stephane Ducasse has posted a free online copy , with Kent’s blessing.
There is one book on my own list that Fogus did not mention: Paradigms of Artificial Intelligence Programming , by Peter Norvig. It holds perhaps the top position in my personal pantheon. Subtitled "Case Studies in Common Lisp", this book teaches Common Lisp, AI programming, software engineering, and a host of other topics in a classical case studies fashion. When you finish working through this book, you are not only a better programmer; you also have working versions of a dozen classic AI programs and a couple of language interpreters.
Reading Fogus’s paragraph of λove for Thinking Forth brought to mind how I felt when I discovered PAIP as a young assistant professor. I once wrotea short blog entry praising it. May these paragraphs stand as a greater testimony of my affection.
I’ve learned a lot from other books over the years, both books that would fit well on this list (in particular, A Programming Language by Kenneth Iverson) and others that belong on a different list (say, Gödel, Escher, Bach — an almost incomparable book). But I treasure certain programming books in a very personal way.