Draft/tentative syllabus for the MIT course offering in Fall 2019 — Updated 2019-08-27
Instructor: Nick Montfort
Teaching assistant: Judy Heflin
Class meeting time: Tuesdays, 2pm–5pm
Room: 4-251
Office Hours are in 14N-233
Instructor & TA, Tuesdays 5:00pm–5:30pm
TA, Fridays 3:30pm–4:30pm
& by appointment
This course is about how to think with computation, how computation and media interact, and how we can understand computation as a part of culture. Programming is introduced as a way to iteratively design both artworks and humanities projects, in a process that allows the programmer to discover the direction of the project during programming. The idea of exploratory programming differs from instrumental programming done to create an app or a banking system in compliance with a pre-determined specification. No previous background in programming is required.
The course consists of a great deal of in-class programming of various sorts, which is to be continued between classes. Students are to follow along and input code, do exercises of a more traditional sort, and, importantly, pursue “free projects” in which students not only choose how to accomplish a programming task — they also determine the direction of the project. Free projects are presented at least briefly each week. There will be some time for longer discussion and critique, but even the short presentations by students will serve to show the variety of perspectives in the class and the many ways in which programming can be used to explore.
The instructor’s textbook Exploratory Programming for the Arts and Humanities, Second Edition is used. Note we are using the second edition. For this course offering a complete draft of the book will be distributed to those who enroll. This will be a digital copy, although the book is actually designed for use as a bound, paper book alongside a computer — however, it has not been published in final form, and won’t be until Fall 2020. The book will be published in print and in a digital, open-access (freely available) edition.
See Evaluation at the end for how the course is graded.
Students must bring a laptop/notebook computer to each of the sessions, and it must be properly set up and ready for use in class. You can do work for the class using any major OS: GNU/Linux, Mac OS X, or Windows. A tablet or smartphone is not acceptable. You may be able to borrow a computer from the IS&T Laptop Loaner Program, but whatever you do, your computer needs to be set up properly for use during our class meetings. Students must also have the textbook on hand. Finally, students must have all of their own code from previous classes and from their project work between classes available to them during our class meetings.
During class meetings students will initially be asked to follow the instructor’s lead, typing in code character-for-character at first and then seeing what can be done with variations at the levels of data, parameters, and more complex operation. We will show work on free projects that we began the previous week. We will also do some in-class exercises and have discussion of related topics, ranging from detailed questions that may seem purely technical to issues that are more obviously cultural.
Students are expected to learn by being in the classroom for discussion and in-class work on their computers, by reading and reviewing the material in the book, by completing all of the exercises in the book, by pursing their own small-scale (week-to-week) projects that they develop by themselves, by considering fellow students’ projects inside and out of class, and by consulting the programming environment itself to determine how it works — trying things out in Jupyter notebook, for instance. It would be extremely surprising if a single channel of learning, or even two of these channels, were enough for a student to exhibit excellent understanding and become a good exploratory programmer. A serious effort along all of these channels should certainly suffice, however, whether or not a student has any prior experience programming.
Students must have Jupyter Notebook (formerly called iPython Notebook) installed with the current version of Python 3. To be able to get started with Python, download and install Anaconda for your operating system, being certain to choose Python 3.7. For those of you who have a version of Python already installed, you will get another one in addition to that when you install Anaconda. It’s no problem. Everything should work fine.
You need a true text editor installed. I will not attempt to link to all the reasonable choices for each OS, but here are comments on making sure you have an editor or selecting an editor to install:
In addition to the libraries that come with Anaconda, we need TextBlob, a Python library for manipulating text. We’ll use it later, but install it now.
Mac OS or GNU/Linux: The easiest way to install TextBlob for use with Jupyter Notebook is with conda. Instructions explain how to do it, but here I'll state the crucial step. From the terminal, type the following and press Enter:
conda install -c conda-forge textblob
You can install TextBlob on Windows using conda, too, but there are some additional steps you’d need to take. If you like you can search online, find these, and do it this way. As far as I know, however, the following is the easiest way to install TextBlob on Windows.
Windows: Follow these instructions,, but make sure to install and update pip first. That is, open the Command Prompt and run the following commands, typing each one and pressing Enter:
python -m pip install --upgrade pip
pip install -U textblob
python -m textblob.download_corpora
Get this programming environment for visual design here, and then install it.
When I mention “free software” I am talking about it in the sense that the Free Software Foundation does. I don’t mean simply that it is priced at zero dollars, but that it comes with certain freedoms, to run, copy, distribute, study, change and improve the software. For these reasons, as we'll discuss further during the course, the concept of free software is connected to exploratory programming.
After ensuring everyone has their own personal computer set up properly, we will look at several historical text-generating systems that have been reimplemented as JavaScript programs, packed up with HTML and CSS into Web pages. These can be found in the Memory Slam collection. We’ll see how to download these pages, edit them in text editors, and begin learning about programming through this sort of study and modification. We’ll explore the difference between code and data, continuing to learn some about how parameters work. Students will undertake their first free project, creating a text generator based on an existing one, as an in-class exercise. This is the only work we will do in JavaScript; we will use Python for the next part of the course. Today’s class will also introduce the material in chapters 4 and 5.
Assigned for next week: Read EP Chapters [1] through [5], typing in all code, completing all exercises and free projects. We will however have done the free project in chapter [3] in class, so it won’t be necessary for you to do it again.
We will review syntax errors and semantic errors, how error messages can help us and when we will need to rely on other types of reasoning about programs.
Then, I will introduce all the programming fundamentals discussed in more detail in chapter [6], including functions and scope, iteration, types and polymorphism, and the conditional. The double() function introduced last week and in chapter [5], and so far only considered from the “outside,” will be considered in light of these fundamentals and its inner workings will be explained.
Assigned for next week: Everything in chapter [6] Programming Fundamentals, which is a long and substantial chapter. If you can dedicate yourself to getting through this chapter completely and thoroughly in the coming week, you will be able to succeed in the course.
We will discuss how computing is introduced and presented as cultural; we will also do in-class exercises to understand programming fundamentals better. The book presents a very introductory sketch of object-oriented programming, which we will not have time for in an hour.
Assigned for next week: Everything in chapter [7] Standard Starting Points.
We’ll cover the basics of text manipulation, which end up offering a fair amount of power to those interested in computing on language. We’ll focus on short strings during this class session, and will do some in-class exercises.
Assigned for next week: Everything in chapter [8] Text I.
This special language (not a programming language, but a formal language very useful in text processing) is introduced.
Assigned for next week: Everything in chapter [9] Text II.
Images are introduces as represented by two-dimensional data structures, made of pixels. We see how we can have code visit each pixel to transform an image.
Assigned for next week: Everything in chapter [10] Image I.
Images are not just manipulated, analyzed or generated with each pixel considered independently. During this class we’ll see how the neighbors of a pixels factor into operations such as blurring.
Assigned for next week: Everything in chapter [11] Image II.
We’ll cover the bare essentials of statistics and probability, from both creative and analytical perspectives, and see how visualization works well when grounded in statistical principles.
Assigned for next week: Everything in chapter [12] Statistics, Probability, and Visualization.
One sophisticated scholarly application of computing is introduced in this class: The sorting into categories of both texts and images.
Assigned for next week: Everything in chapter [13] Classification.
We’ll get further into Processing, a programming environment that provides abstractions matching the ones that artists and designers use to think about images.
Assigned for next week: Everything in chapter [14] Image III.
We’ll extend our understanding of text processing to more advanced analysis and generation techniques that allow sophisticated scholarly work to be done and compelling creative projects to be devised.
Assigned for next week: Everything in chapter [15] Text III. Begin a “final exploration” in which you extend and revise some existing free project of yours, knowing what you know now. Don’t start from scratch, although you can certainly rework your existing free project considerably. It would be better to do so than to simply polish and refine your existing project. After you complete your chapter [15] Text III work, you may choose to extend one of the free projects in this chapter for your final exploration.
We will get to understand a little bit more about bits and bytes while also understanding some about how digital sound works. We will do and share an in-class sound project. Bring headphones!
Assigned for next week: Everything in chapter [16] Sound and [17] Onward, along with the completion of your “final exploration.” We will share the results in the last class session.
Presentation of final explorations. Discussion of how to continue one’s practice as a programmer/scholar and/or programmer/artist.
60% of your grade is based on the assigned "free projects" that are due during all classes, even class 1 because we will do a free project during that class. The usual MIT grading schema is applied these assignments, with excellent work resulting in an A.
40% of your grade represents your attendance (not just being physically present on time, but being attentive) and participation in class (doing in-class exercises and commenting on other student work during our class sessions). Missing a class for a reason that is truly out of your control, such as a medical reason, family emergency, funeral, etc. will be excused; you are expected to work with one or more students in the class to catch up. Missing a class for a voluntary reason (going to see a movie, oversleeping, etc.) will mean a 5% deduction per occurrence.