What's your favorite assignment for computational arts students?
Like the riddles of the Sphinx, or the labors of Hercules, good assignments have folkloric qualities. As in any oral tradition, the most memorable assignments are passed from teacher to student, often with small changes. They resist change, yet allow personalization. We asked our respondents to describe the assignments that are closest to their hearts, or that yield especially good classroom experiences.
Let me preface this by saying that sometimes I feel like assignments are my weakness. The tricky thing is to balance a feeling of open-endedness with constraints, so that students can feel creative and make their own thing, but the assignment is not impossible.
I have two assignments to share. One is from the Nature of Code course materials and it's for more of an advanced classroom, for people who've already taken a full semester of programming and who are now launching into learning about motion, simulation, nature, and physics. The assignment is to build your own ecosystem. It's really not a single assignment but a project you might do over a long period of time. It starts by learning to make this one little thing move around the screen, and then later figuring out how to make ten of those move around the screen, and then how to make those ten things see an obstacle in the environment, see each other, and bounce and interact with each other. So [students create] a whole ecosystem out of little miniature parts. I really enjoy seeing what kind of strange worlds people will create, that either mirror things in our real world or are fantastical inventions.
The other thing I really love doing in an intro class is anything that fosters collaboration. It's really hard to do and is a much easier thing to pull off in a physical computing class, although I don't actually teach that. But what I've observed is that when you're building something physical, seeing where the collaboration comes in is more obvious. When learning programming, students tend to think they have to work solo on code projects, when actually, large pieces of software are built by teams of people. One of the assignments I really like is to randomly partner students and have them exchange bits of code and you get these kind of Frankenstein monsters, like, “I made the sun rise,” and “I made a fish swimming,” and now they have a fish swimming through a sunrise.
Golan Levin: That reminds me of an assignment that John Maeda gave a long time ago, which was to take someone else's assignment from last week and “improve” it or modify it.
Right. And where this can also work well with is when teaching object-oriented programming. I really like to say, “Make your class and then give it to somebody else to make objects from inside of their world.” What I love about that is not just the collaboration and having to talk to somebody, but that it also teaches about open-source development and making libraries. Students can't just give somebody else their code—they also have to explain what all the functions do and invent their own documentation, whether that's just explaining it in an email or with good code comments.
Obviously if you were teaching a more advanced class, you might have the class use GitHub or whatever, and create a documentation page. I like trying to keep that spirit of collaboration, learning how to exchange code and also learning about object-oriented programming. All of that works well together.
One that works the best for me is the “drawing tool” assignment and I often give it on the first day. There's something really rewarding about making a drawing tool because you can quickly get at what makes computational assistance powerful, and students also get something that they can share very quickly. One of my big strategies for teaching designers and artists how to code is to get them making as soon as possible, and associated with that is sharing as soon as possible. I want them to have something that they can post on their feeds at the end of three hours and because they are proud of it, they get that little buzz. They get to say, “Check out what I'm making,” and their friends are like, “This is great! How did you do it?”
One of the other reasons I think that [this assignment] works so well at the beginning is that it gets people into this idea of the modularity of programming. I say to them, “Let's look at the command to draw a line and the command to draw a rectangle.” Even though one command draws a line and the other draws a rectangle, they both take four numbers and so they're actually interchangeable. I can just drop the arguments for one into the other. In the beginning of my first two or three classes, the big focus is to get people to repeatedly ask, “Every time you see a number, what would happen if I put another number in there?” and “Every time you see a method, what would happen if I put another method in there?” Because that's where this stuff becomes exciting….I want to get them into that Lego method of programming as soon as possible, and to see programs not as things that are Krazy-Glued together, but as things that can be taken apart and reassembled.
Golan Levin: Let me tweak the question. What are some of your favorite prompts, specifically in the field of information visualization—and maybe prompts that are not necessarily for beginners, but that can be approached by anyone at different levels, including advanced or intermediate students?
In an information visualization context, the one that works the best is to take location-based data and ask students to do something with it that is not allowed to be on a map. I could build a whole course around this assignment. In my data class, students take a big data set of something that is primarily latitude and longitude but as they can't plot it on a map, they have to plot them in some other way. It's really nice because it kind of frees you from constraint. It's a different take on the exact same thing that we were talking about before: I want people to understand that there's no rule that says that you have to plot longitude as a line along a horizontal axis. In binding my student's arms a little and saying “You are not allowed to put this on a map,” it forces them to see it in a different way….More than any other assignment, it gets them thinking about our mental constructs that seem to force us towards making one type of thing with certain types of data.
I am often teaching students who have never been involved in programming, so I focus on getting rid of their fear. In a recent class on data visualization, my first assignment used hand drawing based on personal data and took inspiration from a project called Dear Data by Giorgia Lupi and Stefanie Posavec. First of all, I had the students discuss what they wanted to record in their everyday lives; they chose to look at the dishes and cutlery they use for each meal. So for a week they recorded what items they used to eat with in a spreadsheet and then they had to convert this data to hand drawings. I think it's important to start without coding, but then afterwards I have them interpret their hand drawings in JavaScript.
In my introductory classes, one of my favorite assignments is for learning parameters and variables. The assignment is to create a sketch where there's a change of perspective as you move your mouse across the screen. The question is, how can you subvert the viewer's expectations when they move the mouse? I often show some examples of this from other areas of art, such a video performance work by Anya Liftig and Caitlin Berrigan called Adoring Appetite. In this piece, the two artists pushed strollers around NYC, snuggling and kissing their babies. At some point, the kissing turns to biting and eating, and they chew through the babies’ heads, which turn out to be made of sugar and filled with red jelly. I ask my students, “What would it look like to create an experience this affecting with code?”
I also like the assignments for my more advanced Social Hacking course. My favorite one is where you have to create an API for an aspect of yourself or your life. Students have to pick something and make it controllable somehow by someone else. This is done either using a data feed or by opening up a question to the public; usually it's the second thing. Another one that can go anywhere is I instruct them to create something such as a browser extension, or app or whatever, but they have to make it for one specific person. Students then must start with the person rather than the idea, and I think this helps because it's a different design process. When you are just making something for yourself, it's easy to not be thinking really clearly about why you're making [certain] decisions, but if you are thinking about someone else, then you're forced to imagine the user experience a little more.
The last exercise I like to do is have students write down what they are going to do that week, usually the steps they'll take when working towards a final project. I ask them to write down exactly what tasks they are going to accomplish, and a time estimate for each one. Then throughout the week they are asked to time each task. We then have a debrief afterwards, and they're like: “Well, I thought I was just going to make a simple data viz connecting only one stream of information.” And we find these buzzwords: if you use the word “just,” multiply your estimate by two; if you say “simple,” multiply by four. It's really common that people do not easily anticipate how long things take.
I like to get people to think about the kinds of things they can do with gaming—and not just video games, but gaming more broadly. For example, maybe you want to use a sensor and you want to track someone's position. I'll show them the games I've made—for example, where you can knock things with your head, or when you scream and something happens. I try to expand the possibilities and get them to just dream up crazy games. If the sky's the limit, what are some things that you would like to try and do? Around the same time, I introduce the idea of pervasive gaming [games in which the play experience is extended into the physical world], and you can get them thinking about play outside of the computer. That really works well if you have a mix of artists and game designers, because they can synthesize their interests in a really fascinating way and make games that have nothing to do with the computer and that have very simple rules. I think that that's a really empowering experience that isn't tied to a prior skillset.
My midterm assignment is always to make a dynamic logo that never looks the same when you run the code. I think that's a very typical assignment for me. But for my “favorite,” I think I'll go with another assignment, which is my week on computational typography. Before every semester I always consider cutting this week out entirely, because typography is such a handmade thing; with typefaces, you really need that finesse of tweaking everything. I go to the students and ask them to build a typeface (or just design a typeface for a specific word so they don't have to do the whole alphabet) that has to come from a core set of rules. That means it has to be better done in code than by hand. And that is as broad as it can be: Make a typeface that is better done in code than by hand. For example, each letter in the typeface can be defined as an object in an array. I need to be able to loop over it and use the same process in the for-loop to draw each letter.
This was inspired by John Maeda. [He] has this example in one of his early books, I think it's a pie typeface, two pie charts are kind of overlapping to make an alphabet. [Note: Madsen is referring to “Type Me, Type Me Not” by Peter Cho, shown in our Modular Alphabet assignment.] And my students just always surprise me, making crazy things like sine and cosine fonts. The creativity of the students always amazes me in that assignment.
In my BioArt class, the first assignment starts by looking at the future of synthetic biology, genetic engineering, and design futuring. I use a speculative design approach, and the assignment is to design a product or service that anticipates where genetic engineering or synthetic biology is going in, say, the next 100 years. The students then come up with a sketch of the product or service and also write a page on the future they have envisioned and how that product has an impact on society.
Tega Brain: So it is a critical project that they don't actually have to build in a working form? It can remain entirely speculative so long as it has a criticality to it?
Exactly. In that module we also perform genetic engineering experiments, so the students have some hands-on engagement with these processes and so they understand some of the limits of what's possible. But this assignment encourages them to think beyond what they are capable of actually doing. A semester is not enough time for them to really do anything significant with something like genetic engineering. This way, they get some experience in a lab where they learn what the processes look like, and then I'm asking them to think about where this work is going and what future we are building.
The best assignment that I have is to study and recreate work from an artist from the past. A common example is where I ask students to take the work of James and John Whitney as a starting point and [have them] approach it in two ways. First is to make something inspired by their work—to take a look at their body of work and add a comment to it. [Next I have them] focus on replication and come up with a faithful copy. The ReCode Project by Matthew Epler does a great job at presenting both of these approaches side by side. This assignment can then also be used as a method to talk about how people were working in the ‘50s, ‘60s, ‘70s and to talk about different computational approaches. I like that it allows you to talk about the past and history and not just the technology and code. Taking an in-depth look at the work of another artist, rather than responding to an open-ended prompt, pushes students to produce better results and to take the work they are doing more seriously.
If I'm teaching an audio class with Max/MSP, I'll have everybody build a flanger. A flanger plays two copies of the same sound simultaneously, but slightly offset in time.
Every audio effect on the planet can be demonstrated using the guitar solo from Jimi Hendrix's version of Bob Dylan's “All Along the Watchtower.” Hendrix's secret weapon was this guy Roger Mayer, who built guitar pedals for him that nobody else had. He had the first wah-wah and the first pedal flanger. The flanger originally was a studio technique because the flange refers to manipulating the inner reel of the tape and so it had to be done in the studio. But Mayer figured out how to do it with a capacitor in his delays. The ”All Along the Watchtower” solo has Hendrix switching pickups on his guitar, going from picks to fingering to slide, plus a distortion pedal, an echo pedal, a core, a flanger, and a wah-wah. In that moment in between the second and third verse, you can learn pretty much everything you need to know about audio signal processing….I usually start by playing that and then I show them how to make a delay line and add feedback. I give them the assignment of figuring out how to tweak all the values to make a flanger in Max or something similar, and then they have to bring in a record that uses a flanger and a recording of them copying it. Like bring in a Siouxsie and the Banshees tune, or Kanye West. Kanye uses flangers all over the place. I have my students do this because it's a really simple Max patch to build.
I have the students draw something either by hand or in Adobe Illustrator using only basic shapes: triangles, squares, circles, and lines. Then I ask them to recreate that drawing using code. It's really important that it's something that they draw themselves instead of recreating a painting, because there are a lot of examples of that online from which they could just copy the code.
Tega Brain: I've always wanted to try to start the term with a figure drawing class, but using Processing—hire a nude model to sit for my first programming class and have students represent him or her in code.
Right! I think drawing is useful because some people aren't practiced in it. They think they can't draw and just to have them engaged with that creative exercise is really important, even if they are just drawing stick figures.
My favorite assignment for design students is about rule-based systems in relation to generativity, generative art, and emergence. In this assignment, I ask them to start with a paper and pen and write down two or three instructions. You can't have your outcome in mind first; you need to just start with rules and from there you start to program these rules and they unfold over time. I usually introduce this in week six or seven and it is fascinating for me because in the first six classes they are given more direct tasks—like they have to make a flow bar, an icon, or an emoticon. They are able to visualise what they want to make before they code it. But then when you suddenly introduce a rule-based system they are like “WHAT!? WHAT are you talking about?” It's very difficult for them as designers to comprehend this concept. Like 10 PRINT or Game of Life, it's just a different way of thinking. It allows me to talk about things like chaos, noise, ordering, simulations, authorship—whether the machine is co-creating with you. It also lets me introduce conceptual art and conceptual thinking and focus on process rather than the end result. I'm really able to contemplate how things unfold over time, which I think is a really important perspective from which to think about programming.