Creative coding; discovery and joy

While I’ve spent the majority of the last decade thoroughly entrenched in the industry, the past few months of 2012 have seen me experiment a bit with the world beyond game design. During this break from the games biz I’ve been playing around with hardware hacking, interactive and generative installations and artwork, and delving into some theory on larger questions of art, design, and technology. As such, the following post deviates a little bit from the usual games-world content.

The use of the word “creative”, especially in the context of something like “industry creatives vs. non-creatives”, has always struck me as problematic. That notwithstanding, “creative coding” is something of a useful idea. There should be a distinct difference in the way programming is taught to artists from the way programming is taught to aspiring engineers, and creative coding ideally is a reflection of this.

Creative coding is about building something that is in the end usually non-practical. It requires practical components to be coherent and useable, but is most often not about building something that is explicitly utilitarian.

I’ve had a chance to participate in quite a few classes on this subject during my time off this year as well as in 2011. In these classes, most of the students in these classes are new to programming and come from various backgrounds in design or the arts. Processing, being extremely visual, is the natural choice. Nonetheless, I am often stunned at the failure of these classes to realize their potential.

At their best, they teach the basic concepts of programming in an exploratory, visual way. But most of the courses I’ve experienced this year were excrutiating live coding example after example after example, or long discussions and explanations on the technical nature of the issues at hand. These discussions are all eventually crucial to be sure, but they are not the way to introduce these ideas to design students in something like Processing.

What these classes should be about, before anything else, is the joy – the joy of exploration and discovery.

I keep coming back to this video, years later, to explain to people what I mean about joy. One of the game designers I admire the most, Steph Thirion, used to teach classes on creative coding. This particular video was using footage of the results from a 6 hour crash course with students who had no programming experience. They began with the source code for a simple breakout clone provided by Thirion, and ended up with this beautiful montage.

The wonderful thing about the computational, the generative, the procedural, is that things emerge that often cannot be accurately predicted by the person responsible for the underlying logic.

When you have a system and logic as a starting point, with creative expression as a goal, all it takes is a tiny bit of context followed by experimentation. You learn something new – “I didn’t know THAT would happen!” – and your brain follows up with “What if I do THIS…?” Its something like Jon Blow’s explanations on ‘letting the game design itself’ – its a process of taking a step, seeing something new, and taking another step, and something emerges in and of itself.

It’s also analagous to design thinking in general: design has long been discussed as an exploration-focused domain, rather than a problem or solution-focused one. Problems and solutions emerge and evolve together.

There is a joy to this process. There is a beauty to this process. It makes people feel wonder and want to understand and explore more. And for people who already have a design background, its familiar. This joy is why I started programming in the first place. Exploration is the key, and Thirion gets it – this video still gives me goosebumps every time I watch it.

About Bryan

game designer, facial haired, racially ambiguous.

22 August 2012 by Bryan
Categories: commentary | Tags: , , , , , | 1 comment

One Comment

  1. Pingback: Creative coding; discovery and joy | The Pretentious Gamer | paperpixel

Leave a Reply

Required fields are marked *