I’m really glad that we read the Mataes and Montfort article, “A Box, Darkly: Obfuscation, Weird Languages, and Code Aesthetics,” this week. Having played some Dwarf Fortress (well, watched the game play itself while hitting some buttons might be a better description…), I think I was able to approach this article with a different perspective than I would have if we’d read it earlier–or, perhaps, much later, after the pain of DF had receded in my memory.
Since I started this class–heck, since I read the course description for this class!–I’ve been thinking about and trying to inquire into the ideologies that may/may not be embedded in computer programming languages. The easiest place to look seemed to me to be in the syntax, vocabulary, and general conventions of computer code. Programming languages seem to be concerned with vocabulary this is function-oriented (in most cases). In other words, common functions seem to be labeled according to their function, with an eye toward both the human and computer audiences. They seem to be structured around hierarchical logical structures, nesting subordinate operations under higher-order ones. Documentation/commenting is necessary in (from what I can tell) all languages, because even those that are most intuitive and human-friendly still aren’t clear enough to be immediately readable without clarification. It’s these generalizations that I suspect could give me a glimpse of the ideologies inherent in the languages.
Weird languages were appealing to me for this reason. Their function names are misleading. Their logics are structured differently, it seems. For example, Mataes and Montfort write, “INTERCAL has no simple if construction for doing conditional branching, no loop constructions, and no basic math operations–not even addition. Effects such as these must be achieved through composition of non-standard and counterintuitive constructs” (147-8). In other words, a composer of a program in INTERCAL has to think differently about what the code needs to do and how to get it to do that in a new way. This–I think–means a disruption of any ideology that might be implicit in traditional nested logic structures. Now, I’ve never seen INTERCAL and have no idea how these tasks are accomplished, so I can’t say for sure that they represent a different way of structuring thought or approaching tasks.
In the case of Malbolge, though, it’s quite clear that since the code self-modifies and a composer of Malbolge programs must “think about Malboge […] as a cryptographer” (151), approaching this language does require the composer of the code to think differently. In this case, she must not only think of the task to be accomplished and go backward from there, she must be totally aware of the medium she’s using, and of the eccentricities of the language. This is because the code is based on trinity (which I didn’t fully understand, to be honest), self-modifies, and only contains a few operations that are valid. Basically, to write the “Hello, world!” (or, HEllO WORld, in this case) program, Cooke had to think not just about what he was trying to do; he had to remember which operations were valid in Malbolge, what they would be converted into after going through their self-modification phase, and what the result of those operations would be. Clearly, this language creates no illusion of immediacy–it is written in order to draw attention to the obstacles presented by mediation.
This is all very cool and interesting. These “art languages,” as the article’s authors are tempted to call them, “are intended to test boundaries of programming languages and design” and “comment on features of existing, traditional languages” (138). They show us what is possible, like the creation of a programming language that only accepts 7 commands, but still possesses the universality that is so desired in programming languages (149). They draw attention to the silliness that might go unnoticed in some languages, like when INTERCAL highlights the absurdity of “DO” in FORTRAN. They’re critical and creative and ask programmers to think critically about programming languages and their peculiarities. I’m about to recommend that every programmer be required to play around with BRAINFUCK in order to understand the potential for minimalism, and then I remember…
All this talk of the possibilities weird languages create, especially the play that languages like Shakespeare afford the programmer, is great, but what about the free play that’s available in Dwarf Fortress? I’m told that I can create a civilization of happy little dwarves with their own jobs and their own desires to go out and scavenge from corpses. There’s limitless creative possibilities there. It sounds amazing. But here I am, not able to figure out which menu lets me change my Dwarves’ jobs. I’m relying on Wikis and videos and sometimes I’m just hitting buttons to see what happens. I’m not doing anything creative. I’m not even doing anything comprehensible. DF’s low-level graphics, difficult menus, and open-ended orientation are all great as far as the way they critique video games and their users–we rely on simplistic models for controls; we actually want to be “on the rails” with conceivable goals, trackable progress, etc. When you take away the intuitive, pretty graphics, we’re no longer able to interpret what we see because we’re not smart enough (I’m not smart enough, at least) to memorize the dozens (hundreds? thousands? MILLIONS!?) of symbols that DF uses. We want pretty things that are easy and provide us with regular positive feedback. We like and crave the rules, the conventions that limit the possibilities that exist for us.
Of course, there are people who enjoy DF, just like there exists a person who was willing to crack Malbolge or create BRAINFUCK. Those people are impressively dedicated to thinking differently and understand the value in exercises in experimental thought. I think it was Boluk and LeMieux who referred to DF as an “ontological experiment,” and now I think I understand what they meant. What happens when you ask a group of people to think differently–in fact, counterintuitively–about what it means to “play” a “game”? You can’t win. You are rarely rewarded for your actions in any traditional kind of way (well, at least I wasn’t). But you can watch things unfold. And by “watch,” I really mean something more like “read,” I think.
I think that those people are awesome and deserve to be praised. I mean, there is something important about challenging assumptions about what games are, what it means to play, to win, what a programming language is, why it is the way it is, etc. I do these kinds of thought experiments in the context of the English language and composition theory all the time–as English graduate students, I think we all do. So why am I viscerally opposed to DF?
From my title, you can probably gather that it’s because the barrier to entry for me is just way too high. I can’t bring myself to read pages and pages of information in order to figure out how to successfully (interestingly might be a better word) interact with Dwarf Fortress. Writing successful programs in Python is a daunting enough task for me without trying to think critically about the ideological or conventional implications of using white space to subordinate commands instead of brackets. You have to be a good writer and a well-versed reader before you start thinking critically about stories. For example, my seventh-graders are really just starting to learn how to form interpretive, critical claims about texts, and what they’re producing is very low-level and simplistic. They don’t know how to think about characters as representations instead of as people yet, for example; they don’t know how to separate a text from its author and they still have trouble distinguishing between author, narrator, and character. They’ve been reading for about seven years now. So I know the barrier to entry to the type of criticism I can do is pretty high, too. But do you need to read and write code for seven years before you become well-versed enough in it to make critical claims about programming languages, weird or otherwise? Do I need to play DF for seven years to be able to even start to tell interesting stories in/with it? Or maybe fluency in video games would transfer?
I’m interested in investigating these barriers to entry for a lot of reasons. One reason is that I tell myself and my students that English is an important discipline because understanding how to think critically about a text is a transferrable skill that can help you to think critically about all sorts of texts/artifacts, including advertisements, political speeches, documentary films, institutions, etc. There are, apparently, limits, though. For example, no matter how much I’d like to say something interesting about the ideological implications of computer programming as a practice, all I’m really able to do at this point is talk about reading procedures (and, when I do this, I’m just hoping I’m getting Bogost right, not really adding much to the discussion). I can say that I think there must be problematic claims about the world, about theories of composition, etc. embedded in programming languages, but that’s only because I can demonstrate that human languages (well, one human language–English) has such embedded claims and so, by analogy, coding languages probably do, too.
What do we need to do, as educators and academics, to engage and to help students and would-be critics to engage with these kinds of texts more effectively than I’m able to do now? Will learning to code help us to say interesting things through/about the programming languages we’re using? Will asking students to play video games help them to talk critically not just about the representations in the games–a type of analysis that they can already do because of the priviliged place of text- and film-based artifacts in our culture–but also on the level of procedures, including the procedures the game asks them to go through as players/users, the procedures that are at work in the game itself (the NPCs’ AI, for example), and the procedures that (a) human author(s) went through in order to produce the game?
I’m intrigued though baffled by both code languages and Dwarf Fortress. I really liked what Mateas and Montfort said when they were debating what to call “weird languages.” In the footnote on page 148, they wrote “‘Esoteric’ is a more common term for these languages, but it is a term that could apply to programming languages overall (most people do not know how to program in any language) or to languages such as ML and Prolog, which are common in academia but infrequently used in history. A better designation might be art languages,“ though they go on to say that they’re reluctant to use that term. But they’re right. Code itself is esoteric to me, even after it’s been somewhat demystified through my Code Academy lessons and our TwitterBot workshop.
What I want to know is how to solve the problem of these barriers to entry, how to make code less esoteric so that students (of which I’m one, too) can see esoteric languages as something different from run-of-the-mill languages, and how to make students aware of the procedural rhetoric of the texts with which they interact. In short, how can I increase their computational literacy–and my own–without a CS degree, a portfolio of work on Git Hub, a level 70 character in World of Warcraft, a successful Dwarf Fortress (whatever that means), or some other time-intensive achievement? Is there a way for “outsiders” to analyze games, software, code, etc., and to say something useful about these texts? How important is it to be an author of procedural texts in order to read them effectively, and what qualifies someone as such an author?
I’m probably repeating myself a lot, but the central problems I’ve been grappling with in this class are 1. What is procedural literacy, how can one attain it, and to what degree(s) is it possible/necessary for the average person? 2. What are the implications of code to which we’re submitting ourselves without knowing it when we interact with or compose a computational text? 3. How do I make students (and myself!) aware of or able to discover the arguments that computational texts are making, procedurally or otherwise? Is that the same as computational literacy? Or some component of it?
Playing Dwarf Fortress and then reading about weird languages really forced me to think about these questions again, and from a different perspective. Maybe procedural literacy is harder to attain than I’d previously thought. It will take some time for me to come up with a firm position one way or the other.