I was on Twitter today and I saw this tweet by Ian Cooper

My first reaction was simply to laugh, because the idea of self-loathing .NET developers is a funny one, my second reaction was to say something pithy on Twitter and then I remembered I had a blog which somehow despite my best efforts is still running for some reason "in the cloud" and thought I'd disagree here instead.

It's not self loathing

@jbogard The worst part of this is the old belief that I have to classify as an X developer and join or leave @Adron @aliostad @randompunter — Ian Cooper (@ICooper) June 14, 2016

There is a reason this mentality exists and it isn't one of self loathing. 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.

Tangible examples? I remember well the insistence of one boss that we use TFS because some developers would find it hard to use git. I remember the steadfast committal to ASP.NET web forms because the "new concepts" in ASP.NET MVC were going to take too long for the team to become productive in. There is now this furore over .NET core and the new thing in the tiny 0.001% of people that care are whether they persist in using Windows or switch to more productive environments. Of course @aliostad gets it right here and points out that the primary "Important Thing" should be a focus on functional programming in languages like F# and of course the reason it doesn't happen is because "it's too hard for most people in our team".

It'll not happen because as long as you're working on a platform that is primarily used by derpy enterprise shops, you will continually be held back because those derpy enteprise shops are continually be held back by the derpy enterprise developers that work in the derpy enterprise shops.

It isn't self loathing, 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. Self loathing is just an intermediate stage that people go through while they still believe they can make an impact on the environment around them by caring and shouting into the void to enact tiny changes that help nobody.

The easiest way to progress is always to jump ship and leave, that's why people do it; moving to a community of people who have seen how to be more effective and productive and leaving the old one behind. In my own case it has been to move to a community that barely exists because the team has to be pretty much self reliant and there is no room for lowest common denominators and long meetings over whether you should use semi-colons or not.

This is why you can't be a good .NET developer, sooner or later the frustration sets in and you go and do something better. The average ability and desire for something better just keeps on plummetting whilst Microsoft try to chase the brain drain by casting little nuggets of mediocrity at the people left behind scrabbling in the mud.