Introduction

Late one summer, we found ourselves discussing the highs and lows of teaching computational art and design as we prepared our syllabi for the fast-approaching term. As we swapped ideas for exercises, we discovered that we had each chosen to assign “the clock,” a project that asks students to develop a dynamic representation of time. We had been educated in different countries—Golan in the USA and Tega in Australia—and yet it became clear that we shared an extensive tradition of such assignments: traded, like folk tales, by those teaching code in art and design schools around the world. These pedagogic traditions, however, were mostly absent from the programming primers on our bookshelves, which dealt above all with how to write code, rather than what to make when learning to code and why. This book is our attempt to address this gap and capture an evolving vernacular. It is a book for artists, designers, and poets who are already working with code as a creative medium, or who are curious about doing so. It is for computer scientists, software developers, and engineers who are looking for more open-ended, expressive, or poignant ways to apply their skills. And it is a playbook for educators in all of these fields—a companion to help plan a semester's journey, and a guide to bring students into a creative, thoughtful, and ultimately transformative engagement with computation. Our project draws on research, educational materials, and candid firsthand accounts from a vibrant community of practitioners and educators, all of whom are navigating the challenges of blending engineering and poetry in their courses and creative work.

It's difficult to overstate the importance of computational literacy in 21st-century life. Computer programming, once an esoteric skill in engineering and business, has now acquired broad applicability in fine arts, design, architecture, music, humanities, journalism, activism, poetry, and many other creative fields. But in the classroom, the adaptation of programming education to students with different objectives and learning styles has not kept apace. Instead, for more than half a century, computer science departments have defined the design, delivery, and cultural norms of programming curricula—and the resulting mismatch between traditional computer science education and art and design students has become a persistent challenge. As designer-engineer Leah Buechley has observed, traditional computer science courses often fail to connect with students who learn best from concrete experiences, not abstract principles; who prefer to work improvisationally, instead of following formulas; and who aim to create things that are expressive, rather than utilitarian.1 We are witnessing the shear between the history of computer science as a discipline, concerned with the nature and optimality of algorithms, and the new reality of computer programming as a skill, a form of basic literacy with practical utility (and idioms) in every field. There is also a growing understanding that programming education needs to reach more diverse and previously underserved populations, and an appreciation that new and more culturally potent teaching methods are required to achieve this.2 Fortunately, such alternative pedagogies—in the form of arts-oriented programming toolkits, classroom approaches, assignments, and community support structures—have arisen within the growing set of cultural practices known as “creative coding.”

“Creative coders” are artists, designers, architects, musicians, and poets who use computer programming and custom software as their chosen media. These practitioners blur the distinction between art and design and science and engineering, and in their slippery interdisciplinarity, may best be described with the German word Gestaltern, or “creators of form.” Their tools of choice are programming environments like Processing, p5.js, Tracery, Max/MSP/Jitter, Arduino, Cinder, openFrameworks, and Unity, all of which have been developed to honor the particular needs and working styles of both professionals and students with visual-spatial, musical-rhythmic, verbal-linguistic, and bodily-kinesthetic intelligences.4 Because many of these creative coding toolkits are free and open-source, they have radically democratized software development, positioning programming as a potent mode of cultural inquiry. The exercises and assignments in this book assume that the learner is using one or another of these creative coding tools, or something like them.


Processing seeks to ruin the careers of talented designers by tempting them away from their usual tools and into the world of programming and computation. Similarly, the project is designed to turn engineers and computer scientists to less gainful employment as artists and designers.

—Ben Fry and Casey Reas3


Who Is This Book For?

This book is a manual and sourcebook for teaching and learning the use of code as a creative medium, and for exploring programming in a more vibrant cultural context. It contends with software as an artistic material, offering pathways to learn its grain and texture, strengths and limitations. We hope this book will find use among university educators (in fields like media arts, design, informatics, media studies, and human-computer interaction); those who teach computer programming in high schools, or as a general undergraduate education requirement, such as “CS for non-majors” courses; and workshop leaders (at makerspaces, hackerspaces, code schools, educational retreats, and adult education programs). We also believe this book may be directly useful to artists, designers, and creative autodidacts who seek prompts for self-directed software projects.


Why make a book for teachers? There are many books that serve to introduce students to the basics of computational art and design, but few have been written with the educator in mind. This is surprising given that so many of us teach. We teach to nurture and mentor the next generation, we teach to support our art and design practices, and we teach for the love of being in dialogue with those who are different than ourselves. We often do this in an increasingly corporatized university system that relies heavily on income from teaching, but provides almost no training to faculty on how to do it well. With little else to go on, approaching the lectern after the completion of graduate studies often involves reverse engineering the pedagogy of our own favorite teachers: how did they manage class time? How did they structure their assignments? To such a reader, this book offers a collection of helpful patterns. They are taken from our own experiences as educators, collected directly from more than a dozen of our colleagues, and distilled from the online syllabi and other resources posted by hundreds of our peers.

What's Worth Making, and Why?

Creative coding courses are now a standard offering in many art and design programs, reflecting not only the incursion of computing into everyday life, but also the ongoing work of software arts tooling, teaching practices, and community-building. We are indebted to decades of work on toolkits that accommodate diverse learning styles, have clear syntax, and are supported by generous and inclusive documentation. The creative coding community's focus on how to code has dramatically expanded to whom it has become accessible. But it has also led us to equally important questions about what to make and why to make it.

In computational art and design, many responses to the questions of what and why continue historic lines of creative inquiry centered on procedure, connection, abstraction, authorship, the nature of time, and the role of chance. The pursuit of these formal and conceptual concerns in the medium of computation has created new practices and aesthetics, and has also heightened a sensibility to the forces and flows of computation itself. Creators have become attuned to the ways in which working computationally encourages certain perspectives and occludes others. Media artists, computational designers, and other creative coders are the bards of a generative and interactive poetics, and, in the words of Julie Perini, “can provide dis-alienating experiences for a society desperately in need of healing.” 7


Increasingly, computational artists and designers have also developed more overtly political practices that both anticipate and respond to technological transformations in society—allowing for “experimentation with new ways of seeing, being, and relating, as well as opportunities to develop innovative strategies and tools for resistance movements.” 10 Such practices adopt and recombine methods from speculative and critical design, relational aesthetics, and critical engineering to provoke reconsideration of the origins and consequences of new technologies and their uneven impact on different individuals and communities. The assignments and exercises in this book are designed to provide entry points into the technical skills, aesthetic issues, and social considerations involved in these and many other modes of practice.




Marshall McLuhan observed that art is a “Distant Early Warning system that can always be relied on to tell the old culture what is beginning to happen to it.” 12 Artistic engagements with computation and emerging technologies, perhaps even more so than science fiction, offer a tangible glimpse of what may eventually become the everyday.13 Whom does this clairvoyance serve? For five decades, the most prominent computer science research centers (including Bell Labs, Xerox Parc, MIT Media Lab, and Google ATAP) have included technologically literate artists in the project of “inventing the future,” instrumentalizing artistic inquiry in the service of capital. As Stewart Brand explained, following his residency at MIT: “The deal was very clear. The Lab was not there for the artists. The artists were there for the Lab. Their job was to supplement the scientists and engineers in three important ways: they were to be cognitive pioneers; they were to ensure that all demos were done with art—that is, presentational craft; and they were to keep things culturally innovative.” 14


With the fracturing of civic life after social media, the malignant growth of digital authoritarianism, and the looming threat of environmental catastrophe, the sheen has come off Silicon Valley and the folly of technological solutionism has become clear. To the extent that we continue to prototype new futures within the framework of late capitalism, and echoing McLuhan's notion of the arts as a “warning system,” there is a new urgency for artists and designers to have a seat at the tables where technological agendas are set. As Michael Naimark has argued, “Artists bring criticality to environments that are otherwise vulnerable to the Achilles’ heel of nerd culture: techno-optimism and technophilic enthusiasm.” 16 The technologically literate artist or designer has an essential role to play in checking society's worst impulses. Not only can they ring the alarms when freedom and imagination are threatened; they can also use their privilege to create systems that, as Elvia Wilk writes, “champion subjective experience,” “expand the range of human expression,” and make space in our conversations and institutions for as many perspectives as possible.17



This book is an argument for creators with hybrid skills and open hearts. We insist upon the value of arts literacies within engineering spaces, and engineering literacies in the arts—and we believe that doing so is critically important at a time when education systems increasingly prioritize corporate agendas over the cultivation of capacities like critique, imagination, empathy, and justice.20 An arts literacy provides a vocabulary for recognizing the politics of technologies, and for negotiating and renegotiating the values and priorities they reinforce.21 The world is not a computer, it is not a system to be optimized, and it will always refuse to be neatly resolved into stable categories or fixed value systems.22 Education in the arts cultivates capacities for navigating this messiness, as well as celebrating qualitative ways of knowing. As software continues to permeate our lives, we need to foster culturally enmeshed ways to contextualize it, question it, modify it, and develop shared understandings for working with it. Just as “everyone should learn to code,” everyone should also be equipped with the intellectual tools of the arts. Education in culturally oriented computational practices, such as those gathered together in this book, offers a rich way to do both.



A Field Guide for Teaching

This playbook presents resources and practices for building what we believe are good assignments, good lectures, and good classrooms in our field. As a distillation of our shared values, it lays out teaching tools for project-based learning, materials for composing lectures that highlight a range of approaches from a diverse group of makers, and strategies for the creation of exciting classrooms.

Project-based learning is a key pedagogical approach in the arts. Unlike most programming textbooks, the assignments shared here are open-ended prompts, encouraging curiosity-driven and improvisational approaches to the use of code. We believe a good assignment should present a set of constraints that are tight enough to learn necessary skills, but at the same time, inspire a wide range of possible responses, allowing for productive comparisons in critique. A good assignment should also offer a way to examine a timely social question—as Paolo Pedercini writes, it should constitute “an entry point to a critical issue.” 25 And for the computational artist or designer in particular, it should preserve room for the critical, imaginative, or expressive reconsideration of technology and its possibilities. We believe a good creative coding assignment should be an invitation to look at technology with fresh eyes: defamiliarized, recontextualized, and reinterpreted. We are hardly the first educators to advocate for this sort of “socially situated learning-by-making”; rather, we continue the work of pioneers like Idit Harel and Seymour Papert, and others like Sherry Turkle and Mitchel Resnick, whose visions for “situated constructionism” in technology education, though decades old, have yet to be fully realized.26

The assignments in this book have been chosen with these criteria in mind, offering opportunities for personalizing, weirding, debating, and queering computation. Each is elaborated in a syllabus module that includes variations for differing skill levels or learning objectives. Each places equal importance on the cultural valence of computer technologies, codecraft, the subjectivity of the practitioner, and awareness of historic lines of inquiry. These prompts make space for diverse and personalized work, and aim to preserve the student's dignity, curiosity, whimsy, and criticality in an educational landscape where students are all too often asked to create (or worse, re-create) bank software. Importantly, the assignments in this book are also language-agnostic, allowing students to develop responses using whichever programming toolkit is preferred.



To demonstrate some of the ways in which these assignments can be approached, we have illustrated these modules with art and design projects selected on the basis of their pedagogic value: that is, not only for their excellence as projects, but also for how easily they can be explained in a classroom setting. The exemplars in our illustrations are thus not intended to articulate a canon of computational artworks and design projects, but rather to support a canon of assignments. Where we have omitted classic and influential works of media art or design—and there are so many—it is for this reason. Likewise, the high value we place on explicability also underpins our occasional inclusion of little-known projects by students.

We acknowledge that the landscape of software-based creative practices is vastly greater than the scope of this book. So too are the ways in which these themes can be approached. In selecting examples to illustrate each assignment, we have attempted to represent a diverse range of practitioners. But there is much more work to be done. As Heather Dewey-Hagborg has noted, “The intersection of arts and technology brings the worst of both worlds together. The tech industry is so white male, and the art world also prioritizes white men. But then, when you put those two together, it's like it just explodes.” 29 This has significant implications for who identifies as being able to work creatively with software, and we emphatically affirm the ongoing need to diversify who is represented in lectures and syllabi as an essential part of dismantling the systemic racism and sexism in our institutions and cultures.30

Giving space to a multitude of voices and perspectives is not only critical for counteracting the obliviousness of those in positions of power to understanding the potential risks or harms of what they design,31 but also for what Kamal Sinclair calls “democratizing the imagination for the future.” 32 Both are urgent challenges in hybrid fields where computation and the imagination come together. However, attempts to address these biases in isolation still leave other shortcomings in place. We acknowledge, for example—as we write within elite universities on the East Coast of North America—that this book emerges from our particular context, and that it reifies the myopia of the communities in which we participate. We also recognize, with humility, that vocabularies and values inherited from the arts can guide the way: art gives us tools to reveal partial perspectives, acknowledge subjectivity, transform how we see, and address unjust power relations. Taking inclusion as a starting point, creative coding pedagogies can offer a powerful way to address these histories and futures, broadening how programming skills are taught, why they matter, who is positioned to use them, and how.


In addition to providing resources for assignments and lectures, this book also provides strategies for sustaining classrooms that minimize frustration and maximize the freedom to make mistakes. We recognize that developing fluency in a new medium can demand silencing one's inner critic, at least for a while. Computing technologies, in particular, are often discouragingly brittle and impersonal, making the hurdles of creative work even steeper. In an educational environment, methodologies from traditional computer science classrooms (such as emphasizing solitary work policed by plagiarism detectors) can exacerbate individual frustration and erode group morale.34 The creative coding educator, in addition to explaining interdisciplinary techniques and showing inspiring projects, must also be sensitive to the mood of their classroom and students. As author and educator bell hooks observes, the necessity of actively orchestrating the emotional dimensions of a classroom is often overlooked. For hooks, excitement, “generated by collective effort,” reinforces a group's mutual investment in each other's work and is a key ingredient in establishing an environment that is conducive to learning, empowerment, and transformation.35 The Classroom Techniques and the Interviews sections of this book compile the wisdom of numerous educators regarding how they build classroom communities and help individuals cope with frustration. These sections share techniques for guiding arts practitioners who do not necessarily identify as programmers through their initial fear and inevitable frustrations.

How This Book Is Organized

This book contains three primary sections: Assignments, Exercises, and Interviews.

Part One, Assignments, is a collection of syllabus modules. Each module is built around an open-ended assignment or project prompt. These are recurring and even “classic” project briefs, collected from dozens of our peers and mentors, that we have received, tested, adapted, or observed over the course of more than two decades in higher education. Although loosely ordered by difficulty, the modules may also be grouped by their emphasis on key concerns in computational arts and design, including:

Each module includes a Brief that summarizes the artistic prompt; Learning Objectives, which define the goals of the module in terms of demonstrable skills or knowledge acquisition; Variations, a set of easements and further opportunities for experimentation; and a short essay, Making it Meaningful, that serves as a guide to understanding the assignment's significance, challenges, and potential avenues of approach. An illustrated collection of annotated examples of historic and contemporary projects—our touchstones—demonstrate how different artists and students have previously approached the assignment's premise. An appendix on the provenance of these assignments provides more information about their history and (where possible) their original authors.

Part Two, Exercises, consists of short programming prompts that hone the mastery of specific technical skills, while remaining idiomatically relevant to artists and designers. These exercises develop the student's skills in the use of computational techniques to control elementary visual (or in some cases, auditory or textual) patterns and forms, and may be assigned as homework or as in-class activities. Although the exercises grant some latitude as to the specific details of their implementation—they have no single correct solution—they are nevertheless written to make both perceptual and technical evaluations possible. One exercise on the theme of iteration, for example, requires the student to write code that generates the alternating squares of a checkerboard. The exercises are organized into topical sections, including conditional testing, iteration, typography, and visualization, and they range in level of difficulty.

In creating a compendium of assignments and exercises, we have taken inspiration in and comfort from several key precursors: Draw It with Your Eyes Closed: The Art of the Art Assignment, by Dushko Petrovich and Roger White (2012); Taking a Line for a Walk: Assignments in Design Education, by Nina Paim, Emilia Bergmark, and Corinne Gisel (2016); The Photographer's Playbook: 307 Assignments and Ideas, by Jason Fulford and Gregory Halpern (2014), and Wicked Arts Assignments: Practising Creativity in Contemporary Arts Education, by Emiel Heijnen and Melissa Bremmer (2020). Each is a kind of pedagogic potluck for their respective creative spheres and showed us how a book could bring together projects, exercises, and approaches from a field of practice. These books also demonstrate that there is no one-size-fits-all way of designing a curriculum or running a classroom—as confirmed by the educators whose varied and even contradictory advice is shared in our next section.

Part Three, Interviews, presents thematically organized conversations with thirteen diverse and renowned educators. In this section, instructors like Dan Shiffman, Lauren McCarthy, and Taeyoon Choi speak to the practical, philosophical, and spiritual challenges of teaching expressive and critical studio arts through the often unwelcoming toolsets of software development. Underpinning many of our questions is a concern for how education might repair the persistent split between the sciences and humanities:36 How can we encourage “heart” in the midst of technical education? What pedagogic strategies are necessary to teach technical material to artists? How do you corral students with diverse skillsets? These questions are unique to the hybrid nature of computational art and design, and they reveal themselves in a particularly stark way when the educator must rapidly oscillate between teaching art and math. In their responses, our interview subjects offer nuts-and-bolts advice for software arts instruction, as well as broader strategies for interdisciplinary education.

Take This Book and Run with It

At first glance, it may seem curious that in a book about coding pedagogy, there is no code to be found. For those interested, we have provided an open code repository online that contains solutions to our exercises in several popular programming languages, as well as helpful “starter” code, where possible, for the larger, open-ended assignments. There are two reasons why we have not provided code in the pages of this book itself. The first speaks to the trade-off that occurs when students are provided with starter code: on one hand, it gives them a head start, but in our experience, it also dramatically narrows the students’ imaginations and the scope of the resulting projects. The second reason, more importantly to us, concerns the longevity of this book. In not tying the assignments to specific programming languages and development environments, we hope to preserve their relevance as generations of platforms inevitably come and go. We will be updating our online code repository as technologies change, and we warmly invite contributions from those who wish to port or extend our examples to topics and toolkits outside our own expertise.

Whether you are teaching or learning creative coding in your kitchen, in a school or at a university, in an arts program or in a STEM field, with others or by yourself—we believe there will be something here to enrich your experience. We can't wait to see what you or your students make.

Notes