The discovery of programming as an art form
As students learn how to program it is essential they dance in that intangible ballet beyond ones and zeroes, coding with wonder. In this world of endless choices, where social media reduces people to lifestyle consumers, we must encourage our students on their voyage of discovery, to be creative coders and thereby to become productive as algorithmic artists.
Programming is an art. It is a pursuit for curious problem-solvers and creative minds. It is the creation and discovery of algorithmic patterns. We know that it helps to develop logical thinking but it also develops the ability to be creative. Serious artists of all walks think logically, from the patterns followed by musicians, to the colours and shapes defined in architecture, figurative painting and abstract expressionism. There are endless ways to program and akin to painting a figurative landscape where one might expect clouds and trees to have their respective places, many useful patterns in programming will have a familiar look and feel regardless of the programmer. Sit three painters in Monet's Garden in Giverny and you will get three different yet familiar representations of the bridge and lily pond surrounded by trees. There are structures, paradigms and styles, but, to a creative coder, the development of a style stems from an innate desire to express oneself. Programmers are artists, with the impetus to make or remake in their own way something that is both useful and elegant.
Professor Robin Hill defines elegance as: minimality, accomplishment, modesty and revelation. First, what we ultimately want to achieve as programmers, is short, simple programs; effective, minimal solutions. Second, a program should accomplish what it is designed to do. Third, modesty means coding restraint, not relying on esoteric techniques or cryptic shortcuts. Finally, our programs should reveal something new or obvious. It might sound strange, but the program should embody its function, revealing what it does without requiring further explanation.
In the use of text-based programming languages, one is playing with patterns of thought, trying to make our artwork the medium for putting our ideas across, getting the job done, allowing people to 'get the picture,' as it were. Programming languages tend to follow a left to right top-down script approach, just like English. Even with graphical 'drag and drop' coding apps this is apparent. Are there other approaches to the use of a highly structured English? In practice, mostly not. Interestingly however, computer scientist Ramsey Nasser has developed an Arabic based programming language: Alb (قلب).
Programming is not a linear process, despite what you may think. There is, however, always a systematic approach to arriving at a solution, comprising many small steps. As the Chinese proverb says, 'A journey of a thousand miles starts with a single step.' On this voyage of discovery, the final written program means nothing until it is translated into the 'machine code' that computers actually use. When the program is finally run, it causes machine code instructions to cascade through the processor hardware making it function.
Mathematicians, musicians and painters may be more readily equipped to understand aspects of how to program because their disciplines depend on algorithmic thinking and the ability to uncover patterns. When we understand that we all have an innate creative ability, we are compelled to agree with the artist Joseph Beuys that 'jeder mensch ein kunstler' (everyone is an artist) with a capacity for creative expression.
Like taking up painting or piano, one can have lessons as one starts the journey into code. There is some utility in this as it gives the opportunities, with the right teacher, to learn by having the techniques modelled for us by an expert. There is no better way to start the learning process than through observation and mimicry. This is the practice of building your own programming skills based on worked examples.
At Rochester Independent College, we are proud of the space we give our students to explore new creative worlds in a safe, secure environment. We also know that guided discovery is an important part of the process. There is no better way to reinforce learning programming than by doing, so we encourage our students to push the boundaries of their own limitations.
Students new to the art of programming can start their discovery with a few key words from the language or a few snippets of code, exploring for themselves what it does. We encourage our students to play with the code. Trying to make it do something different to the exemplar is the next step, where students change the code to make it their own. For our students, being able to explain to oneself what is happening with the examples is key. It creates the inner dialogue, which helps to build a framework for understanding. This eventually leads to the ability to elaborate on the model presented, creating new pathways of thought, enabling yet further creativity to occur.
This is how we help to nurture creative independent learners, ready to try new things wherever in the world their next steps take them.