Book Review: Working Effectively with Legacy Code by Michael Feathers

by Aaron 22. August 2011 04:09

The book isn't new (published in 2005), and I'm certainly not the first to review the book (link).  I'm also not the first to tell you, it's a good book (link).

I could just leave it at that: it's a good book.  But I feel like I should tell you why I think that: because it's awesome!  Also, it's written by a really smart guy.

If that's not reason enough, here's some more detail.

When I started reading the book, I was a little apprehensive.  I was told the book is pretty dry and dense.  I was more than a little surprised to find that the book was a real page turner!  I rarely go through a technical book wanting to read the next page or chapter because of the very reason thing I was warned about with this book: dry and dense.  I couldn't put this book down.  I raved to Chris Slee about it repeatedly.  I know he was tired of hearing about it, but he was a good sport about it,  I think he even bought the eBook eventually.

Early in the book, there's mention that the book doesn't need to be read cover to cover, and it's okay (recommended even) to skip around.  There are references to later pages and chapters related to the current topic.  Those are pointing you to the part of the book that defines and describes the pattern/technique being described.  That's the one thing I did wrong: I didn't go to those while I was reading.  Why?  Because I'm OCD about not skipping around in a book.  I also thought that it was making reference to other sections, and I was afraid of getting lost!  My fear was unfounded.  One: I'm a man.  Men don't get lost.  Am I right, guys? Huh?  Two: it was just to read through the technique.  I have a finger and book marks,  I could have saved my place and gone right back.

Even though I did it wrong, the book still changed how I do my work.  That applies to both greenfield and brownfield development.

The book uses C++, Java, and .NET for examples, but the techniques can be applies to other technologies.  That is, if you understand it.  I glossed over the C++ examples and techniques.  Not because I don't care, but because...well...I guess I don't care.  I don't do C++ development, and my exposure is usually pretty limited to it.

I actually finished reading this book months ago, but it still stands out in my mind, and my work reflects the things I learned from it (you're welcome everybody working with my most recent work).  It made that much of an impression on me.

To make a long rambling shorter, the book was very good.  It was a little dry in a few places, but the information was presented very well throughout the entire book.  I now have a much different and better view of what a unit test really is, how to write them, and how to integrate unit tests into existing code.  I'm even considering reading it again.  That says a lot.  I probably won't re-read it, but the fact that I'm considering it is monumental because I never re-read books.

Tags: , , ,

Comments

8/23/2011 4:30:53 AM #

Craig

I'm actually reading through this for a second time right now, as we're doing a book club at work about it.  It's been a year or two since I read it the first time, so I'm actually getting a lot out of the second read.

Craig United States

8/23/2011 10:08:09 AM #

Aaron Stemen

I think it was Rick Kierner that told me that it's a good idea to do just that: read it a second time a year later.  And the reasoning was exactly what you're describing.  I'm going to let it collect dust for a little while, then maybe circle back around to it.  I can probably read through it a little faster the second time.

Aaron Stemen United States

Comments are closed