Kevin wrote an interesting post in which he expressed his concern for the anemic state of the .Net developer community when compared to that of other communities. I started jotting down a response and saw I was getting carried away so I thought I’d post my thoughts here instead.
I heard a comment a couple months ago that went something like “If you wanna see what cool new features Microsoft will introduce in the next 2-3 years, look at what’s happening in open source today”. This was said half-jokingly but it bears a certain amount of truth to it. NHibernate is a couple of releases ahead of Entity Framework, NUnit is steps beyond MSTest, etc. (Although if ASP.Net MVC is any indication of the future, I think it’s turning in the right direction.)
But it doesn’t sound like Kevin’s beef is really with Microsoft, instead he’s questioning the maturity of the .Net developer community when compared to that of other communities. That’s fair, I would agree that the .Net community is a step behind others. I think this comes down to fundamentals. .Net devs are commonly directed to tools and black-box frameworks to cut their teeth on while many other communities seem to favor learning the basics first. (Obviously this isn’t a blanket statement, there are a plenty of awesome .Net developers that hold good practices near and dear to their heart). There are so many frameworks available in the .Net community that abstract out “the hard stuff” that it’s easy to get by with just focusing on tools alone. And this mindset is reinforced by a job market that puts substantially more weight in tools than it does good software design…which is why it seems that 90% of the job posting in our area are looking for Sharepoint experience and zero have TDD as a prerequisite (although that may be just the Cleveland region, not exactly a hotbed for agile tech). And to be honest, I can’t fault a fella for focusing on tooling when it’s pulling in lucrative work. But our result then is a community of devs so focused on learning how to steer a black-box to fit their needs, that they never take the time to properly learn the basics. And without that solid foundation, it’s extremely difficult to write software that’s clean and maintainable. Ian does a great job in talking about this is a recent post.
For us to see a dramatic uptick in the quality of the software outputted by the community, we need to start by accepting that we don’t need to learn every new tool that comes out of Redmond and instead focus that energy on building our own developer muscles first. (Don’t get me wrong, the tools we use are always going to be an important segment of our arsenal but having a better understanding of the pieces that make up that tool will make it easier for you to learn how to use it effectively as well make you a better judge on whether or not it’s the right fit for the job.)
All that said, I think the community has actually grown quite a bit especially in the last year or so. Much of this is thanks to groups like Alt.Net that have spent a lot of energy to introduce others to these principles. But we all have to do our own part to keep the momentum going. Something as small as blogging every now and then, or mentoring a coworker, or starting a book club can make a profound impact.