There are some books I think every developer should read after going through school and perhaps spending a few years in the field:
- Code Complete – This book should be read right after landing a first job as a developer. It’s rather language agnostic, reinforces good coding techniques, teaches the importance of testing code, and shows where the true productivity traps exist. It taught me, more than anything else, that producing code fast was less about writing it fast and more about reducing time spent in the debugger.
- Rapid Development – The biggest thing that impacts how a program is assembled is how the whole process is run. Even though this is about software lifecycle techniques I think it is important to understand why some procedures have been put in place and some haven’t. After reading this book I can look back and point to why things seemed to be falling apart from time to time.
- Pragmatic Programmer – This one is a little more abstract, much less verbose and in slight need of an update when compared to Code Complete. It repeats a lot of what the two previous books have written though in less detail. I found the focus of the book to be flexibility in the approach to developing code. While I wouldn’t recommend it to someone under 2 yrs. software experience it is never the less one of those books that should be read every once in a while. I’m reading it now and wish I’d read it 2-3 years ago. It’s inspired several posts already.
- Refactoring – Hardly exciting reading and more of a reference book which I might be tempted to replace by Refactoring to Patterns once I’ve had a chance to read it, it is an important guide on how to refactor properly. Before I read this book I’d do large scale “refactoring” which were more akin to “rewriting” because I couldn’t check my code back in until 2-3 days had passed. Now I make smaller, incremental changes that take longer to complete but reduce the chances of new bug introduction.
Then there are a few books I think form the back-bone of a developers knowledge and more than likely shouldn’t even be mentioned. Then again, there are so many people in software that haven’t read these, yet alone heard of them:
- Design Patterns – The quintessential OO-design book. Most of us are stuck working in C++, C#, VB or Java so there’s no excuse as to not having picked up this book and read it.
- Introduction to Algorithms – If you don’t know what a hash table, a depth first search, or a shell sort is then you probably shouldn’t write code. You’ll be working with these things on a daily basis. You should understand them.