by Jason Lewis
I’ve been thinking a lot lately about the push to “get kids to code” and the need for computational literacy and computer science education in K-12.
As a result, I’ve been reflecting on my own experience learning (or rather, teaching myself) to code.
I started when I was about five years old on a Texas Instruments 99/4A home computer. It was programmable in BASIC and I started by entering programs from 3-2-1 Contact magazine. Then I started to modify programs, eventually writing my own.
Later I programmed in BASIC on Apple II series computers, and played with Apple II assembly as well. I wrote a lot of code, and had a lot of fun. I figured out how to assign and manipulate variables, write loops, and manage control flow with conditionals (and that harmful GOTO statement).
yak shaving: Any seemingly pointless activity which is actually necessary to solve a problem which solves a problem which, several levels of recursion later, solves the real problem you’re working on. — The Jargon File
My journey from coding to computational thinking involved a lot of yak shaving. Once I started working in C, “closer to the metal,” I had a lot to learn. My prior coding experience had never taught me about linked lists, pointers, recursion, algorithmic estimation, memory management, or any of the other incredibly frustrating yet fundamentally enlightening concepts intrinsic to coding at that level.
But the really amazing thing was that I learned how the computer actually worked. Sure, I already knew the difference between RAM and ROM and why my programs went away if they weren’t saved to a floppy (or, earlier, an audio cassette). But that’s a shallow understanding.
The yak shaving really started when I needed to learn about linked lists. I discovered that I first needed to learn about pointers. But understanding pointers first required understanding how memory is addressed. Which first required understanding memory management.
Of course, to understand recursion, you must first understand recursion.
Once I hit malloc(3) my brain was fried. And this was at a time I couldn’t just go to a teacher and ask about it (well, la plus ça change…). I did have USENET and IRC at my disposal, and I got a lot of help (as well as snark and flame wars) there. But I had to figure out what I needed to learn on my own, and then proceed to read countless man pages and try to apply the arcane knowledge within.
Eventually I got there, and had a deeper understanding of my computer and its underlying architecture than I ever thought possible.
I believe this passionately: that we don’t grow into creativity, we grow out of it. Or rather, we get educated out if it. — Sir Ken Robinson
Children are natural autodidacts. Just watching my baby daughter over the past year has been amazing. She is intensely curious, constantly learning, exploring the world. And if we support them in this, they maintain this quality, at least until they get to school. Being told what and how to learn crushes not only creativity but the impulse to learn constantly and everywhere.
Programming environments targeted to young children like Scratch and KidsRuby are fantastic (the latter actually gets kids into “real” programming rather than just connecting blocks), but without an emphasis on computational thinking, this kind of “programming” is a rather shallow exercise.
I also think the emphasis on these sort of environments (especially “visual” programming like Scratch) indicates one (or both) of two things:
- We don’t have enough faith in children’s natural curiosity and impulse to learn.
- We don’t think teachers can become competent to teach true computational literacy.
Sadly, for the most part, both of these are likely true. It’s certainly true that most teachers don’t currently have the necessary computational literacy to teach fundamental computer science at any level, whether that’s second grade or twelfth.
More sadly still, it’s possible that many of the children we’re hoping to reach with efforts like the Hour of Code have had the kind of curiosity that leads to the kind of sheer bloody-mindedness necessary to undertake that level of autodidactic yak shaving educated right out of them.
I don’t want to think about that possibility.
I want to think about how to change these realities; not only to teach computational literacy, but to facilitate curiosity and creativity rather than suppressing them.