I have been teaching and researching Aesthetic Programming since 2014. It is both an undergraduate course and a subject matter to make sense of having programming skills within arts and humanities. I found that there are a few challenges or questions that I might need to address:
First, programming is used to belong to science disciplines, why do students need to learn to program if they do not want to be programmers or creative coders in their future. This leads to the second question: what does it mean by learning to program in the arts and humanities, and if the motivation is different from those in science disciplines, how can programming be taught differently? Lastly, how to sustain the motivation throughout the whole semester given the fact that learning to program, or acquiring computational skills, is a long and sometimes a daunting process as if learning a new natural language. One may further ask, why do we need to introduce programming in arts and humanities , and this question perhaps relates to coding literacy (Vee 2017).
In this entry, however, I would rather address the question of ‘how’ to imagine a different way of approaching programming beyond the STEM perspective, in which programming is not just a means to solve problems, but also facilitates critical reflection and conceptual thinking on real-world phenomena, in particular, the pervasiveness of computational culture and its social and political effects.
Indeed, computational thinking is not something new and scholars have already set some of the groundworks. Seymour Papert’s influential book Mindstorms from 1980 introduced “computational thinking” to children’s learning, emphasizing the practice of constructing procedures with the early programming language Logo (which does not simply use software as a tool), aiming to bridge the gap between mathematics, the culture of science and education as well as a social critique (Papert 1980). Jeannette M. Wing considers computational thinking as a kind of analytical skill, and it is important to learn computational concepts to “think like a Computer Scientist” (2006). In many of her talks and papers, she addresses computational thinking in the fields like Biology, Astronomy, Medicine, Neurosciences, etc. I am wondering how does computational thinking relates to more humanistic subjects, such as literature, digital design, aesthetics, cultural studies, and critical theory.
The field of creative coding emphasizes the expressivity of computer programming beyond the engineering perspective, which is something not just pragmatic and functional (Maeda 2004; Peppler and Kafai 2009; Wardrip-Fruin 2012). Creative tools like Processing, OpenFrameworks, and p5.js have been integrated into the educational curriculum in which the courses often named as creative coding/computing. Such courses foster experimentation and explore the creative uses of computing to express ideas with the usual outcomes of producing visually engaging sketches or interactive installations. Scholar and artist Michael Mateas sees this expressive power of computation too and draws upon A. J. Perlis to examine the critical role of computers in the development of intuition and sensitivity (Mateas 2005). As an educator, he observes that there is a tendency for programming course focuses on “technophilic culture” but “disconnected from broader social and cultural issues” (ibid). In this way, many programming courses, nevertheless, reinforce the divide between art/humanities and science/engineering. He calls for “an alternative CS curriculum”, and it is precisely this thinking that poses further challenges in developing the alternative: how to queer technical processes and border cultural issues, theory and practice, doing and thinking. I believe this alternative thinking opens up a huge interdisciplinary research area, not just STEM, STEAM, Computational thinking and Coding literacy, but at the core of the struggles: What to emphasize more, what to include and exclude, and to what extent the technical information is enough to build a program/sketch while the cultural articulation is relevant enough to open up wider critical reflections.
In 2017, I had organized a five-hour feminist coding workshop in Aarhus (Denmark), which was organized by artist Anders Visti. We had 8 participants from diverse backgrounds, including an artist-graphic designer, a curator-researcher, a social scientist-researcher, a photographer-researcher, a media artist, and three digital design students from Aarhus University. It was my first time organizing the so-called ‘crash coding workshop’ with the aim to introduce basic coding concepts, as well as to explore code as expressive and aesthetic materials to women, queers, LGBT, non-binaries, and minorities who do not have any prior programming experience.
Artist Lauren McCarthy founded the project p5.js in 2014, with support from Processing Foundation, Interactive Telecommunications Program at New York University, as well as many other contributors. McCarthy observes that there is a lack of diversity in the open-source environment, and the values behind p5.js are to prioritize community outreach and diversity. She says, “thinking about community outreach and diversity is not a secondary goal of p5.js, it’s the foundation on which the platform is built.” (McCarthy, 2015) As a woman working in the technological sector, McCarthy organised and participated in many feminist groups and discussions, including but not limited to Scope Lab in the Centre for the Study of Women and VoidLab in the Design Media Arts Department at University of California, Los Angeles. Additionally, p5.js as a platform has a subdomain called “diversity.p5js.org”, which is a project created by Chelly Jin who promotes the visibility of various identities through organizing different activities, such as The Interactive Book Club and showing works and interviews by Asian women and gender non-conforming coders. By elaborating the background of p5.js, I advocate the importance of designing for difference that would cultivate a more inclusive and diverse environment, where the values behind p5.js are one of the important considerations. Choosing and using software is not just a practical consideration nor a tool to do and make something, but also about people and politics as demonstrated by p5.js.
I have developed an artwork/ e-literature/ digital poetry/ web art called Vocable Code (Soon 2017), exploring computer code as linguistic and expressive materials, and the project is regarded as an essential part of the feminist coding workshop. Vocable code examines the notion of queerness in computer coding. Through collecting voices and statements from others that help to complete the sentence that begins: “Queer is…”, the work is computationally and poetically composed where the texts and voices are repeated and disrupted by mathematical chaos, creating dynamic audio-visual literature. Behind the executed web interface, the source code is deliberately written as a piece of Codework (Sondheim 2001; Raley 2002), mixing a computer programming language and human-readable language that explores the tension between computational constraints and language poetry.
Indeed, the constraints regarding not only incorporating computer syntaxes and functions, such as for-loops and if-else statements but also the resistance of binary logics that have been informed by Feminist Software Foundations, philosophers Sadie Plant (1997) and Judith Butler (1990). Fundamentally and technically speaking, 0s and 1s are the basic binary digits that structure how a computer functions and how the code is executed. All the semantic layers of code are ultimately reduced to such a mix of binary numbers for machine execution and processing. Functionally, source code can be considered as written instructions that are translated into binary code for a computer to perform certain tasks. To talk about computer code, there is, essentially, another layer of interpretation from source code to machine code (also known as bytecode), yet it is computationally impossible to escape binary logic.
From the invention of digital computers to contemporary computation, the design of computer infrastructure, programming languages and algorithmic decisions are technically structured and written in the spirit of absolute and concrete logics without any ambiguity. Provided that if there is a fulfilment of a clear and concise condition, then the computer will execute a pre-defined path and perform certain actions as stated basically. This is how an if/else conditional statement works in computation, and it promotes a particular style of writing and thinking as binary: on or off, true or false, yes or no, something or nothing, this or that, which is ideally nothing in between, or nothing can be undecided, or nothing as non-binary. This binary computational thinking is influential and powerful, forcing us to think in dualism, both implicitly and explicitly.
In view of this, the source code of Vocable Code is a written poetry, which is an attempt to think through the cultural implications of binary logics. Inspired by the feminist programming language C+=, Vocable code avoids the writing of source code with binary 0 or 1, a single x or y, and a single operator with < or >. Obviously, setting these rules does not mean that this is an attempt to avoid binary thinking entirely, which is computationally and conceptually impossible. However, as the author of the project, I decided to work with these struggles that express and make a point in the form of Codework by having written constraints and paying attention to the naming of computer syntaxes, such as the names of variables, arrays and functions. This is what I consider as a form of queer code, which is a constant unsettling and questioning on the binary thinking and logic, both culturally and technically.
Vocable code explores the voices of both human and nonhuman bodies, producing speeches by the author and other participants through computer and data processing. There were various activities involved as part of the feminist coding workshop. The first activity was called “Decoding, Reading and Interpreting Code and Logics”, which is a reverse engineering of computational logics that is based on what one can see and hear, from visual representations to sequences of logics and things that have changed over time.
Participants were then required to map the identified items and logics with the source code. The source code is intentionally written in a format where one can possibly read, guess and interpret some of the functions and meaning. Code reading and interpretation hint at how a program is designed and how an algorithm is expressed and performed through time. While asking novices to write code, I consider reading and interpreting code as a pre-requisite to writing code.
After the first activity, I introduced some basic concepts of code, such as the structure and syntax of p5.js, and how functions and conditional statements are written. Given that there was a general understanding of Vocable Code, the basic code concepts became easier for participants to grasp and learn. They were able to do this via a concrete piece of software that has already been introduced.
Encountering errors is one of the most common experiences for coders and it is beneficial that errors could be traced, located, and understood easily through the browser’s web console. Reading errors is also a way to understand how things work or not work, as well as revealing some of the underlying logic and infrastructure. The second activity was working with errors. By tinkering with code, it was an iterative process of trial-and-error by changing some of the code parameters and naming. Participants refreshed their browsers after changing the code in a code editor, and the results gave a closer sense of the meaning of some computational values and functions. They first started by focusing on changing numerical values, such as the color of text and background, size and speed of the text, as well as values in random functions. It was then followed by exploring the semantic and poetic aspects of code by modifying some of the names, such as the font variable “withPride” and other variables and arrays such as “queers”, “WhoisQueer” and “whatisQueer”. The later activity was meant to highlight the discrepancy and conflation of both human and computer languages.
The whole feminist workshop was very hands-on on the one hand, but it was also very much driven by the discussion on the other. Since we had few participants who were interested in poetry, literature and design, the environment was mobilised with active participation and reflexive discussion. We discussed what poetry is, what constitutes poetry, and what might be the aesthetics of Codework. Under the bigger question of the title of the workshop: Can software be feminist? it opened up the thinking about what it meant by feminist coding and feminist software.
We considered performing the Codework by reading the source code aloud as a form of embodiment. One of the participants said that the explanation of some of the computational logics is indeed difficult to avoid the binary thinking. The Vocable Code is designed with a particular way of computational thinking, where things are broken down into blocks and discrete units that are structured in sequences as the program is run and unfolded. This step by step problem-solving technique has a wider consequence, from technical implementation to the cultural experience of Vocable Code. Similarly, binary thinking and logics are more than mere technical implementations, “they are the infrastructure to its superstructure: not another order of things, but another mode of operations altogether” (Plant 1997, 50). There might be a danger of simplifying the real-world phenomena with binary thinking and operations, where we may forget there are many other in-betweenness that cannot be simply regarded as oppositional binary, such as true or false, right or wrong, yes or no, female or male, feminine or masculine, science and humanities, technical and culture.
After reading and tinkering with code, the final activity was named “Writing, Thinking and Creating your own Vocable Code”. It was designed to incorporate the previous discussion about the aesthetic of code and poetry, allowing the participants to explore their own form of Codework. From the most basic level of adding their own voices and statements to sketching the whole new algorithm about Vocable Code, the workshop ended with the brief introduction of various further learning resources on coding and theoretical readings on code poetry and feminism. This format of the workshop, at least, demonstrated some of the essential elements to approach coding practice, including both reading, writing and thinking with and through code. Such an approach as I called Aesthetic Programming addresses both the cultural and aesthetic dimensions of code, as well as technical coding practice.
The book cover of Aesthetic Programming: A Handbook of Software Studies, 2020
Such notion of Aesthetic Programming constitutes the book title “Aesthetic Programming: A Handbook of Software Studies” that Geoff Cox and I have co-written together in the last two years (Soon & Cox 2020). We want to develop a whole curriculum for “alternative CS”, or a handbook across disciplines, that explores the technical as well as cultural imaginaries of programming. It takes a particular interest in power relations that are relatively under-acknowledged in technical subjects. For example, in the chapter “Vocable Code”, which is further developed from the mentioned workshop, we pay close attention to notation and computational structure, exploring the poetic relationships between program code and natural language. With a particular focus on voice, we reflect on how the human subject is implicated in coding practices and how coding itself can voice wider political issues. As such, the book addresses how power differentials are implicit in code in terms of binary logic, hierarchies, naming of the attributes, and how particular worldviews are reinforced and perpetuated through computation.
In thinking about openness and inclusivity in learning and teaching, we do not just only make this Aesthetic Programming book as free and open-source materials , but also encourage readers to fork a copy and customize their own versions with their situated chapters, topics, examples, references and reflections. As I have mentioned earlier, such queering of disciplines should have many ways of doing it, and what we need is to open up the research area and allow more experimentation and intervention to bridge the divide of art and science, or even the theory and practice division within humanities. The book then is transformed from a single way of an instructive object to a more participatory and community project that is opened for modification and re-use. Aesthetic Programming refers to the engagement with coding/programming to question existing technocultural paradigms and further create changes in our environment.
 This short essay was first developed in 2017 and adapted from the initial blog post titled “A Report on the Feminist Coding Workshop in p5.js”
 See Montfort, Nick. Exploratory Programming For the Arts and Humanities. Cambridge, MA: The MIT Press, 2016
 See the GitLab repository: https://gitlab.com/aesthetic-programming/book/-/tree/master/source
- Butler, Judith. Excitable Speech: A Politics of the Performative. London: Routledge, 1997.
- Maeda, John. Creative Code: Aesthetics + Computation. London: Thames & Hudson, 2004.
- Mateas, Michael. “Procedural Literacy: Educating the New Media Practitioner.” Horizon 13, no. 2. June 1 (2005): 101–111
- McCarthy, Lauren. “Learning While Making.” YouTube video, 27:31. Posted by “BocoupLLC,” April 16, 2015.
- McPherson, Tara. “Designing for Difference,” A Journal of Feminist Cultural Studies, 25(1), 2014.
- Papert, Seymour. Mindstorms: Children, Computers, and Powerful Ideas. New York, NY: Basic Books, 1980
- Peppler, Kylie A., and Yasmin B. Kafai. “Creative coding: Programming for personal expression.” The 8th International Conference on Computer Supported Collaborative Learning (CSCL) 2 (2009): 76-78.
- Raley, Rita. “Interferences: [Net.Writing] and the Practice of Codework,” electronic book review, 2002.
- Sondheim, Alan. “Introduction: Codework.” American Book Review 22:6 (September/October 2001): 1, 4.
- Plant, Sadie. Zeros + Ones: Digital Women and the New Technoculture. London: Forth Estate, 1997
- Soon, Winnie., and Geoff Cox. Aesthetic Programming: A Handbook of Software Studies. London: Open Humanities Press, 2020.
- Soon, Winnie. “A Report on the Feminist Coding Workshop in p5.js.” Aesthetic Programming, Last updated November 30, 2017
- Soon, Winnie. Vocable Code. 2017
- Vee, Annette. Coding Literacy: How Computer Programming Is Changing Writing. Cambridge, MA: The MIT Press, 2017
- Wardrip-Fruin, Noah. Expressive Processing: Digital Fictions, Computer Games, and Software Studies. Cambridge, MA: The MIT Press, 2012
- Wing, Jeannette M.. “Computational Thinking,” Commun. ACM 49, no. 3 (March 2006)