I've always thought of programming as a vehicle for exploration and discovery. My first experience with a computer, at the age of 10, was an interactive programming experience with Seymour Papert's Logo language. In a special math class, held in a touring computer lab (our school didn't own computers!) we "discovered" the properties of various geometric primitives by interactively driving a little turtle around a monochrome screen through issued commands in the Logo programming language. I was hooked!
The ability to discover and experience world building is a relatively unique privilege afforded to computer programmers. Programming my little turtle literally helped me 'experience' geometry. How fortunate we are to be able to conceive of some microworld and then to attempt to create it, without requiring anything more than a computer and some power. In my early 20s, I remember thinking that with time and effort, I really can build anything. While clearly naive, such a mindset is something I truly hope to never outgrow.
Alongside my early love of programming was a love of music, and inevitably these two worlds collided. My first degree was in jazz trumpet performance—but since my early 20s, my primary musical instrument has been a programming environment. The environments I built were able to modify the sonic and visual landscape of the real world in real time when explored by a programmer. To paraphrase Stephen Holtzman, computers are of our time, and we are compelled to explore them.
My interest in programming music and sound has never been with the intention of automating its production. Instead, I create each new musical work as its own program, and I have spent inordinate amounts of time developing the programming languages that I use to help me construct these bespoke musical microworlds. At its extreme, the construction of this music becomes a real-time process where a complete performance is "livecoded" on the fly in front of an audience. What fascinates me about creating music in this way is that, at its best, there is an "ideal" point where the code becomes an essential component of the artwork.
An unintended consequence of building microworlds has been the number and depth of rabbit holes I've dived down. My younger self would never have imagined that my computer music exploration would lead to interests in compiler design, type theory, analog simulation, time predictable architectures, digital signal processing, cyber-physical systems, distributed systems, and more. All of these technical interests have developed in the pursuit of real-world goals.
Another way I like to explore the world is through the creation of programming languages. My languages have been used to operate robotic telescopes, steer physics simulations on supercomputers, build massive distributed interactive computer-graphics installations and to play robotically controlled acoustic pianos in concert halls worldwide. What ties these disparate ideas together is that my languages allow for these systems to be modeled, built, modified, and controlled through a programming language interface in real time. Code in these interactive programming systems is often ephemeral, being an incomplete representation of the state of the system and the world in which it runs. This is a style of programming that focuses on code as a means of exploration first and of production second. A means to orchestrate complex systems at the meta level.
Throughout my career in computing, I have been fortunate to have roles in both industry and academia, as the CTO of a public company, Senior Research Fellow, and company founder. I have thoroughly enjoyed every position I've had. As the world becomes ever more programmable, I continue to look for increasing opportunities to orchestrate the world at the meta level.
The Digital Library is published by the Association for Computing Machinery. Copyright © 2021 ACM, Inc.
No entries found