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 love books about computers, programming, and science. Every few months I spend a day or two researching the latest literature and buying (or downloading on libgen.rs) 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 100 favorite computer, programming, software development, science, physics, and mathematics books. I'll do 5 books at a time as breaking huge tasks in tiny sub tasks is the easiest way to get things done.
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
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.
Author: Alexander K. Dewdney.
#2 The Little Book of Semaphores (free pdf)
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
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 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.
Authors: Daniel P. Friedman and Matthias Felleisen.
#5 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.
I hope you liked my first five book recommendations. Let me know in the comments what your favorite books are and until next time!