I find discussions like this one between Ayende and Casey typical of my experience in the .NET community. This archetype (I refuse to use the “M” word) is held up as the standard to which we must aim since it represents a typical, MS developer but then any discussion degrades into a “that’s too complex for this guy” argument. This is oxymoronic – these developers are NOT stupid. They’re intelligent, they get the job done, and they are able to handle things like complex business processes, recursion, debugging, etc. These developmental practices are not harder than whatever they currently are doing, they’re just different. These developers usually fall into one of two camps – they’re either unaware of the concepts or apathetic. We need to speak to the former and just hope that the latter comes around eventually.
I gave a presentation earlier this year to our local .NET user group on unit testing, mocking and dependency injection. In talking with folks afterwards about the topics, I found a very disturbing trend. Most of them knew about unit testing. At a minimum they’d heard about it but quite a few were trying to use it and several mentioned that they’d even explored NUnit and/or MbUnit. You know why there was awareness?? MSTest. Because Microsoft had created their own unit testing framework and tools and threw their marketing muscle behind it, awareness of unit testing concepts spiked. But that’s where things went south. With mocking, there was a lot of misconception around mocking and dependency injection was a totally new concept to a large majority. I find these to be fundamental to testing in the real world since rarely do we work on systems that don’t have numerous dependencies. Since we have dependencies and we have to account for them for successful testing, they are either not testing or doing integration tests instead and just calling them the wrong thing. I honestly believe that this misunderstanding, this misuse is simply due to a lack of knowledge and visibility.
I believe MSDN Events are part of the solution. While at Alt.Net, I was talking with Chris Koenig about the marketing nature of these events. He was quick to point something that eluded me previously – these are 100 & 200 level events. They’re aimed at the lowest common denominator and an entry point for developers. These are the perfect vehicles for us to introduce these practices to folks. Now, I understand Microsoft is not a non-profit organization and they shouldn’t do something unless it makes business sense so I’m asking that we come up with a good BUSINESS reason to make these more of an outreach. Like the old E.F. Hutton commercials; “When Microsoft talks, people listen.” and we need to help them tailor that message so that we can expose these people to these concepts as early as possible.
Another part of the solution is our user groups. Microsoft spends a LOT of money every year to facilitate and fund these meetings so we need to leverage these to promote good development practices. Volunteer to give a presentation or a lightning talk or just start asking questions and get a dialog going. If you’re nervous, try teaming up for a presentation. Rather than arguing who is or isn’t capable of learning something, let’s start trying to figure out how to get the material out there and nurture those who do come along.