I was recently interviewed by Fog Creek and one of the questions was about my favorite programming, coding and development books. I got very excited by this question as I'm a huge book nerd. I'm crazy about science, computer and programming books. Every few months I spend a day or two researching the latest literature and buying the most interesting titles. I can probably go on forever about my favorite books. I've so many.

I was so excited about this question that I decided to start a new article series here on catonmat about my top 100 programming, software development, science, physics, mathematics and computer books. I'll do five books at a time as breaking huge tasks in tiny sub tasks is the easiest way to get things done.

Part of my bookshelf.

In the first post in the series I'll re-share the same five books that I recommended in my Fog Creek interview. I expect this article series to go on for several years as I'll be posting one or two posts per year. If you're interested in this topic, you can subscribe to rss feed of my blog and follow me on twitter for updates.

Enough talking. Let's get to 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!