I love books, especially technical ones. I feel a strong need to expand my knowledge base all the time, and my primary mechanism for doing that is through books and open source development. I don’t just read about subjects I deal with at work. In fact, most of what I read normally has nothing to do with the subjects of my day job (at least on the surface). I feel it helps me to be a more rounded developer, and provides me with an extra set of tools to solve problems. After all, that’s what it’s all about: solving problems.
Not all books are created equal though. This list represents books that I consider top-notch. They are books that I consult time and time again, were vital to my growth as a developer, or represent the best-in-class book I could find on a particular subject. I’ve attempted to organize the list to help communicate where I believe a book falls (at least on my bookshelf). Hopefully, you’ll find it useful.
Can’t Live Without
-
Managing Humans: Biting and Humorous Tales of a Software Engineering Manager by Michael Lopp - This book is now sitting in the #1 spot of my bookshelf. Michael Lopp has a wonderful way of telling stories that hit home no matter what your experience has been. If you’re a programmer, you probably suck at managing people. This book explains why, and what you can do about it. If you’re not programmer trying to be a manager, read the book and find out why your manager is some times infuriating and how you can better communicate with him or her. You can’t go wrong reading this book.
-
The Pragmatic Programmer by Andrew Hunt and David Thomas - Every programmer should have to read this book. It has a number of very useful suggestions on everything from picking an editor to the steps you should take to ensure a successful career as a programmer.
-
Practices of an Agile Programmer by Venkat Subramaniam and Andy Hunt - Again, every programmer should have to read this book. It is littered with useful advice, and ways to keep yourself in check with particular practices. I think it’s a wonderful insight into the mind of an agile programmer, and this short read can help you to avoid some of the mistakes others have made.
-
Large Scale C++ Software Design by John Lakos - While the book is focused on C++ as the language of choice, the concepts are geared towards sound object-oriented design and the principles apply to any language (including C). This book marked a strong turning point in my development career, as it was the first solid introduction I had to object-oriented design. It was an easy read, and it was very eye opening.
-
Joel on Software by Joel Spolsky - This book is chock full of good advice and thought provoking commentary that is especially geared toward the developer that has found himself a manager. Joel has a great writing style that makes the book extremely easy to read. I do have to warn you, he’s very opinionated. I didn’t always agree with him, but I can say that all of his arguments were very compelling.
-
Interface-Oriented Design by Ken Pugh - The GoF, Herb Sutter, and other great minds have stated this maxim repeatedly: prefer composition over inheritance. Interface-Oriented Design is all about composition. It shows why interfaces make sense, why you should use them, and how to overcome the issue of re-use. It also breaks down some common interface patterns, showing you the pros and cons of a particular interface style. Finally, it lays out some ground rules for what a good interface design looks like, how it behaves, and how to successfully hide implementation details. I view this book as an extension of Large Scale C++ Software Design. A definite read for those who want to improve the quality of their software designs.
Writing Portable Code
-
Write Portable Code by Brian Hook - I’ve been writing code for a number of different platforms for a long time, so this book didn’t introduce anything new to me. However, it is the only book that I’ve ever seen that brings together all the topics necessary for portable design under one cover. The book is well written, articulate, and did a wonderful job of talking about the various levels of compatibility between platforms, files, and other small details that can cause much headache when you don’t know too look for them.
C++
-
Exceptional C++ by Herb Sutter - Simply put: if you haven’t read this, then you think you know how to program in C++. This book is packed with useful advice and points out the subtle errors you may have introduced into your own C++ code, especially in regards to exception handling.
Python
-
Python in a Nutshell by Alex Martelli - This the Python book used by the majority of employees in my company. It provides a great introduction to Python, it’s syntax, language features, and then goes on to talk about a number of useful Python libraries in the standard distribution. If you’re a programmer and want to learn about Python, then this is the place to start. The only topics the book lacks is on packaging and C extension modules. Fortunately, there are a number of great references on the Internet to cover those topics.
I have many more books to share, but wanted to get this page out there first. Over time, I’ll up date this page with more recommendations. At the moment, Programming Ruby and Beautiful Code will find nice homes on my bookshelf too. :-)