I’ve put together a short list of books any software developer would greatly benefit from. Enjoy!

Clean Code: A Handbook of Agile Software CraftsmanshipRobert Martin

Clean Code: A Handbook of Agile Software CraftsmanshipMaintainability is arguably the most important aspect of good software. If you don’t understand why that is, please read this book. From naming conventions to OO principles, “Uncle Bob” Martin covers a lot of territory in easily digestible chunks. Clean Code is easy to read, yet filled with great insights and comprehensive discussions on major OO topics.

On another note, if you’re looking for coding standards to follow, this book may be the answer you seek.

The Art of Unit TestingRoy Osherove

The Art of Unit Testing: with Examples in .NETFor a long time, my understanding of what a unit test is boiled down to “whatever it is that a developer does right after he finishes coding, but before he hands it off to QA“. Things that fell into this category ranged from a small EXE to run some test inputs to firing up the app and poking at it until I got satisfied with it or got bored by the process.

Reading The Art of Unit Testing was a very eye-opening experience. I’ve recommended this book to a lot of people, and the response I usually get is  “Wow, I had no idea there was this much to unit testing”. If you ever wondered what a mock was or why there are so many interfaces in C# projects, read this book.

Head First Design PatternsEric Freeman

Head First Design PatternsThe first design pattern book I (and probably every other geek) read was of course the  Gang of Four book. I mean, it’s THE book on the subject.

Well, to be quite honest, that book is not an easy read (please try to contain your gasps). Why? Because it gets really academic at times (almost dense some might say) and the examples it uses could be considered a bit vintage (OK, it repeatedly references software that hasn’t existed since the eighties, not that there is anything wrong with that). Being dense and retro may work for Tolstoy, but it doesn’t work as well with design patterns.

Head First Design Patterns takes a very different approach. They try very hard to make design patterns easy to understand and they succeed most of the time. It’s fairly entertaining, flows well, has great examples, and spends a good amount of time on OO best practices in addition to design patterns. If you’re looking to grok design patterns without all that fancy book learning, give this book a spin.

Working Effectively with Legacy CodeMichael Feathers

Working Effectively with Legacy CodeFew things elicit more negative reactions from devs than the phrase “legacy code”. We have all kinds of colorful ways to describe legacy code and its evils (Spaghetti code, Big ball of Mud, Windows Vista, etc.) To Michael Feathers, legacy code means code with no tests. Whether you agree with this definition or not, you can definitely learn from him on how to deal with legacy code. There’s a lot of great stuff in this book (the chapter on object seams alone is worth the price of admission).

If you ever had to look pure evil in the eye (and by pure evil I of course mean 1,500 line Page_OnLoad function), you know that you’ll need every tool known to man at your disposal to work with it. This book has quite a few of these tools. Good luck and may the force be with you.

Extreme Programming Explained (2nd Edition)Kent Beck

Extreme Programming Explained: Embrace Change, Second EditionKent Beck invented Extreme Programming (I think) and that makes him at least somewhat qualified to explain it. Twice.

Seriously though, this is a great book: short, sweet, and to the point. If all you can think of is “Pair Programming” when you hear “XP“, read this book. Also, if all you can think of is “Someone in my grill all the live-long day” when you hear “Pair Programming“, read this book.

Finally, an oldie but goodie:

The Mythical Man-MonthFrederick Brooks

Mythical Man-Month, The: Essays on Software Engineering, Anniversary EditionI can’t think of many books that are both modern and quaint at the same time. On one hand, Brooks’ observations about the nature of software development are remarkably insightful and relevant.  For example, his explanation of essential difficulties faced by developers is amazingly spot on. He also came surprisingly close to embracing iterative development (in the 70’s!). On the other hand, there is the chapter about structure of programming teams (The Surgical Team).

If you are going to read Mythical Man-Month, please get the updated edition. Brooks has added a few excellent chapters which further develop his original ideas. Fascinating stuff.

You may also like:

Did you love / hate / were unmoved by this post?
Then show your support / disgust / indifference by following me on Twitter!

This post got one comment so far. Care to add yours?

  1. Rick says:

    Great list! Thanks.