A few weeks ago, I took a class on Test-driven development. In general, I love taking classes because I have always enjoyed the classroom setting. I prefer to be at the front of the classroom (teaching), but sitting in the "stands" is also quite enjoyable.
One thing I don't like about classes, though, is how much they remind me about how much more I have to learn. I realize that the smartest person in the world will always tell that they will always feel there is much more they need to learn, but I do wonder if this feeling always fills them with so much regret (and, most likely, fear).
The last major class I took at Microsoft was on design patterns. I remember having the same feelings coming out of that class. I was very excited about the principles I had learned in that class, and wanted to apply them. But there is a huge frustration level associated with this opportunity. Because of the nature of work, there is very little time available for experimentation and applying newly learned principles: management always says there is too much risk involved, we have this deadline to meet, etc. The result is a vicious circle: too much stress, things get sloppy, which leads to more stress and even more sloppiness.
I'm pretty sure that last paragraph sounds familiar to everyone who has ever had a job, school, a spouse, etc. We all need to let go and take control.
Anyway, a co-worker recently asked for a list of resources on agile software development and test-driven development. I supplied him with a list; but this is also a blog post I've been wanting to make for some time, so I thought I'd pass it along here. Originally I was going to spend an entire post (minimum of 4 paragraphs) in the review of each book, but I'm no so far removed from them that I'll only be able to pass along vaguely remembered impressions about each one.
I also be perfectly clear (which is why I'm starting off a new paragraph): I am far from an authority on anything XP, TDD, software design, etc (in case this wasn't perfectly clear throughout all of my posts). I actually started this blog as a way to experiment with those principles so that when the time came to apply them at my "real job" I'd be going in with some practical knowledge.
Anyway, here is a summary of what I have read. Rather than a rather normal star rating, I'll give you my own custom dollar-sign rating (patent pending).
This book is definitely worth buying. And feel free to buy several copies, just so to show the author your appreciation.
Just buy one copy, and go ahead and keep it forever.
Buy a copy, but buy it used.
Let the office buy a copy to add to your team's library
Worth checking out from the public library
Extreme Programming Explained: Embrace Change [Kent Beck and Cynthia Andres]
Thoroughly enjoyed this one. This book was very dev focused, but that was okay with me. It explains the principles and practices behind XP, and teaches little life lessons along the way. Reading this book made me want to be a better person, examine my own life, goals, and work habits, which I resolved to improve. Of course I didn't, but it still was very inspirational.
Planning Extreme Programming [Kent Beck and Martin Fowler]
Made me lose a little faith.
Extreme Programming Installed [Ron Jeffries, Ann Anderson, and Chet Hendrickson]
They should have pulled Planning Extreme Programming off the shelves when this was published. This book is so much better, and helps a person see how XP could actually become part of your daily lives instead of something that goes on in a utopian work environment. This book also helps define roles in XP that I could match to the other disciplines within Microsoft (QA and PM).
Test-Driven Development: By Example [Kent Beck]
I enjoyed this one a lot, seems like a reasonable starting point. Drawbacks: book has 2 primary examples: one in Java (easily ported to C#) and the other in Smalltalk (not so much).
Test-Driven Development in Microsoft .NET [James W. Newkirk and Alexei A. Vorontsov]
Gave some good starting points, written using C#; but the example was too big and didn’t engage me (they were both ADO.NET and ASP.NET heavy, and my lack of familiarity with both of those turned me off. Probably not their fault). Originally I was going to give this 1 or 2 $, but its been coming on of late. Plus, this is an MSPress book, so every time you buy it my stock price goes up a little bit.
Pragmatic Unit Testing in C# with NUnit [Andy Hunt and Dave Thomas]
Seemed to focus too much on mnemonics (you know: Every Good Boy Does Fine), which always have struck me as gimmicky. Probably personal taste. I especially wanted to read this one because it talks about mock objects. Unfortunately, it got recalled to the library before I got to that chapter. Based on what I read, I was willing to give it $, but I decided to go with $$ based solely on the mock objeccts angle. This rating can only go down: I bumped it up to a 2 based on potential, but I would have to be blown away to get his higher (in case, you know, I ever actually read those chapters).