No one gives a shit what programming language you use

I’ve had it up to here (gestures at nose level) with the bullshit around programming language elitism. Back when I thought it mattered I was just as bad as the bullshit I’m seeing today, but when I see this elitism in 2021, from people who long ago should have learned better, it just sets off my I-can’t-fucking-take-this alarm.

This tweet made its way into my timeline via screenshot; and because it’s Sunday I’m going to respond to it, because I have nothing better to do at the moment. The littlest is taking a nap, the older two are playing on the Switch, and my wife and I are snuggling on the couch. Normally I’d sigh and save my words, but not today. Not today.

I’ve written about the plague of UBM on our industry previously, but unfortunately that plague isn’t going anywhere. It has deep roots that we all must work to yank out, lest it destroy the good parts of our industry.

One such example is the elitism expressed in the above tweet, and in the continual billing of software programming as ‘craftsmanship’, and equating good software developers with ‘craftsman’, as if software exists for its own sake, and purity is the goal. It’s performative craftsmanship, and deeply unlike what you see from actual crafts-people in their field. Take Jiro from Jiro dreams of Sushi, an example of a master of the ‘craft’ of making Sushi. Jiro doesn’t tout that he’s the best at it; but everyone else does. That’s a major difference from UBM’s (and others) self-identifying as a craftsman, is that Jiro doesn’t do that. He humbly learns and tries to get better, and more importantly tries to serve others. He doesn’t parade around with a self-given label that says “Sushi Craftsman” even though he ostensibly is. If you’re good at what you do and you bring value to others, they’ll label you with the appropriate moniker.

This performative craftsmanship is a load of horseshit that we’ve given too much credence to. I hear it from ‘agile’ podcasts, and from UBM and his ilk, and even otherwise level-headed programmers express some sort of allegiance to taking pride in the code as a necessary bar to being a programmer. Anytime you hear a podcast talk about ‘code quality’ in isolation, or about ‘being a professional’, you’re hearing this same sort of elitist attitude towards software development. The only people who have to proclaim they’re professionals are people who are ostensibly not professionals. It’s another example of the idea that you can’t label yourself by your words, others label you by your actions.

In another example of this performative culture of software craftsmanship, and I’ll use wood-working as an example because I grew up in that culture, woodworkers take pride in the finished product, and seeing that finish product being used. They are not all hot on the tools they use, and nor do they value the art of planing for its own sake. No, it’s always in furtherance of the ultimate goal: to produce something another human will enjoy using.

Or put another way, no one gives a shit what programming language you use. No one gives a shit what your framework or technology stack is. I can guarantee without even checking that every single fortune 50 company uses Excel in ways that would potentially cost hundreds of millions of dollars in losses if there were an error. Do you think the person that pays for the VBA programmers cares that they’re using VBA? No. Do you think the programmer is just jonesing to replace VBA with clojure? Not if they understand what side their bread is buttered on, they don’t.

I was going to make a bullshit analogy to a programming language being like a hammer, but that’s too simplistic. The purpose of the software defines the stack you end up using, and there are far more considerations than “this is a nice language to use”. In fact, I’d wager that the niceness of the language is probably the least important part of choosing a language. Just ask everyone who bet the farm on coffeescript.

But the “you should use language X because it’s great” mantra doesn’t stop there. It’s a symptom of a larger problem: Thinking of programming as a worthwhile pursuit on its own, and focusing on the act of programming while ignoring how that software will be used.

With the katas and the code quizzes, we tend to lose sight of the fact that programming for its own sake is mental masturbation, useful only in the most idle of circumstances. Writing tools and frameworks only help if they have a purpose outside of our own gratification. A programming language exists to put software into people’s hands and to make their lives better. It does not exist for the idle purpose of being good at that language, and it certainly doesn’t exist as gatekeeping, as a way of separating programmers into social classes.

The elitist fucktards that create these social classes do so because it makes them feel important. They have created a bar and put themselves above that bar, while the lowly working programmer should follow their example if they want to be a ‘software craftsman’ or a ‘software professional’. It’s self-serving poppycock (another word for bullshit, I’m certain). It’s also why if you brand yourself as a ‘clojure programmer’, there’s literally only two sets of people who will ever care: Other programmers you want to impress, or a recruiter who is looking for a ‘clojure programmer’. Go say you’re a clojure programmer to your spouse or family, and be prepared to realize how much bullshit language segmentation is to people outside of our industry.

I used to suck at programming. I mean, I still do, but I used to too. So I get that it feels good to ‘be good’ at programming. But being good at programming doesn’t matter if you’re not producing valuable software for people to use with those skills.

If the most gifted singer in the world doesn’t sing to an audience, does it matter how gifted they are?

So you want to pick a framework or a language? Great. The last person you should listen to is UBM, and the second to last person you should listen to is me. Pick the language and stack based on your team’s needs and comfort, based on your business’s need and risk tolerance, and based on how easy it will be to produce software for your target users in that language or framework. That’s your criteria. Not what I think, not what UBM thinks, and certainly not the language or framework de jour on Hacker News.

And if you find yourself proclaiming everyone should be using your favorite programming language or framework, save it. We don’t give a shit.

Last Week In .NET #34 – Azure goes Achoo

This is Last Week in .NET for the week that ended 20 March 2021. If you like this sort of thing, you can get it in your email inbox every week by signing up at, or in the sign-up box at the bottom of this newsletter.

Azure AD fell down last week, causing outages with Microsoft’s Cloud properties Outlook 365, Office 365, the Azure Portal, and Teams were all affected.

The root cause was a bug during key rotation, and I’ll let the Azure Post Mortem team take it from here:

Azure AD utilizes keys to support the use of OpenID and other Identity standard protocols for cryptographic signing operations. As part of standard security hygiene, an automated system, on a time-based schedule, removes keys that are no longer in use. Over the last few weeks, a particular key was marked as “retain” for longer than normal to support a complex cross-cloud migration. This exposed a bug where the automation incorrectly ignored that “retain” state, leading it to remove that particular key.

Metadata about the signing keys is published by Azure AD to a global location in line with Internet Identity standard protocols. Once the public metadata was changed at 19:00 UTC on 15 March 2021, applications using these protocols with Azure AD began to pick up the new metadata and stopped trusting tokens/assertions signed with the key that was removed. At that point, end users were no longer able to access those applications.

Service telemetry identified the problem, and the engineering team was automatically engaged. At 19:35 UTC on 15 March 2021, we reverted deployment of the last backend infrastructure change that was in progress. Once the key removal operation was identified as the root cause, the key metadata was rolled back to its prior state at 21:05 UTC.

This is the second time in six months that Azure AD has gone down. This happened 6 months ago. These are growing pains for Microsoft’s cloud endeavors, and the ops teams involved need #hugops. Microsoft being the “safe bet” for enterprises means in part being stable, and two enterprise outages in 6 months is a lot.

🤑Microsoft wants to pay you to build Cloud applications on Azure. I jest, but only a little. They want you to try out their new developer experience on Azure, and get your feedback on it.

🎁NuGet 5.9 is out and there’s a nice blogpost by the nuget team on what’s in it. Easier UI around version floating, a new “right click -> update”, and some nice improvements in Visual Studio for NuGet.

🎁Microsoft releases a one click Microsoft Exchange mitigation tool. Download. Click. Mitigate the vulnerability.

📚Microsoft has Architecture guides for building .NET applications of all sorts. And of course, because Microsoft can’t do anything without pushing Azure, the guides include how architect those applications in Azure. There’s a reason why the Ebooks are free.

🏫Getting Started with the Microsoft Graph Toolkit is now free on Microsoft Learn. I had to google what Microsoft Graph was, and given the … paucity of the Wikipedia article, I’m not sure anyone knows.

🖥Announcing Windows Community Toolkit 7.0 It includes a smattering of helpers for developing UWP apps, if that’s your thing.

🎥#Include2021 is done, but you can view the videos if you register by March 24th. Include talked about diversity with voices from different industries.

🏰Microsoft Build is May 25th – May 27th, 2021. I don’t have more info but when I do, you can guess where it’ll be.