Young programmers often ask me what books I would recommend to learn the craft of software development. As a self-taught software developer (my major is electrical engineering), I learned most of what I know from books. Mentoring my students took me back to those days and led me to compile a list of my all-time favorite books that every aspiring programmer should know.
The first book on the list is Test Driven Development by Example by Kent Beck.
This is a book I could read over and over again. In a few short and easy to read chapters, Kent not only teaches the art of test-driven development (TDD). He also teaches you how to think about your software design and how to implement it well. I would say that this book alone will double your programming skills and put you on the path to becoming a professional programmer.
Another book that has had a big impact on my thinking is Domain Driven Design by Eric Evans. In addition to the Domain Driven Design factors like finding a ubiquitous language with the domain experts, it also teaches how to build a good object-oriented system. My favorite take-away from this book was the idea of Value Objects and Entity Objects. Value objects are immutable and can be passed between entity objects. Entities are the actors in the system that have a state that can change over time. By maintaining a clear separation between these two concepts, your code can become much cleaner and easier to maintain.
Then there is a book that had a big influence on me, although I never actually read it. It is Design Patterns – Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. The ideas in this book permeate the entire software development community. Design patterns are one of the basic concepts you need to know, right after you learn about object-oriented programming. So how come I never read it and still recommend it? The patterns presented in the book are a collection of patterns that have grown in the community over many years. And their descriptions are freely available on the Internet, such as on Wikipedia or here. This way, you can easily learn the basic design patterns and look them up online whenever you need them. Still, every software developer knows this book, and so should you.
An absolute classic, not just for developers, but for almost anyone, is Getting Things Done by David Allen. In my opinion, this is THE book to read about self-organization, both in your professional and public life. Even if you have no aspirations of becoming a manager, for which this book was originally written, it is a must read. It will teach you how to handle the ever-increasing flow of information and tasks that come into your life every day. Without a well-structured process, it is easy to feel lost and overwhelmed by this onslaught of information, resulting in large piles of unread documents and emails that only make you feel guilty. Getting Things Done – or GTD as its fans call it – helps you organize this influx with a clear and simple system. I have been following these rules for at least ten years now, and it has made a huge difference in my life!
I hope the books in this little list are as helpful to you as they were to me. Please leave your feedback in the comments – what have been your most influential programming books?