Now that I've gotten that
negative review out of my system, it gives me
great pleasure to tell you that
"Working Effectively With Legacy Code" is to
"Applying UML and Patterns" as a massive multiple orgasm is to a swift
kick in the genitals. Sincerely, it's that good.
Common responses I've gotten when I mentioned this book to people:
"You really need to read this book! It is excellent."
"I really need to read this book! I hear it is excellent."
"I really need to read this book so I can write blog posts claiming all of the ideas inside as my own!"
"Reading Working Effectively with Legacy Code gets me so hot...if only you weren't married" (most members of the opposite sex)
"Reading Working Effectively With Legacy Code gets me so hot...if only you weren't married" (
Donald Belcham in quite the awkward moment)
Now, if you're like me, you want to cut through all the hype and get to what really gives the book credibility:
the author's physical appearance. In this arena, Michael Feathers gets a thumbs up for being a total bad-ass - look at this photo and render!
Arms crossed in the "G's up" pose, L.A. Raiders style jacket, and that pouty scowl all tell us that Michael is ready for either a fight or a freestyle rap at a moment's notice. It looks like the development community has found the Eminem to
James Kovacs' Vanilla Ice!
If for some strange reason you care more about the actual content inside the book, you won't be disappointed either. "Working Effectively With Legacy Code" reads like a spiritual sequel to
"Refactoring", following up on Martin Fowler's guide with more examples and advice on how to get a crazy, mangled code base under some semblance of test. There's an even larger emphasis on testable code than in Fowler's book, but I suppose that's to be expected from the guy who wrote CppUnit. Speaking of which, don't let some of the C++ examples scare you off; there are also examples in Java and even one or two in Ruby! The concepts in this book are useful no matter what the language, although I do think people inheriting a C++ code base might find this book even more beneficial. I know that I felt a lot more confident about my ability to tame wild code after reading it, and I'm pretty positive you will as well, no matter what code base you're working off; well, maybe not assembly but you get my drift.
This book is infinitely valuable for *anybody* who works with code they've inherited from others dead and gone, but it's just as useful for anyone doing
"greenfield" development. After all, most of the code you write is
eventually going to become someone else's legacy code - this book will
help you see ways to ensure your code is testable in the first place
and a great way to expand on what you've learned from Fowler's
Refactoring.
That being said, I would probably read Refactoring prior to reading this book simply to get more familiar with some of the refactorings that Feathers discusses, and *why* Feathers has such an emphasis on testable code.
As you might imagine, this book has my highest recommendation
(5 stars). This means
I would have ridiculously illegal sex with
"Working Effectively With Legacy Code" at any opportunity. Heck, given the content
of this book it would likely even help improve my technique*!
* (that is, if it was not already SUPER-AMAZING)