For their Hour of Code initiative this week, Code.org presents videos from both House Majority Leader Eric Cantor and President Barack Obama, saying that there’s “one thing Republicans and Democrats agree on:” everyone should learn how to code. US politicians are at historically divergent odds on every issue from culture to finance to defense, yet they converge on just a few things: Wall Street bailouts, strong intellectual property protections, and…that everyone should learn to program computers? The fact that the Hour of Code initiative appears in that list of neoliberal interests should give us pause. This might be a good idea—but it also might be the sign of powerful forces at work. So, what’s behind this near-universal agreement that everyone should learn to code?
I think it’s because coding is framed as a new literacy. I mean, who supports illiteracy? Literacy is always good, and when we as individuals or nations don’t have enough of it, it’s obviously bad. The biggest pushback we see on this everyone-should-learn-code movement is from software engineers and professional programmers–who, understandably, don’t often think of what they do as literacy. But framing coding as a literacy makes it apolitical in Code.org’s promotional efforts.
Code.org didn’t invent the idea of programming as a literacy. Neither did Khan Academy or Codecademy or any of the online educational venues currently focused on teaching programming. They’ve made a big splash, but the idea has been around for almost as long as computers have been. The reasons behind the argument have shifted throughout the history of the idea of programming-for-everyone: from general education to political liberation to technological freedom to intellectual development. And now, from the looks of Code.org’s promotional materials, it’s about individual success in the economic and employment marketplace.
Thinking about coding as a new literacy takes it out of political debate, but it also means we need to think about it beyond yes/no terms. Literacy is not simply decoding letters and words. That’s why many Americans struggle with generating effective written communication and interpreting written texts, although they might know their ABCs. And because the job of teaching and learning literacy is so difficult–yet so important–we try not to leave it up to just one discipline or one institution. Schools, homes, libraries, English and biology classes all chip in to support literacy. In other words, if programming is a literacy, it doesn’t belong to computer science, as Code.org implies. Like reading and writing, it’s also going to take a lot more than an hour to learn. If programming is a literacy that everyone should learn, who should teach it? What, exactly, should people be learning, and why? And if everyone really did learn to code, what would that look like?
Before I go on, I want to say that I actually agree with Code.org and Eric Cantor and Barack Obama: I think everyone should learn something about programming computers because I agree that programming is a new kind of literacy. Just as textual literacy helps someone navigate a world full of texts, programming literacy can help us navigate a world full of code—which is the world we now live in. Learning to program computers could be about more than employment and STEM education and computer science. It could be about understanding and changing the ways that communication and information are currently structured and transmitted. And this, I think, should give both Obama and Cantor pause.
Computer programming for everyone
The first person on record arguing that programming is a widely applicable skill that should be taught to a broad group of people is Alan Perlis (thanks to Michael Mateas and Mark Guzdial for pointing this out). At a 1961 forum organized by MIT–with the wonderful title of Computers and the World of the Future—he described an undergraduate course that looked a lot like the standard first year writing course:
the first student contact with the computer should be at the earliest time possible: in the student’s freshman year. This contact should be analytical and not purely descriptive, and each student during this first course should program and run or have run for him a large number of problems on the computer. […] This course should share with mathematics and English the responsibility of developing an operational literacy. […] In a liberal arts program the course could be delayed until the sophomore year, but certainly deserves inclusion in such a program because of the universal relevance of the computer to our times. (188)
Think of the state of computers in 1961: mainframes were only on a handful of college campuses. But computers were already important for defense, business and scientific research. Perlis’s emphasis on broad undergraduate education in programming suggested that future leaders of America should know something about these universally relevant machines.
Perlis’s vision was at least partially realized with the BASIC programming language, designed at Dartmouth University in the early 1960s by John Kemeny and Thomas Kurtz. Like Perlis, Kemeny and Kurtz saw the computer as universally relevant, and designed BASIC to be accessible to all undergraduates–not just those in engineering or the sciences. They made the language freely sharable, and it spread across college campuses in the 1960s. It’s impossible to overestimate the impact of the BASIC programming language on initiatives to teach computer programming beyond computer science. (For a good discussion of BASIC and its legacy, check out the recent book 10 PRINT CHR$(205.5+RND(1)); : GOTO 10)
This movement to teach all undergraduates programming in the 1960s moved off of college campuses in the 1970s. In his 1984 book Hackers, Steven Levy traces the epicenter of programming from the east coast to the west around this time, and the impetus to promote programming to the masses seems to have followed the same geographical trajectory. At that time, the push for everyone to learn programming was imbued with post-60s San Francisco area politics–hobbyists and hackers thrived, typified by The Homebrew Computer Club, Ted Nelson, and the People’s Computer Company.
Meanwhile on a corporate campus in California (Xerox PARC), Alan Kay also dreamed of computers for people—specifically kids. His “KiddieComp,” later called the “Dynabook” in a 1977 publication with Adele Goldberg (pdf and context here) was the first real personal computer. At the time, nearly everyone thought it was crazy: a portable computer?? For kids?? But Kay persisted, and not only pushed the idea of what we now call a laptop, but also a flexible software environment that encouraged customization and design. Smalltalk, the first real object-oriented programming language, was also meant for kids and adults to be able to program the computer. (See Hiltzik’s Dealers of Lightning for more.)
Seymour Papert, a student of the influential educator Jean Piaget designed the Logo programming language to “scaffold” (here we see Piaget’s influence) kids into learning complex logic, physics, and problem solving through programming. Logo had a heyday in elementary schools in the 1980s (such as mine), which was supported by Cold War defense funding and the anxiety of American competition in a global marketplace. These efforts petered out with decreased funding and poor support for teacher training. But that wasn’t Papert’s fault: many of us kids exposed to Logo loved it and learned a lot from it. If you haven’t read Papert’s 1980 book Mindstorms, about using programming as an “object to think with,” do it. right. now. Papert thought carefully about education, childhood development, and something that’s often missing from current educational policies: the joy of learning something, especially something difficult.
And let’s not forget the hero and scourge of the open source (ahem, free software) community: Richard Stallman. His moral and political insistence on the free circulation of code and the rights for folks to program their own devices has been critical for open source programming languages. Did you know that as recently as the 1990s, you had to pay for the use and access to most programming languages and development environments?
And now comes Code.org. If the motivations for pushing programming for the masses in the past were intellectual development, liberation, and joy, now it’s: Hey! You can get a good job in computer science! And this is where I am sadface.
Most of these past initiatives come from outside of computer science, or at the very least, were focused on teaching code beyond computer science. (I’ve written more about these initiatives here.) Other initiatives by computer scientists such as Mark Guzdial, Ken Perlin and Mary Flanagan and Jeannette Wing (pdf) are focused on systems thinking and the pleasures of difficulty and the fact that thinking the way that programming encourages means you can think better about politics, physics, philosophy and humanity. They have broad visions of what it could mean to program: not just making apps for the walled garden of Apple, not just promoting Facebook by using their API, not just sticking together code blocks to make a licensed game like Angry Birds.
Computer Science != Programming
Code.org purports to teach code, but promotes computer science. Note the shift from computer science to programming and back on their About page:
Code.org is a non-profit dedicated to expanding participation in computer science education by making it available in more schools, and increasing participation by women and underrepresented students of color. Our vision is that every student in every school should have the opportunity to learn computer programming. We believe computer science should be part of the core curriculum in education, alongside other science, technology, engineering, and mathematics (STEM) courses, such as biology, physics, chemistry and algebra.
If their “vision is that every student in every school should have the opportunity to learn computer programming,” why does the rest of the mission statement and the site talk about computer science? Its rhetoric about STEM education, the wealth of jobs in software engineering, and the timing of the Hour of Code initiative with Computer Science Education Week all reflect the ways that Code.org—along with many other supporters and initiatives—conflate programming with computer science. We see this in other arguments for why people should learn to code, in particular Jeannette Wing’s argument for “computational thinking” (pdf). Computer scientist Peter Denning argues that thinking about computer science as just programming is too limiting–but it’s just as limiting to think of programming as just computer science.
If programming is really a new literacy, it can’t be contained within computer science. We don’t restrict reading and writing to English departments, thankfully. If we thought of The Great Gatsby as the end goal of learning to write, we’d be thinking of writing in pretty narrow ways. Most of us use writing for more mundane, and ultimately more powerful things: grocery lists, blogs, diaries, workplace memos and reports, text messages to friends, fan fiction, and wills. The ability to read and write gives us access to lives and culture and, yes, employment. Do we have to be good writers— defined in particular, narrow ways—in order to get something from our literacy skills? No. Code is so important, so infrastructural to everything we say and do now, that leaving it to computer science is like leaving writing to English professors (like me).
Coding as the new literacy
On Code.org, ”literacy” is all over the place. We see the term “literacy” used in other arguments for teaching programming to everyone, such as Guido van Rossum’s 1999 Darpa grant application for Python and arguments from Marc Prensky and Douglas Rushkoff. On Code.org Eric Cantor says that “Becoming literate in code…is the only way for you to prepare for the future.” … (For more on the connections between literacy and programming, see my bibliography on the topic.)
There are some good conceptual reasons to make connections between literacy and programming: they’re both abstract symbolic systems for communication and information, for instance. But that’s not really why people make the connection between programming and literacy.
At Code.org, programming is like literacy because no one disagrees with literacy. No one argues that kids should be illiterate because literacy is a moral good. When literacy rates appear to drop, or writing appears to deteriorate, we wring our hands and declare a crisis. This happens all the time, actually (for instance, in 1874, 1975, 1983 and 2013; see Rebecca Moore Howard for a great bibliography of literacy crises).
The history of how literacy accrued this moral weight is actually quite interesting. Literacy has deep connections with religion. Protestantism posits that people need direct access to God’s Word: they need to read the Bible. And Catholicism, not wanting to be left behind, also promoted literacy through church schools in the early modern era. Literacy campaigns ramped up in the 19th century as mass schooling was perceived to be a way to knit nations together and make people more moral. This was especially true in America and Canada, where promoting shared values amongst immigrants was thought to be essential to building the nation (see Graff, Robbins). As the industrial revolution raged on, knowledge work–often conducted through written words–was a way out of brutal factory work, but also a way of making factory workers behave. We can thank all of these historical factors for our current values on literacy. And, actually, literacy is important. In America, low literacy levels affect access to jobs and independence and correlate with high rates of incarceration.
So Code.org has great PR and they’re smart to make these connections to literacy in order to promote programming or computer science or software engineering. But it’s not by accident that this literacy-infused agenda has gotten uptake now, when we’re once again in an era of high unemployment and anxieties about America’s ability to compete in a global marketplace. The dream of total outsourcing is dead: communication and design present insurmountable barriers for sophisticated software. Only if a company can precisely specify their needs can they send their programming projects overseas. And if they can actually specify their needs to that level, they already have good programmers and designers on staff, so they might as well do the work themselves. Instead, Facebook, Microsoft and other tech companies import many of their programmers from overseas. Whether or not they’re American, they have to pay them decent wages. (So, some of the fears of current software engineers and programmers about the everyone-should-learn-to-code initiatives might be well-founded: their wages could be driven down if what they do is no longer special. Still, the distance between a hour of coding and good software engineering is great.)
Relying on imported software engineers is one thing for Facebook, but it’s another thing entirely for the NSA or other government agencies that rely on programmers. A paltry supply of good American programmers is a security risk. Add that to the perceived connection between literacy, programming and economic development, and we can see why politicians might universally support programming for the masses.
What if everyone really did learn to program?
But here’s something else we know from historical and ethnographic studies of literacy: once someone is literate, their literacy can be used in ways they want. They might be marked by the ideologies and values with which they learned to read and write. But they can also read and write in unauthorized ways. They can read banned books, for instance. But more dangerous than reading is writing. They can write seditious materials. They can encourage revolutions.
So here’s where I get hopeful again about Code.org’s campaign, despite the fact that I disagree with their conflation of programming and computer science and their confusion between good job prospects and literacy. I hope Code.org succeeds in introducing millions of people to programming, especially women and racially or ethically underrepresented groups.
Lots of people won’t go anywhere with the code they learn. A few will make Facebook apps or the next Angry Birds. That’s fine. But some will learn a bit more about code and think about what it means that our information infrastructure is built on it. They might think more about issues in intellectual property and politics concerning digital rights and expression. They might consider what ways that software could improve civic infrastructure, as Code for America encourages. Because I think all of these things are important, I think that women and underrepresented groups should be participating in these conversations as well as these structuring and designing these technologies. Learning something about programming will help them do that.
And just because Code.org and Microsoft and President Obama might like a more computationally-skilled skilled workforce and might not even mind if they happen to be more critically engaged with political debates about technology, it doesn’t mean that it will stop there. Angry Birds was made with code–but so was Bitcoin, which destabilizes our assumptions about central governments and currency control. Network exchange protocols that enabled Napster, Grokster, and the Pirate Bay are also made in code. Edward Snowden knows a thing or two about code.
So, what if everyone really did learn to program? We might have widespread unemployment among lawyers, because a lot of law might be enacted through algorithms in code. We might fundamentally restructure representative government—not just by allowing folks to tweet questions at the President in press conferences, or even have new civic apps about snow removal. But wide-ranging structural changes that we can’t even imagine. These visions have been the domain of science writers such as William Gibson, Neal Stephenson and Cory Doctorow. But they could be our future, too.
So right now, President Obama and U.S. Representive Eric Cantor actually agree on something: everyone should learn to program computers. But if they actually thought about where that might lead, they might agree on something else: programming as a mass literacy is a pretty dangerous scenario for the status quo.