Every once in a while, a small book comes along that really ups your software engineering game. Adaptive Code via C# (Amazon, InformIT), by Gary Hall, is just one of those books.
The book documents the so-called SOLID (Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, Dependency Inversion Principle) principles as you can apply them to agile programming in C#. But it’s more than that.
Part I is an introduction to modern agile programming methodologies, looking especially at scrum and test-driven development. As a strong advocate of both in my professional career after seeing them successfully applied on various projects at Nokia, I think the book provides a good balance between preaching to the converted and introducing the ideas to the folks that may still be suffering under the influence of waterfall development, or worse, the chaos that reigns when no structure is in place.
Part II is where the book really takes off, spending a chapter on each of the SOLID principles. If you’ve been working for a long time, you’ve probably discovered one or more of these principles, but Hall explains them if they’re totally new ideas, complete with code examples. It’s really interesting to see how he is able to distill patterns used largely in managing large code bases in small, self-contained examples without making the examples feel constrained or artificial; it’s clear he put a lot of thought into each chapter, and the result is a well-crafted summary of SOLID principles with examples that drive the points home.
Part III looks at applying these principles and the agile methods described in Part I in a series of three hypothetical sprints for a single programming team. Honestly, when I saw this in the introduction I was a little skeptical; while you can benefit from reviewing case studies, I wasn’t sure how the narrative here would flow or how much value it would be. They were as good as the rest of the book, and helped illustrate the interplay between code development and code maintenance.
This book is definitely a must-read if you’re a C# programmer, and even if you’re not, it contains a lot of valuable information you can likely apply to your software projects. I highly recommend it.