We don’t need no (low-level) education.

Teaching CompSci.
A portrait photograph of Gareth Latty.

Every now and then, when talking about teaching children computer science, someone comes out with something like:

All these kids today just learning Java, when I was learning we had to learn pointers and assembly. They need to teach them the low-level stuff!

This is a terrible, damaging argument. We are on the cusp of moving CompSci into the core education for students at a young age, and this is great, but it’ll mean nothing if we teach it the wrong way.

Firstly, the idea that you need to understand the low level to be a good programmer these days is simply untrue. We have got a plethora of high-level languages that are extremely effective and used widely. Modern C compilers are more efficient than a human could ever hope to be in assembly. Modern garbage collectors (not to mention the amount of memory in modern machines) make manual memory management worthless most of the time.

This all said, let’s assume we live in a world where you needed to know this stuff to be good. Even today we have reasons we want to know it all - if you want to make compilers, it’s probably worth knowing. The high-level languages are (complex) abstractions, and if we invoke Joel Spolsky’s ‘Law of Leaky Abstractions’:

All non-trivial abstractions, to some degree, are leaky.

We can say that sometimes we will need to understand what’s going on below the hood.

The idea that we should be starting by teaching the low level is a fast track to putting people off computer science. Sure, I found that stuff really interesting, and ate it up - but I was already hooked on CompSci. The aim of educating at a younger age is to give children an interest in it. If we begin with this stuff, they will zone out and think it’s boring.

If you were in charge of getting children interested in chemistry, would you begin by teaching them what a Mole is, or by showing them something that explodes?

Teach a child something high-level, and let them see results as soon as possible. If they can start seeing what they can do, they can start caring - and at that point, it’s easy. If a child finds something interesting, you’ll struggle to stop them learning about it.

Once they have learned the basics at a high level, you can go back and say ‘well actually, what we said about X isn’t strictly true, you see, it works like this, so actually Y’. Just like that moment where your maths teacher revealed that complex numbers exist. That kind of discovery comes with time, as it’s needed, and as they want to discover it.

When someone loves something, they seek out a depth of knowledge. If you teach them the high-level basics, not only to they get some knowledge they can actually use day-to-day, but they might get inspired to go and get the depth later.

Abstractions are our friend, they help us inspire by showing the power of what we are teaching before revealing the huge amount of knowledge required to master it. It takes the task from daunting and a huge investment in time before seeing any pay-off to being interesting and simple to begin with.

Let’s do it right, let’s give all these children a chance to discover a love for CompSci.