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
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:
See Evaluation at the end for how the course is graded.
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.
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.
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.
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.
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 and to being able to freely think and create using computation.
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.
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.
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.
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.
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.
Our free projects will look at image manipulation more broadly.
Assigned for next week: Chapter [12] Statistics, Probability, and Visualization.
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.
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.
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.
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.
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.