Languages are an important aspect of society. They are powerful tools, giving the ability to communicate ideas and forge a common identity, but also powerful barriers, dividing people both directly and more subtly. For historians, a working knowledge of study-relevant languages, though sometimes difficult to attain, can grant a richer pool of sources to draw upon, new audiences to reach, and key insights into the society that has shaped and developed that language.

Usually when one refers to programming as a language, the comparison is fairly straightforward. Programming uses familiar symbols and characters, but produces different meanings, which cannot be grasped without fairly intense study. Programming is also divided into multiple languages, each of them, like one member of a language group, granting only a rough understanding of the others. However, I argue that the similarity, at least for application to the digital humanists, goes far deeper than that. Just like knowing the language of a particular society is crucial for historians interested in studying that culture, knowledge of programming languages is crucial for historians who want to go deeper into the digital medium, and for the very same reasons. I mentioned three advantages that knowing languages grant to historians: source material, communication, and societal insight. Each of these has a direct parallel when speaking of the usefulness of programming to the historian.

First up is source material. This, I would argue, has its mirror in the uses programming can be put to. When studying a period of history, being restricted to a single language can greatly reduce the amount of resources available. The same is true of programming, although in a different way. Those of us who do not “speak” programming are forced to interact with digital materials through the tools created by others who do. When one can speak it, suddenly many more options about what can be done with the information is opened up. Rather than being restricted by the size restrictions of a program like Voyant, programming historians can write their own program to do the task. In addition, programs that simply aren’t widely available online can be specially crafted when the consumer is also the producer.

Some of you may be thinking at this point that my argument is rather lackluster. After all, you might say, a historian can just hire a programmer to do all of those things. This is where the second element, communication, comes into play. Researching a topic is all well and good, but if a historian wants to disseminate information to a larger audience, it is necessary to put that information in a readable format, and for that a translator is required. The problem with employing someone else to communicate your ideas for you is that they just do not understand what you are trying to say at the same level. Not only can non-programming historians not deliver the information or build the program exactly the way they need them to, they also often cannot catch when something doesn’t work exactly the way they meant it to (just as I would never know if this post, were it to be translated into another language, said exactly what I thought it said). Finally, there is the issue of autonomy. Sometimes there just isn’t a translator available, and sometimes a historian simply cannot afford to hire someone else to the work required.

The final value of language, societal insight, is a bit more restrictive when it comes to programming, but it too is present. Simply put, there can be no complete understanding of modern society with programming subtracted. It has become a crucial part of our own society, and so is an important element for historians studying our times to understand. Historical study of the time in which programming became relevant to society may not be at the forefront now, but every day that passes makes it more and more important to understand the cultural values and ideas reflected in the development of programming, and that means speaking the language.

Up until this point I have only addressed the advantages of knowing programming and have spoken in very theoretical manner. There is a good reason for this: I don’t speak programming. As with all languages, learning to program requires a lot of hard work and study. Having only explored one programming language (Python), and that for only a week and a half, I know just enough to know all the things I can’t do with it. Just like other languages, a rudimentary knowledge, while both interesting and enlightening, isn’t of much practical value. For example, I know the program I wrote through the process of the first seven lessons of the Programming Historian 2, html-to-freq-3, can pull the keywords from any Old Bailey Online document, I don’t know enough about why it works to know why it won’t work with a Gutenberg document.


This list of keywords is useful


This error message, not so much.

Likewise, my rudimentary troubleshooting knowledge wasn’t enough for me to figure out why my copy of html-to-kwic wasn’t working, so I was reduced to downloading the copy provided by the Programming Historian in order to produce the following n-grams.


Definitely cool, but even cooler would be knowing how I got this result…

While my programming knowledge is now sufficient to operate programs that are both created and explained for me, I am far from capable to putting the programs to any innovative use of my own, leaving me at the equivalent of reading books that have already been translated to English and trusting my translator to do a good job with my own work.

In an ideal world, every historian would speak every language, but this is neither feasible nor necessary. Likewise, programming is not a tool that every historian requires and not every historian is suited to learning programming. For those who want to employ digital tools in ground-breaking ways, interact effectively through a digital medium, or study the digital age, programming is vital. For others, programming is far from useless, but may not be practical to learn. In either case, learning programming has to be something that is done properly, or it will provide only limited insight and very little direct application.