Stories about Software


Don’t Let Anyone Tell You that You’re Not a ‘Real’ Programmer

Apologies for my absence last week from the tech pundit-o-sphere.  I was, well, what I mostly am these days: busy.  But today, I’m back with a premise that sounds suspiciously motivational-speakery.

Don’t worry, though, realpolitik fans.  It’s not that.  Not exactly.

Sure, don’t let anyone tell you that you aren’t a ‘real’ programmer because (1) that’s a crappy thing to say and (2) because you’re awesome and all of that.  But I’ll leave those lines of argument to others.  Instead, I’m going to talk about why letting this nonsense into your head is bad for your career and your positioning.

The No True Scotsman Fallacy

First, though, let’s wander down to the anthropology dime store and categorize what we’re dealing with here.  When someone tells you, for whatever reason, that you’re not a ‘real’ programmer, they’re most likely indulging in something called the “no true Scotsman” fallacy.

The gist of this is to create a subjective, moving-goal-posts purity test for membership in some club.  And people generally do this as a direct follow-up to painting with too broad a brush and having  someone subsequently call them on it.  For instance, here’s the eponymous example, quoted from the Wiki article:

Person A: “No Scotsman puts sugar on his porridge.”
Person B: “But my uncle Angus is a Scotsman and he puts sugar on his porridge.”
Person A: “But no true Scotsman puts sugar on his porridge.”

In my personal experience with purveyors of this fallacy, I generally see two principle motivations, often intermixed:

  1. Zealous, subjective belief in the purity test itself.
  2. Having made a strident claim before really thinking it through, accompanied by a personal tendency never to back down afterward.  (Sound familiar?)

Now, take a dash of this part of human nature, mix it into a heaping bowl of the internet, bake it in the oven for 20 years, and get ready to enjoy a bottomless casserole of “why you’re never good enough.”

The Many Flavors of ‘Not-Real’ Programmers

By now, you might find yourself nodding along, imagining programming-oriented statements like this.  Maybe people have painted you with a brush like this, or maybe you’ve just seen them do it to others.

  • No real programmer works heavily with CSS and markup.
  • Real programmers use the command line — not user interfaces.
  • In 2019 you’re not a real programmer if you’re using anything but git.
  • No real programmers just use their IDE out of the box, without customizing it.  (Also, bonus for, “real programmers use VIM and not IDEs.”)

I imagine these statements sound quite familiar.  There sure are a lot of armchair arbiters of ‘real’ programming, aren’t there?

So, having defined what this is and given examples of how to recognize it, I’d like to spend the rest of the post talking about why this type of seemingly-minor bloviating is actually insidiously pernicious for those exposed to it.

How This Can Subtly Affect Your Career

Let me restate something briefly for emphasis.  People no-true-Scotsman-ing other programmers are behaving childishly and being needlessly mean.  And you should do your best to ignore them — to not let the bastards get you down — because you don’t deserve this kind of treatment.

If you program, you’re a real programmer.

But I’m not writing a “let’s be nicer to each other” call to action, nor am I attempting to give a motivational speech.  Rather, I want to talk software developer careers.

So let’s do that.  Specifically, let’s look at how the general miasma of “no real programmer” that floats around internet forums threatens to encourage bad decisions among those subject to them.  And please understand that it’s no single one of these declarations, but rather the effect of the entire universe of them, often-conflicting, always-confusing, and never-helpful.

1. It Encourages Hyper-Generalization

Long time readers of the blog know that I consider long-term career generalizing to be an anti-pattern.  When your career is a never-ending stream of stacks, domains, verticals, psychographics, and roles, you risk having a career that consists of 45 entry-level years, rather than 45 years of cumulative, compounding experience.  This acts as a drag on meaningful career advancement.

Now, think of a huge subset of the “no ‘real’ programmer” proclamations and their contrapositives.  Real programmers sanitize their database inputs and parameterize their queries.  Real programmers know that string concatenation is expensive.  And so on, and so forth, ad near infinitum.

As software developers, we head to the internet for help and pointers, and we end up with a gigantic laundry list of professional obligations, according to random internet people.  But if all programmers should know all of the basics across all stacks and all areas of programming, we have essentially no specialization of labor.  Instead, everyone should pursue this bottomless checklist of table stakes.

The aggregate of the “real programmer” distinctions out there encourage you to focus on “rounding yourself out” with knowledge that might have literally zero applicability to your current gig, employer, or context.  And that is quintessential over-generalizing.

2. It Invites Commodification

Part and parcel with generalizing is labor commodification.  You know how it seems like programmers (and probably knowledge workers, in general) really don’t like when people call them “human resources?”  That visceral protest is a subconscious objection to their inevitable commodification.

Don’t call me a human resource!  I’m a unique human being, with unique talents, unique skills, unique perspectives, and unique ideas!

It’s great in theory, and it’s actually true in real life.  But the trouble with becoming a generalist on your tech stack is that your actions belie your protest.  You say, nay, scream, that you’re not a resource, but you choose your skills to optimize for maximum deployability and interchangeability with your fellow resources coworkers.

The collective culture of “real programmer” exacerbates this dynamic.  When bombarded with the idea that “real” programmers use or avoid certain tools, stacks, approaches, etc., you experience natural pressure to move toward the area of greatest consensus, and thus greatest resource supply.

To put it much more plainly, “real programmer” declarations encourage you to make yourself imminently replaceable and unremarkable.

3. It Discourages Early Adoption

Commodification isn’t the only issue that arises when you find yourself drifting toward the center of the herd.  Think also of the bell curve of adoption.  At the center of that herd lies the fine line between “early majority” and “late majority” adoption.

I’m an old man in the programming world, and it’s about to show.

When I was a newly minted CS grad, Javascript was, well, garbage.  It was a gimmick of a language, thrown together in 10 days for marketing reasons.  And, back in those days, real programmers didn’t use Javascript.

I use that example because it sounds funny in retrospect.  But if you think of the consensus ‘wisdom’ of the “real programmer” declarers, they’re almost invariably touting the mainstream and poo-poo-ing the bleeding edge as fads and toys.  They’re screaming at you to remain risk averse in terms of adoption.

4. Collectively, It Invites Sloppy Practice

One thing I haven’t touched on very much is how contradictory the entire cloud of “real programmer” assertions is.  “Real programmers don’t use IDEs, but favor text editors,” some will say.  But others will counter with, “real programmers take full advantage of their tools and only use IDEs!”

Now that’s a pretty binary example, but others are less obviously contradictory, perhaps encouraging tools that don’t conflict but don’t play well together, or approaches that create more complexity than the sum of their parts.  And the danger here is that the whole corpus of this type of internet ‘advice’ creates incoherence in your own approach if you try to synthesize it.

I once wrote about this in a short, old post about what I called the “synthesize the experts” anti-pattern.  Now, imagine that conundrum, but, instead of synthesizing established experts, you’re synthesizing armchair experts, like Bobby9442 on some random Q&A forum.  Your quest to be viewed as a “real” programmer has the potential to result in some collectively weird approaches to software.

5. You Risk Becoming One of Them

And, finally, consider the worst fate of all.  I might argue that this particular one is worse than being discouraged out of the industry, to pursue a vocation where people aren’t so… vocally worked up all the time.

This is the fate where you become one of these “no real programmer” commentators — you become a person that spends their time arguing on the internet.  And arguing on the internet is not just a complete, utter waste of your time, but a bad look, career-wise. And, it’s a doubly bad look if your arguing starts to veer into “bullying via logical fallacy.”

The Animal Farm-esque metamorphosis here isn’t as far-fetched as it seems, either.  If you spend years trying to learn all the techs, adopt all of the approaches, build your “real programmer” checklist, and generally steer toward this collective ‘wisdom’, you’re investing heavily in this effort.

And, humans have a cognitive bias that causes us to defend our past decisions and investments to the point of irrationality.

Internalizing these statements will thus make you disproportionately likely to make them later.  It’s the same cycle of hazing that defines college fraternities and Enterprise Silicon Valley interview processes. So internalizing the message that you’re not a real programmer will make you more likely to send that message to others, later, “for their own good.”

“Real” Isn’t a Thing in This Context

In the end, I think the most helpful thing is to adopt the mindset that “real” is literal nonsense when applied in this context.  I mean, “real programmer” is something of a tautology in the sense that anyone who does any programming is a “real programmer” unless you want to get weirdly metaphysical.  And, even something like “good” or “competent” has more meat as a modifier than “real,” even if those aren’t particularly helpful or objective either.

But “real” or “true” or whatever?  Utterly useless.

So don’t respond to people on the internet (or in your company) that toss this around.  Ignore it, let it roll off your back, and have a quiet laugh at how worked up people are getting over their own nonsense.

But, if you really can’t help yourself — if you really must respond — then I’d try this one on for size.  When they say to you, “real programmers _____” respond with “real programmers don’t use the term ‘real programmer’.”

If they’re half as smart as they think they are, that self-referential statement will make their brain hurt so much they leave you alone, and go off to ponder both of your roles in an MC Escher loop of useless judgement.

Newest Most Voted
Inline Feedbacks
View all comments
3 years ago

Yeah, Yeah, typical arguments from someone who isn’t a real programmer 😉

Dan Sutton
3 years ago
Reply to  Nils

Damn! Beat me to it!

3 years ago

A real programmer does not blame others of not being a real programmer.

3 years ago

I have better plan, instead of arguing some social justice BS, that in 2019 everyone is now a real programmer, I will go and write some code for a program, (a program, not an app :p)

3 years ago

Sometimes i use that phrase to clarify that I practice programming as a hobby only (novice, basics programming) 🙂

Erik Dietrich
3 years ago
Reply to  Leo13

I think self-deprecating (“I’m not a real programmer”) in your situation falls outside of what I’m talking about here. If it’s a hobby, then listening to the armchair gatekeepers won’t affect your career.

Jeff Jones
3 years ago

There are programmers (coders) and software engineers/architects. The question is nor whether one is “real” (a subjective notion), but the proficiency and quality of the work produced. Some carpenters, for example, use power tools, laser measurement tools, etc. to produce quality work as a product of what they know. A few carpenters (like the ones who built the life-sized ark in Kentucky, some furniture makers, etc.) use tools and manual techniques that are hundreds of years old or older. They are all carpenters. They approach how hey do their work differently, but produce the work expected with quality. The important,… Read more »

3 years ago

Back when you coded assembler programs on paper using a pencil and an eraser, real programmers coded using a biro.

Erik Dietrich
3 years ago
Reply to  Bigmac


3 years ago

I’ve heard these statements before. I generally chalk it up to “tech religion.” Of which there’s a lot of. One of the zealots at my prior employer asked me what editor I used; I said, “Notepad, and anyone who uses anything else is a piker.” That shut him up.

Andy S
Andy S
3 years ago

Great read; thanks for taking the time to write it.

p.s. a tiny typo(?): “…call to action, [n]or am I attempting to give…”

3 years ago

Yea but how can we trust this, you’re clearly not a real writer….

3 years ago

Long history of what a ‘Real Programmer’ is. Check out http://www.pbm.com/~lindahl/real.programmers.html (and read about Mel too…) Agree on the useless comment of what tools, languages, etc that one uses defining what a ‘Real Programmer’ is, but just because someone writes code doesn’t necessarily make them a programmer. I have a friend who is a doctor, he’s really freaking smart. He maintains his own website, generating HTML, CSS, Javascript, PHP, etc. He’s lost working from scratch, but he’s expert at finding things that do almost what he needs and making them work for him. (Whether or not it’s efficient or follows… Read more »

3 years ago

IMO you’re taking it too literally. “You are not a real programmer” usually doesn’t literally mean that the person is not a programmer (by definition, if one programs, then he or she is a programmer; as you said). It usually means that the speaker considers one way, or method, or skill, to be categorically better of more challenging, to the extent of making the people involved with it a distinct (and superior) group to the people who are not. Like other insults, this saying sometimes has no merit, but sometimes it does. You gave the example of JavaScript, originally being… Read more »

3 years ago

While your command of the English language is impressive, I believe that “eminently” would be more appropriate. That said, too many people are eager to jump on the bandwagon when new technologies arrive on the scene. I use an IDE (Eclipse) since it just makes sense, just as XDoclet makes sense when you’re dealing with J2EE applications. You find the tools that work for you through independent evaluation. If something doesn’t provide true value then I won’t bother to use it, simple as that. I still use vi for some purposes (quick and powerful for search and replace) and run… Read more »

Jim Lonero
Jim Lonero
3 years ago

Person 1: Italians don’t eat sausage sandwiches with mustard.
Person 2: I’m Italian and like mustard on my sausage sandwiches.
Person 1: Real Italians don’t eat sausage sandwiches with mustard.