Course description

This class will introduce you to the rudiments of programming languages; even more, the class will teach you how to learn how to learn whatever programming techniques you need to solve scholarly problems. We will spend the first month on a general introduction to programming. Most of the course will focus on applying programming techniques to historical research. Each week you will learn a new technique—such as a visualization, mapping, network analysis, text-mining—using real historical data to develop arguments and interpretation. By the end of the semester you will create a programming project of your choice which will help you in your future scholarly research. The main languages that you will learn are JavaScript (a language obligatory for the web but useful for many applications) and R (a statistical programming language well-suited to scholarly purposes), but you are encouraged to learn any language you like for the final project.

Learning goals

After taking this course, you will

  • be able to use computer programming to make historical arguments;
  • be able to apply programming techniques to scholarly research in history, especially involving quantitative history, spatial history and mapping, network analysis, and text mining;
  • understand the common concepts of computer programming across computer languages;
  • be able to use JavaScript and R and some of their most useful libraries;
  • be able to read documentation for languages and libraries in order to teach yourself programming techniques as they become useful to you.

How to succeed at this course

This course does not assume any prior experience with computer programming. (However the course does assume that you have taken George Mason’s Clio 1 and Clio 2, and thus possess the skills taught in those courses.) This course will be hard and unfamiliar, not least because you will be learning new techniques at the same time that you are trying to apply them to historical research. Here are a couple suggestions about how to succeed at this course:

  • Come talk with me early and often. Once a week is not too often to talk outside of class. Most of your learning will happen outside of class, and I will be able to help you the most if you try your hand at the exercises before you come, but a conversation can go a long way towards getting you unstuck.

  • Keep the history in mind at all times, and especially think about how you might turn computer code into a historical argument. It is very difficult to learn to program without a genuine use for what you are trying to learn. Find a way that the techniques we are learning apply to your research, especially your work for a dissertation, research paper, or job. I will provide data sets that you can use, but you are always welcome to substitute sources that are relevant to your research.

A few notes

This course assumes that you are programming in a Unix-like environment, namely some Linux distribution running natively or in a virtual machine, or in the Unix underpinnings of Mac OS X. You’re free to use Windows if you like, but I won’t be able to guide you in figuring out the differences, and your code will have to run on my machine. Configuration is the bane of all computer projects, and to that end all code must run on a standard machine. This machine image will be available to you using Vagrant, and you’ll be able to run it as a virtual machine on your own computer. You should test all non-trivial code in the virtual machine before submitting it. We’ll cover this in an early class period.

The culture around programming can be extraordinarily generous, with many people sharing their work and expertise for free. It can also be extraordinarily toxic, especially for women and minorities. Part of this course will be learning to help yourself in the culture of programming, including indispensable sites such as Stack Overflow. If you get stuck in the more nefarious parts of the culture, come ask for help. This website from the UVA Speaking in Code summit might help too.