Creative Coding

Computational Thinking, Creativity, Education, MSU MAET

As tools change, so do ways of expressing creativity. In prehistoric times, pigment and cave walls were readily available. Today we are surrounded by digital tools used for communication, commerce and calculations, yet from their first days computers were repurposed for artistic means. My father-in-law tells a story of early computers at Chrysler being used to create pictures of Snoopy in punch card patterns. One of the first video games, Tennis for Two, was made in 1958 using an oscilloscope. The stereotypical notion of art in a frame or on a pedestal is changing as subjects such as big data, Twitter trends and the quantified self become relevant.

Finding ways of making sense of this influx of information and the impact recent technology has on the human condition is aided by a problem solving approach known as computational thinking. Techniques such as algorithmic thinking, abstraction, logic, and problem decomposition can be applied across disciplines and in means of expression. Using computation not just as a tool but as a partner to achieve a goal allows for techniques that would otherwise be difficult to impossible, including in the creative realm (Mishra, Yadav, & the Deep-Play Research Group, 2013). I have had students ask “Who is the artist?” after making bristlebots that created patterns of paint through their movement.

Pioneers in computing needed a deep understanding of the technology to know how to make use of it. Early programmers were working in machine code, then assembly, then programming languages. This need to code “close to the metal” limited accessibility of the medium. The solution lies at the core of computing: creating layers of abstraction. Abstraction allows for the essence of an idea to become visible by removing irrelevant details (Henriksen, Fanhoe, Mishra, & the Deep-Play Research Group, 2014). In computing, abstraction hides details unimportant to the task at hand, and allows for instructions that can be used as general solutions for a range of similar problems.

Over time, further layers of abstraction were built that allows for less focus on the syntax of the instructions and more on intuitive, built-in functionality that allow a wide range of artists, designers, scientists, mathematicians and other professions to use computing for creative means. Tools such as Processing, OpenFrameworks, Cinder, Pure Data, TouchDesigner, D3.js and the like are intended for this purpose and do not require formal training (although it helps). If abstraction is at the core of artistic expression, as the Root-Bernsteins (1999) claim, these tools facilitate that abstraction by providing a focus such that the medium becomes means to an end, not a distraction.

I chose to explore patterning, another computational thinking skill, through Scratch by creating colorful spirals. I began by with a simple shape by using a sprite in the shape of an “O”. Scratch supported my desire to play with different techniques by readily showing my my options with blocks organized in drawers. Play is of course another key creative skill identified by the Root-Bernsteins (1999) and essential in the development of original ideas. I tried rotating and moving the sprite in different amounts before finding a pattern that would spiral out. I could then find ways to abstract this process such that it could be changed easily. With each loop of rotations/translations, the angle and number of times to go through the loop changed, in order to create a different pattern each time the canvas was reset. This is akin to creating a series of works that explore variations on a theme, and would be valuable to students by allowing them to not simply state “I’m done” once they reach a goal, but find how to take that further.

Creativity in computing is not limited to visual art. In a previous class, I discussed with classmates the desire to explore a narrative through code. We attempted to define a story algorithmically, but in the end perhaps ended up with more of an abstract representation. This idea was able to be implemented as a random narrative generator in Scratch, as the program uses abstraction in the form of sprites. Each sprite can be thought of as an actor in a play, or as an object encapsulating information. This is another key aspect of abstraction in computing: the abstraction of data. This is used when we ask students to code in an object oriented, data first fashion (and I see no reason not to, given how it makes code easier to understand in the end). In the story generator, characters had different motivations, skills, and proximity to each other, which allows for the story to carry out automatically, once those conditions were set. Parallels could be made in a character driven narrative, where the action seems inevitable once the characters are fleshed out.

Even just creating solutions to everyday problems through computational thinking requires creativity, perhaps of the little-c variety, but it must be recognized and encouraged to allow the big-c Creativity to be nurtured and expressed.

References

Henriksen, D., Fanhoe, C., Mishra, P.,& the Deep-Play Research Group. (2014). Rethinking Technology & Creativity in the 21st Century: Abstracting as a trans-disciplinary habit of mind. TechTrends, 58(6), 3-7.

Mishra, P., Yadav, A., & the Deep-Play Research Group. (2013). Rethinking Technology & Creativity in the 21st Century: Of art and algorithms. TechTrends, 57(3), 10-14

Root-Bernstein, R. S., & Root-Bernstein, M. M. (1999). Sparks of genius: The thirteen thinking tools of the world’s most creative people. Houghton Mifflin Harcourt..

 

Leave a Reply

Your email address will not be published. Required fields are marked *