I apologize in advance for the language in this post but I am pissed off and I am not gonna take it anymore.
I have seen a bunch of twitter threads lately that make me sad for the state of our industry, the most recent being this one:
Read that whole thread; I'll wait.
What pisses me off about this thread is not that the students voted not to learn .NET. I'm completely fine with that; .NET is not the one true way. What I saw was, instead, programmers like myself making asinine arguments as to why Mr. Brown was wrong, why the students were wrong, why everyone except themselves was wrong. (A TON of the offending tweets are deleted as of publishing time).
What I saw was programmers attempting to make themselves special, make themselves the arbiters of truth and the one right way. That pisses me off.
Fellow programmers, we are not fucking special. We are people who solve problems with code. The tools we use are not unique, the problems we solve are not world-changing, and the stuff we do and think and say is not confined to us and our chosen profession. Programming is not some idolized, venerated career path that only a chosen few may deign to tread. We are workers, designers, coders, testers, and many other roles that are not different from other professions in the slightest. We are not special!
And yet we continue to act like it.
I'm sick of it. I'm sick of programmers pretending like they're the best thing since sliced bread. And I'm here to take their arguments down.
Your Failure to Communicate is YOUR Problem
Which leads me to the first statement I see programmers throw around to try and make themselves special:
"Customers don't understand what we do here."
Bullshit. You are not smarter than the customers. Your failure to communicate well enough with your customers to help them understand what you do is not their fault, it is yours.
For some damn reason, programmers don't think we need to learn to communicate with other humans. We only think we need to work with computers, to take our code and make it explicit and self-documenting and all these lofty ideals, and we somehow forgot that we also have to work with people. So when we try to explain what it is we did in our code, we don't know how to make it understandable to anything but a computer. We create a false dichotomy of "technical" and "non-technical" people to make it easier for us to pity the latter and excuse us from having to learn how to communicate with them. It's awful.
Oh, and then, when we don't explain ourselves well enough, we have the gall to be mad at the customers for not understanding us! What hubristic assholes we are!
Look, programming is a tough thing to explain in simple terms, but you should be able to explain what you do to anyone. This takes time and effort. The trick is in figuring out what words or analogies or whatever you need to explain how a given thing works, in a way that other people understand. Your failure to do that for your customers does not reflect poorly on them. Spend time learning how to communicate, both written and spoken, and use those skills to better describe what exactly it is that you do.
"Real" Tools Do Not Exist
Here's another stupid argument that only exists to make the speaker feel special:
"This is a REAL programming language/framework/API/whatever."
This one seriously pisses me off. No it bloody well isn't. A language, or framework, or API; they are all just TOOLS that enable us to solve problems. Nothing more, nothing less.
Look, I love C#, and I love .NET, but they are just a language and a framework and if something else comes along that does the things they do better, well, goodbye C# and .NET. Just because your chosen language or framework has features you like and understand doesn't make it a "real" language, whatever the hell that even means.
There is no "real" tool; there are just the ones you are familiar with and the ones you like. Your chosen path is NOT the one right way, because a) there is no one right way and b) thinking that just makes you look like a self-absorbed jackass.
Suggestions, not Demands
I know we've all seen some form of this statement:
"Don't do it that way, that's awful. Do it this way."
This is gatekeeping at its most distilled, a demand to be better with no justification as to why they should bother.
Let's be clear: even if we assume the people who leave these kinds of comments and messages and tweets are being genuine, they failed to consider the basic aspects of trying to help someone. In order to offer real, concrete help to someone who has made a decision, you need to:
- Make sure you understand the context in which a given decision was made AND
- Make sure you understand the options that were previously discarded, and why they were discarded, OR
- Acknowledge that you don't have that context and present your suggestions with that acknowledgement.
It is EXTREMELY unlikely that if you are leaving a comment on any given post or video that you understand all of the context that went in to a person making a given decision.
Are you just trying to make a suggestion? Then you did it wrong. If you want to make a suggestion, make a fucking suggestion:
"I've solved this using X before, would that help?"
"Could Y provide you with some insight as to why this does/does not work?"
"I'm not terribly familiar with this language, so take this with a grain of salt, but does tool Z help you build more efficiently?"
Suggestions are suggestions, not bloody demands.
Gatekeeping To The Max
And then there's this gem:
"I haven't had any problems with gatekeeping in <a given community>, so I doubt it happens."
Well good for fucking you. Just because I've never been discriminated against (as a white, male, cisgender, hetero person), that means it must not happen right? That's the logic this argument uses. Tell that to my Chicana wife, or my father-in-law, or the millions of Black Lives Matter protesters. Are their experiences also invalid?
This is egocentrism, and it's wrong. If people are telling you something is happening, fucking believe them.
But if you present this counter-argument to them, they'll often pivot to this:
"OK, so gatekeepers exist. So what? Who cares about the gatekeepers? Just ignore them."
Just ignore the gatekeepers? Nice idea, why didn't I think of it? Oh yeah, cause it doesn't bloody work!
We can only make this statement from a position of privilege. This is a person trying to make themselves feel special by saying "do X, it's easy" when in fact they have no idea if it would be easy for another person. Just because it's easy for you with your situation doesn't mean it's easy for others with theirs.
Gatekeepers, though they may be a minority, are a loud, and persistent, and scary, and seemingly everywhere minority. If you have no experience with a given community, and you encounter a gatekeeping-style opinion, how do you know that opinion even is the minority? You bloody well don't!
Learners are looking for input, for opinions to help them form their own, and guess what: the gatekeepers' obnoxious drivel counts as an opinion! You wouldn't want to start learning something that other people thought was terrible, would you? Of course not. No one likes hearing that the time they spent learning a thing was time wasted, even if the opinion comes unprompted from some insufferable Internet jackass. But the learners don't know they're insufferable jackasses, so how could they know to ignore them?
In Summary
These kinds of arguments are designed to exclude and minimize, and are the exact reason why the students voted to not learn .NET. We can be better than this!
Fellow programmers, we're not fucking special. Stop acting like you are, and other people aren't. Seriously.
Anyway, new mega-series starts Monday. Thanks for reading, and Happy Coding.