Before diving too deep into design ideas for programming without math, it’s useful to draw an analogy with a process familiar to many of us – learning to read. I remember when I was about six years old, just working my way through the “Dick and Jane” series of books — soon replaced, thankfully, by the infinitely more fun Dr. Seuss books.
These early readers, designed for kids just learning the basics, all had an extremely small vocabulary, simple syntax, very large and easy to read type, and colorful pictures on every page that illustrated whatever you were reading in the text. It was learning to read with training wheels. Eventually, as we went up through the grades, the training wheels came off: Vocabulary grew gradually larger, the syntax more varied, the type shrank in size, and the pictures began to disappear. We found ourselves moving on to Scholastic Books, stories for teens like the Hardy Boys series — or in my case science fiction — then maybe P.G. Wodehouse, and eventually all the way to Salinger, Woolf, Bellow, Pynchon, and the fabulous and incredibly rich world of grownup writing.
That this process takes years — roughly the dozen years from being six to being eighteen — is now a given, not something anybody seriously questions. Entire industries and scientific fields have sprung up around questions of what is the right age to introduce successive changes in this “literacy pipeline” — the process of moving a learner along from one level to the next, from Dr. Seuss to Dostoevsky, and all points in between.
An analogus “programming literacy pipeline” has remained an elusive dream, although not for lack of trying. It has been well established that you can get kids to play with cool languages made for kids like Logo or Scratch, and also that college students can be introduced through coursework to a language like Java or Python, with many of them actually passing the course. Although most of those students won’t like it, or particularly understand why it might be relevant to their life or their studies.
I think the problem may have been that there has been no culture of the other uses of programming — the ones that are not primarily mathematical, but rather are of interest to the rest of the population. Things like creating your ideal ever-changing song playlist, or planning your dream vacation, or redesigning your kitchen, or finding that perfect couch that fits in your living room, or all of the many other things we’d each like to do in our own unique way.
Yes, there are computer programs out there for many of these things, but we can’t get in under the hood and customize them the way we’d like. Somebody else — a programmer we’ve never met — would have needed to do that for us. Sure, we can adjust various settings, but we don’t get to connect those settings together, to make one setting affect another, or to describe, for example, the ways that our ideal music playlist should vary throughout the day, gradually changing from the morning to the evening. These are the sorts of things that are easy for programmers to do, but impossibly out of reach to anyone who is merely fiddling with knobs on the shiny black surface of a program.
This is quite different from the promise that was offered to my eager young self while I was working through “Ten Apples up on Top” and other Dr. Seuss books. I could see, in plain sight, a different sort of text at the end of the book. I couldn’t yet read it, but I could see it. That text — designed for the teacher — was a lot smaller, with words that were a lot longer, and with no pictures. I completely understood that this was the grown-up version of what I was learning to read.
This point is important, and worth emphasizing. I already understood perfectly well, at the age of six, that what I was reading was exactly on the path to grown-up reading. I was reading the same language as the grown-ups, just in an early “learners” version. There was no sense that “Ten Apples Up on Top” was in some toy language. This was written English, fair and square — the same written language that my parents would read in the newspaper every morning — and I was learning to read it.
Until we come up with a suitable redefinition of what programming is for, until we embrace the utility of programming as a way for serious grown-up people to go about doing the serious things they want to do, without asking those people to pretend to be interested in becoming mathematicians or engineers, this sort of pipeline simply cannot be built for universal programming literacy.
It’s a tricky problem, because it requires us to work on all parts of the learning pipeline at once — to seriously rethink about what kind of programming we teach eighteen year olds. If we neglect to do this, then we won’t end up teaching most kids how to program in any meaningful way. We will just be leading them, with the best of intentions, on a road to nowhere that matters to them.