Do experienced programmers achieve the ability to code instinctively or achieve a visceral understanding of a path to follow when deciding how to solve a problem? Certainly the ability to program does not rely on muscle memory other than typing or clicking a mouse, but I believe there are reflexes that are developed over time that aid with the ability to create an algorithm.
Learning to program is similar in some ways to learning a new language. There is the need to adhere to a certain syntax that can vary from language to language. Languages also have different built in structures and functions can change how the language is used. Even if you are experienced in one language, gaining a familiarity with the strengths and idiosyncrasies of a new language takes some time. Building that comfort level is in a way developing a mental muscle memory that allows the programmer to focus on higher level problem solving. Beyond programming syntax, there’s the need for software architects that can determine the shape of the the entire project or platform, and an even more intuitive sense is needed.
Abstraction is representing an understanding such that the “essence” of an idea is reached. It allows us to recognize similarities between ideas or objects that would otherwise be obscured by irrelevant details. Using multiple senses and patterning can be helpful in perceiving the topic in a focused way (Henriksen, Fahnoe, Mishra, & the Deep-Play Research Group, 2014).
When first tackling the abstraction of an algorithm, I struggled with the idea since algorithms are themselves abstractions, a way of working with generalized, reusable instructions that can be applied to many specific situations. I was encouraged to know that “abstracting is difficult for people in every discipline” (Root-Bernstein & Root-Bernstein, 1999, p.77). After many false starts and rethinking of my topic, I was able to understand that there are many ways to abstract an object or idea, and the purpose of abstracting determines what details are unnecessary to be stripped away and what lies at the heart of the matter. I tried to think how I would explain the shape or flow of a program to students or to visitors of the museum with no experiences with programming to give it that necessary context. The best abstraction could be easily understood by many people in that context and not require specific domain knowledge.
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.
After weeks of struggling with abstracting the core idea of an algorithm, I chose to express an algorithm as a path.
Just as with patterning, algorithms are closely tied to the idea of abstraction, since they are themselves abstractions for problem solving. It is in fact the discovery of patterns in information that allows for the creation of algorithms that can tackle a variety of similar problems. Wing (2010) succinctly states that “an algorithm is an abstraction of a process that takes inputs, executes a sequence of steps, and produces outputs to satisfy a desired goal”.
For instance, a union-find algorithm can be used to find if two points are connected, such as in this image:
Patterning is finding order or creating combinations within a system that can seem chaotic. When first considering patterns in algorithms, I found them to be intrinsically linked. It was impossible to think of a pattern that could not be described through an algorithm, since algorithms use patterns to reach a desired goal. I focused on the patterns that many programming languages have in common, such as the use of loops. At this point in my thought process, I was focused on the abstraction found in language needed to handle many different situations that shared a repeating pattern.
To find new ways of perceiving patterns, I decided to investigate the paintings of Gene Davis referenced in Sparks of Innovation. I was intrigued by the idea that “Davis notes his artistic patterns bear resemblance to patterns in music” (Root-Bernstein & Root-Bernstein, 1999, p.117). After looking at several dozen images of his work, I decided to try to recreate his Jack in the Box painting using an algorithm, since the repetitive nature of the work would allow me to take advantage of the loops I had begun with
Could algorithms aid in critiquing art? The Feldman method taught in many undergrad art classes suggests that following pre-determined steps could at least aid the novice. I chose to analyze what I felt to be a visual representation of order and disorder with Jack-in-the-Box by American painter Gene Davis. Davis described his work of colored “intervals” by stating “‘There’s a system there – an order – which I discover after the fact.’” (Root-Bernstein and Root-Bernstein, 1999, p. 117). Simply visually perceiving the work provides some clues about this order, as you can see in this recreation:
Patterns lie at the heart of algorithms. If we think of an algorithm as a method for problem solving distilled to the simplest and perhaps fastest form, pattern recognition allows us to achieve that simplicity. The resulting algorithm is itself a set of patterns. Finding and using patterns when creating algorithms is a skill useful in all walks of life, since we are constantly looking for shortcuts. Google Education identifies pattern recognition and generalization as a core computational thinking skills, used to determine how to interact with others, when to buy stocks at the cheapest price, or solve math problems quickly.
Mark Newport, artist-in-residence in the Fibers department at the Cranbrook Academy of Art, generously provided his perspective on creativity though an hour-long conversation. Mark thought of creativity as a way of “looking at problems and opportunities in a way that seems less conventional” but also “people doing things they’re not supposed to do, but it works out.” His work with superhero costumes that look like a “onesie” is a good example, which takes two ideas, pop culture and knitting, and combines them in a new way, satisfying the novel aspect.
I’ve begun a project that will allow students in a high school psychology class conduct a simple sleep study in their home using an Arduino and an accelerometer. The accelerometer will be attached to their body to record body movements during the night, in an attempt to discern when they are in deeper sleep cycles as they lay relatively motionless, and when they may be tossing and turning. I’ve tried this a few nights myself to see how well it worked, and have begun to try different ways of analyzing the data.