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 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.