By Jon Corbett • Photos Courtesy of Jon Corbett
Indigenous Peoples have long experienced the effects of colonialism, including displacement, loss of land and resources, and the suppression of their languages, cultural practices, and knowledge. When we think about those effects in the context of the development of computing and other technologies, the current impact becomes clear. Colonial constructions—which include programming languages, like Javascript, Python, and HTML—continue to prioritize the interests of Western cultures while disregarding the perspectives and experiences of Indigenous Peoples. Programming requires a critical examination of the impacts of this behaviour and possible solutions, one of which could be indigenization and decolonization.
The acts of indigenization and decolonization aim to address this legacy of colonialism in two ways. Firstly, by elevating the cultural, economic, and political status of Indigenous and marginalized peoples, and secondly, by dismantling the dominant political, economic, and colonial power structures in contemporary society.
In developing my own programming language for nehiyawewin (the Plains Cree language), I found that it is more than just the hegemony of English in programming that is an obstacle. One roadblock is the way computers are meant to reward speed. Computers follow instructions in a sequential fashion, where efficient code means the actions are performed faster. However, speed and efficiency do not necessarily fit in with Indigenous worldviews of time and order, nor do they reflect the importance of the relationships between the user and the system.
Additionally, I have always seen coding as a way of telling a story that a computer can understand. To tell a story, the storyteller not only has to use the correct language but they must also understand the unique meanings and structure of that language. Attempting to replace computing logic with literal nehiyawewin terminology would be a form of cultural appropriation. Therefore, to create an Indigenously informed programming language, we must fundamentally change how we think of programming. Human languages contain a culture’s meaning and knowledge and programming languages can work the same way.
Many Indigenous Peoples speak of the sacredness and importance of their languages, often stating, “our language is medicine.” Therefore, it follows that, if we wish to use an Indigenous language for coding, we need to treat the coding space as sacred and the act of coding as medicinal. Promoting culture can be used as a way to add representation into coding and programming languages. However, this requires a shift in computing philosophy. Currently, programming works on a system focused on inputs and functions. In this case, cultural metaphors, knowledge, and traditions could stand in as programmatic inputs and functions. For example, in my acimow/Cree# language, I introduced smudging, the act of burning herbs to purify and protect bodies and spirits, as a computational function. Programmatically, this digital smudging clears the physical and cached memories, initializes peripherals, and clears the screen. Essentially, it prepares the system to execute a program in an environment free of latent data that could negatively impact it.
Additionally, many languages used for computer programming use typical syntactic constructions, which can be described as a set of best practices the code must adhere to. Two such constructions are the conditional statement, sometimes called an “if … then” function, and the loop statement, sometimes called a “do while” or a “for … next” function. A conditional function evaluates whether a statement is true or false and the answer determines the next action—or inaction—executed by the code. Loop constructions are used to execute a sequence of instructions a specified number of times or until some specific condition is met.
The challenge with translating these programming constructions into Indigenous languages is that many First Nations languages in the Americas are polysynthetic, meaning their word constructions may create very long words by stringing together multiple short words (morphemes). Therefore, logical language statements in English, such as “if a = b then c,” may not be logically or syntactically valid in a First Nations language. My remedy for this problem with language representation has been to use culturally relevant metaphors that incorporate Indigenous knowledge into the world of programming.
For many Indigenous cultures, water is life-giving and sacred. Running water sources, like rivers and streams, symbolize the continuity of life. In programming with acimow/Cree#, the word sîpiy, the nehiyaw word for “river,” is used instead of the English “if … then” statement. In this context, the code is presented as a river of instructions allowing the programmer to flow the story in the code along a digital waterway that can branch into sîpîsisa–smaller rivers or creeks–as needed. I use a similar analogical process for representing loops in the code.
In the harsh winter climate of Northern Alberta, where I am from, nehiyaw people count winters to determine age. For example, “niyânanomitanaw nîsosâp nititahtopiponân” translates as “I am fifty-two winters old.” Age, in my culture, is a way of declaring one’s resilience and strength in surviving the harsh climate and extreme cold of the season. Additionally, winter is a season that is cyclical and progressive. We do not endure the same winter every year; each winter is new and different winter each year. This cultural model is very similar to programming loops in the computer. In a program loop, each iteration typically advances the elements within the loop in some way, similar to the way each winter symbolizes aging in nehiyaw culture. For programming in acimow/Cree#, the nehiyaw word pipon (and some of its conjugated forms), which means “winter,” is used as the looping mechanism for programming. So instead of saying “for x = 1 to 10,” a programmer would type “mitâtaht pipona,” or “for ten winters,” and the code that follows this instruction would repeat ten times.
Ultimately, Indigenously informed computer programming is not just about giving instructions to the computer. The human-computer interaction (HCI) model must be reframed as a kinship-computer interaction (KCI) model. All programming involves a relationship between the coder and the machine but should be especially present at the heart of an Indigenous computing philosophy to respect the values of that culture. There is a common understanding that programming languages—our way of communicating with computers—act as vehicles for cultural knowledge, which is encoded in the machine through coding. The result is a digital reflection of Indigenous life and knowledge. Using this perspective, we transform the computer from a binary of opposing ones and zeroes to a wholistic, unary system of animacy whose digital inner workings continuously reflect animate and inanimate worldviews of the culture with which it is communicating. In doing so, we create computing technologies infused with cultural representations of the creators behind them and the users in front of them.