Imagine a world where every line of code tells a story, and each algorithm unfolds like an intricate puzzle – this is where my love for books on programming, coding, and development comes alive.

Recently, Fog Creek sparked a delightful conversation by asking me about my favorite books in these fields. As a self-confessed book nerd with an insatiable appetite for literature on computers, programming, and science, this question was more than an inquiry; it was an invitation into my world.

Every couple of months, I embark on a literary adventure, scouring the latest releases and timeless classics, often finding myself in the digital aisles of The thrill of discovering a new title, the rush of downloading a long-sought book – these moments are my treasures.

The sheer excitement of sharing my top book picks inspired me to launch a new series on catonmat, where I'll delve into my 100 favorite books spanning a diverse range of topics: computer science, programming, software development, as well as fields like science, physics, and mathematics.

To make this literary journey more digestible and engaging, I've decided to spotlight 5 books in each installment. This approach not only simplifies what seems like an overwhelming task but also allows us to savor each book's unique value and insights. So, get ready to join me as we explore these fascinating realms, five remarkable books at a time!

Part of my bookshelf.

In this inaugural post, I'll be revisiting the five books I enthusiastically recommended during my Fog Creek interview. These selections are just the beginning of a long and enriching journey, as I anticipate this series will unfold over several years, with new posts being shared one or two times annually.

For those who share my passion for this subject and wish to stay connected with each update, I invite you to subscribe to my blog's RSS feed. Additionally, you can follow me on Twitter, where I'll be announcing new additions to the series and engaging in conversations about our shared love for tech and science literature. Join me in exploring these literary gems that have profoundly influenced my perspective on technology and science.

Here are the first five books.

#1 The New Turing Omnibus

The New Turing Omnibus.

A must read for anyone interested in computers. This excellent book contains 66 short essays on the most important and interesting computing topics, such as compression, Turing machines, recursion, formal grammars, non-computable functions, neural networks and algorithms. The writing style of this book is casual and it contains almost no math. It's my favorite book of all time.

I read this book cover to cover in one evening. I enjoyed one of the chapters about the Busy Beaver Problem so much that I spent a few days implementing Busy Beaver in several languages and wrote a program that visualizes how the Beaver travels on the tape. Here's my blog post about Busy Beaver.

Busy beaver puts another one on Turing machine's tape.

Author: Alexander K. Dewdney.

#2 The Little Book of Semaphores (free pdf)

The Little Book of Semaphores.

This book teaches how to think about multithreaded execution and how to solve synchronization problems. I highly recommend it, especially if you're self-taught and have never had an operating systems course. This book leads the reader step by step through a series of classical and not so classical synchronization problems. The style of this book is problem-hint-solution. In my experience this style of teaching is the best for quickly learning new concepts and problem solving skills. It's also a great fun to work through the problems and I've been recommending it to everyone ever since I found it.

Author: Allen B. Downey.

#3 Programming Pearls and More Programming Pearls

Programming Pearls and More Programming Pearls.

Classic programming books. Jon Bentley knows how to write clearly and enthusiastically about algorithms. These books are timeless and they teach you how to reason about problems, break them apart, and efficiently implement the solutions. You'll pass the Google interview if you read and understand these two books.

Author: Jon Bentley.

#4 The Little Schemer

The Little Schemer.

The Little Schemer teaches you a little bit of LISP in the most fun style ever. The book is a dialogue between you and the authors about hundreds of tiny Scheme programs and it teaches you to think recursively. This book will make you think and will stretch your mind a little. It's one of the most fun programming books ever written. You'll learn about car, cdr, cons, working with lists, lambda and y-combinator.

I've spent countless hours with this book. I copied out all the code examples and put them on GitHub (the-little-schemer repository), and I also wrote a blog post about deriving y-combinator based on one of the chapters in this book.

Only the true schemer fan will understand this message.

Authors: Daniel P. Friedman and Matthias Felleisen.

#5 The Elements of Style and The Elements of Programming Style

The Elements of Style and The Elements of Programming Style.

The Elements of Style is not exactly a development or coding book but a book on writing. To be a great developer you need to communicate clearly, simply and directly. Strong writing skills are essential to success. The book is just 100 pages long and you can read it in one evening. Re-read it every couple of months for full effect.

Authors: William Strunk Jr. and E. B. White.

The Elements of Programming Style is a classic programming book by Brian Kernighan. The form of this book is strongly influenced by The Elements of Style. It's an old book but mostly everything it teaches still applies today. It contains 70 rules of programming such as:

  • Write clearly – don't be too clever.
  • Say what you mean simply and directly.
  • Choose a data representation that makes the program simple.
  • Let the data structure the program.
  • Modularize...

Authors: Brian W. Kernighan and Phillip J. Plauger.

As a bonus, I recommend my own book Perl One-Liners, published by No Starch Press. My book teaches how to be fast in the command line and get things done quickly there. Being fast in the command line will save you thousands of hours throughout your career. Once you master one-liners, you'll be solving quick one-time tasks in seconds. I've seen programmers spend hours writing programs for tasks that can be done in 20 seconds with a one-liner. Don't be that programmer. Be like me.

Perl One Liners.

I hope you liked my first five book recommendations. Let me know in the comments what your favorite books are and until next time!