TF 10:30-11:50
Room 14-400


Chris Shaw, shaw AT

14-350 Central City Tower, 778-782-7506

Office Hours:  by appointment in my office 


Teaching Assistant

, AT

Lab Hours: 12:00-1:30PM Tuesdays

Office Hours: TBA, or by appointment

General Information

The goal of this course is to learn Java programming in the context of an art and design practice, that is, to understand computation as an expressive medium. We will juxtapose reading and discussion of seminal articles in computational media (from the New Media Reader) with Java programming projects designed to exercise specific technical skills as well as encourage conceptual explorations in computational art and design. Anyone working in new media will eventually be involved on interdisciplinary projects in which the ability to program will be a strong asset, if not a necessity. Even if in your future career as an artist or designer programming is not a large part of your practice, this course will empower you to communicate confidently with programmers, and thus deepen your interdisciplinary collaborations. And perhaps a few of you will become fascinated with the expressive possibilities opened up by programming, and will choose to make computation one of your primary media.



There are six projects. Each of the projects will explore an expressive possibility of computational systems and exercise specific Java programming skills. With each project we will read and discuss a number of seminal readings in new media where the conceptual explorations in the readings intersect with the project.

In addition to the projects, there are smaller weekly assignments. These weekly assignments are designed to exercise specific programming and software design skills.

Each student is required to show one of his or her projects at the demo day at the end of the semester.


There are 105 points possible in the class.


60 points

(6 projects, 10 per project)

Weekly assignments:  

30 points  

(6 assignments, 5 per assignment)


15 points

(roughly 1 per week - in class preparedness)

Helpful citizen:

10 points extra credit



Every week, the TA will run a lab. Sometimes this will be an open lab where the TA will be available to answer questions as you work on your projects, and sometimes the TA will give presentations on specific features of Processing, Java, or the class libraries. 

Notes on Reading Head First Java

Head First Java is written with the assumption that you're using raw Java, not Processing on top of Java. There are therefore a couple of changes necessary to make examples from Head First Java run within Processing. 

First, whenever you see System.out.print or System.out.println, replace this with print or println. Processing's print and println commands print to the scrolling pane in the bottom of the Processing environment. Java's System.out.print (and println) commands print to the console window that was used to start the Java program (in this case Processing), a window that probably doesn't exist unless you started Processing from the command line. If this doesn't make too much sense, don't worry about it; just do the replacement. 

Second, you'll see that every example in Head First Java has the method public static void main(String[] args) somewhere in it. For a "raw" Java program, this is the entry point, the place where Java starts executing. For a Processing program, it just starts from the top of the file if we don't have a setup() method, or the setup() method if we do. Whatever code you see in the main() method can be moved into the Processing top level (not in a method, or in the setup() method). If a class only contains a main method (this is true of any Head First Java classes that have TopLevel in the name (e.g. TestTopLevel), then you can get rid of the class entirely. In Head First Java, any class with TopLevel in the name is just there to provide an entry point; the class doesn't have any additional state (ie. class variables) that you have to worry about (in a sense it's not a "real" class). If the main() method appears in a class that has variables, and possibly other methods, then you have to keep the rest of the class, and just move the code from main() into the Processing top level (not in a method, or in the setup() method). Here are some examples. 

Additional Programming Resources

Sun's Java site has a nice tutorial.

The docs describing the Java class library are available for online viewing and for download (near bottom of page). 

Programming Environments

We will use Processing, an environment built on top of Java. All code you write in Processing is Java, but Processing provides a number of built in classes that make graphical operations easy, as well as a programming environment that supports script-like Java programming (that is, easily being able to write snippets of code and immediately execute them). It will probably be useful to have Processing on your own machine. Please download it 


The professor reserves the right to modify any of these plans as need be during the course of the class.