7
Exploratory Programming in Digital Humanities Pedagogy and Research

Nick Montfort

How Humanists Benefit from Learning to Program

The book Digital_Humanities lists a variety of technical skills, rooted in text encoding and in information technology project management, that are important to the digital humanities (Burdick et al., 2012). Although determining the appropriateness of scripting languages is listed, being able to program is not mentioned. Similarly, Debates in the Digital Humanities (Gold, 2012), a collection that features a section on “Teaching the digital humanities,” has nothing to say about whether programming should be taught. Typically when DH pedagogy is discussed, the real topic is how to use pre-constructed DH systems to deliver education. Humanities students can surely be offered the same opportunity that Seymour Papert, using Logo (1980), and Alan Kay, using Smalltalk (Kay and Goldberg, 2003), successfully offered to young children. Humanities students, too, can be allowed to learn programming.

The case for programming education would not be as strong if programming were merely instrumental and involved nothing more than completing an already-established plan. In advocating that humanists and artists should program, I consider a type of programming practice that I call exploratory programming, one which involves using computation as a way of inquiring about and constructively thinking about important issues.

In what follows, I outline programming’s cognitive, cultural, and social value with reference to what some important thinkers and researchers have determined. This outline, and this argument, is mainly intended for those who determine curriculum, who teach courses that could include programming, and who advise humanities students on which electives are appropriate.

Those who decide to become new programmers often find the motivation to do so in their encounters with computers and with others who are using programming to think about interesting problems. They often have concrete and personal reasons for engaging with computing, and do not need to consult the sort of argument that I present here. The discussion here might, however, help humanities and arts students better articulate their interest in programming to fellow students and to faculty members.

One humanist who has advocated for programming education recently – both in print and by teaching students to engage with programs in humanities classes – is Matthew Kirschenbaum. He argues:

Computers should not be black boxes but rather understood as engines for creating powerful and persuasive models of the world around us. The world around us (and inside us) is something we in the humanities have been interested in for a very long time. I believe that, increasingly, an appreciation of how complex ideas can be imagined and expressed as a set of formal procedures – rules, models, algorithms – in the virtual space of a computer will be an essential element of a humanities education.

(Kirschenbaum, 2009)

Kirschenbaum is one of several humanists who have already been teaching programming to undergraduate and graduate students in different contexts. I have taught programming to media studies students at the Massachusetts Institute of Technology (MIT) and the New School and have undergraduate MIT students doing computational writing projects in “The Word Made Digital” and “Interactive Narrative” (my course web pages are linked from http://nickm.com/classes). Daniel C. Howe developed and taught the course “Programming for Digital Art and Literature” (http://www.rednoise.org/pdal) at Brown and Rhode Island School of Design (RISD). At Georgia Tech, Ian Bogost has taught courses that include a “Special Topics in Game Design and Analysis” section (syllabus at http://www.bogost.com/teaching/atari_hacks_remakes_and_demake.shtml) devoted to programming the Atari VCS. Allison Parrish teaches Python programming in “Reading and Writing Electronic Text” (current course page at http://rwet.decontextualize.com), regularly offered in New York University (NYU)’s Interactive Telecommunications program. Others who have taught programming to humanists include Michael Mateas and Stephen Ramsay. There are also many courses for artists and humanists in Processing, which was created by Ben Fry and Casey Reas to help designers learn programming and is ideal for developing interactive sketches.

In the following sections, I will offer arguments that programming:

After this, I’ll return to the ways that programming can be enjoyable, explaining what special qualities of programming may make it a particularly pleasing way to occupy our time and to contribute new creative work to the world. And, finally, I will further characterize the specific practice I call exploratory programming, which is distinct from developing software to specification.

Cognitively: Programming Helps us Think

One useful perspective on how computing can improve the way we think has been provided by educational researchers, who chose to

distinguish between two kinds of cognitive effects: Effects with technology obtained during intellectual partnership with it, and effects of it in terms of the transferable cognitive residue that this partnership leaves behind in the form of better mastery of skills and strategies.

(Salomon et al., 1991:2)

The first of these effects is obvious in many domains. The person using a spreadsheet to try out different budgets and scenarios is better prepared to innovate in business than the person who lacks such a system and must calculate by hand. A civil engineer modeling an unusually-designed bridge with a computer is better able to ensure that it is safe than is one who must rely on earlier methods. A radiologist using a modern, computational magnetic resonance imaging (MRI) system is able to deliver a diagnosis in cases where x-rays would not be adequate.

This positive effect of computation is what computer pioneer Douglas Engelbart called “augmenting human intellect” (Engelbart, 2003).Although there are very many domains in which thinking with computers has proven effective, some are nevertheless resistant to the idea that thinking with computers can be helpful in the humanities and arts. However, computing can be used to model artistic and humanistic processes, just as it can be used to model business and economic processes, bridges from an engineering perspective, the human body from a medical perspective, and so on. Thus, programming has the potential to improve our humanistic and artistic thinking as well. Improving the reader’s ability to think with the computer in this way is a primary interest of mine.

There is also hope that thinking computationally can enhance the way we think more generally, even when we are not using computers. Indeed, there is evidence that adding computational thinking to the mix of our experiences and methods can improve our general thinking. Perhaps an obsessive focus on programming could be detrimental. But those who have a background in the arts and humanities and who choose to learn programming are diversifying their ways of thinking, adding to the methods and perspectives that they already have. Programming can help them consider the questions they care about in new ways.

The research that has been done about whether programming improves cognition has focused on younger learners who are still developing cognitively, not students in higher education. Nevertheless, to provide some insight into the effects of computer programming, I offer some results from the literature on whether learning to program can help people of that age group improve their cognition.

Modeling Humanistic and Artistic Processes is Thinking

Edward Bellamy (1888), in Looking Backward: 2000–1887, projected a character more than a hundred years into the future to explain his utopian vision of society. Similarly, Douglas Engelbart wrote about how computation could augment human intellect in a more or less science fictional mode. Writing in the voice of a hypothetical augmented human, Engelbart explained more than 50 years ago why people using computers as tools (even if they were using the advanced technology that he envisioned) should understand computer programming:

There are, of course, the explicit computer processes which we use, and which our philosophy requires the augmented man to be able to design and build for himself. A number of people, outside our research group here, maintain stoutly that a practical augmentation system should not require the human to have to do any computer programming – they feel that this is too specialized a capability to burden people with. Well, what that means in our eyes, if translated to a home workshop, would be like saying that you can’t require the operating human to know how to adjust his tools, or set up jigs, or change drill sizes, and the like. You can see there that these skills are easy to learn in the context of what the human has to learn anyway about using the tools, and that they provide for much greater flexibility in finding convenient ways to use the tools to help shape materials.

(Engelbart, 2003:93–4)

Engelbart presents one way of understanding the computer metaphorically, as a workshop that allows people to build things. Not being able to program is akin to not being able to change a drill bit. A person can use a workshop in such circumstances, but is limited in what he or she can build. Another way of understanding the computer is as a laboratory. If people can use the equipment that is there, but are unable to change the experimental setup, they are limited in what experiments they can do. Seeing the computer in these ways, as a means of thinking constructively or experimentally, helps to explain why people who are artists and critical thinkers would want to be able to adjust computation in a variety of ways. Such adjustment was done in Engelbart’s time, and still is done, by computer programming.

Perhaps the most problematic aspect of the statement by the hypothetical augmented human is the mention of how people often “learn anyway” about aspects of programming. Environments for programming (typically, BASIC) became easily available to the everyday home computer user in the late 1970s and 1980s, but as powerful, complex integrated development environments (IDEs) and compiled languages have been developed, programming has in some cases become more difficult to access once again, and people do not encounter it casually in the ways they used to. This means that some unnecessary complexity has been hidden, but some flexibility has also been removed. Still, those who delve into HTML, learn to use regular expressions to search documents, and start to develop short shell scripts do end up gaining some familiarity with their computational tools and can build on that to begin to learn skills relevant to programming.

Engelbart’s work focused on improving complex processes and on facilitating teamwork, and he was also very engaged with building models of salient aspects of the world. While Engelbart was not focused on humanistic and artistic work, constructing computational models is useful in the arts and humanities as much as in economics, biology, architecture, and other fields.One way to frame this sort of model building in the humanities and arts is as “operationalization,” and this was the term used at the Media Systems workshop in 2012 (Montfort, 2013; Wardrip-Fruin, 2013). Presenters there discussed numerous systems that modeled humanistic and artistic theories, giving a glimpse of the many computational systems that have provided new insights. I gave examples there of one small-scale and one large-scale system that implements particular concepts from narratology. A different sort of demo (and a much more visually appealing one) was given by Ken Perlin. He showed his procedural animation system, one which also operationalizes ideas, in this case, artistic ones about how different animation techniques can be used to produce expressive behavior. Others who did related work and were in attendance included Michael Mateas, whose Façade (a joint project with Andrew Stern) implements Aristotelian dramatic concepts; Ian Bogost, who builds models that engage with concepts of procedural rhetoric; computational creativity researcher Mary Lou Maher, who showed work across different domains of creativity; Michael Young, developer of narrative systems based on ideas from narrative theory; and Ian Horswill, who has modeled virtual characters using various psychological theories, including Reinforcement Sensitivity Theory. These cases, as the report of the workshop noted, showed that “operationalization almost always involves novel scholarship both in computational systems and in the area being modeled.” Unfortunately, “few individuals are prepared to do both types of research, while interdisciplinary teams are difficult to assemble and support” (Wardrip-Fruin and Mateas, 2014:48–9). If exploratory programming were undertaken more often by humanists and artists, these explorers and programmers would be able to do this work of operationalization more easily, both individually and in collaborating teams.

Systems of these sorts, whatever domain they are in, inherently embody arguments about the theories they draw upon. For instance, at the most abstract level, they seek to show what parts of a theory can be formalized and what that formal representation should be. Such systems, by virtue of how they are constructed, also argue that certain aspects of a theory are independent and others are linked. These models can be used for reflection by scholars and researchers, for poetic purposes (to make new, creative works) or for study. However, a computer implementation by itself, even without a human-subjects experiment, is a way of engaging with a theory and attempting to understand and apply it in a new way.

Programming could Improve our Thinking Generally

Considerable educational research was undertaken in the 1970s and 1980s to assess the value of computers in grade-school education; some of this focused on computer programming specifically. The results varied, but in 1991 a meta-analysis of 65 of them, which involved coding the results from each and placing them all on a common scale, was published. It considered quantitative studies available in university libraries that took place in classrooms (at any grade level) and assessed the relationship between computer programming and cognitive skills (Liao and Bright, 1991:253–4).

The results of this meta-analysis indicate that computer programming has slightly positive effects on student cognitive outcomes; 89% of positive study-weighted [effect size] values and 72% of positive ESs overall confirm the effectiveness of computer-programming instruction. … Students are able to acquire some cognitive skills such as reasoning skills, logical thinking and planning skills, and general solving skills through computer programming activities.

(Liao and Bright, 1991:257–62)

The researchers noted that the effect was moderate, and that their analysis did not assess whether computer programming was better to teach than were other alternatives. Also, the study was assessing grade-school education research rather than programming education in colleges and universities. Still, the conclusion was that, at least for young learners, there were observable cognitive benefits to learning programming.

This meta-analysis also determined that the benefits of learning to program could go beyond a specific programming language. However, it suggested that the selection of an appropriate language was important, since programming education with Logo had the greatest effect size (Liao and Bright, 1991:262). Logo was not used exclusively for exploratory programming in the 1970s and 1980s, but I suspect that its use was significantly correlated with an exploratory programming approach, which was part of Seymour Papert’s original vision for the langauge. So, I read these results as consistent with (although not clearly demonstrating) the value of exploratory programming in particular.

True, these are K–12 studies, and the instruction provided was almost certainly simply in programming itself or was related to math. The effect, too, was not a strong one, but it was not clear that other types of instruction would have offered more benefit. The significant gains from programming education – as determined in this analysis of 65 studies – are quite relevant to the arts and humanites, however. While older students are developmentally different, if opportunities remain to improve students’ “reasoning skills, logical thinking and planning skills, and general solving skills,” doesn’t that, by itself, speak in favor of teaching programming as a method of inquiry in the humanities and arts? Do any of the other humanistic methods that we teach to these advanced students offer documented, general cognitive benefits, observed at any grade level?

Culturally: Programming gives Insight into Systems of Communication and Art

The argument here is twofold. First, as critics, theorists, scholars, and reviewers, those who have some understanding of programming will gain a better perspective on cultural systems that use computation – as many cultural systems increasingly do. Second, after learning to program people are better at developing cultural systems as experiments about, interventions into, augmentations of, or alternatives to the ones that already exist.

Programmming Allows Better Analysis of Cultural Systems

Douglas Rushkoff writes: “For the person who understands code, the whole world reveals itself as a series of decisions made by planners and designers for how the rest of us should live” (2010:140). By understanding how media and communications systems are programmed, we gain insight into the intentions of designers and the influence of material history, protocols, regulations, and platforms. In many cases, a full understanding of, for instance, a Web application will involve understanding not only the decisions made by the developer of that application, but also the decisions that have been made in creating and upgrading underlying technologies such as HTML, CSS, and programming languages (JavaScript, PHP, Java, Flash).

Consider a few questions related to culture and computing: Why do many games for the venerable Nintendo Entertainment System share certain qualities, while different qualities are seen in even earlier Atari VCS games? How do the options offered for defining video-game characters, virtual-world avatars, and social network profiles relate to our own concepts of identity? How does word-processing software, with its formats, typographical options, and spell- and grammar-checking, relate to recent literary production? How have tools such as Photoshop participated in and influenced our visual culture? How did a small BASIC program exist in cultural and computational contexts and have meaning to computer users of the 1980s? Because the cultural systems relevant to these questions are software machines built out of code and hardware machines made to be programmed, knowledge of programming is crucial to understanding them.

Scholars in the humanities have already used their knowledge of programming and their understanding of computation to better understand the history of digital media. Extensive discussion of this sort has been provided in book-length studies. These include studies of early video games by Nathan Altice (2015) and Nick Montfort and Ian Bogost (2009); of identity in digital media by D. Fox Harrell (2013); of word processing by Matthew G. Kirschenbaum (2014); of Photoshop and visual culture by Lev Manovich (2013); and of a one-line Commodore 64 BASIC program by Montfort et al. (2013). In several of these cases, the methods of inquiry these scholars used included developing software and learning from the process of programming. In all of these cases, these scholars brought their understanding of computing – developed in part by doing at least some amount of programming and exploration – to bear on these questions. While these particular studies have been done, many open questions remain regarding how these and other programmed systems participate in our culture.

Programming Enables the Development of Cultural Systems

To ground this aspect of programming in practical concerns, consider that, by learning to program, people enlarge their ability to develop new cultural systems and to collaborate on their development. Michael Mateas, writing of his experience developing a course in programming (one aspect of procedural literacy) for artists and humanists, explains how an awareness of computation allows work on new sorts of projects:

Procedurally illiterate new media practitioners are confined to producing those interactive systems that happen to be easy to produce within existing authoring tools. … collaborative teams of artists, designers and programmers … are often doomed to failure because of the inability to communicate across the cultural divide between the artists and programmers. Only practitioners who combine procedural literacy with a conceptual and historical grounding in art and design can bridge this gap and enable true collaboration.

(Mateas, 2008)

Mateas is not simply claiming that artists and humanists should learn computing jargon so as to be able to bark commands at programmers. He is discussing communication at a more profound and productive level, the sort that allows for the exploration and expression of new ideas.

To close the “two cultures” gap that Mateas identifies in new media and the digital humanities, it would of course be ideal for those who are technically expert to learn something about the humanities as well. While the methods and goals of humanistic research may not be obvious to all programmers, it is quite difficult to find programmers (at least, ones in the United States) who have never taken a course in the humanities at all, who have never studied a novel or taken a history course. It is still easy, however, to find artists and humanists who have no experience with programming.

Socially: Computation can Help to Build a Better World

Programming not only can contribute to social and utopian thought; I believe it is uniquely suited to building productive utopias. I consider a utopia to be a society (usually represented or simulated in some way, although there are utopian communities that are actual societies) that is radically different from our own and yet is also engaged with our own society. A utopia might be an attempt to provoke people, or it might be offered as a serious model that could be emulated. In any case, a utopia is not an escapist vision, nor it is it an alternative place with no relation to our society, the sort of place that has been called an atopia.

Utopias don’t have to be perfect to be useful to social and political thought. In terms of provoking people to think about important issues in new ways, utopias can be presented that are worse than our current society. These are called dystopias; because they present arguments about how our society might improve, I consider them to be in the broad category of utopias as well.

Programming can be used to develop utopias via computer games and simulations. The original Sim City, for instance, can be read as a model city that promotes mass transit and nuclear power. (Modified versions of it can present other simulated societies, using computation to make different arguments.) Or, programming can enable new social spaces and developments, such as pseudonymous online support groups that are open to people around the world.

Both types of potential are indicated by Douglas Rushkoff: “We are creating a blueprint together – a design for our collective future. The possibilities for social, economic, practical, artistic, and even spiritual progress are tremendous” (Rushkoff, 2010:14). To take this idea seriously, rather than cynically dismissing it: if we are to be designers of our collective future, what does that sort of design entail, and what skills should we have to participate in this collaborative activity?

Rushkoff offers his answer, that we should fully develop our ability to write online, using computers:

Computers and networks finally offer us the ability to write. And we do write with them on our websites, blogs, and social networks. But the underlying capability of the computer era is actually programming – which almost none of us knows how to do. We simply use the programs that have been made for us, and enter our text in the appropriate box on the screen. We teach kids how to use software to write, but not how to write software. This means they have access to the capabilities given to them by others, but not the power to determine the value-creating capabilities of these technologies for themselves.

(Rushkoff, 2010:19)

Given this perspective, it seems hard to justify that developing social media wiles specific to whatever the current proprietary systems are – the ability to skillfully use Friendster, Facebook, or Twitter, for example – really constitutes the core skill for the collective designers of our future. It sounds like arguing that we will be able to develop a progressive new society because we know how to navigate our local IKEA. If we envision ourselves as empowered to determine a better future together, we will need to know much more than navigation, more than how to shop, consume, select, and inhabit existing corporate frameworks. We will need to know how to participate in creating systems, whether the goal is incremental development or a radical provocation. In Engelbart’s terms, we will need the full use of our “home workshop,” to have all of the tools available to us and adjustable.

Programming ability has been used to develop new cultural systems, of course. One example is a system launched in 2009 by a for-profit company. This system, Dreamwidth, aimed to correct problems with LiveJournal, which runs on free software code, by forking that code to create a new system. The company improved the way the site could be accessed on screen readers, provided a different privacy model for journal viewing, and published the first widely discussed diversity statement. This cultural system was developed with a focus on writers, artists, and others who were contributing creatively. The community of developers that works on the Dreamwidth code (and, because this is free software, also has full access to this code for any purpose) is remarkable. By the first year after launch, half of the developers were people who had never programmed in Perl or contributed to a free software project before, and about 75% were women (Smith and Paolucci, 2010). To put this in perspective, as of that year, estimates of the percentage of women participating in free software projects overall ranged from 1.5% to 5% (Vernon, 2010).

The Dreamwidth response involved not just a verbal critique of the problems with LiveJournal (where the Dreamwidth co-founders worked); it also involved more than just producing a proposal or mock-up of what might be better. The response was a project to build a new system with the participation of programmers, including many new programmers. The result was a site that hosts a diverse community and an inclusive group of developers.

With that specific example in mind, consider one more statement from Rushkoff about the importance of participating in and humanizing computing:

[T]he more humans become involved in their design, the more humanely inspired these tools will end up behaving. We are developing technologies and networks that have the potential to reshape our economy, our ecology, and our society more profoundly and intentionally than ever before in our collective history.

(Rushkoff, 2010:149)

Programming is Creative and Fun

At the risk of trivializing what I understand as a cognitively empowering practice, one that is capable of providing us better cultural understanding that can help us build a better society, it would be remiss of me not to mention that programming is an activity that gives the programmer poetic pleasure, the pleasure of making and of discovery through making. I discussed earlier how programming is not only a hobby to fill the time; this particular aspect of programming that I am discussing now is indeed connected to some types of productive hobbies as well as to artistic practices. It’s worth noting, though, that there are special creative pleasures of programming.

It is enjoyable to write computer programs and to use them to create and discover. This is the pleasure of adding something to the world, of fashioning something from abstract ideas and material code that runs on particular hardware. It involves realizing ideas, making them into functional software machines, in negotiation with computational systems. The strong forumlation of this impulse to make and implement in the digital humanities specifically is the declaration that the only true digital humanists are those who build systems (“hack”) rather than theorize (“yack”) (Ramsay, 2011). To note that programming is creative and fun, however, does not require excluding other types of involvement in a field, nor does it mean that it is not also fun to critically or theoretically yack. It simply involves admitting the pleasure and benefits of hacking, of exploring with programmming.

Writing a program offers enjoyment that is not entirely unlike other types of making in the arts and humanities: the way sound and sense grow and intertwine on the lattice of a poem; the amazing configuration of voices, bodies, light, and space in a play; the thrill of new connection and realization that can arise from a well-constructed philosophical argument. This, by itself, isn’t meant to justify the inclusion of programming in a humanities or arts curriculum, but it is meant to suggest that the activity of programming can be consistent with more traditional activities: writing, developing arguments, creating works of art, and so on.

Exploratory Programming

The idea of exploratory programming is not supposed to provide the “one true way” to approach computing in all circumstances; it’s not a suggestion that programmers never develop a system from an existing specification and ship or launch it. It’s meant, instead, to be one valuable mode in which to think, to encounter computation, and to bring the abilities of the computer to address one’s important questions, artistic, cultural, or otherwise.

A problem with programming as it is typically encountered is that many people who gain some ability to program – particularly those whose formal training ends with an introductory class or two, or those who learn in the context of implementing one very specific project in predetermined ways – never learn to explore at all. There are substantial challenges involved in learning how to program and in learning how computing works. If one is interested in mastering basic data structures and gaining the type of understanding that a computer science student needs, it can be difficult to also discover how to use programming as a means of inquiry.

What constitutes a good introduction to computer science is not always ideal for artists and humanists. Linked lists and binary trees are essential concepts for those learning the science of computation, but a great deal of exploration through programming can be done without understanding these concepts. Those working in artistic and humanistic areas can learn a great deal by seeing, initially, how computing allows for abstraction and generalized calculations. They can gain comfort with programming, learn to program effectively, see how to use programming as a means of inquiry – all without becoming full-blown computer scientists. For those who don’t plan on getting a degree in computer science, it can sometimes be difficult to understand the bigger picture, hard to discern how to usefully compute on data and how to gain comfort with programming while also dealing with the more advanced topics that are covered in introductory programming courses. It can be hard to see the forest for the binary trees, as students focus on understanding the detailed mechanisms of computation but often neglect the cultural situation of computing.

Beyond that, many of those who haven’t yet learned to program can have the impression that programming is simply a power tool for completing an edifice or a vehicle used to get from one point to another. While the computer can have impressive results when used in instrumental ways, it can be used for even more impressive purposes when understood as a sketchpad, sandbox, prototyping kit, telescope, and microscope. As a system for exploration and inquiry, the computer is unmatched. Exploratory programming is about using computation in this way.

In my book Exploratory Programming for the Arts and Humanities (Montfort, forthcoming), I aim to provide a course for individual or classroom learners who wish to do exploratory programming and better understand cultural systems. This book is meant to particularly relate to the digital humanities, to the cultural aspects of programming, and to different ways of analyzing and generating media. There are plenty of other ways to begin to program, however, and good resources for doing so. I encourage humanists and artists to get started in whatever ways seem appealing. There are already excellent books that introduce programming in Processing (Shiffman, 2009) and Ruby (Pine, 2005). New programmers can use these and other resources to understand the essentials of computing and begin putting together interesting projects in many ways. Effective ways to get started do not require a particular programming language or a formal class, but they do benefit from an exploratory approach to programming – along with the awareness that programming can help us think socially and as individuals, humanistically and as artists.

References and further reading

  1. Altice, N. 2015. I AM ERROR: The Nintendo Family Computer / Entertainment System Platform. Cambridge, MA: MIT Press.
  2. Bellamy, E. 1888. Looking Backward, 2000–1887. Boston, MA: Ticknor and Company.
  3. Burdick, A, Drucker J., Lunenfeld, P., Presner, T., and Schnapp, J. 2012. Digital_Humanities. Cambridge, MA: MIT Press.
  4. Engelbart, D. 2003. From augmenting human intellect: a conceptual framework. In The New Media Reader, ed. N. Wardrip-Fruin and N. Montfort. Cambridge, MA: MIT Press, 93–108.
  5. Gold, M.K., ed. 2012. Debates in the Digital Humanities. Minneapolis: University of Minnesota Press.
  6. Harrell, D.F. 2013. Phantasmal Media: An Approach to Imagination, Computation, and Expression. Cambridge, MA: MIT Press.
  7. Kay, A., and Goldberg, A. 2003. Personal dynamic media. In The New Media Reader, ed. N. Wardrip-Fruin and N. Montfort. Cambridge, MA: MIT Press, 391–404.
  8. Kirschenbaum, M. 2009. Hello worlds: why humanities students should learn to program. Chronicle Review, January 23, 2009. http://chronicle.com/article/Hello-Worlds/5476 (accessed June 20, 2015).
  9. Kirschenbaum, M.G. 2014. Track Changes: A Literary History of Word Processing. Cambridge, MA: Harvard University Press.
  10. Liao, Y.C., and Bright, G.W. 1991. Effects of computer programming on cognitive outcomes: a meta-analysis. Journal of Educational Computing Research 7 (3), 251–68.
  11. Manovich, L. 2013. Software Takes Command. New York: Bloomsbury.
  12. Mateas, M. 2008. Procedural literacy: educating the new media practitioner. In Beyond Fun: Serious Games and Media, ed. D. Davidson. Pittsburgh: ETC Press, 67–83.
  13. Montfort, N. 2013. Talks from Media Systems. http://nickm.com/post/2013/09/talks-from-media-systems (accessed June 20, 2015).
  14. Montfort, N. (forthcoming). Exploratory Programming for the Arts and Humanities. Cambridge, MA: MIT Press.
  15. Montfort, N., and Bogost, I. 2009. Racing the Beam: The Atari Video Computer System. Cambridge, MA: MIT Press.
  16. Montfort, N., Baudoin, P., Bell, J., et al. 2013. 10 PRINT CHR$(205.5+RND(1)); : GOTO 10. Cambridge, MA: MIT Press.
  17. Papert, S. 1980. Mindstorms: Children, Computers, and Powerful Ideas. New York: Basic Books.
  18. Pine, C. 2005. Learn to Program. Dallas, TX: Pragmatic Bookshelf.
  19. Ramsay, S. 2011. Who’s in and who’s out. Paper presented at the History and Future of Digital Humanities panel, Modern Language Association Convention, Los Angeles, January 6–9, 2011. http://stephenramsay.us/text/2011/01/08/whos-in-and-whos-out (accessed June 20, 2015).
  20. Rushkoff, D. 2010. Program or Be Programmed: Ten Commands for a Digital Age. New York: OR Books.
  21. Salomon, G. Perkins, D.N., and Globerson, T. 1991. Partners in Cognition: Extending Human Intelligence with Intelligent Technologies. Educational Researcher 20 (3), 2–9.
  22. Shiffman, D. 2009. Learning Processing: A Beginner’s Guide to Programming Images, Animation, and Interaction. Burlington, MA: Morgan Kaufmann, 2009.
  23. Smith, M., and Paolucci, D. 2010. Build your own contributors, one part at a time. Presentation slides. January 20, 2010. http://www.slideshare.net/dreamwidth/build-your-own-contributors-one-part-at-a-time (accessed June 20, 2015).
  24. Vernon, A. 2010. Dreadfully few women are open source developers. Network World March 5. http://www.networkworld.com/community/node/58218 (accessed June 20, 2015).
  25. Wardrip-Fruin, N. 2013. Nick Montfort on “The art of operationalization” (Media Systems). Expressive Intelligence Studio. https://eis-blog.soe.ucsc.edu/2013/09/montfort-art-of-operationalization (accessed June 20, 2015).
  26. Wardrip-Fruin, N., and Mateas, M. 2014. Envisioning the Future of Computational Media: The Final Report of the Media Systems Project. Santa Cruz: University of California Center for Games and Playable Media. https://games.soe.ucsc.edu/envisioning-future-computational-media-final-report-media-systems-project (accessed June 20, 2015).