A most interesting blog post was written a couple of days ago, and while I understand the author's frustration, I do not agree with his conclusion.

The developer in question is Rob Ashton, who wrote a post attempting to figure out why people seem to leave the .NET development world in droves. I can't argue that I haven't seen that occur, because I have, but I think he arrives at entirely the wrong conclusion from reductive logic. He declares that:

"The reason why people "leave" .NET is because it is impossible to be a good .NET developer. To work in a development shop with a team is to continually cater for the lowest common denominator of that team and the vast majority of software shops using .NET have a whole lot of lowest common denominator to choose their bad development decisions for."

Responding to a tweet, he argues that it isn't self-loathing that causes these developers to leave, it is something rather different:

"It isn't self loathing [that causes .NET devs to leave], it's self preservation and an eventual realisation that you can't actually progress so long as you're being held back by bad decisions made to cater for the slow and the stupid."

I kinda see where Rob's coming from. Lots of orgs make bad decisions, and many times the people who leave the company due to these bad decisions make their experiences known and disseminated. Where my agreement with the post stops is at the idea that these poor experiences by some .NET developers represent a reason for other devs to leave that space.

The issue I take with Rob's post is that this is true for any popular thing ever, and .NET is extremely popular.

When you talk about popularity, you inherently assign a threshold at which something is "popular" however that is defined. Once a programming framework (or book, or song, or whatever) meets or exceeds that threshold, you will invariably have people who dislike it (aka "haters"). The more popular a thing becomes, the more haters it has; eventually, you might have a lot of haters, enough that it seems like they're a sizable portion of the total population.

An "I Love Haters!" sticker

(Let me be clear about something: I am not calling Rob a hater, I've never met the guy, never talked with him, anything. I am simply expressing my opinion of his post. Separate the opinions from the person, dear readers, and let's be civil about this.)

The problem is that the haters tend to be vocal in their dislike of something, whereas the people who enjoy the framework are too busy enjoying it to worry about the haters. After all, generally things get popular for a reason, even if you don't like the reason.

Because the haters are vocal, and are actively expressing their opinions wherever they might be heard, those who have not formed such an opinion yet (or have a slightly-negative opinion of the popular thing) are more likely to hear the haters' criticisms and believe that they represent the majority of the population. In my experience this is almost always wrong.

If you go looking for the bad things, you will inevitably find them. There certainly are organizations our there which run their devs into the ground, don't understand their chosen frameworks' strengths and weaknesses, don't really care if development has the tools they need to do their job well. These sorts of organizations give all the good ones a bad reputation, one which is all too easy to categorize: "well, if Organization A sucks and it uses X framework, then everybody who uses X framework must also suck." What's infuriating about this logic is that this thought process is itself a form of pandering to the lowest common denominator, something which Rob is saying is the reason why .NET devs leave that environment. A uses B, A sucks, so B must suck. It's reductive logic in its purest form.

All that said, I understand the frustration that Rob's post implies, and it doesn't stem just from incompetent .NET-using organizations making poor decisions; even Microsoft is not immune. .NET Core recently made a major change (moving from the fantastic project.json file back to MSBuild) that, frankly, pissed me and a lot of other people off. I build websites, the project.json file makes configuring those sites much easier than it has been in the past, but now you're yanking the rug out from under me by discontinuing it? What the hell, Microsoft? Why promise me Disneyland and take me to McDonald's?

I get why Rob's frustrated; I'm frustrated too. I've worked for my share of poor companies. But to go from "some orgs which use .NET make bad decisions" to ".NET devs leave that framework because it's impossible to be a good .NET developer" is a mental leap of ludicrous proportions.

.NET is popular; with popularity comes users, and with users come haters. Don't let the haters control how you view an entire slice of the development population; the vast majority of any popular thing's supporters are silent, content to do their work and go home. The vocal minority does not represent the silent majority, and we must remember that the loudest voice is not always the most popular opinion.