Why so many programmers are self-taught

Or: Why we probably shouldn’t teach programming in schools

I used to firmly think that people who couldn’t teach themselves something on their own were either stupid or lazy. Ahh, the obscene hubris of youth…

I learn how things work by taking them apart and putting them back together. I love open source software because I can really understand how something works by reading its source. I can read a reference book and learn how to use something: tools, machines, programming languages, etc. Since I am dissocial, I’ve always been independent by necessity, spending a lot of time teaching myself about things I’m interested in.

This way of learning has always come naturally to me. I never felt like it was something I learned how to do, or was taught how to do. I feel like I was just born this way. I thought this was what it meant to be human.

Some call it self-deprecating, I call it autobiographical

Look, I know I’m not smart: my academic performance in school throughout my life attests to that. I often fall short when it comes to matters of emotional intelligence, too. I’m short, I’m fat, I’m ugly: the American culture’s loser trifecta. I have no fashion sense. I laugh at jokes that most people tell me are outright offensive and “not funny at all, not at all!” I’ve caused more suffering to my wife and kids than I care to admit just by being me. Basically, I’ve had to come to accept that I’m a mostly broken human, defective in so many ways. Calling this Impostor Syndrome would be an insulting attempt at a false compliment, really.

But, despite all that, even this sad excuse for a human can still look at something, think deeply about it, and gain an understanding of it! Seriously, it’s not that hard. If you can’t do it, then I have to accept that either you’re actually even worse than I am, which is highly unlikely, or that you’re just lazy and can’t be bothered, which often seems to be the case. But, even that seems unlikely that so many people are just lazy, especially those who don’t exhibit that kind of laziness anywhere else in their behavior. I had to be missing something… but what?

Here’s a guy who needed to be taught everything he knows how to do… guess what? He’s now extinct.

Some people just can’t teach themselves

To be totally honest, I still find this explanation hard to believe at times, but it seems to fit. I mean, what other explanation is there when I know someone is not lazy, is definitely smarter than me, but still just can’t seem to grasp something after I’ve done the damn Googling for them and sent them the link that answers their question? What other explanation is there, other than the fact that they quite literally cannot teach themselves?

Clearly, we all have some innate ability to teach ourselves, otherwise we would have died in infancy. Biology has ensured that we have some minimal capacity to figure things out. But, not everything is genetics neither is it all memetics, either. But, it definitely appears that some people’s ability to self-educate reaches a limit, and for some, that limit’s really low. After a point, they need to be explicitly taught through direct interpersonal interaction.

I suppose I should have realized this earlier, when I read Robert Sternberg’s Thinking Styles, but I didn’t quite make the connection to its relevance until faced with so many distinct examples of an extreme case of a particular type — the kind for whom requiring external collaboration is a requirement to the point of detriment for their ability to learn. I guess I was just in denial that this could really be a thing?

Teaching programming vs. self-taught programmers

Some schools offer to teach, or attempt to teach, people how to program computers. However, many programmers in the industry are self-taught or only have had a minimum of academic programming education. Many self-proclaimed “self-taught” programmers aren’t really: they learned by having people to ask for help. Guess what: those people they were asking were their teachers, even if it wasn’t in a school environment.

Once upon a time, there was this belief that as computers became more essential to every day living, we would need more and more programmers to keep all of the computers doing useful things. This silly belief wasn’t so silly at the time when computers were huge, fragile and cantankerous monstrosities that needed system operators that were dedicated to keeping these things alive and well. But, as time went on and technology improved, those people have become largely obsolete and the remaining tasks have become subsumed by other roles (e.g., “DevOps”).

When I was a kid, there was this pipe dream to address the need to enable more people to be programmers by giving them tools to help them program, called computer-aided software engineering (CASE). The need made sense, if the reality was that as more people used computers, we would need more programmers. But, that’s not how computers work: the ratio of programmers-to-users required isn’t 1-to-1, or even 1-to-100 or 1-to-1,000,000.

Yet, even today, in 2016, Obama wants to spend money throwing a Computer Science education at even more people (“Computer Science For All,” rah rah rah!), which will inevitably include a large number of people who can’t teach themselves. So, what’s wrong with that?

The people who should be going down that path already are, even if their school doesn’t offer it, as long as they have access to books, a computer, and the Internet. They are teaching themselves. These are the people who are going to learn what they need to, on their own, in order to solve the problems they want to solve.

The rest of the people? We should be spending that money training them with valuable labor skills — not computer science — so we can give them jobs here in this country doing the things that currently cost too much and results in us sending the work overseas, where labor costs less. We should give these people a free education and a government subsidy so they can do these labor jobs for a competitive price, so we can start bringing that work back to America.

What we don’t need is a world with more minimally trained, academically educated, worse-than-mediocre computer “laborers” (it’s even hard to call them “programmers,” really). Any task simple enough to teach them is literally faster for any reasonable programmer to do themselves, automate with a program, and never worry about doing ever again. The day and age of needing computer operators to sit around and turn a crank or fill a bin or swap a tape are gone. Stop pushing people through the educational system pretending that they’re not.


In hindsight, after publishing this, I realized I probably shouldn’t have posted this publicly, because I realize how bad it must make me look and sound, but it’s a thought that’s been bouncing around in my mind for quite some time and I really needed to just get it out of my head and into a public space where people might be able to respond and help me think through it. I’d really appreciate any feedback that isn’t just a variant of “man, you are an awful human being and you’re WRONG WRONG WRONG.” Or, maybe I’ll just unpublish this if my better judgement ever kicks in.