Please Understand Learning to Code


Another Day, Another Argument

Another morning, another news tech cycle mired in the open-letter style of debate. The subject? The ever-controversial Jeff Atwood’s latest blog post, “Please Don’t Learn To Code”, in which he basically argues that writing software is neither a universally applicable skill, nor should it be a goal unto itself. Within mere moments, hastily written rebuttals were thrown online, arguing that being able to write software is “empowering” and that it “conditions your mind”.

Now, normally I stay aloof from this kind of argument. It’s all sort of arbitrary to me. I encourage people who want to learn to code and I don’t foist it on those who have no interest. But as I skimmed over these slapdash rebuttals and then reread Atwood’s argument, I noticed something no one was mentioning.

Everyone seems to be pointedly ignoring the fact that some of our best research suggests that anywhere between 1/3 and 1/2 of all people cannot learn to code. And without that knowledge, this argument is fundamentally uninformed and directionless

Science Is Happening

If you set yourself adrift on the information sea and start googling about, you’ll find a ton of research with varying results. But I rather like how our 2006-based-understanding of the problem is summarized in “The Camel Has Two Humps” by Dehnadi & Bornat.

You should check out the paper, but let me pluck out part of the conclusion for the sake of this discussion:

We speculate from this data that the proportion of formal provers / programmers in the general population varies according to general educational attainment. It would seem, from our Middlesex data, to be less than 50%; we speculate that it is about 40%.

There is still more. The same students, on the same course, when given an informal topic – constructing Kripke trees to demonstrate counter-examples to constructive logical assertions, a task which involves assigning meaning to formulae and is therefore not at all like programming – generated normal curves in a test. Figure 16 shows the data. The high achievers’ hump is well within the passing zone, if a little bit lower than the administrator-desired 55%, whereas the low achievers’ hump is well below the pass mark of 40%. But a normal curve for all that!

What does it mean? For starters, it means programming is a special skill and that its fundamental complexity is not necessarily rooted in the “formal specification” part of the problem. Plenty of people who would make great mathematicians are at best mediocre and awkward programmers (and vice versa, if this author can be counted as an example). It also suggests that programming is not a skill you can pick up as part of another skill set. If you can pick it up at all, it requires that you focus on it and learn it specifically.

This result was by no means uncontroversial. You can even find Alan Kay famously disputing the result, and he makes some interesting arguments. But a subsequent 2009 meta-analysis and more rigorous re-testing went a long way towards suggesting that there is truth in the contention that some people simply are not cognitively equipped to be software engineers.

It’s also worth mentioning that the population these studies acted upon was a group of motivated college students actively participating in computer science classes. They represent educated, motivated people who presumably had many advantages growing up as a child. For people who grew up poorly educated, poorly motivated, and poorly nourished; could the distribution of people possibly be any better than a 50/50 split of “can” and “cannot”?

When You Can’t Do What Everyone Should Do

Unless you are a hell of a hold-out dualist, you’ve got to admit that a lot of what your mind is and is capable of doing is directly related to the meat in your head. Our brains are marvelous learning machines, but we all have our talents and our limitations.

To some extent, people arguing that learning to code is empowering and helps improve your overall cognitive abilities are spot-on. It is empowering, it is amazing to be the kind of person who can craft a machine that can touch the lives of 10,000 people or fundamentally re-architect human communication.

But in this demand that everyone learn the skill (and the implicit assumption that everyone can learn), we’re telling people who simply may not be equipped for the task that they can and should be able to do something. I’m not sure if these authors have considered what a frustrating scenario that lays out in front of perhaps as much as half of modern society.

Most people, for whatever reason, cannot (or will not) learn to code.

When You Can Do What Most People Can’t Do

The flip side is that if you can write software, then you’ve come onto a talent that is relatively rare. The market for programming ability bears this out: demand and salaries are high for competent software engineers, doubly so for the experienced.

But with this celebrity-profession status comes a fair amount of responsibility. You’re spending man hours in a way that most people will never be able to. Are you spending them wisely? Is what you’re working on today worth your time? Step back from your deeply ingrained and half-faked impostor syndrome defense mechanism and ask yourself this question objectively.

The truth is, if you can code you’re in a relatively elite class of people. If you can code well, you’re in an extremely elite class. Are you using your talent for things that matter?

Therefore, Try

Bringing ourselves back around to the original argument, we have to try and ask who’s right? Jeff Atwood asks, “How would Mayor Bloomberg be better served as Mayor by learning to write javascript?” Perhaps he would not, but he might discover he could contribute to a field desperate for competent bodies (if only indirectly).

Given how scarce programmers are, and how scarce the ability to program seems to be, we probably would be best served by trying to teach everyone to program. If 60% of the population cannot learn to code, identifying and encouraging the 40% who can becomes critically important as more and more of society becomes dependent upon computers for their daily lives.

That said, if someone cannot or does not want to learn then begrudging them that inability is unfair. They are probably not lazy, or stupid, or unmotivated. They just don’t have the equipment. It’d be as unfair as saying I’m lazy because I’m not a world-class sprinter, even though I lack the body type and have a turned hip that only major surgery could correct.

Of course, it’s probably more fun to argue back and forth without the slightest grounding in reality. That’s what the blogosphere does best, after all.