Programming Books that Make You Smarter

These are wonderful books that would help anyone become a better programmer. Most of these are known and loved by a small group of geeks, but are not picked up by a broader audience because of the programming language used in them.

In many cases, however, the message conveyed is not how to program in the given language, but how to look at programming problems from another perspective. Every language needs a different mindset, and I believe that these books make you think in ways you never did before. I would recommend them even if you will never program in these languages.

Some of the books are distributed on the internet for free, I hope the links will stay working.




Common Lisp

(See also Scheme / Lisp for books on other lisps.)


Forth (& Factor)









Scheme / Lisp

(See also Common Lisp.)


Language-independent Books

Here I list some books that are about programming generally, and do not use any specific language.

My favorites

I love all these books, but there are some I consider exceptional. If I had to choose just a few, the list would go like this…

Elementary books:

  1. The (New) Turing Omnibus
  2. Structure and Interpretation of Computer Programs
  3. Prolog Programming for Artificial Intelligence
  4. Starting Forth

Advanced books:

  1. On LISP (& Let Over Lambda) [requires basic Lisp knowledge]
  2. Programming Pearls (& More Programming Pearls) [requires basic programming skills]
  3. Clause and Effect [requires basic programming skills]
  4. Pearls of Functional Algorithm Design [requires basic Haskell knowledge]

Books on implementing programming languages:

  1. Anatomy of LISP
  2. Functional Programming - Application and Implementation
  3. The Implementation of Functional Programming Languages [requires basic Haskell knowledge]
  4. jonesforth [requires basic Forth knowledge]

So what should I read?

My highly opinionated guide would be something like this:

  • Lisp block:
    1. Structure and Interpretation of Computer Programs
    2. Practical Common Lisp
    3. On LISP
    4. (if you want more => Let Over Lambda, Common Lisp Recipes, Anatomy of LISP / Lisp in Small Pieces)
  • Low-level language block:
    1. Starting Forth
    2. Low-Level Programming
    3. jonesforth
    4. Moving Forth
  • General block:
    1. The (New) Turing Omnibus
    2. The Algorithm Design Manual (and if you liked it, Introduction to Algorithms)
    3. Programming Pearls (and if you liked it, More Programming Pearls)
    4. Prolog Programming for Artificial Intelligence (or: Artificial Intelligence - A Modern Approach / Paradigms of Artificial Intelligence)
  • OOP block:
    1. Smalltalk, Objects, and Design
    2. Object-Oriented Programming in Common Lisp
    3. The Art of the Metaobject Protocol
  • Haskell block:
    1. Get Programming with Haskell (or: Learn You a Haskell for Great Good + Real World Haskell)
    2. Pearls of Functional Algorithm Design
    3. Category Theory for Programmers
    4. The Implementation of Functional Programming Languages (maybe with Lambda Calculus and Combinators - An Introduction)

(The blocks can be studied in sequence or in parallel.)

Note that all books in bold are free, so you can start learning right away!

For my students

I tend to suggest to my students that they get acquainted with Lisps, Prolog and Forth to get a different mindset about programming. While SICP and PPAI are very nice books, most of the contents are included in other courses, so here I would choose shorter, language-oriented books:

  1. The Scheme Programming Language (3rd Ed.) [~300 pages, but half of it is reference]
  2. The AWK Programming Language [~200 pages]
  3. Clause and Effect [~150 pages]
  4. Starting Forth [~350 pages, but lots of fun!]

… and also, for those interested, lambda calculus:

  1. An Introduction to Lambda Calculi for Computer Scientists [~150 pages]

There are, of course, those who don't like to read. For them, I suggest to play with DrRacket and Pharo.

Author: Peter Salvi

Created: 2023-05-05 Fri 20:18