David Heinemeier Hansson

November 25, 2021

Programmers should stop celebrating incompetence

In the valiant effort to combat imposter syndrome and gatekeeping, the programming world has taken a bad turn down a blind alley by celebrating incompetence. You don't have to reduce an entire profession to a clueless gang of copy-pasta pirates to make new recruits feel welcome. It undermines the aspiration to improve. It reduces the work to magical thinking. It is not good.

I say this an evaluation of the prescription, not of the diagnosis. The programming world absolutely has had, and still has, challenges with imposter syndrome and gatekeeping. In large part because, unlike so many other professional fields, a high percentage of the people working in programming are self-taught. (Including yours truly!).

When you don't have a diploma from a prestigious institution telling you and the world that "you know things, and you're good at things", it's only natural to occasionally have doubts. Especially if there are people within your profession who use their diplomas as a logical fallacy to prove why they're right and you're wrong.

But you can't let that doubt win. You can't become the I HAVE NO IDEA WHAT I'M DOING dog as a professional identity. Don't embrace being a copy-pasta programmer whose chief skill is looking up shit on the internet. Treat it as part of a learning process to actually understand what's going on. Not merely as a shortcut to solve today's problems. If you never dig deeper, your competence will be stuck at the surface.

Likewise, influential programmers who do have the hard-earned skills and accumulated knowledge to repeatedly create good software need to resist the temptation of presenting a "yes, I too am a know-little, copy-pasta dummy, JUST LIKE YOU" facade. Whatever gains you derive from being relatable to someone struggling must be weighed against infusing this industry with a sense of futility of deep learning.

The magic of programming is largely just things you don't know yet. Once you learn those things, it stops being magic in the sense of "I have no idea how it did that or why it works" and starts being magic in the sense of "I can make the computer do exactly what I ask it to do!". The point is to become the wizard, not the bedazzled member of the audience.

This does not happen overnight, and we need to have the confidence to accept that our profession has depth, even as we celebrate the ease with which someone can get started (and welcome them onto the journey of becoming a wizard)!

It also doesn't happen across all the domains of programming. You can't become an expert at everything, and it's fine to accept your boundaries. But it's not fine to think you shouldn't be on some paths towards mastery, if you intend to make programming your career.

We also need to accept that not all wizard apprentices turn out to be of equal talent or end up with equal levels of competence. Just like in every other field of human pursuits. You can learn the basic rules of chess in a few minutes, but you can also spend a lifetime mastering the game (and not everyone becomes a grand master, even if they try very hard!).

The world has never had a greater need for programmers than it does today. It's never had a greater need for competent programmers than it does today. Let's skip the overly self-deprecating nonsense that nobody knows what they're doing, and trying to learn things in depth is not for us.

You're not a clueless dog banging at the keyboard with no prospects of ever improving. You're a human of tremendous capacity to become good at what you do. Embrace that.

i have no idea what i am doing dog meme.jpg