Reading List

This is my list of favorite tech books that are timeless in nature because they deal with the "art of programming", as opposed to more traditional technical books that deal with specific syntax or frameworks or tools. I found all of these very valuable because they expanded my programming horizons and, I hope, made me a better developer.

For those reasons they are also the books that I most often recommend to other people, so I keep this list compiled so I can share it!

The Art of Programming

Clean Code - Bob Martin

This book is about code. It's not about what that code does, or code patterns to accomplish things, or code architectures to organize things. It is just about code and how to write it so it is clean, understandable, and maintainable. It's a really good starting point because it applies to the small things in code (as opposed to to big architecture things) and therefore applies to basically every line of code I write.

Practical Object-Oriented Design in Ruby - Sandi Metz

This book is in Ruby, and it's about Ruby, but it's also the best treatment of OO practices I've ever read. And those practices are easily applicable to other OO languages, including static languages like C#. This book has done more to develop the way I approach building OO code than any other resource. And there was at least one edition where, I was quoted on the recommendations page!

Growing Object-Oriented Software, Guided by Tests - Steve Freeman and Nat Pryce

This book's approach to building a large application is deeply important. It covers outside-in development, the importance of TDD, and many useful OO and testing patterns as well. The big take aways from this book for me were about the process of writing code vs. the specifics of the code itself. Skip the part that goes step by step through code, just read the first and last parts. (The RSpec Book actually does a more succinct job of describing outside-in development, but it's much more tech specific.)

Domain-Driven Design: Tackling Complexity in the Heart of Software - Eric Evans

This is the most comprehensive book on enterprise application development I've ever encountered. For me it was a complete game changer. The book itself presents you with concepts and examples and patterns, but it doesn't get bogged down with implementation issues. The result is after reading it you know you HAVE to start writing code this way, but you really don't know how to write it just yet. I don't practice the strict rules of DDD, but the language and patterns of this book still strongly influence my approach to developing complex domain code.

Working Effectively With Legacy Code - Michael Feathers

Like GOOS above, the biggest lessons I learned from this book were about the process of writing code and how to approach changing code. It has a lot in common with Martin Fowler's Refactoring book but I found this book to be more engaging. Even if you're working in a green field application, this book applies, because it doesn't matter how new code is, we always end up changing it.

Patterns of Enterprise Application Architecture - Martin Fowler

If you've ever read the "Gang of Four" patterns book, or any books that repackaged those patterns you know what a Design Pattern is all about and you're probably bored with them. The patterns in this book are so much more influential and important than the GoF patterns, so don't let the word "patterns" scare you off. Think of this book as the text book for anyone developing multi-user "business" web apps or rich clients. It covers nearly ever major problem you are likely to be faced with if you're building from scratch. And if you're using a framework, it will explain the patterns used by that framework and their trade-offs.

The Pragmatic Programmer: From Journeyman to Master - Andrew Hunt and David Thomas

This book wont give you dramatic new ways to write code. Instead it will give you dramatic new ways to think about code and your responsibilities as someone who writes code. It includes what to my mind is the beginnings of Agile Programming and many of the SOLID design principles. It is also packed with parables that seem obvious until you realize they've happened to you at work. It should be required reading for any developer.

Managing Programmers

First, Break All the Rules: What the World's Greatest Managers Do Differently

If you are in any kind of "Management" role you should absolutely read this book. If you're not, you should still read this book, cause it will help you manage your manager. Even if management doesn't directly affect you at work, you still should read this book, simply because it's interesting and will give you new outlook on all the places you spend money. There is nothing specific about programming in this book, just a really solid and entertaining book on the result of a giant Gallup poll on managers.

Software Development Related

Don't Make Me Think: A Common Sense Approach to Web Usability - Steve Krug

This book is short and a ridiculously fast read. The content is so common sense you might trick yourself into thinking you already knew it. And the truth is you probably DID, but you hadn't thought about it consciously. And for that reason alone, this book is worth reading. I think the most valuable thing about this book is it shows you that you can work on Usability without spending a fortune on a usability lab or outside consultants or long term studies with thousands of volunteers.