Teaching everyone to hack

A good friend of mine, drj, posted an article yesterday about the importance of teaching everyone to program. In it, he likens programming to reading or writing:

Imagine if Gove suggests that we only teach the gifted to write. Only the playwrights, the speechwriters, the journalists, and the poets will write. After all, all the good stuff is written by them anyway. I hope you can see that this would be madness.

He goes on:

Most people will not be poets. Most people will not be programmers, but that should not stop us from teaching them to program.

The problem is, as soon as you say “teaching kids to program”, people fixate on the final act – “What use is programming if my kid can’t do X?” – and while actually teaching kids how to code their own games or automate common processes is A Good Thing™, the real benefit is the mindset that comes with knowing how to program.

Johnny Lee-Miller and Angelina Jolie in the deliciously cheesy 1995 film Hackers

In programmer circles, there’s a muddy distinction between the words “programmer”, “coder”, and “hacker”. Hacker is particularly interesting. These days people associate it with shady Ukrainians who break into government IT systems. But that’s a neologism. The original meaning was more benevolent1:

hacker /ˈhækər/ n. A person who enjoys exploring the details of programmable systems and how to stretch their capabilities, as opposed to most users, who prefer to learn only the minimum necessary. […] One who enjoys the intellectual challenge of creatively overcoming or circumventing limitations.

Hacking is about working around limitations. Technical knowledge plays a part here, but the key skill isn’t knowing how to program, it’s knowing when to program. If we’re to teach kids programming, that’s the reason why.

Kids programming at a Codejam - image by Alan O'Donohoe

Just like writing or speech. Even before you’ve put pen to paper, or uttered your first syllable, those years of training at school have completely and subconsciously prepared you for the discussion. You may not know how to communicate like Cicero or Wilde, but you probably do know when to communicate, and when it’s even possible to communicate.

So, when drj says it’ll be “inconceivable that in the future we will be able to function without basic coding”, if you ask me, that’s the reason why. Once you’ve taught even a small fraction of the population to code, they’ll suddenly start spotting reasons and occasions to code, and the magic will happen.

  1. I tell a lie: the original meaning, supposedly, was “someone who makes furniture with an axe”. I have a feeling the furniture is optional.