This is a first course in programming, intended for students of all backgrounds. No prior experience is necessary. We will be using the Max 6 language from Cycling 74. It is a great choice for working with all of the kinds of sources that humanists typically care about: sound, music, text, images, video, computer graphics and real time performances.  You can learn more about Max here.

The main idea of the course is that programming can be a way of exploring the kinds of questions that humanists and artists have always been interested in: what is true? what is beautiful? how can we be sure of what we know? what does it mean to be human? what does it mean to be alive? Computer programs can also provide humanists, artists and social scientists with ways of communicating with one another. Plus, it is a lot of fun!

Required Software

You must purchase a license for Cycling 74’s Max 6 + Gen software. A 12-month license costs US $80. This software is installed on some of the machines in the classroom so you don’t have to purchase it right away, but you will eventually want a copy for your own work. For this course you only need the 12-month license, but a permanent license is also available for US $300 if you would like to continue to program in Max in the future. The software is available for both Windows and Mac computers.


The best way to learn how to program is to write programs. We will meet for two hours each day, twice a week. During the first hour of each class, I will connect my laptop to the LCD projector and write programs while explaining to you how they work. You can follow along on your own machines and ask questions about anything that isn’t clear. During the second hour of each class, you will be programming alone or in pairs, and I will walk around and help you if you get stuck, make suggestions about other things to explore, etc.

  • Mon 07 Jan.
    • Patch 001. Comment Objects
    • Patch 002. Toggles, Buttons and Leds
    • Patch 003. Message and Number Objects
    • Patch 004. Metro, Counter and Route
    • In class: try making a traffic light simulator after Patch 003, then again after Patch 004. Having the right objects often makes a big difference.
  • Wed 09 Jan.
    • Patch 005. Sliders, Dials, Scaling and Clipping
    • Patch 006. Print, and the Order of Events
    • Patch 007. Use Trigger to Specify the Order of Events
    • Patch 008. Making MIDI Notes
    • Patch 009. Random Atonal Crap
    • In class: after Patch 005, try using multiple split objects to make a patch that takes numeric percentages and flashes leds corresponding to letter grades like A, A-, B+, B, etc.
  • Mon 14 Jan.
    • Patch 010. Kslider and Nslider
    • Patch 011. Random and Drunk Objects
    • Patch 012. Basic Mathematical Operations
    • Patch 013. Hot and Cold Inlets
    • Patch 014. Reading the Mouse
    • In class: start working on a MIDI instrument of your own. If you want to play a tune, you can adapt Patch 004 to send a sequence of notes or chords to a makenote / noteout pair.
  • Wed 16 Jan. Assignment One: Make a MIDI Instrument
  • Mon 21 Jan.
    • Patch 019. Caesar Cipher and ROT13
    • Patch 020. Object Review, Patches 001-019
    • In class: brief demonstration of GitHub and discussion of code sharing. Importance of keeping a community record of mistakes and bugs. Review objects from Patches 001 to 019
  • Wed 23 Jan.
    • Patch 021. Floating Point Numbers
    • Patch 022. Graphical Gates and Switches
    • Patch 023. Setting, Sending and Receiving Messages
    • Patch 024. Pack, Unpack and Pak
    • Patch 025. Simple Game Navigation
    • In class: review and / or working on MIDI instruments.
  • Mon 28 Jan. Assignment One Due
    • Patch 026. Attrui and Colorpicker
    • Patch 027. Swatch and Multislider
    • Patch 028. Flipping Coins and Shuffling Cards
    • Patch 029. Use Patcher to Encapsulate Code
    • Patch 030. The Bean Machine
    • In class: after the demonstration of the ‘mood machine’ in Patch 027, a brief discussion of the idea of a state space. Work on MIDI instrument or Lcd art
  • Wed 30 Jan. Assignment Two: Make Some Lcd Art
    • In class: becoming familiar with Lcd object, and rediscovering a range of problems faced by 1980s video game developers
  • Mon 04 Feb.
    • Patch 031. The Lcd Object
    • Patch 032. LeWitt’s Wall Drawing 289 (1978)
    • Patch 033. Processing Grids
    • Patch 034. Processing Grids with Div and Mod
    • In class: use grid processing code to draw multiple structures to an Lcd object.
  • Wed 06 Feb.
    • Patch 035. Retro Icon Editor
    • Patch 036. Dynamically Updating a Graphic Display
    • In class: discussion of code aesthetics; working with Lcd objects.
  • Mon 11 Feb. Assignment Two Due
    • Patch 037. Multiple Clocks with Metro
    • Patch 038. Polyrhythms
    • Patch 039. Polyrhythmic Patterns
    • In class: discussion of mod operator and spatial and temporal patterns; working with Lcd objects.
  • Wed 13 Feb. Assignment Three: Animation
    • Patch 040. Object Review, Patches 021-039
    • In class: review of objects used in Patches 001-039
  • Mon 18 Feb. READING WEEK
  • Wed 20 Feb. READING WEEK
  • Mon 25 Feb.
    • Patch 041. Logical Operators
    • Patch 042. Decimal (Base 10) Numbers
    • Patch 043. Binary (Base 2) Numbers
    • In class: computer architecture and history; working on Assignment Three
  • Wed 27 Feb.
    • Patch 044. Making Decisions
    • Patch 045. Conditional Statements
    • In class: example of writing a simple animation program from scratch
  • Mon 04 Mar.
    • Patch 046. Generate and Test
    • Patch 047. Generative Art
    • Patch 048. Drawing with the Mouse
    • In class: discussion of problems in terms of state space or search space
  • Wed 06 Mar.
    • Patch 049. Reflection Symmetry
    • Patch 050. Changing Coordinates
    • Patch 051. Rorschach Blots
    • In class: the idea that changing representations makes problems easier or more difficult to solve
  • Mon 11 Mar. Assignment Three Due
  • Wed 13 Mar.
    • Patch 052. Sprites
    • Patch 053. Points on a Circle
    • Patch 054. Wallpaper for the Mind
    • In class: polar and cartesian coordinates; fractals
  • Mon 18 Mar. Assignment Four: Visualization / Sonification
    • Patch 053. Points on a Circle (revisited)
    • Patch 055. All Points Connected
    • Patch 056. Plotting Sine Curves
    • In class: using coll objects to keep track of state of computation; basic ideas of visualization and sonification
  • Wed 20 Mar.
    • Patch 057. Drawing Spirals
    • Patch 058. More Spirals
    • Patch 059. Packing Circles
    • In class: raster and vector representations; anti-aliasing
  • Mon 25 Mar.
    • Patch 060. Object Review, Patches 041-059
    • In class: visualization and sonification examples; matrices; data compression
  • Wed 27 Mar. Assignment Four Due / Assignment Five: Make an Audio Instrument
  • Mon 01 Apr.
    • Patch 064. Envelopes
    • Patch 065. Converting between MIDI and Audio
    • In class: audio review; using line~ to eliminate clicks
  • Wed 03 Apr.
    • Patch 066. Exponential and Logarithmic Curves
    • Patch 067. Frequency Modulation
    • Patch 068. Audio Recording and Playback
    • In class: frequency and amplitude modulation
  • Mon 08 Apr. Assignment Five Due
  • Wed 10 Apr. Last class. Final Assignment
    • In class: assignments and review

Getting a Copy of Code Discussed in Class

After each day’s class, I will post links to online copies of all of the programs that we discussed that day. You don’t have to recreate these Max patches from scratch. Each program has a link on this page. When you follow that link you will find a picture of the program and a “raw code link”. You can download the program by following these steps:

  1. Click on the raw code link. This will take you to a web page at the code sharing site Github.
  2. Select all of the code on that page (on the Mac you can use Command-A).
  3. Copy it (on the Mac use Command-C).
  4. Go to Max 6 on your computer.
  5. Choose File -> New from Clipboard.
  6. Save that new patch somewhere on your own machine.


Instead of having large projects or exams, your grade will be based on a larger number of small programming assignments. This will encourage you to practice your programming skills regularly, and enable you to be experimental in your coursework. I have quite a few fun programming projects in mind for us to work on, and Max is powerful and high-level enough that we can do things with a page of code that would take hundreds of pages (and a whole semester) to do in a language like Java or C++.

You will have five assignments worth 16% each, and a final assignment worth 20%. You will submit your assignments using the OWL site for the course, but all of the other course information will be on this site.

OWL site (Western username / password required)

A Note about Late Assignments

In general I don’t penalize late work. Each assignment will have a suggested due date. If you are unable to complete the assignment by the due date, send me some e-mail and let me know when you expect to finish it. All assignments must be handed in by the end of the course (April 26), otherwise I won’t be able to count them towards your final grade.

Useful Links