A Craftsman sometimes has to create his own tool
Today I was reading the latest one of the many excellent blog posts Patrick Smacchia has put out on the topic of code metrics and caring for your code's quality.
The passion this guy has for that topic is such that he has created the best tool for analyzing your code. But he doesn't stop there. He wants to make sure we understand what is going on behind the seemingly magic CQL queries that ship with NDepend. He wants you to understand your code's DNA; with the added bonus that you can actually improve that DNA.
That's Science with capital S.
- First you understand the problem that you are trying to fight (code complexity/unmaintainable software,)
- you research ways to quantify it (the metrics,)
- you create some tool or device to extract that information from your subject,
- you extract the metrics from a familiar subject,
- you apply your knowledge of how #2 relates to #1 and improve the subject under analysis,
- you use the tool to verify the metrics have improved,
- time shows you that the changes you made indeed reduced the problem at #1
I simply hate when someone criticizes Patrick's posts as being just marketing material for his product. Let me tell you this. If I had that much dedication for software quality, to the point that I had created a great product to empower everyone, I'd also be trying to explain the problem to you using the tool I wrote. Heck, I'm pretty sure if someone else had written NDepend Patrick would still be writing about these things and using the tool in the process.
I like code metrics and static analysis a lot as well, not nearly as much as Mr Smacchia though. I'm very excited that very soon I'll get to use it in our code base, in our CI server. I can't wait to learn more about this science and inflict positive changes in our code. Like everybody else, we know there's dirt and bad smells in our code and it's just awesome that there's a tool that can help us clearly identify, mitigate, and track it.
My hope is that I'll be able to come back here and share what I've learned about my code and how the process we went through to improve it.