The Contributions of Weird Languages and DF to Conversations about Computational Literacy

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.

3 thoughts on “The Contributions of Weird Languages and DF to Conversations about Computational Literacy

  1. Hi Haskell,

    Your lament about being unable to play creatively in DF caught my attention. I am definitely in the same position; I can’t even consistently navigate the menus to give a command, let alone do something creative. But of course, this is true of any form of creative expression—it’s always ergodic at first. The vine charcoal kept crumbling in my hands and I kept accidentally smudging the page as I worked. I didn’t have enough control over the final product to really be able to claim authorship of it. I’m very hard-pressed to think of a form of expression that doesn’t have a high barrier to entry, like the ones you described. Even the most basic spoken language requires years to learn and get control over; we just tend to dismiss that barrier because we surmounted it as children. (Interestingly, I’d say 7 is about the age that kids seem to have enough fluency/control over their speech to express themselves confidently.)

    I also hope we’ll get the chance in class to discuss the limitations of transferable skills. As you correctly noted, the main line of defense that people tend to take for the humanities is that the skills we use here are transferable to more practical areas of life; someone who studies English is also learning to advocate for herself, negotiate a business deal, reason through a complicated decision, and much more. But you’re also right that something gets lost in that transference. I might be better than Jane Mathematician at defending myself in court, but I’d still be much better off with a trained lawyer. Perhaps the limitations of transference are a flaw in the case for procedural literacy? After all, not everyone can or should be a software engineer. If I’m not going to pursue a career in programming, and skills aren’t as transferable as we tend to think, what’s the value of procedural literacy? Is being able to critically analyze code important enough to be an end in itself?

  2. You know, when thinking about “transferable skills,” I can’t help but think that another phrase used in this post–“barriers to entry”–is really just inseparable to any understanding of “what” can transfer from one situation to another, and I think Haskell is really on point to talk about both when thinking through code, language, or any new knowledge-application (I hate the word “skill” for reasons I can’t get through in this space…perhaps for similar reasons as to why I am, for now, kind of uncomfortable with the word transfer…it’s just too “clean” of a word for such a messy process). I think it is really hard to talk about doing anything with a new knowledge until the user WANTS to do anything with a knowledge. Until there is something that a user of knowledge genuinely wants to achieve (to include simplistic carrot/stick scenarios) with said new knowledge, I think the lack of that genuine want for something like code or Dwarf Fortress or learning German (my frustrating endeavor over this past summer) significantly raises the barrier to entry. My barrier of entry was 100s of feet tall for Dwarf Fortress last week. All of a sudden, when I finally got a fortress built, I was starting to see cool things to do. How reading my dwarves thoughts helped me think through what things I might do next, and how building chairs and tables and dining rooms and farms all started to make “something”, and that I was now personally invested in that “something.” It became kind of enjoyable and something I wanted to do. Then I got to thinking about how dwarves can be conceived of as figures in technocratic and capitalist systems that we all know and love (we all have our functions, but who knows what we are *actually* doing). I really didn’t start to “transfer” one knowledge (thinking about ideology) to this new setting until I was (is this possible?) enjoying the game or motivated to play? So, how do we get students (to include ourselves) motivated or in a position to enjoy or even just in a position to understand or connect learning to their lives? Easier said then done. And none of the previous is meant to forget the caveat of the LONG and arduous process that is learning a complex system. Maybe it is just the idea that you can still be a novice (like most of us probably are), but there needs to be a way to see that sliver of “ah, I can do something with this thing I barely understand” before any real “transfer” or use can come of the said thing? Maybe until we find that sliver (which I almost certainly found by chance rather than being “good” at any of this stuff…I have had plenty of tech problems in my life to suggest my fortress being constructed was definitely luck on my side), transfer becomes really, really, really hard to do.

    • Thanks for the response. I like how you push back on the term “transfer,” because the more I thought about it, the more I realized that you’re right–the process I’m talking about is a lot messier than a neat-and-tidy word like that implies. “Transfer” of reading skills onto coding or learning German or any host of other skills that are learned through text means something much different than “transfer” of language-learning skills between German and Arabic, or even between French and Spanish.

Leave a Reply to Haskell Cancel reply

Your email address will not be published. Required fields are marked *

*
*
Website