Esolangs: Deprogramming the Language Divide
English has operated as the lingua franca of coding for over half a century. Even in instances where non-English speaking coders are writing software in non-English speaking countries, it is common to encounter programming keywords in English. This is despite the fact that all comments, variables, and user defined classes are usually written in the programmer’s native language, where they must quickly switch between a native and foreign binary during development. Is this really the most efficient way for non-English speakers to write software?
A Note on the Recipe
To be perfectly clear, not every programming language features English. We have a variety of programming languages written in and representing a large swath of spoken languages such as Arabic, Bengali, Chinese, Dutch, French, German, Greek, Hebrew, Hindi, Indonesian, Japanese, Korean, Latvian, Persian, Portuguese, Russian, Spanish, Tagalog, and Urdu, to name a few. In fact, a number of programming languages invented in non-English speaking countries boast a fair level of recognition on the international stage of coding, such as Python (Dutch), Ruby (Japanese), and Lua (Brazilian). So why aren’t Python keywords in Dutch, for example?
Part of the issue is that many programming languages developed in non-English speaking countries are commercialized in English to appeal to an international audience. For example, PASCAL is a language which was developed in Switzerland by the Swiss computer scientist Niklaus Wirth. Instead of using any of the four national languages of Switzerland at the time, English was chosen as the premiere language to support the project. Given the present commercial and cultural dominance of English, this is unsurprising. Even before industrialization, British colonies used English as a tool of imperialism and colonization, with this legacy reaching deep into the history of the United States. By the end of WWII, English was established as the bridge language for all diplomatic, economic, and scientific affairs. Of course this influence has continued into present-day technology, where English-based programming languages quickly became the norm. According to the HOPL online database of languages, English programming languages account for roughly 3,235 of all 8,500 programming languages recorded1. Knowing this, how does one begin to imagine an alternative to English based programming languages?
I offer this quote by Kimberle Crenshaw, where she describes intersectional feminism as, “a prism for seeing the way in which various forms of inequality often operate together and exacerbate each other”.
If we apply intersectional feminism to the issue of linguistic inequality in computer programming, we are able to take a step back and digest the whole. The first thing to recognize is that we are already deeply mired in a capitalist system that perpetuates the use of English in programming languages to access commerce, higher education, and a livelihood in the wealthiest nations. While this is inherently colonial and classist at its core, it stands at odds with the simplest definition of a lingua franca, which aims to act as a common language between nations for the benefit of exchanging diplomacy and research. Is it even possible to maintain the ideals of a lingua franca without soft-imperialism threatening to undermine it?
As we sit with that thought, I invite you to entertain two possible alternatives to English-based programming languages:
First, the development of a work culture that centers the localization of programming languages to support native-language character encoding and built-in operations (e.g. Chinese Python), or second – the abolition of English as the lingua franca of coding and the installment of an esoteric programming language in its place.
Are these the only two possible alternatives to our problem? Of course not! I am merely pausing on these possibilities because they serve to decentralize English-based programming languages while suggesting that the task of language acquisition be evenly distributed across different nationalities. This is an ongoing conversation and I urge you to add your thoughts to this list.
Moving forward, I’d like to introduce esoteric programming languages (a.k.a. esolangs) to the mix. In essence, they are a type of programming language designed to be Turing-complete2 while simultaneously testing the boundaries of programming language design itself, as either a proof of concept, software art, or meme. Most esolang creators don’t intend for their languages to be adopted by working software developers; the endeavor of esolangs concern themselves with less utilitarian goals.
According to Geoff Cox, esolangs are experiments that seek to “shift attention from command and control toward cultural expression and refusal”3. Take for instance Brainfuck, an esolang designed for extreme minimalism with only 8 usable characters. This is an example of using Brainfuck to print out the word “Hello World!”:
Brainfuck has been described by Daniel Temkin as “refusing to ease the boundary between human expression and assembly code and thereby taking us on a ludicrous journey of logic”4. These statements are indicative of esolang culture as a whole, which concerns itself with the inherent conflict between computer logic and human thinking. In our attempts to translate machine code into human readable code, we abstract a numerical language into common linguistic typologies to help human programmers read code as if they were reading a sentence or book.
However, there are many possible ways to abstract this machine language into human readable signifiers that do not even necessitate the ability to read, let alone being able to read English.
We already use systems of abstraction such as visual programming languages to code elements graphically rather than textually; and when looking at esolangs that push the boundary of Turing-complete thinking, it really does feel that technically any system is possible, or at least possesses the freedom to be arbitrary.
So what is keeping us from inventing esoteric programming languages that democratize the task of language acquisition for all? With the right tools and creativity, it feels very possible to design a unique coding language standard that does not rely on the syntax of English. I believe it is in our hands (and well within our ability) to reimagine an equitable future for the lingua franca of code.
This recipe is designed to act as a discursive lab where participants propose speculative solutions to the ongoing issue of linguistic inequality in contemporary programming languages.
While this works well in an academic setting, this recipe is appropriate for any community interested in interrogating the white, western, and rational discourse surrounding English-based programming languages, through the context of creative coding, historical linguistics, speculative design, UX/UI, and intersectional feminist critique.
Please prepare the following ingredients:
- An introduction to the history of linguistic inequality in computer programming
- An introduction to esoteric programming languages
Once the ingredients are in place, you may mix in the following elements to facilitate a group discussion:
- How do you feel about learning code based in your native language?
- How do you feel about learning code based in a foreign language?
- Do you think that having a lingua franca is useful for society? Do you think it is useful for programming? Why or why not?
- How do you define “human-readable language”? What rules must “human-readable” languages follow?
- If you were to design a new lingua franca for code, what qualities would it need to remain equitable?
- What are the limitations of designing a lingua franca for code?
Esolang Design Activity
This is an optional activity, recommended for participants who have some background in programming. Each participant will need a pencil, paper, and colored markers. Split into working groups and draw up an original concept for an esoteric programming language (esolang) or visual programming language interface that addresses any or all of the following:
- Multilingual support
- Illustrative or skeuomorphic characters and symbols
- Alternative lingua franca solutions (e.g. tactile-based esolangs, shape/color-based esolangs, etc.)
- Absurdist translations of machine language to human-readable language
It is not expected that you create a Turing-complete syntax in this exercise. The goal is for you to expand your notion of what a linguistically equitable programming language might look and feel like, by illustrating a simple GUI with example elements. One easy place to start is to imagine what a “Hello World!” input and output would look like in your programming language. Alternatively, if you’re more comfortable with working off an example you are familiar with, you might draw an example of multilingual support options integrating into the programming language you know best. The idea is to have fun and allow yourself to see possible solutions to this problem, as they certainly exist!
Once complete, please gather back together and share results :)
According to Google software engineer Mark Harrison, the term Turing-complete may be defined as, “a system in which a program can be written that will find an answer…so, if somebody says ‘my new thing is Turing-complete’ that means in principle (although often not in practice) it could be used to solve any computation problem”. ↩
Cox, Geoff (2013). Speaking Code: Coding as Aesthetic and Political Expression. MIT Press. ↩
Temkin, Daniel (15 January 2014). “Glitch && Human/Computer Interaction”. NOOART: The Journal of Objectless Art. ↩
What is the context or background that inspired your recipe?
When my Japanese father and Mexican great-grandmother immigrated to the United States, they relinquished their native tongues to learn English. I am now a multi-racial programmer working in education – helping others with machine language retention everyday – and yet I have no linguistic connection to my own culture. The pain of this loss is not uncommon amongst the children of immigrants, and I found myself interrogating this lack in other aspects of my life as a programmer. Given that English has colonized the world of code, how do we move forward in a way that minimizes linguistic inequality and/or retains the cultural roots of established and emerging programming languages?
Which community are you offering the recipe to?
This recipe is offered to anyone with an interest in coding. My hope is that it will inspire you to contextualize the languages you learn or teach. There is a common misconception that English coding languages are neutral because they equalize all users – the argument being that everyone needs to learn the same syntax. But the real conflict lies in who dictates that syntax, and for who the syntax serves. English programming languages as a de facto solution to globalization is a reflection of that power disparity.
How does your submission relate to intersectional feminism?
Let’s assume you are learning Python for the first time, and you do not know English. Your learning experience is going to be radically different from someone who is a native speaker, right? Add gender, race, class, etc. to that equation and you begin to have a multitude of very different experiences. We all begin our education of computer languages at different starting points, with differing amounts of privilege, discrimination, and access. We need to examine our own stake in the English colonization of computer languages in order to explore solutions that are cognizant of the experiences of others. This constant negotiation is rooted in intersectional feminism.