Some of you may remember my shock and horror at Jeff Atwood and Joel Spolsky’s statements in Episode 38 of the Stack Overflow podcast. Aside from insulting Uncle Bob, a guy who is a heavy-weight in the world of software engineering, they made several asinine statements about software testing and code quality. After some back-and-forth blogging, the exchange culminated in Episode 41 of Stack Overflow. Fortunately, Jeff and Joel somewhat redeemed themselves. Joel apologized for some of his comments, and Joel and Jeff gave Uncle Bob a chance to explain the SOLID principles and why they are valuable. I’m still not sure that Joel truly understands how to do software testing correctly, but at least he listened.
While the discussion was enlightening, I think the most interesting thing to come out of Episode 41 was the reader questions/comments. It was neat to see how clueless some developers are (the guy who claimed that you should only unit test things that take two numbers as input and return a number as output) compared to how enlightened others are (the guy who pointed out that a big benefit of test-driven development is improved API design). I wholeheartedly agree with the later statement: test-driven development is as much about software design as it is about testing. I’m glad other people are picking up on that…
Personally, I have no way of knowing how good Jeff Atwood and Joel Spolsky are at actually doing that which they are so passionate about. In my experience anyone trying to make the argument to me that "you just need to code, man! you don’t need all this fancy methodolgy!" is either so brilliant and naturally gifted at writing software that they actually don’t need it or they’re spectacularly lazy and don’t care about the result.
If they’re in the former group then they should be intelligent enough to recognize that just because they don’t require additional structure around their daily design/development activities doesn’t mean the average developer doesn’t need those things and they should attend more shut-up practice sessions.
If they’re in the latter group then the most positive thing I can say is they’re creating job security for responsible developers who take pride in the quality of their work. Jeff Atwood generally strikes me as being more pragmatic than professional because he makes a lot of flippant comments regarding the importance of design and testing. Don’t get me wrong, a lot of legacy developers who don’t grasp good design patterns make huge over-architected messes that end up getting tossed. But coding without good design is for hobbyists and hackers: the results are garbage that can’t be maintained, can’t adapt and can’t be re-used. To date, I’ve had a pretty successful career being able to apply the right mix of focusing on results and industry best practice. To do otherwise just seems irresponsible to me.
It was funny listening to Joel describe the new FogBUGZ API that his team has been working on. He said something to the effect of "it is so complicated that we’ll probably never make a change to it ever again." And this is an API for a bug tracking application. Yes, it has some nice bells and whistles, but it is not an enterprise application, it’s a web GUI to a bug database, and the fact that it has a massive, unmaintainable API behind it supports the notion that they have just been throwing code at the screen without giving any thought to design or maintainability.