Meredith Finkelstein surveys key methodological aims of CCS, and considers the ways attending to code can enrich understanding of digital works, looking specifically at digital artist and programmer Eugenio Tisselli’s code for Amazon.html
Software as Literature
In 2006 Mark Marino released his Critical Code Studies Manifesto. This essay laid the groundwork for a recognized field of Critical Code Study: reading code as a work of literature. Everything involved in creating software, the code, the comments, the repository commit messages, the data structures, can be objects of interpretation.
I am writing this in the middle of the COVID-19 pandemic, unemployment is high, but people are hiring COBOL developers. The unemployment insurance machines are in COBOL, and they are breaking. There are technical reasons why these systems are failing. What else will we find?
From the perspective of Critical Code Studies (CCS), we can ask about the personal or cultural assumptions inherent in the unemployment insurance system’s COBOL code. More specifically, what are ideas about economics and society embedded in the unemployment insurance system’s computer code and COBOL? We can expand this and ask how a programming language reinforces certain cultural assumptions or practices.
In the introduction to this gathering, Douglass and Marino state, “Code is a social medium, and its meaning is also a social act.” Even something as simple as the use of English to write code reveals a particular power dynamic and cultural hegemony at work. As a result, the study of code is the study of society: we can look at code from the perspective of social sciences such as economics or anthropology and examine the power structures or biases implicit within code itself to understand society better.
CCS Week One - Our relationship with technology
Most of the discussions during week one hinge on the meta-narrative of CCS and how we frame Critical Code Studies. Do we bring techniques from other fields, like anthropology or literary studies? What belongs only to CCS as an interpretative process? Most of these comments are questions and explorations with no specific answers. But one question that gained some traction was: how does CCS affect our technology use?
Many software professionals participate in the Critical Code Studies workshop and weigh in on how CCS relates to their work. Barry Rountree, a computer scientist at Lawrence Livermore National Laboratory, notes that CCS reorients how he thinks about what he does but does not affect how he makes daily code decisions. A user known only by the name of ‘Stefkax’ comments that CCS allows him to gain a new perspective on the technology critical in his daily life. When we integrate the philosophy of CCS, we demystify code’s role in our everyday life and increase the conscious opportunity for code to impact our everyday life.
What is noteworthy about these comments is their psychological perspective. In asking what techniques we can bring from other fields, we can look to psychology to unpack critical code studies in response to these questions.
CCS Week One - Minification and The Document Object Model
In another Week One thread, the community discusses ‘Amazon.html,’ a piece of work by Eugenio Tisselli. “Amazon.html” was initially posted to Twitter on August 3, 2019. In Amazon.html, the source code is released as a series of fragments that do nothing. The user needs to combine the fragments, save them into an HTML file, and open the file in a browser. When the program starts to run, we see a random assortment of asterisks in shades of green that represent trees. These slowly are replaced at random by brown numbers. Numbers replace the trees at an accelerating rate until there are no trees left - only brown numbers.
We can interpret this display. Replacing trees with numbers can point to the commodification or quantification of natural resources. Replacing trees with numbers could represent the destruction of the rainforest. Tisselli writes on his website, motorhueso.net, “what is destroying the forest? It is the capitalist algorithm, execute by fascist war-men/machines.” In Critical Code Studies, we interpret the code. What code generates this display, and what does it mean?
Eugenio Tisselli created “Amazon.html” with the total awareness that people would analyze the code. For Tisselli, “code is the vector that transforms your desires into data... delivers them to the machine, and transports them through the full stack.”
A stack refers to the technology layers that support a program in programming. For example, there is the presentation that displays the graphics. There is the logic layer that determines the rules for displaying the graphics. A data layer provides data for the logic layer to process. Other layers exist, such as a transportation layer that sends data between machines and the hardware layer that provides the material substrate to execute the code.
We can look at Tisselli’s choice of graphics. We can situate the work within existing artistic discourses such as ASCII art or satellite photography. We can critique the algorithm. For instance, is Tisselli a coder critiquing deforestation with his choice of a random number generator?
Critical Software Studies start from the perspective that there is meaning to code, and to all the decisions around what programming languages are used. When we look at the code, we notice the programming languages are HTML, CSS, and Javascript. There is meaning to the fact that this code uses HTML, CSS, and Javascript. This code could have been written in something more esoteric like web assembly or something distributed as packaged as an executable, like an app installed on your computer. HTML, CSS, and Javascript signal that this is a more democratic program, that many people can run it and view the source code in their browser.
During the week one thread, a point discussed is that the source code is minified. Minification is a type of compression that reduces the load time of files by removing spaces and characters. Does the use of minification change our interpretation of the piece? A computer program normally minifies code, but in this case, Tisselli minified his code by hand. Marino asks in a thread how the minified code is similar or different from the non-minified code - and if computer minified code is different from artisanally minified code. He then asks, does this even matter, or does this change our interpretation of the piece? Unpacking this one point creates a network of interpretations.
The difficulty of reading minified code reflects our difficulty comprehending the scale of destruction of the Amazon rainforest destruction. For David Cuartielles, a workshop participant, minification changes the meaning of the code. He finds it as necessary as any interpretation we might make from the visuals and that it is a type of construction in its own right. Nick Silcox, another workshop participant, equates minification with unreadability and compression. He compares it to the feeling of unreadability and distance when watching videos of ecological disasters.
Tisselli situates this minification process within an artistic tradition. Tisselli references Milton Laufer, an Argentine writer who has written a series of computer-generated novels using minification. In one of the comments on the week one threads, Mark Marino reiterates that the form of the code is as meaningful as the code itself. We ought to pay attention to these minor differences, especially if we know that the artist did this intentionally - as in the case of ‘Amazon.html.’
Another discussion surrounds the topic of appendChild in the source code. Patricia S, another workshop participant, notes that the piece presents a threefold tension between trees, the human population, and increased data representation. She notes that the asterisks look like children, and the numbers at first look like people until the numbers start to take over. Marino asks whether the code ‘AppendChild’ influenced this interpretation.
AppendChild is a built-in javascript function available in every modern browser. HTML organizes elements on the page using the document object model, or DOM. HTML ‘tags’ structure the sequence and hierarchy of the elements in the HTML page. For example, the tag surrounds each asterisk. The tag surrounds each number. In the source code for this project, appendChild is the function that adds trees and new numbers to the page.
Here we have come full circle, integrating our code reading with our interpretation of the graphical display. This sort of interpretation is entirely native to critical code studies. When we read code in this way, we can explore different layers of experience and meaning. As we have seen in this brief discussion of the week one discussion, we can use this to reflect on our interaction with technology and to look at software as a creative artifact made by humans - and with the associated richness of meaning.
Works Cited:
Douglass, Jeremy, and Mark C. Marino. “Week 1: Introduction to Critical Code Studies (Main Thread).” CCS Working Group 2020, http://wg20.criticalcodestudies.com/index.php?p=/discussion/57/week-1-introduction-to-critical-code-studies-main-thread.
Marino, Mark C. Critical Code Studies › Electronic Book Review. 31 Jan. 2012, http://electronicbookreview.com/essay/critical-code-studies/.