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.