A rapidly-growing website for helping readers find books they want to read reached out to me. The deal was that I would write about one of my books and review several books that I liked. It seemed like a win-win. I dove into thinking about the books that most inspired me as a programmer and wrote them up. Here is my page on the site. These are the books that, when I look back on my decades of programming, were the most inspiring.
C Programming Language by Kernighan and Ritchie
This is the defining book on the C language, written by the authors of the language and published in 1978. By the early 1980’s it became the standard for writing systems software, helped by the fact that the UNIX operating system was written in it. UNIX grew to become the world’s dominant operating system, running over 90% of the world’s web servers.
By the time I encountered the language I already had programmed extensively in assembler, COBOL, FORTRAN and other languages. I had written a commercial FORTRAN compiler in assembler language. The C language changed my world, and this book was unique then and now for being written by the creators of the language that changed the world of programming forever. Nothing about all the languages since C makes things better – yes, including C++. All they do is add complexity and put unnecessary constraints on language, along with continuing the focus on language when your goal as a programmer should be to write as little code as possible, putting everything you can into easily editable metadata.
The Art of Computer Programming by Donald E. Knuth
This is a multi-book series. It is the definitive source on algorithms and the core of computer programming. Unlike most such book authors, Knuth is a real programmer, deep into the details of the craft, to the point of creating his own assembler language and typesetting generation system. It’s partly the substance of the algorithms and their analysis, but even more is the way he models a way of thinking about and solving complexity that makes this a must-read series.
Here is a post about software, art and music that features Knuth, shedding light on his depth.
Principles of Compiler Design by Aho and Ullman
Attending Harvard College gave me the opportunity to collaborate with great programmers in creating the early ARPA-net. But the best course I took was on compiler theory and construction, using an early draft of the material in this book. Of course I learned how to build a compiler, which I did as my first job after graduating. But more important, I learned that a well-built compiler is a small amount of language-independent code with two major parts. First the input part that realizes the content of the lexical and grammatical metadata, like today’s LEX and YACC, to turn the program being compiled into a language-independent semantic model. Second the code generator that reads the semantic model and, based on generative model metadata, turns the semantics of the program being compiled to whatever form you want, whether executable code, assembler language, byte code or whatever. This approach, while indispensable for compilers and interpreters, is also the model for taking a meta-data-driven approach to building software applications of any kind.
Godel’s Proof by Ernest Nagel
Nagel’s book is the most understandable explanation I’ve found about one of the most cosmically seminal math proofs: Godel’s incompleteness theorem. It takes the idea of recursion and self-reference to the ultimate conclusion about truth, understanding and the boundaries of existence. This may sound hootie-tootie, but think of the sequence of abstraction in math: arithmetic, algebra, calculus, etc. Once you add in recursion (self-reference), you’ve got the most important concepts underlying true understanding and productivity in software – something never discussed in computer science, and certainly not in practical programming. Think about the so-called Von Neumann computer architecture, which underlies all modern computers – instructions are data, stored in the same place as ordinary data, and some instructions write data that are instructions. This is recursion taken to the next level.
Godel, Escher, Bach: an Eternal Golden Braid by Douglas Hofstadter
This book explains fundamental concepts of recursion, symmetry, intelligence, focusing on math, art and music. It’s full of wonderful tales, amazing facts, little-talked-about relationships among math, art and music (and by reference computing), not to mention puns and amusing language. If you want to become a better person, this is a good book to read. If you want to understand and succeed in life, ditto. If you let this book lift your mind to its space and height, you will find yourself vastly more capable of creating and understanding software. It’s a wonderful companion of the Ernest Nagel book. Hofstadter also helped edit the second edition of the Nagel book. In the foreword, Hofstadter explains that the book (originally published in 1958) exerted a profound influence on him when he was young.