Books Every Programmer Should Read
I’m not big on dogmatic worldviews or broad pronouncements. This is the only reason why the title for this article uses ‘should’ instead of ‘must’. In the grand scheme of things, computer programming is a young field in two different ways. First, it has only existed as a profession for a handful of decades (rapidly changing ones at that). Second, most programmers are young; the average age being around 28 years old. I’m in the vanishing 10% that is over age 40. While this would be an excellent opportunity to bitch about kids these days and to tell everyone to get off my lawn, instead I’m going to suggest a few books. In an ideal world, everyone would have an awesome mentor that helps you improve your skills. In the real world, this doesn’t always (or often) happen but reading, absorbing, questioning and challenging yourself with good books can help bridge the gap.
If you read only one book about programming, make it this one. Yes, it’s going on twenty years old at this point, but it’s one of those rare books in our field that might be timeless. At least until we invent new ways of programming. If I’m interviewing a programmer candidate and they don’t mention this book at some point in the discussion, I become a lot more hesitant to endorse them (I should note that one of my usual questions is “What are the books every programmer should read”, so really this blog post is answering my own question).
If The Pragmatic Programmer didn’t exist, I would say this is the must read book for our field. Code Complete is still a great book and it does cover aspects of programming that other books do not. The current edition is starting to show its age but most everything within still holds up.
I read this book shortly after it first came out. It is a well-written justification and playbook for practices that enable programmers to deliver value faster. The ideas are much more mainstream than they were and that’s a testament to this book and the value it brought to the industry. After I read it, I immediately started encouraging my team and organization to adopt the principles and tactics outlined within.
If you plan for your code to be used then you should keep in mind that the universe is entropic by default, things happen that you don’t expect and nothing is guaranteed. Plan accordingly. This book will provide a number of tools, patterns and approaches for constructing more resilient systems. The second edition of this book was released in early 2018. At the time of this writing, I have not read the new version but it’s in the reading queue. I suggest you add it to your queue as well. And then use what you learn to build programs that can withstand the storm.
Game Programming Patterns
There is no doubt that the gang of four book on object oriented design patterns is a classic that should probably on this primary list. It isn’t, but if it were more like Game Programming Patterns then it would be. Game Programming Patterns covers a subset of design patterns that are useful in gaming development but most of them are applicable to a wider array of problems. It’s also an entertaining book that explains concepts better than any other book on design that I’ve seen.
Growing Object Oriented Software, Guided by Tests
There is no better book on the iterative nature of testing and design to drive the development of a program. This is also one of the few books that deals with a program of some complexity as opposed to the small, incomplete or toy programs that most programming books must (by nature of the medium) use to demonstrate concepts. It uses Java but the code should be generally clear enough that non-Java experts can follow along.
Some Additional Recommendations
The books above are mostly language agnostic. Given how many programming languages there are and how they evolve, it’s difficult to recommend anything in book form that a) will be something you can’t find on the internet, or b) won’t be out of date within a few years. There are always exceptions. The books below are some of the best books on programming by way of elucidating a programming language.
- The C Programming Language
- Effective Java
- You Don’t Know JS (This is the first book in a series of six, and yes I recommend all of them)
One bit of esoteric fun to round out the list. In spite of the title, it has nothing to do with computer security. Instead it uses hacker in the original sense of the word. For those working on low-level code, or those who love the math and computation, or those that just like solving problems.
I haven’t read every programming book so it’s highly possible there are some that should be on this list but aren’t. I’m always on the lookout for good reading material. As evidenced by my array of unread books with an average count of somewhere around 50 at this point. I hope you appreciate the array reference in this post about programming books (and yes, I know I called it a queue earlier). If you don’t know what an array is, forget all the previous recommendations and pick up either Practical Programming: An Introduction to Computer Science or Python Programming: An Introduction to Computer Science (sorry those titles are so similar, but they are both good books to start with as a beginner).