I was sifting through my Twitter feed recently when I came across the link to a Kickstarter project for a coding education game. The project was a well designed board game that reminded me of parcheesi. Everything from the video, to the design, to the team were excellent. There was just one small problem: the project kept insisting it would teach something called “computational literacy” to players.
For those that haven’t been paying close attention to the learn to code movement, the logic for teaching everyone to code goes something like this:
- Software is eating the world, but...
- We aren’t teaching kids how to write or even understand software, so...
- We should teach programming like a core subject.
This is contentious stuff: teaching every kid to program requires that we trade some other discipline in our children’s education [1]. And this is where the term “computation literacy” was born. Those defending the need to teach young children to program don’t have a solid counter-argument when luminaries like Jeff Atwood say that not everyone should learn to program. The oft-used metaphor about everyone driving a car but not everyone needing to be a mechanic is brought up, and the programming advocates are on their heels.
In the past year, however, programming advocates have stumbled upon a phrase that appears to be unassailable: instead of programming, we need to teach our children “Computational Literacy.” Nobody can convincingly argue with the need to improve our children’s grasp of something amorphous and technical-sounding [2], and so programming advocates rally under the computation literacy flag.
This is not to say that all those that wield the phrase are not intelligent, critically thinking educators. Smart people at CMU, the New York Times, and Mother Jones all make convincing points about the weaknesses in the “let’s all learn to code” rhetoric. Journalists and politicians don’t understand how complex the subject of “programming” really is, and it’s easy for observers to conclude that “programming” and “computer science” are being hijacked to push corporate agendas forward.
But generalizing the language of the debate over whether or not to teach kids to create things with computers is bad news for everyone. Here’s why:
1) “Computational Literacy” is too vague.
To start, “Computational Literacy” is often used interchangeably with “Computational Thinking,” and for the purposes of this blog post, I want to treat them as the same. With that out of the way, is mathematics computational literacy? Is grammar diagramming a sentence computational literacy? Is playing a computer game computational literacy? I’ve heard a lot of definitions, but they all regress to science, technology, engineering, and mathematics (STEM). I personally like Jeanette Wing’s definition most:
Computational thinking confronts the riddle of machine intelligence: What can humans do better than computers?
But how do you teach that? I think the truth is that nobody really knows, and until someone does, arguing that we need to teach it to kids will hurt more than it helps.
Typically, I see programs and games that teach "Computation Literacy" through visual programming. That's bad because in our experience, teaching programming visually doesn’t work. One of our earliest prototypes had users dragging and dropping code and UX testers consistently told us that the drag-and-drop interaction was preventing them from learning. We’ve heard from other founders in the space that our experience isn’t unusual and that drag and drop programming doesn’t translate into being able to type out code.
I want to be clear on this point: visual programming is great for young kids. Scratch, Kodable, Light Bot, et all are a lot better for kid's minds that Angry Birds or Plants vs. Zombies. But visual programming fails to teach computational thinking for older people and fails to get those people to the point that they can create meaningful projects in real world environments (ie, writing code in an IDE).
2) We Don’t Need More STEM
If “Computational Literacy” most closely approximates STEM subjects as I mentioned above, then we don’t actually need to teach kids computational literacy at all. It’s a well-documented fact that there isn’t a STEM shortage in the US and that unemployment among hard scientists is actually higher than the national average. [3]
This is counterintuitive in a world in which Google requires engineers to have technical degrees and recent graduates without jobs seem to overwhelming have studied the liberal arts. I personally observed this after graduating from college myself. For most people that haven’t read the research (which included myself until the last few years), it was easy to believe that learning hard science and math inevitably lead to lucrative employment.
But that simply isn’t the case. My brother got a degree in physics from a good college. He graduated and began interviewing for jobs. After 3 months without an offer, we were talking on the phone, and he told me he was struggling to find a position because “all they want is people who can code”. It turns out that learning the hard skills that computational learning advocates suggest (math, science, and logic mainly) don’t lead to better employment options.
As a poignant example of this trend, my roommate in freshman year of college had a blog that he maintained in his free time. He graduated with a degree in politics but got a job immediately after graduation using his self-taught coding skills to become a frontend web developer at the Huffington Post. Another friend graduated with a physics degree and spent several years in the workplace retooling to be a software engineer. I can think of a half dozen of such examples right off the top of my head. STEM skills aren’t what make people employable: it’s the ability to program.
3) It Makes Programming Look Bad
The more that teachers, administrators, parents, and children come to associate programming with board games that teach computational literacy and similar STEM skills, the harder it will be for kids to get excited about the skill that actually matters: programming.
At CodeCombat, we aren’t interested in teaching computation literacy or STEM skills. We want to teach kids to program in real languages using real syntax. We want kids to learn skills that demystify how the objects they rely upon everyday really work. When they get a little older, we hope their experience playing our game will allow them to consider software engineering something they can excel at and enjoy. This is especially something we want to address for girls, who must overcome a monolithic brogramming culture in tech to participate.
So let’s drop the “computation literacy” bologna and teach kids the skills that are more useful and more fun. Let’s teach them to program.
[1] And no, blended learning isn’t going to magically create more hours in a teacher’s day to revise and improve the curriculum they didn’t have time to complete in the first place. I wouldn’t have wanted my math or English teachers trying to instruct me in computer science anyways.
[2] Personally I believe this is because “computational literacy” feels a lot like STEM education, and every politician in America has been yelling about the need to bolster STEM education for so long that the argument has come to be accepted as truth.
[3] These two articles do a comprehensive job of debunking the STEM shortage myth: http://www.epi.org/files/2013/bp359-guestworkers-high-skill-labor-market-analysis.pdf and http://www.theatlantic.com/business/archive/2013/02/the-phd-bust-americas-awful-market-for-young-scientists-in-7-charts/273339/