Week 1: Introduction
March 10, 2023
Having observed and participated in some discussions about music, there seems to be this idea that there exists a competition between creativity and sheer performance. On the one hand, one can learn to play some very technical piece with extreme accuracy, or have very strong control of the intonation of their voice. These attributes are often seen as being extremely valuable, and are argued to produce “objectively better” music. Whether that term is truly applicable is up for debate. On the other hand, there exists music which may forgo traditional musical prowess, to create something which feels more imperfect yet compelling. This move away from sheer technical prowess can be seen in several movements over the past few decades. This can be seen with the rise of “auto-tune” in pop and rap music, or the use of simpler power chords in different genres, like grunge and punk.
Many seem to view the Computer Science field as being indebted to efficiency and technical prowess above all else. Search engines, operating systems, application back-end design; a lot of it can often be inscrutable, and designed primarily for efficiency. Even if the code-base is readable to the designers behind these systems, its designed so that the end-user should rarely have to open the hood and consider what is powering these programs. Even among video games, which may be viewed as a creative medium, it’s still often considered that the writing, visuals, and music are the creative element, where a code-base is just the backbone for this creativity.
How Does This Struggle Between Creativity And Efficiency Apply To Programming Itself?
While CS is seen more often as a sport than an art, I hope this project will explore one creative element of Computer Science, Esoteric Programming Languages. The introductory task used to show students the basics of different programming languages is to have them print the words “Hello, World!” This can look slightly different in many of the more-commonly used languages, but often they’re relatively simple to understand:
Python: print “Hello, World!”
Java: System.out.println(“Hello, World!”);
JavaScript: document.write(“Hello, World!”);
C: return printf(“\nHello, World!”);
This is what the same program can look like in Piet, the main esoteric language this project is focusing on. There are different variations even within this language, but they all functionally produce the same output.
The creator of the language covers the exact details of how these pixels represent different commands on his site (https://www.dangermouse.net/esoteric/piet/samples.html), but to succinctly break it down: A “pointer” starts at the pixel on the top left, from there it travels around the image, being pushed in the direction of certain values. Based on the color of the pixel the pointer arrives at, different commands are executed. These can range from adding a value to a table, changing said value, or printing that value to the console. At their core, most programming languages function in a similar way, by changing individual data values through commands, but Piet does it in a radically different way.
Over the coming weeks while working on this project, I hope to describe more in-depth what the other aspects and topics of the project are, and what I envision the final program to be.