Books
This is a list of software development books that will shame you because they are so mighty! If you're so inclined, you might also want to check out my Amazon.com wishlist to see what other books I'm interested in.
- The Object Oriented Thought Process by Matt Weisfeld. I read this book when I was taking my first Java class in school. I switched from networking to programming in the middle of a semester, and managed to miss the C++ class that was typically taken prior to Java I, so I had no clue what inheritance, encapsulation, or polymorphism were. This book bridged that gap for me, and I recommend it highly.
- Joel on Software by Joel Spolsky. I think I've read everything Joel Spolsky has ever written. Or something close to it. Joel's books are rich mines of blog posts, essays, articles, and ramblings that speak directly to the experience and heart of every software developer. He has been there, done that, and lived to write about it. Oh, and he runs a successful atypical software company.
- The Best Software Writing I by Joel Spolsky. See above.
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides. Yes, I know, everyone includes this on their list of all-time best software books. And no, I haven't finished it yet--I'm only about half-way. But I will finish it, and everything I've read so far has lived up to the hype. Basically if you want to quit writing spaghetti code and start constructing systems, this book is a necessary read. All examples are in C++, but the principles translate to most other OO languages.
- Refactoring: Improving the Design of Existing Code by Martin Fowler. Someone once told me that "all you need is Fowler" and they were pretty much right. This particular book is a gem because it taught me how to look at a tangled mess of code (I have written my share and inherited just as much from others) and turn it into a tight, lean system one small step at a time. I find the more I practice, the more second-nature refactoring becomes--to the point that I do it constantly, in real-time, while I'm writing new code.
- Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development by Craig Larman. Larman does a terrific job of cutting wide swaths through the jungle of UML to show how modeling can help developers communicate about objects and their relationships in a system, and the requirements that define and constrain their behaviors.
- Smart and Gets Things Done: Joel Spolsky's Concise Guide to Finding the Best Technical Talent by Joel Spolsky. This book contains pure Spolsky goodness about how to attract, identify, hire, and retain the people that make great software teams. His central thesis is that anyone can learn technologies, but the people you want are the ones who can deliver actual value. Don't waste your time on the mundane.
- The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas. "Pragmatic" is certainly the correct word for this book. The author gives tips, insights, and advice on the practice of writing code, from the selection of an IDE or text editor to the discipline of personal organization.
- Pro C# 2008 and the .NET 3.5 Platform by Andrew Troelsen. This book is a massive, comprehensive guide to all things .NET 3.5. It's exceptionally written, has excellent examples, contains a breadth and depth of content that is unrivaled in any other book on the same topic that I've explored. And I've explored many of them. It is an essential reference.
- Pragmatic Version Control: Using Subversion by Mike Mason. Subversion is my source control system of choice. It's lean, clean, easy to use, more powerful than a locomotive, faster than a speeding bullet, most likely leaps buildings in a single bound, and is "free" as in "freedom". I use it on all professional side projects. This book is an essential guide to configuring, running, and managing Subversion repositories.
- Hackers and Painters by Paul Graham. Paul Graham is a master wordsmith with a keen insight into the way software developers think and live. His essays are deep, but not obscure; analytical, but not judgmental. Paul Graham is in many ways the C. S. Lewis of software development. His works are philosophical and practical, with just enough formalism to remind geeks that their passion for 1's and 0's has ramifications far beyond the machines on which they labor.
This list is still growing. If you don't see something here, leave a comment and if I haven't read it, I will see if that can be remedied. If I have, it's only a matter of time...
Print This Page