Apart from architecture, I have other interests in music, coding and visual performance. When I found out they exist under one activity, live coding, I became genuinely intrigued. After different experiments with [gibber](https://gibber.cc/), [tidal cycles](https://tidalcycles.org/index.php/Welcome), [fox dot](https://foxdot.org/), [sonic pi](https://sonic-pi.net/) and [orca](https://hundredrabbits.itch.io/orca) I realised I should get back to doing architecture, but wondered if architecture could learn something from the burgeoning "algorave" music subculture? As a caveat, I consider blips, bleeps and static to be music. I have yet to experience one in the flesh, but footage of algoraves are freely available, my favourite so far being [Canute](https://www.youtube.com/watch?v=uAq4BAbvRS4).
If you search for live coding, you will likely find people teaching coding skills in real-time, my favourite is [Daniel Shiffman](https://www.youtube.com/channel/UCvjgXvBlbQiydffZU7m1_aw). If you are looking for live coding music, you need to search for live coding music performance, here is an excellent introduction by [Alex McLean](https://www.youtube.com/watch?v=-QY2x6aZzqc).
This blog post is a bit of think piece about what architecture can learn from live coding, and what is not relevant. To do that requires firs describing what live coding is. In short, live coding music is an improvised composition of synthesised sounds or samples using a text coding language. Live coding experience entails, music, visuals, and code on a large screen showing the artists decisions - all be it in a rather esoteric way, their motto is ["show us your screens"](https://toplap.org). Beyond the keyboard, the text-based language of choice, some open-source, others private, provide instructions to software on what to play and how to play it. From an audio point of view, this means triggering samples or shaping sounds via digital synthesisers, in the case of tidal cycles this is the ["superdirt"](https://puremagnetik.com/blogs/news/creating-algorithmic-sounds-with-tidal-cycles). Effectively code delivered on-screen acts as an interface between human and sound through pre-programmed functions. When math becomes involved things get complex through patterns. Depending on the software used to output sounds, patterns describe arrangements of data describing flexible sequences, that adjust through time or volume. Therefore, while a live coding performance requires both interface and sound engine, it is the live coding software that creates an environment for defining and combining patterns that map data onto sounds for an audio experience. Live coding is sometimes referred to as 'on-the-fly programming', 'just in time programming' and 'conversational programming' which highlights the role of language as a means to rapidly generate patterns of data, expressed as information in visual and auditory performance?
In the digital age, Architecture has a sophisticated engagement with code and mathematics and has a rich history of experimenting with computing and robotics in design and fabrication. In some architectural practices, algorithms provide a means to produce tools for image and material form making that rival the traditional notion of hand drawing. The procedural logic of the computer and the ability to store and manage large sets of data mean many architects design space through virtual geometries. Given that some architects, particularly within academia, are not strangers to algorithms raises the question of whether live coding could provide an alternative creative practise to design. To investigate live coding for architecture requires unpacking its practices that speak most to architectural practice, those of improvised creativity, creating through patterns, and an interpretation of practice outcomes.
In Live coding improvisation occurs on two levels, on the one hand, the artist has no pre-formed plan of what to do, so they apply learnt knowledge of the language and apply experience to re-create aspects previously successful performance. On the other hand, the use of probability sets up an unpredictable output from within the software. These two types of improvisation, one human, the other non-human, enter into a conversation where the artist reacts to the performance while the software responds through calculating the interactions between layers of code. Unlike in artificial intelligence, the is no suggestion of computer autonomy, but the computer does have a degree of agency as it can change the performance.
A coding language enables improvisation by combining collections of software functions into smaller pieces of written code. Live coding languages re-frame the possibilities of software into affordances and constraints relevant to the informational output. A control over choice, through code, make possibilities more readily available and discoverable. In short, a coding language can reduce the amount of choice available, to free cognitive space to explore outcomes creatively. A live coding language, therefore, provides an interface between a performer and music synthesis software that shapes the possibilities of music composition by employing patterns.
The patterns afforded through short lines of code connect the performer with musical concepts, such as rhythm, key and harmony, with little required musical knowledge. The language interface encodes knowledge for immediate access. The combination of language interface and underlying software produces an environment to produce music. An environment that ties together performer and underlying software results in sounds that can either agree with all the rules of musical composition or break them all. The ambition is to reduce the time required to produce an outcome, but also for code to shape a world for creative arrangement. In short, the programming language interface becomes an instrument to learn and master.
Ludwig Wittgenstein's famous quote is "the limits of my language mean the limits of my world" meaning that a "world", the extend of reality, is shaped by the means of communication. Wittgenstein's philosophy is useful to understand language in a live coding context, as limiting a possible sound reality by managing relations between complex parts. A language provides a means for humans to manage complexity. Some in live coding research are exploring the notion of personal world-making through mini-languages. The [Alice Lab](http://alicelab.world/) of York University, Toronto, Canada uses creative coding technology to create artificial worlds whose rules are written by participants interact within them. This "computational world making" invites workshop participants to develop mini-languages involving grammars for defining musical patterns, for computer parsing, meaning turning raw text into meaningfully-structured data and/or actions. In this relationship, a "mini-language" becomes a high-level representation of a data pattern. The mini-languages produce scaffolds for externalising musical thinking and enabling greater direct engagement with music, without the need for knowledge. The languages produce new worlds by encoding knowledge into the rules of a system, meaning the outcomes will always agree with the agreed patterns in a create domain, such as music theory.
An improvisation technique closer to the visual-based practice of architecture is Visual Djing, or Vjing, that often complement live coded music performances. Live coding in VJing works in much the same way as its musical partner, a language and software form an environment for visual production by quickly accessing and arranging pre-determined mapped software. One example is Live Code Lab that provides access to three-dimensional primitive geometries and structures of manipulation via the conditional logic of computer programming. The outcome for live coding often includes audio as data input into the mapping process, with changes in form and colour reacting to the elements of musical variation. The Guardian provides a fascinating overview. Coding visuals and sounds offer freedom in expression as the act of mapping become a creative practice. However, there are some concessions made with live coding, the environment constrains the possibilities available for performance or creative practice.
I intend to explore the idea of designing language interfaces as an alternative to the dominant paradigm in digital architectural practice surrounding software tool making. My initial thoughts are that the arbitrary nature of live coded mapping does not suit the needs of architecture, which must balance practical and aesthetic needs. However, with that said, live coding affords rapid access to patterns, and pattern has a rich history in architecture. Theories and practices that use patterns to design architecture connect form to practical and aesthetic experience, positioning pattern as a possible focus in live coding practice.
The first stage of this research is to understand the connection between live coding and the patterns inherent in music, to see how a constructed language produces a world for creativity. It is also necessary to understand is live coding sets up any associated framework for interpretation that an audience must learn to appreciate. I parallel I will explore the use of pattern in architecture as a design heuristic, first looking at early mathematical analysis of style, to systems-theory influenced pattern languages and shape grammars.