> classes > exploratory programming, spring 2021

CMS 844 . Exploratory Programming for the Arts and Humanities

Draft/tentative syllabus for the MIT course offering in Spring 2021 — Updated 2021-03-19 (Pace reduced!)

Instructor: Nick Montfort

Class meeting time: Tuesdays, 9am–11am (Eastern Time)

Lab/co-working time: Tuesdays, 11am-12noon; Wednesdays, 1pm-2pm (Eastern Time)

Other small group sessions/office hours to be arranged

Online, via Zoom

Course Description

Exploratory Programming second edition textbook cover

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.

Given our unusual learning situation in Spring 2021, it's important to note several aspects of this particular subject offering:

  1. This is a synchronous course in which much of the learning and evaluation of students will happen during our meeting time. To enroll and remain enrolled, you must attend the first class and must be able to participate in all of our Tuesday 2pm-4pm class meetings. Our classes are face to face, which allows us to connect with each other and visually react to each other’s work. We should plan to all be in video contact during the entire class.
  2. Learning new programming skills and sketching with code will require significant independent work, although not more time than the units for the subject indicate. We do collaborate in CMS.844: When we come together to share and discuss our free projects in class, we are collaborating. But the work we do to frame and complete those projects is individual, with one exception this semester. This ensures that we all learn the fundamentals of exploratory programming.
  3. The learning we will do will be structured directly by the textbook Exploratory Programming for the Arts and Humanities, second edition, and the “free projects” in it. In these projects, students not only choose how to accomplish a programming task — they also determine the direction of the project. You will be provided with a pre-print copy of the textbook, being released in May 2021 in print and in a freely available open access edition, after you promise to keep this preliminary version to yourself!
  4. We will use a few online communication systems to supplement our Zoom meetings, but this course will not use Canvas, Stellar, or another LMS.
  5. Your wellness is more important than anything about this course, specifically or overall. Individual student needs can and will be accommodated — just do your best to let the instructor know how he can help. If you are not ready with a response when called on, or were unable to complete the free projects one week, we’ll work together to help you engage with the course and successfully learn. If the pace of our course is impractical for the whole group given the shortened semester, we can simply change our plan and cover less material. Exploring together and gaining comfort and confidence is what’s most important educationally — but again, being well is even more important.

See Evaluation at the end for how the course is graded.

Format for Meetings

Students need to connect via Zoom on a desktop/laptop/notebook computer (not a tablet or phone) to each of our sessions. This computer must be properly set up, ready for programming use, ready for screen sharing. You can do work for the class using any major OS: GNU/Linux, Mac OS X, or Windows. If you are in the Boston area you may be able to borrow a computer from the IS&T Laptop Loaner Program, if necessary. Students must also have the relevant section of the textbook pulled up. 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.

Our class meetings will consist almost entirely of sharing and discussion of free projects. In discussing these we will solidify and expand our understanding of exploratory programming. Students should plan to pursue the book independently and indicate what its unclear, through a standard class mechanism: a collaborative document that allows students to write anonymously. Based on these responses, the instructor will also allocate time to clarification of concepts covered in the book.

Before the First Class

1. Install Anaconda for Python 3.8

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

2. Install/Have Ready a Text Editor

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:

3. Install TextBlob

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.

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

On Windows, be sure to do this from the Anaconda Prompt.

4. Install Processing 3.5

Get this programming environment for visual design here, and then install it.

Note on “Free Software”

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 and to being able to freely think and create using computation.

Class 1, February 16

First Steps

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, programs that are included with CSS within HTML 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 [Free Project 3-1] as an in-class exercise. This is the only project we will do in JavaScript; we will use Python for the next part of the course. Today’s class will also briefly introduce the material in chapters 4 and 5.

Assigned for next week: Read EP chapters [1], [3], [4], and [5], typing in all code, completing all exercises and free projects. You should have set up your system properly before class, and so won’t need to read chapter [2]. As always, complete all free projects, and do them the assigned number of times. In this case, this means doing [Free Project 3-1] twice (you have already done it once in class) and doing [Free Project 5-1] twice.

Class 2, February 23

Code Basics, toward Programming Fundamentals

As we look at free projects, we will review the code and data distinction, 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 briefly explained.

Assigned for next week: Everything in chapter [6] Programming Fundamentals, which is a long and substantial chapter. Only a little of your work will be on [Free Project 6-1] (and on doing this project twice) although this will be an important part of your learning. 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.

Class 3, March 2

Firm Foundations, toward Cultural Computing

We will look at free projects, not because we expect these to present earthshattering and creative outcomes, but because they will shed light on the programming fundamentals we have been studying. Near the end of the class, we’ll look ahead to how computing is typically introduced and presented as cultural.

Assigned for two weeks from now: Chapter [7], Standard Starting Points, chapter [8], Text I, and chapter [9], Text II.

No class on March 9

MIT is on a Monday schedule.

Class 4, March 16

Starter Programs and Text, toward Image Processing

We will learn about about some of our alternative approaches to starter programs. The other free projects we look at today will give us insight into the simplest ways to deal with text, lexically, and the power or regular expressions.

Assigned for the week after next: Chapter [10] Image I. Stick with chapter [10], and don't proceed further, because we need time to go over free projects together.

No class on March 23

This is an MIT holiday.

Class 5, March 30

Images, Per Pixel

Our free projects will show what can be done on a pixel-by-pixel basis, with nested iteration.

Assigned for next week: Chapter [11] Image II.

Class 6, April 6

Images Continues

Our free projects will look at image manipulation more broadly.

Assigned for next week: Chapter [12] Statistics, Probability, and Visualization.

Class 7, April 13

Statistical Exploration, toward Classification

We will look over the end-to-end statistical explorations that students have done. After a single week of exploration, we might hope to uncover one or two unepxpected results that warrant further investigation. So we are not looking for major revelations, but small and potentially significant surprises. After considering free projects, we’ll look toward the next chapter in which we will encouter one type of useful machine learning technique.

Assigned for next week: Chapter [13] Classification.

No class on April 20

This is an MIT holiday.

Class 8, April 27


In looking at [Free Project 13-1], we’ll consider, for each student, what 3+ classifers were attempted and which one of them ended up as a favorite. What do these projects tell us about the limitations and capabilities of simple classifiers? What types of humanistic analysis might be accomplished, or bolstered, based on what we have seen fellow students do in their projects?

Assigned for next week: Chapter [14] Image III.

Class 9, May 4

Visual Design and Animation

Free projects this week will showcase our creative work with images, using Processing.

Assigned for next week: Chapter [15] Text III. Begin work on final (individual) explorations — which should extend one of your existing free projects.

Class 10, May 11

Advanced Text Generation

This week’s free projects focus on advanced creative work with text.

Assigned for next week: Chapter [16] Sound for independent work and discussion during lab/co-working time. Complete final explorations.

Class 11, May 18

Final Explorations (for now!), Looking Ahead

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 your presenting and discussing your own free projects. The usual MIT grading schema is applied here, with excellent work resulting in an A. Excellent work involves exploring your interests by writing programs (completing free projects) yourself, such that you understand what you have done and can help others in class understand it. So for instance, no matter how nice-looking your free project is, if you assembled it from code on Stack Overflow and don’t know how it works, your work will be neither excellent or even adequate (passing).

40% of your grade represents your attendance (not just being physically/virtually present on time, but being attentive) and your participation, which includes doing in-class work and commenting on other student work. (Virtual) presence, volunteering a reply at times, and being ready when called on is considered excellent — at an A level. Missing a class for a reason that is out of your control, such as a medical reason, family emergency, etc. will be excused. In the case of any absence, you are expected to work with one or more students in the class, and the instructor, to keep pace as best as possible. While video contact is expected and enables us to form a good classroom community, we recognize that everyone does not have the ideal environment for learning online. If there are times when you cannot connect via video, or join a class at all, we will do the best we can.