Instructor: Nick Montfort, nickm at nickm
dotcom, coachmontfort (AIM, by appointment), 14N-233 &
Office hours Wednesdays, 1pm - 2pm, 14N-233 (The Trope Tank) & by appointment
Class meets Mondays, 1pm - 6pm, E15-335
Updated 15 February 2013
This is a hands-on, workshop/studio format course about using computing as a way to think about media — about exploratory programming.
We will spend most of our time and effort, during our class meetings and outside of class, writing programs that help provide us new artistic and humanistic perspectives on media. Two assigned books provide some readings to help us better connect this practice to our theoretical and critical work. In this class the readings are not the primary way we will learn; they are assigned to support our project work and help us generalize our insights from that work.
No programming experience is required. The exercises and projects are meant to offer "low stairs" for those who have not programmed before and "high ceilings" for those who have significant background.
Projects are largely individual, to maximize the time each student has for exploration and to allow students to choose suitable open-ended projects for their ability levels and interests.
All programming environments used in this class are cross-platform and, with the exception of Commodore 64 BASIC, all are completely free software.
Two books are required for this class. Both are available online in PDF format for free. Both are also available in inexpensive hardback editions from the MIT Press Bookstore (at a 10% discount for MIT students) and from your favorite online bookstore. Given that there is a free, downloadable edition of both of these, I did not ask for either book to be stocked by The Coop.
This syllabus is tentative and may be updated throughout the semester. Major changes (in deadlines, assigned readings, etc.) will be explained either in class or by email. Details about how grades are assigned are at the bottom of this page.
Computation and Programming. The approach of the class is introduced: Providing access to the ways that computation and programming work, rather than offering instruction in a particular programming language. Some of the ways computation has been transforming the humanities and arts will also be introduced. The idea of generality is discussed and demonstrated, both with regard to the arbitrary input that computer programs may use and the arbitrary ways that they may work upon their input. Programming is distinguished from editing and the use of applications because, at the cost of more complexity, it allows the truly general use of the computer: Anything a computer is able to do can be done on any input.
Programming as an exploratory and expressive practice is introduced using the Commodore 64 and the BASIC programming language, not out of simple nostalgia or for retro cachet, but because (1) this platform is very amenable to exploratory programming, and (2) use of the system provides a historical perspective on popular programming.
Students will develop very simple (one line) Commodore 64 BASIC programs that generate visual patterns using character graphics. These will be completed in class.
Through discussion of 10 PRINT and in-class examples of BASIC one-liners, we will determine several specifics ways in which code connects to culture and speculate about how these connections may manifest themselves in other programs.
Install for Feb 11 on your computer: The VICE emulator.
Read for Feb 11: 10 PRINT pp. 1-62 (through "REM Ports to Other Platforms").
Hello World. Making the computer "speak," and say hello, is often the first task done when learning to program in an imperative programming language, one which frames the computer as obedient, autonomous, and able to communicate.
Temperature Conversion. Converting between Fahrenheit and Celsius is often the first mathematical function implemented by new programmers. It shows demonstrates how computation is general — how it can work on arbitrary values. But this is a practical program, for an important reason: measurement systems are culturally situated and units require conversion.
Fibonacci Numbers. Generating the nth Fibonacci number is a typical early exercise, or first exercise, when learning a functional programming language. It demonstrates recursion, showing that the computer can do a long, multi-step computation about as easily as it can perform the one-step conversion above.
Install for Feb 19 on your computer: Confirm that you have Python 2.7 (not Python 3) installed — it is installed on Mac OS X and most Linux distributions by default. On Windows, install Python 2.7.3.
Install for Feb 19 on your computer: Firefox, even if you strongly prefer another browser, because we will be using the Firefox scratchpad.
Read for Feb 19: 10 PRINT pp. 63-242 (through "The Commodore 64").
Read for Feb 19: "Critical Code Studies" by Mark Marino, 2006. (Web, about 12 pp.) In Electronic Book Review.
Read for Feb 19: "Hello, World Considered Harmful" by Ralph Westfall, 2001. (2 pp.) Search for & download this article via MIT's subscription to the ACM Digital Library.
Install for Feb 19 on your computer: A true GUI text editor. On Mac, a very good choice is TextWrangler, unless you want to invest in the even better BBEdit. On Windows, the built-in application Notepad is suitable, but consider Notepad++, which is free and very good. There are plenty of options on Linux (many of which are also cross-platform) including gedit, geany, and Bluefish as well as editors based on pre-GUI systems such as emacs and vi.
Read for Feb 25: 10 PRINT rest of book.
Text & Modeling Data I After introducing some basic computational linguistic concepts, such as the distinction between types and tokens, we see how to compute on language to determine the properties of a document and of a set of documents (a corpus), using Python. Work with text proceeds by modifying and elaborating simple example programs — an important way of understanding programming and developing new code. The use of regular expressions is introduced in Perl (which has great facility for quick text manipulations); the discussion continues using Python. Accessing more advanced computational linguistics resources is discussed with NLTK as the main example. The English-centric nature of text processing, and the persistent bias for the Latin alphabet, is also discussed, as are the practical ramifications for those wishing to work on texts in other languages.
Students develop a general (working on any text file) program to transform texts in ways that support humanistic research and/or are aesthetically pleasing and provocative. The program can be more or less elaborate, depending on one's previous programming experience, and can developed mainly for humanities research purposes or for aesthetic or literary purposes. A draft or first working version is to be completed in class; the finished versions, with suitable short documentation, are to be completed and posted online before the next class meeting.
Install for Mar 4 on your computer: NLTK.
Text & Modeling Data II
Image. Python programs will be presented for study, offered for modification, and assigned to show how simple bitmap image manipulations work "“ manipulations of the sort found in Microsoft Paint and image viewers, which include flipping the image horizontally and vertically and inverting a monochrome image. Through programming and modifying programs, students implement Photoshop-style filters. Finally, methods for determining properties of images in a corpus, and the relationship of different images, will be described. This should provide a basic, technically grounded understanding, for instance, of the workings of ImagePlot by the Software Studies Initiative.
Students create a program to generate images, one which is not based on the transformation of existing images but allows the viewer/listener to set different parameters and see the difference in output. The first steps should be completed in class; a finished version is to be posted only before the next class meeting.
Statistics. An introduction to the essentials of statistics, as they are likely to be used by humanists and artists, is provided here along with programming examples. Statistics is introduced not as a scattered collection of tools, but as a discipline for systematically interpreting data. With high-quality data (which can be difficult to collect), statistics can be used both to test hypotheses and to explore correlations and trends, pointing to areas worth further study. The language used is not the one I originally listed, GNU Octave, That system is a Matlab-like free software system which has excellent facilities for working with matrices and provides easy access to statistical operations. I will show it briefly in class so you can get an idea of what languages and frameworks are available. Please install, however, SciPy, a library (like NLTK) which provides advanced statistics capabilities within Python.
We will discuss the first half of Digital_Humanities and relate the discussion in the book to the field and our experiences in class.
We will discuss "A Short Guide" in relation to our inscription mini-project, discussion of statistics, and general thinking about using computers in the humanities. This guide and the Digital_Humanities book overall remind us that data visualization is not the only type of digital humanities work; the book also helps to situate the practices of DH within the tradition of humanistic inquiry.
We'll use this list of values in discussing basic statistics and how to work with them computationally:
[98.48, 98.6, 99.1, 97.86, 98.6, 98.41, 98.96, 98.05, 98.89, 98.6]
These 5-to-10 minute exercises are provided for the coming week. These are not required or graded; attempting them is strongly suggested. If you encounter problems, copy the text in your interpreter and email it to me and I'll be glad to help.
Install for Apr 1 on your computer: SciPy. SciPy requires NumPy; on Mac you should go to SourceForge and install from there. As the page notes, the binaries do not work with Apple's built-in version of Python.
Read for Apr 1: D_H pp. 121-135 "A Short Guide to the Digital_Humanities."
Data Visualization. It is now common for humanists to "read" and understand data not only by examining statistics, but by viewing visual patterns based on the data. Aesthetic visualizations have also been developed by artists and designers, ones meant for popular viewing rather than for analysis by researchers. The language used to explore both types of visualizations is Processing.
Students create a data visualization system directly corresponding to one or more statistical principles — one that does not just look nice or provoke, but helps the viewer to "see" in statistical ways and to understand data in these ways. It is possible to start from a data set that is of particular interest, to start from a general statistical idea, or to start from a visual idea that is grounded in statistical understanding.
A new set of 5-to-10 minute exercises are provided for the coming week. Again, these are not required or graded; attempting them is strongly suggested. If you encounter problems, copy the text in your interpreter and email it to me and I'll be glad to help.
We will discuss the beginning of Digital_Humanities and relate the discussion in the book to the field and our experiences in class.
Install for Apr 8 on your computer: Processing.
Read for Apr 8: D_H pp. 1-71, parts 1 and 2.
Email me by Tuesday Apr 23 with a preliminary idea or domain in which you would like to do your freeform project. This can be a sentence or two. I will continue the conversation with you and will use what you write to (a) suggest a starting point, and (b) help you prepare by finding and installing appropriate libraries, choosing an appropriate programming language, etc.
We will discuss the rest of Digital_Humanities and relate the discussion in the book to the field and our experiences in class.
These 5-to-10 minute exercises are provided for the coming week.
Read for Apr 22: D_H rest of book.
We will cover a few of the issues in programming that will confront those continuing on to take on more extensive projects in humanistic or artistic domains. The practical issues of collaborating with others on programs will be discussed and version control systems described. The benefits of modularity will be described, and unit and system testing will be discussed. Commenting and documenting code as well as maintaining it according to an organization's standards will also be discussed here. Time/space tradeoffs and efficiency will be discussed here, making reference to programs studied and written earlier. Choosing a language for a project is discussed, as is developing facility in new programming languages. The use of IDEs, debuggers, and tools for static code analysis is also discussed.
Begin work on the freeform project and have a first sketch completed by the end of class. This project is not a "term project" or typical "final project" in the sense of being a culmination and summary of all the topics covered. It is just another exploration, but at this stage students will be free to draw on any of the work done. Those with previous programming background or a strong drive to develop interactive programs may create such programs, but interactivity is not required.
Read for Apr 29: "What is Computation?" by Ian Horswill.
Further work on the freeform project (during the first half of class) and presentations of the completed project (second half). Freeform projects will be posted online after presentation, but work on the program should conclude during this class session.
Sound and Image Generation. Today's class involves writing and sharing sound- and image-generating programs; not programs for analysis or transformation of existing media, but programs that create sound and/or image using computation and paramters.
After introducing an unusual style of very short C program that generates sound (pioneered by the Finnish demoscener viznut), audio synthesis in SuperCollider will be quickly explored. Computing on sound is a highly advanced area, in many cases requiring musical training, and has been less central to digital humanities projects so far than computing on text and image have been. Work with audio is discussed briefly, however, as this is a rich area and introduces time-based data.
Students will use SuperCollider to create a program to generate sounds and Processing to generate images, one which allows the viewer/listener to set different parameters and hear or see the difference in output. This program does not have to traditionally musical or follow visual design/art conventions. A working version is to be run and submitted by email by the end of class.
Install for May 13 on your computer: SuperCollider.