Decoding “Everyone should learn to code”

Special Focus : Should We All Learn to Code?
Life Skills August 07, 2014

Everyone should learn to code.” Over the last few years, this has become a popular slogan, invoked by “learn to code” companies and organization interested no doubt in drumming up business. It’s a slogan that comes with some urgency, coinciding with a narrative about the supposed shortage of programmers and other “skilled workers” in STEM fields. More broadly (and perhaps less cynically) the slogan has been aimed at addressing the changing demands of an increasingly computerized world — at work, at school, at leisure, in our professional and personal lives. “Everyone should learn to code.” It’s echoed by politicians, athletes, entrepreneurs, educators, and engineers alike.
 
It’s hard to argue against what some are calling “the new literacy” (I mean, how can you oppose literacy?!). But what exactly do we mean when we repeat this mantra: “everyone should learn to code“?
 
Focusing on “everyone” here makes a lot of sense, no doubt. We are (increasingly, almost all) consumers of computer technology; everyone should have the opportunity to learn to be creators of that technology as well. Moreover, focusing on “everyone” is particularly important if you look at the technology industry’s woeful lack of diversity. Women earn less than 20% of the computer science degrees in the US, for example. They make up about 20% of the software industry workforce. Blacks and Latinos earn fewer than 10% of degrees in CS; and they make up about 5% of the software industry workforce.
 
Computer technology might be used by “everyone,” but as it stands currently, it’s being built by a tiny slice of the population. That in turn shapes what’s built. That shapes not only the problems that are being tackled but the way in which they are addressed.
 
To provide “everyone” with access to a technical education means starting earlier (before college, that is) and explicitly supporting girls and under-represented youth in these efforts.
 
But here’s where the “should learn” part of the slogan “everyone should learn to code” starts to get tricky. When we say “should” does that mean it’s compulsory? Should “learning to code” become a school requirement, and if so how do we cram it into an already overloaded curriculum?
 
And what exactly should that curriculum be? In other words, what do we mean by “learn to code”? What do we mean by “code”?
 
Does “coding” mean “programming”? On one hand, it’s easy to see how these terms can be readily interchangeable — the language of computers is written in “code” after all. But on the other hand, it’s apparent too how these two terms might not be the same. “Code” has other meanings — it’s shorthand for writing human language for the purpose of brevity or the purpose of obfuscation. “Code” can just mean human language, transformed. Code is not a complete way to describe the “language” of computers.
 
To understand how computers do things isn’t simply about knowing the “code.” In other words, it isn’t simply a matter of understanding the alphabet of a particular computer language or to know a couple of powerful words (commands). To understand the operation of a computer — hardware, software, networks — requires more than an act of translation from human language into the computer’s. It’s about understanding the syntax of that language. It’s about understanding the logic. It’s about understanding the program: the series of instructions that tell a computer what to do and how to do it.
 
There are many, many programming languages. And when we say “everybody should learn to code,” it’s often in the effort of teaching just one of those. Java. Javascript. C++. C#. Ruby. Ruby on Rails. Python. PHP. Perl. Etc. But these are not analogous to human languages. They operate quite differently, and to suggest that learning a programming language is the same as learning a foreign language misses the point in important ways.
 
One way to think more broadly than these analogies — to go beyond a simplistic “learn to code” (as I think we should) — is to focus instead on “computational thinking.” That is, we should support learners in understanding the concepts that form the foundation of computer science. Not simply the code. The thinking. The problem solving.
 
As Tasneem Raja writes in a recent Mother Jones article on “learning to code”, the way computer science is currently taught in high school tends to throw students into the programming deep end, reinforcing the notion that code is just for coders, not artists or doctors or librarians. But there is good news: Researchers have been experimenting with new ways of teaching computer science, with intriguing results. For one thing, they’ve seen that leading with computational thinking instead of code itself, and helping students imagine how being computer savvy could help them in any career, boosts the number of girls and kids of color taking—and sticking with—computer science. Upending our notions of what it means to interface with computers could help democratize the biggest engine of wealth since the Industrial Revolution.
 
The new literacy, if there is one — I’m not convinced yet we’ve fully recognized what precisely that literacy would be — isn’t necessarily in “the code.” It is in the logic, the algorithms, the data, the systems, the networks, the problem solving, the debugging, the thinking (artificial intelligence and human intelligence) that new computer technologies demand.
 
And that means that what we need right now is to move forward with some thoughtfulness about what that these demands might be and how we translate them into educational opportunities that do more than reify “code” as the solution to our present and future employment woes.
 
In other words, let’s do better than just a poorly phrased slogan.
 
I am not arguing here that “everyone shouldn’t learn to code.” But I can’t hop onto a bandwagon that just isn’t clear about what it’s asking “everyone” to do.