Code has been my life, and it has been your life, too. It is time to understand how it all works.
—Paul Ford, “What Is Code?”
Literacy has always been in flux. What it entails, who is expected to have it, and to what degree they should have it to be considered literate has varied throughout regions, cultures, and history. Although the contemporary rhetoric around literacy education is often about supposedly declining rates of reading or writing, literacy is a moving target. Depending on how we define literacy and our baseline measure, we could point to either rising or declining literacy rates at almost any place or time.
But despite—or maybe because of—its fluctuations, literacy is a powerful concept. The use of the concept and term literacy can support educational initiatives or inspire public handwringing. Literacy has rhetorical force, and what is considered literacy affects any society that values literacy. Sylvia Scribner argues that the ways we define literacy determine our evaluation of the problem of illiteracy and the objectives of educational programs we design to combat it.1 Given the high stakes of defining literacy, Scribner supplies some salient questions for us to consider: “What activities are carried out with written symbols? What significance is attached to them, and what status is conferred on those who engage in them? Is literacy a social right or a private power?”2 We must also ask: How should these skills be taught, and to whom? The questions posed by Scribner are empirical, and we can answer them through careful cultural analysis. But how or to whom skills should be taught is a question of values. We might rephrase these questions as: How should we define literacy? In this book, I have argued that coding should be part of our definition of literacy.
Because defining literacy is both an empirical and ethical endeavor, I have used a concept of literacy composed of both material and rhetorical components in this book: Literacy is a widely held, socially useful and valued set of practices with infrastructural communication technologies. The various practices of literacy offer material advantages for individuals and groups functioning in society: people use reading and writing to understand and sign contracts, learn in schools, keep track of expenditures, interact with governments, read news about important events, or write editorials and blog posts. These activities can be valuable to individuals or social groups without being “widely held”; they are, then, in Andrea diSessa’s terms, “material intelligences.” Whether literacies are widely held or useful are material questions. The work of rhetoric is to ask whether or not we value them, whether or not we consider these activities part of literacy and thus whether we should enfold them into literacy’s matrix of status and education. What we consider literacy and what values we attach to those literacies are choices with real effects on our educational agendas. Scribner’s analysis of the values we have ascribed to literacy suggests that “an ideal literacy is simultaneously adaptive, socially empowering, and self-enhancing.”3 Can a perspective from literacy studies help us to get closer to this ideal with coding?
I hope so. I have given both rhetorical and material reasons that we might need to consider the programming of computers as part of a new and enlarged literacy. Code is central to most lives and infrastructures in the developed world and widely recognized as such. The ability to program is powerful, and assertions that coding is a “new literacy” abound in popular discourse. Thus, coding has both the material and rhetorical factors that compose a literacy.
But is coding really a new literacy, as so many of the popular articles ask? Rather than answering that question with a “yes” or “no,” I argue that we need to begin treating coding as a literacy. Whether or not coding is a literacy, coding is part of computational literacy and a more complex idea of what literacy should be. Acknowledging that there is something called “coding literacy,” or “computational literacy,” or the many other names this literacy goes by, can help us think more carefully about—and perhaps change—how code is written and by whom. This concept gives us access to the rhetorical force of the term and concept of literacy, ways of looking at the social aspects of coding practices, historical lessons of mass literacy efforts, barriers to access, and also the well-developed tools and theories of literacy education. Below, I consider what this book’s exploration of computational literacy might mean for those who want to encourage it.
The social properties of computational literacy remind us that many different factors will affect the ways people learn it, their motivations for doing so, what they might do with that literacy when they have it, and how it might be valued by others. Thus, understanding the social properties of computational literacy is critical for any educational project seeking to promote it. Studying textual literacy in international contexts, Brian Street advises understanding first what the context for literacy is, and what people want to use it for, and then afterward establishing a curriculum to support and respect those uses.4 Following this advice from literacy researchers, then, would mean that computational literacy campaigns can aim for certain outcomes, but they must also solicit and respond to the aspirations, ideas, and established practices of their audiences. Such campaigns must also be prepared for the inevitability that, for better or worse, people will apply their computational literacy skills in unpredictable ways.
We may also observe from research in the social aspects of literacy that widespread computational literacy is unlikely to be a panacea for disparities in economic or cultural opportunities. Contrary to the rhetoric of literacy campaigns that reading can improve one’s life, research in literacy has shown that literacy does not necessarily help people rise up.5 In fact, literacy education tends to shore up inequality because it is generally taught in ways that preserve hegemonic structures. The need for literacy rises along with literacy rates, and already-advantaged groups tend to accrue literacy more quickly, thus tracking more closely along with that rising demand. Formal education—one of several structures in which children acquire literacy—tends to benefit the middle and upper classes most because it reflects the cultural values and practices of those cultures. For children coming from disadvantaged backgrounds, the structure of school is often alienating. Why do teachers ask questions to which they already know the answer? Why do all the kids have to sit and follow schedules together? School is indeed strange! But for kids used to parents asking them questions and following schedules for work and play, it feels more natural, and they can learn more easily. These are often the same kids that have lots of resources supporting literacy at home through extracurricular activities and supplemental learning opportunities. As Mizuko Ito et al. have pointed out, the gap in extracurricular learning opportunities is widening among school-aged children in the United States, especially in the area of digital literacies.6 In this way, literacy education can tend to benefit those who already have it, rather than those who need it. Even wide-scale literacy campaigns explicitly focused on political and social participation, often inspired by the work of revolutionary educator Paolo Freire, do little to combat class disparities. Instead, the massive social change these campaigns engender lead to different distributions and types of literacies, and disparities remain.7 And yet we can’t exactly wage antiliteracy campaigns to stem rising inequality. How might we promote coding literacy without exacerbating social inequities?
Because literacy is a socially contingent concept that takes a different shape in each group and individual, diverse educational approaches are necessary. A monolithic plan for computational literacy is likely to exacerbate established gaps in literacy skills among groups. The good news is that organizations such as #YesWeCode, Code.org, Globaloria, and Black Girls Code, as well as languages such as BASIC, Logo, Python, Processing, and Scratch, all offer different approaches to coding literacy, and some are specifically focused on closing those gaps. Many of the founders of these organizations, including Kimberly Bryant (Black Girls Code), Hadi and Ali Partovi (Code.org), Van Jones (#YesWeCode), Idit Harel Caperton (Globaloria), and the Scratch team (including Mitchel Resnick and Yasmin Kafai), have stated their personal interest in leveling the playing field for programming as well as making it easier for people from underrepresented groups to be a part of the profession. As I noted in chapter 1, each of these efforts makes some implicit arguments about what computational literacy might be for; any educational effort aimed at literacy is bound to be prescriptive in some way.8
Many of these efforts straddle the line between formal schooling and informal learning. MIT’s Scratch, for example, hosts a community where people can independently share and comment on projects, as well as a community geared specifically toward educators; they also promote after-school computer clubs focused on the language.9 Their explicit focus on the social aspects of learning and the value of code in circulation make it a robust model for computational literacy.10 Codecademy offers lessons directly on its website, along with more extensive curricula for educators. These curricula are making their way into formal schooling, from the U.K.’s adoption of the Codecademy curriculum, to Estonia’s use of Scratch and Logo in their elementary school initiative, to Silicon Valley schools’ embrace of Code.org’s curriculum, and to codeSpark’s game The Foos aimed at preschools.11
As coding-for-everyone moves into the classroom, we can look to the history of literacy for guidance. Jenny Cook-Gumperz warns of the homogenizing of literacy once it became coupled with mass schooling in the nineteenth century. Prior to mass schooling, “popular literacy” accommodated a diversity of values and practices and intertwined people’s home and work lives; school standardized these literacies into literacy, foreclosing many practical uses for literacy and devaluing any literacy practice that did not fit neatly into the hierarchical and factory-modeled classroom.12 Currently, many of these coding literacy initiatives help to diversify and open up social networks that encourage people to learn and improve their programming skills: will computational literacy’s current diversity be curtailed if it is converted into a standardized computer science curriculum? If greater access is a goal for computational literacy initiatives, how does this conflict or synchronize with formal schooling partnerships? Given the history of literacy and schooling, we may want to give the push for a standard computational literacy curriculum some greater scrutiny. Formal schooling can make literacy more accessible to students, but it can also privilege some students over others and consolidate literacy around a narrow band of practices.
There appears to be widespread political support for these organizations’ campaigns for computational literacy. However, their efforts rely on broader engagement with digital technologies, and this engagement is sometimes poorly supported or even discouraged. Digital technologies can be seen as expensive extras in districts with tight budgets and pressures to teach to standardized tests in reading and math. Ito et al. lament the political and societal resistance to children’s engagement with digital media: “Despite its power to advance learning, many parents, educators, and policymakers perceive new media as a distraction from academic learning, civic engagement, and future opportunity.” This lack of public support for digital media in public schools “threaten[s] to exacerbate growing inequities in education,” they argue, because public school cuts, especially in districts serving nonaffluent populations, tend to affect courses that offer meaningful engagement with digital technologies. Students then miss out on the kind of critical engagement with these technologies that might be supported in schools, and those with fewer resources at home are denied one especially crucial place they might have engagement with digital technologies. Because students across the socioeconomic class spectrum still use these technologies (cell phones, games, social media) outside of school, they can find school less relevant to their daily lives when it ignores these technologies. Echoing the lessons we learn from shifts in literacy often benefitting populations already literacy-rich, Ito et al. assert that to avoid further alienating those students most disconnected from schools, an educational agenda must “begin with questions of equity, leverage both in-school and out-of-school learning, and embrace the opportunities new media offer for learning.”13 Their “connected learning” approach embraces rather than resists students’ digital media use outside of school, potentially providing the kind of engagement necessary to encourage computational literacy.
The same political forces that denigrate young people’s engagement with digital media such as computer games and social networking have promoted computational literacy. For example, President Obama has often used video games as a negative example of how kids can spend time,14 but he encouraged kids to make games in his video statement promoting Code.org’s Hour of Code: “Don’t just buy a new video game; make one. Don’t just download the latest app; help design it.”15 Playing games and making them are, of course, different activities, but the disparity in their value for the nation is striking. As we saw in chapter 1, when literacy is a raw material for production, it is a generator of wealth for a society. (President Obama also echoes this national economic benefit of literacy in his video statement by emphasizing the value of having sufficient programmers for the nation.) Consequently, coding literacy can be prized at the same time that its products—for example, video games and social media networks—are, paradoxically, blamed for obesity, laziness, or underachievement.
Computational literacy is not so easily separated from the use of media such as games. Informal engagement with these technologies can lead people into more sustained engagement: a gamer can get interested in what computers do and want to learn programming to tweak settings or write her own game. This process can lead toward computational literacy.16 Even John Kemeny and Thomas Kurtz defended the connection of programming and gaming on mainframes in the 1960s: “People feel that it is frivolous to use these giants to play games. We do not share this prejudice. There is no better way of destroying fear of machines than to have the novice play a few games with the computer. … And most of the games have been programmed by our students, which is an excellent way to learn programming.”17 No one learns programming solely in order to learn programming; motivations for computational literacy matter, and they can derive from uses of digital technologies that are not always socially sanctioned. Thus, the connected learning agenda promoted by Ito et al., which emphasizes these links between the social uses of digital media and deeper engagement with the media, is a useful guide for the promotion of computational literacy.
Access has been a key challenge and area of inquiry for mass literacy promotion efforts: access to education, to the material artifacts of reading and writing, and to the models for reading and writing practices with whom students can identify. Computational literacy efforts often focus on the technical and social barriers to learning programming—making available education, materials, and role models. Black Girls Code, for example, is focused on helping young black women connect with each other and meet other black women programmers and computer scientists as role models. The Scratch community sponsors after-school computer clubhouses modeled in part on Seymour Papert’s observation of Brazilian Samba Schools—extracurricular spaces where novices and experts mix freely in the expressive potential of a medium.18 “Makerspaces” now popping up in public libraries often include computers or physical computing materials.19 Yasmin Kafai and Quinn Burke discuss eCrafting circles, gatherings focused on wearable computing and “etextiles,” which tend to appeal more to young women.20
One additional barrier to coding literacy is that code can sometimes be difficult to access for technical and legal reasons. Only some kinds of software include ways of modifying it or accessing its code, and even when those options are available they can be deeply hidden. At the rise of the graphical user interface (GUI), Neal Stephenson lamented that the GUI hid the command line, and, with it, the obvious connection of software to code.21 Free and open-source software can offer users these connections, but it remains intimidating to many users. Commercial Web-based software often offers application program interfaces (APIs), which allow users to write software that builds on the functionality of those programs. Many of these APIs have good documentation and communities to support people writing these supplemental programs. But Web-based software that runs on commercial servers also hides a lot of its workings, and all or most of its code. We have seen a lot of discussion about what these hidden but pervasive programs mean for our communication and privacy, but very little on how they might impact the ways that people become motivated to learn programming or how they might access the means to do so. If the seamlessness of our heavily trafficked Web software such as search engines and social networking sites dampens people’s cognizance of the workings of code or their motivations for learning to write it, should open algorithms and code be incentivized or legally required? If we consider coding a literacy, what arguments might we make for better access to proprietary software code and algorithms?
Laws about software can also bar people’s material access to code as well as the procedures that code represents. Under patent law in the United States and many other countries, it is possible to patent software processes and thus bar others from writing code that enacts the same processes.22 Because patent law was designed with engineering contexts in mind, it prevents people from “designing around” patents, or creating products that do the same thing but in different ways. Only in the past several decades has it been possible to patent processes and, in particular, processes in software. Software patents are notoriously low-quality, meaning that they sometimes cover processes already widely known or they are so unspecific in their description that they could theoretically cover a whole host of processes. The aggressive behavior of so-called patent trolls and companies who vigorously defend their patents with cease-and-desist letters threatening costly legal battles can make it potentially dangerous for people to write and publish code. While big software companies battle patent lawsuits daily and have the patent portfolios and legal teams to do so, open-source projects and independent programmers are not immune from these threats and are less prepared to fight legal battles over code.23 Many coding literacy efforts seek to support the kind of code written by small companies or individuals or open-source projects, and so the legal regime of software patents can potentially undermine their efforts. These legal barriers to accessing or writing code echo Lawrence Lessig’s argument that legal access to creative raw material is necessary for encouraging creative work in art and writing. With copyrights currently extended beyond the “limited times” guaranteed by the Constitution of the United States, Lessig claims that access is unduly restricted.24 His efforts with Creative Commons, which were modeled on free and open-source software, also seek to increase the freedom of writers to create new works through generous licensing. Overbearing intellectual property laws are well-known barriers to accessing raw material for any creative endeavor, including programming, but arguments against these barriers rarely note the ways they impede a novice’s ability to learn. Given the persistent emphasis on computational literacy as a national asset, we may want to begin making these connections in arguments about both coding literacy and the intellectual property of software.
Research on literacy shows us the importance of “access” in literacy education, which entails material access to reading and writing implements, spaces in which to learn, plus cultural access to familiar practices and people with whom the learner can identify. These types of access are all relevant to computational literacy as well, although the technical nature and legal treatment of software complicates material access to reading or writing code. Code needs to be legally, technically, and socially accessible to support coding literacy promotion efforts, and because this access is complex, the responsibility for this access lies in several different areas. Educators in both formal and informal learning spaces have some responsibility to introduce code as an important form of contemporary writing. Those already computationally literate can make it socially welcoming to a wider range of people and recognize that programming is not the perfect meritocracy it is sometimes imagined to be. Students should have access to the digital media that feels relevant and connected to their lives outside of school. Media and cultural influencers can branch out from the exclusionary and unappealing stereotypes of coders as “geeks,” who are often presented and popularly imagined as white males. And the intellectual property law regimes for software need to accommodate the kind of informal programming that results from computational literacy promotional efforts. A concept of coding literacy helps to support these efforts alongside the “transformative” access to programming that Adam Banks describes, which allows people “to both change the interfaces of that system and fundamentally change the codes that determine how the system works.”25 If coding literacy promotional efforts can open up access in this way, what coding literacy is and does can be transformed in positive ways.
This book was designed to provide the historical, rhetorical, and conceptual evidence to support the argument for computational literacy; that is, an argument that a concept of computational literacy should exist. About this kind of literacy, Matthew Fuller asserts that for educators, “What such a literacy might be returns always as a question, and not as a program. In order to ask that question well, however, it is useful to have access to vocabularies which allow one to do so.”26 As Fuller suggests, “What is computational literacy?” is still and always will be an open question. Any answer I or anyone else might give is provisional. Consequently, I have avoided outlining any specific program to promote computational or coding literacy. However, for educators of both literacy and programming, I hope to have provided some vocabulary to ask that question well.
The vocabulary I have provided here is derived largely from literacy research. In chapter 1, I told a history of how coding literacy has been promoted through languages, hardware, and educational campaigns since the 1960s, and I used a parallel history of efforts to promote reading literacy to highlight the rhetorical and ideological aspects of these efforts for coding. The communicative and informational affordances of writing and programming were my focus in chapter 2. Historical research in literacy was the foil for my explorations of how coding literacy has been and could be functioning in society. As I explained in chapter 3, the technology of writing became infrastructural in government and commerce first, making the ability to read or write valuable skills. Once these skills were more widely distributed and affected collective mentalities, the idea emerged that reading and writing were something called literacy, and that concept gathered rhetorical force. We are, as I argued in chapters 3 and 4, at the point where code is infrastructural and the reading and writing of it are valuable skills. But although we may have developed a computational mentality to match our code-based infrastructure, these skills are not so widely held that they are part of literacy. And yet, thinking of coding as literacy—treating coding literacy as a real thing—allows us to anticipate this time and prepare for it with better and more inclusive educational approaches.
One might argue that coding literacy is only important to the cultures and groups that are technologically ensconced in it. But the network effects of code means that it recruits cultures and people regardless of whether or not they participate in it actively or whether or not they even want to.27 Our contemporary communication networks are built with code, a fact that makes it and writing more globally relevant. Through fund-raising, governance, warfare, education, and a globalized labor force, networks built with code ensnare groups that might not have any direct access to computers or even writing. If “literate practices depend on powerful and consolidating technologies,” as Deborah Brandt and Katie Clinton assert,28 the powerful and consolidating properties of code make coding not only a literate practice but also a very influential one. What do we lose when only a small and relatively homogeneous population designs and controls these literacy technologies? If we want a more inclusive and equal society, the writing of code should not be left to a handful of elite or isolated groups. A concept of coding literacy can help us to understand the stakes for who codes and how.
I have argued that the ability to read and write code appears to be augmenting literacy—a historically and socially contingent concept about symbol manipulation. What might it look like if many people become literate in this technology or if institutions build on the assumption that many people are literate in it? How might we shape the education for these skills to help them be equitably distributed? We cannot collapse the various affordances, technologies, and histories of writing into a perfect parallel with programming. However, the historical and cultural patterns of literacy that I have outlined in this book gesture toward answers to these critical, contemporary questions about code and computation’s roles in our daily lives. We need to understand how programming shapes our composition and communication environments. This does not mean that we need to acquire the source code for every program we use as well as an ability to read it or write it, but we do need to learn how the procedures implemented in code shape and constrain the ways that we compose and communicate: What assumptions about information, texts, and people are embedded in the software programs in which we compose? What control do software programs wrest from us through their collection of our data? The scrutiny of computational procedures can help us to understand the affordances and actions of the various programs on which we now depend.
The roles that literacy has always played in our lives—the acquisition and communication of information, the central role in citizenship and education—are now changed by computers, code, and programming. Because programming is intertwining itself with writing in our composition environments, laws, social networks, and communications, it appears to be changing what it means to be literate in the twenty-first century. Computer programming is re-coding literacy.