CS 2, Winter 2009
Programming for Interactive Digital Arts

Course description

This course introduces programming techniques necessary to generate interactive visual art on a computer. Although it briefly covers computer-generated media art, the course focuses on the programming skills required for creating interactive works. Rather than using commercial software, students write their own programs to create compositions with which users can interact. The course introduces fundamental concepts of how to represent and manipulate color, two-dimensional shapes, images, motion, and video. Coursework includes short programming assignments to practice the concepts introduced during lectures and projects to explore visual compositions. The course assumes no prior knowledge of programming, and is not open to students who have already had a programming course like CS 5.

We'll be using a language called Processing, which does a lot of the "dirty work" to let us focus on creating fun interactive works, and still provides all the power of a full programming language.

For a taste of the material we'll cover, see last year's version of the course.

Administrative info

Chris Bailey-Kellogg | 250 Sudikoff | office hour: MW 3-4, Th 1-2
Teaching assistants
Grad TA: Priya Natarajan
Undergrad TAs: Nick Andrews, Saul Zebovitz
Course staff email
cs2 -at- cs -dot- dartmouth -dot- edu
Announcements and discussion board
Available on Blackboard
2-hour | MWF 1:45-2:50 | x-hour (sometimes) Th 1-1:50
105 Kemeny Hall
Sudikoff 005 (Mac lab). TA available in lab: Sun 2-4, Tue 6-8, Thu 7-9.
Also available for use by CS 2 students when not reserved for other classes.
(Note that other classes may reserve the room for some times.)
003 also has a number of Macs, and can be used when we run out of room in 005.
To get your ID card enabled, complete and return the Sudikoff Access form.
Textbook (Required)
Daniel Shiffman, Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction
Available at Baker reserve desk
The examples may be downloaded, and you are encouraged to do so.
Other materials
Procesing reference
Casey Reas and Ben Fry, Processing: A Programming Handbook for Visual Designers and Artists

Coursework and grading

While this class doesn't satisfy the language requirement, you are learning a new language and a new way of thinking. Most of us can't wait a week and cram material from a language class just in time for a paper or oral presentation. Likewise, most of us can't wait until the night before a performance and learn new things about a musical instrument and perfect the piece we are going to perform. In both of those cases, as well as in this class, it is best to stay on top of the material and practice often.

In that same vein, the best way to learn the material is by doing. After lecture try the examples on your own, modify them, come up with variations, etc. The lectures are constructed to help you do that. There aren't many core concepts, so most of each lecture is spent illustrating how to put a new concept to use in a number of different ways. The same is true of the textbook, and it even has short exercises to help you. It's like learning new words or grammatical constructs by using them in a conversation. Practice talking to yourself in this new language (don't worry about the looks people give you), and show off the results to your friends.

The lectures will largely parallel the textbook, where possible. While we will cover the same concepts, I will mostly illustrate them with different examples, trusting that you can read the text on your own later (or earlier), and that additional examples can only help you see how to put the concepts to use. I will clarify anything from the examples in the text that I think is particularly tricky, and if something from the text bothers you, by all means bring it up in class. For some chapters I won't cover all the material in the text, and for some material that I cover in class there isn't anything in the text. Lecture notes, including the examples from class, will be available on the schedule page for each day.

Enough philosophy. To tie together both the larger goal of creating fun interactive works, as well as the reality that practice makes perfect, the coursework will include a combination of assignments at various granularities.

Short assignments (10% total)
To help you keep on top of the material (think language lab or rehearsal). Accompanying a lecture (due by the next one); done individually.
Homeworks (50% total)
To help you put the basic techniques into practice in creating new works. Week-long; done individually.
Final project (15% total)
To allow you to synthesize the material to do something bigger of your own design. Done individually or with a partner.
Quizzes (25% total)
To give a quick check-up on your understanding of the material. Middle and end of term; done individually.

Assignments are to be turned in via Blackboard before class on the due date. Ample time is provided for each assignment, so in general, late submissions will not be accepted. Under extenuating circumstances (prolonged illness, death in the family, etc.), arrangements must be made with the instructor before the due date.

Grades will be assessed according to correctness and quality of both the product (does it look and act like it should?) and the code (is it well-organized and easy to follow, does it effectively use the proper programming constructs?). For exceptionally creative and interesting work, it is possible to receive extra credit points. Extra credit is tabulated separately from the regular grades on homework and exams, and is used to adjust final grades after the final average is computed. Thus extra credit is always optional, and not doing any extra credit work will never reduce your final grade, even if everyone else in the class does a lot of extra credit.

Honor code

Dartmouth's honor code applies to this course, and academic misconduct policies will be strictly enforced. If you have questions, ask!

You may discuss the assignments with other current CS2 students, but your submitted work must be entirely your own. That is, your code and any other solutions you submit must be created, written/typed, and documented by you alone. You may not copy anything directly from another student's work. For example, memorizing or copying onto paper a portion of someone else's solution would violate the honor code, even if you eventually turn in a different answer. Similarly, e-mailing a portion of your code to another student, or posting it on-line for them to see would violate the honor code. Although all students must create and type in their own code, you may help another student debug his or her program, but only after both of you have written your programs. We do encourage discussion of assignments between students, subject to these rules.

If you make use of any code taken from outside references -- for instance, from an off-site web page or a textbook other than the ones used for this course -- you must clearly attribute the source of the code with clear comments in the code that you submit. Code from class examples or the course textbook does not have to be attributed. You do not need to acknowledge discussion with other students on your submitted work. Proper respect for copyright laws as applied to printed materials and software products is subsumed by Dartmouth College's Computing Policies.

On quizzes, you may not collaborate with, copy from, or otherwise share information with anyone. (You may of course ask questions of the course staff.)


Students with disabilities enrolled in this course and who may need disability-related classroom accommodations are encouraged to make an appointment to see the instructor before the end of the second week of the term. All discussions will remain confidential, although the Student Accessibility Services office may be consulted to discuss appropriate implementation of any accommodation requested.