I often talk to non-programmers who think I must have to be extraordinarily clever to be a software developer, and that they could never do it. In my experience, people often underestimate their own ability. I thought I’d write down some heuristics to help you determine if you have the brains it takes to be a programmer.
If you can understand that monocultures lead to inferior products, you might be smart enough to be a programmer.
If you realize that if, upon receiving dozens of angry support tickets about how a product abused user trust, you responded by explaining how users are wrong to feel that way—if you realize that this would make you bad at your job, you might be smart enough to be a programmer.
If you can comprehend that by encoding what information is and is not relevant, all algorithms encode bias, you might be smart enough to be a programmer.
If you can perceive that claiming a meritocracy does not make it a fact, you might be smart enough to be a programmer.
If you can comprehend that the concept of a meritocracy is structurally biased by the ability of those presently at the top to define what constitutes merit—and to downplay contributions which fall outside their definition—you might be smart enough to be a programmer.
If you have the insight to predict that the leaders of a meritocracy are likely to define merit in terms of their own perceived strengths and predilections, you might be smart enough to be a programmer.
If you understand that to solve a problem, you must often be sympathetic to stakeholders with experiences alien to your own, accepting those experiences as having equal validity to your own, you might be smart enough to be a programmer.
If you recognize that spending more energy worrying about the future potential for someone to theoretically be harmed by a rule, than you do about thousands of documented instances of harm in the absence of the rule, constitutes a classic priority inversion, you might be smart enough to be a programmer.
If you understand that as with software systems, in human organizations many more failures often go unreported than those reported, you might be smart enough to be a programmer.
If you realize that FUD, including malicious personal gossip, spread about people and organizations that are trying to effect change often says more about the FUD-disseminator than about the target, you might be smart enough to be a programmer.
If you can identify the bleak irony in referring to public denouncements of sexism and bigotry as “witch hunts” and “lynch mobs”, you might be smart enough to be a programmer.
If you can acknowledge that all code ever written was written to satisfy human desires, even if those desires were as trivial as “personal amusement”, you might be smart enough to be a programmer.
If you can recognize the implied insult in this article, but also recognize that having your intelligence called into question by a blog post is less dispiriting than than being asked “are you lost?” every day you go to class, you might be smart enough to be a programmer.
A final, personal note: this article is, obviously, a work of strongly opinionated satire. It represents opinions I hold in response to seeing numerous friends—people with names and faces, people dear to me—being actively discouraged from participation in this industry by tech machismo, bigotry, and a callous worship of the status quo. Opinions that have been strengthened by the realization that if these brilliant, productive, and inspiring individuals—who often face daily harassment—are being pushed out, then how many more are failing to enter in the first place?
However, I didn’t arrive at the software industry already holding these beliefs and values. The truth is, when I got started, my opinions on most topics were virtually indistinguishable from those of people like Eric Raymond. In fact, for many years I looked up to Raymond.
I came to these opinions because over the years I’ve continued to study, observe, and learn. I’ve learned about the science of implicit bias, and about how inequity can self-perpetuate in organizations even when no one is consciously feeding it. I’ve learned about how people in similar positions have vastly different experiences, such as how a man and a woman in tech can both say the same things, but only the woman will receive death threats for it. Most of all, I’ve done a lot of listening, accepting that what people told me was real, and then adjusting my understanding based on what I heard.
This process has often been uncomfortable, but I think it has made me a better programmer, and a better person. It has also brought me face to face with the realization that many of the preconceptions I once held were not only unsupportable, but indeed they were the very kind of “stupid, irrational error” (in hindsight) that as a “logical” programmer I often laughed at in others. Hence, this post, in hopes that others will not persist in flawed assumptions as long as I did.