I freely admit about 1/2 the following content is just an excuse to use this title.
Lately I’ve found myself wondering, how are kids getting into programming these days? I blame still attending the Stack Exchange “beer bashes” (though I think Github’s “drinkups” have won the naming battle there), while no longer being able to drink for these thoughts. Programmers like to talk about programming, and drunks like to talk about the past, so drunk programmers… well you see where I’m going with this. Anyway, it seems like the high level stuff has become more accessible, while the “what is actually happening”-bits are increasingly hidden.
Let Me Explain That Last Bit
When I Was Your Age…
I first starting coding on a TI-99/4A, in TI-BASIC, at the age of 5. That’s a machine you can fit in your head. The processor spec is ~40 pages long (the errata for the Core 2 Duo is almost 100 pages), and there’s none of the modern magic, like pipe-lining, branch prediction, or pre-fetching (there’s not even an on chip cache!).
Now of course, I didn’t actually understand the whole machine at 5 but the people teaching me did. Heck, the only reason a machine discontinued in ’84 was available to me in ’92 was because they’d worked on the thing and saved a couple.
A grounding in such a simple machine lead me to question a lot about the higher level languages I eventually learned. For example when I first started learning Java the idea that two functions with the same name could exist just messed with my head, because it didn’t gel with my previous experience, driving me to read up on namespacing and vtables.
Looking back, another avenue for programming knowledge is how horribly glitchy video games were. Actually, video games are still horribly glitchy but the consoles are a lot more sophisticated now. Used to be when a game went sideways the consoles just did not care, and you could do all wreak all sorts of havoc exploiting glitches. I can honestly say I “got” pointers/indirection (though I don’t remember if I knew the words or not) when I wrapped my head around the infamous Cinnibar Island glitch. Some of these style glitches can still happen on modern consoles, but there’s proper memory protection and some spare cycles to spend on validation now so they’re a lot rarer.
If you shift my story forward to the present day, a kid learning on 8 year old hardware would be using a PC running Windows XP (probably with a Pentium 4 in it); a simple machine that is not. Their consoles have hypervisors, proper operating systems, and patches! If you play Pokémon today you actually only have one masterball. The most archaic kit they’re likely to encounter is a TI-83 calculator (which still has a Z80 in it), and even then not till high school.
Lies To Children
Thinking about this lead me to write Code Warriors, a dinky little coding puzzle app, as my “see if XAML sucks any less than it used to” side project (the answer is yes, but the REPL is still bad). Even it’s a lies to children version of assembly, making significant compromises in the name of “fun”. And while I was thinking about kids learning, I certainly didn’t play test it with any children so… yeah, probably not great for kids.
I have no doubts we’re going to keep producing great programmers. Colleges, the demands of the job market, and random people on the internet will produce employable ones at least. But I find myself wondering if we aren’t growing past the point where you can slip into programming as if by accident. It is after all quite a young field, kids in college when ENIAC was completed are still alive, so perhaps it’s just a natural progression.