# Live Coding

O Live Coding, por vezes referido como programação on-the-fly ou codificação ao vivo, é uma prática de programação que torna a escrita do código como parte integrante do programa em execução. Desse modo, novos trechos de código podem ser inseridos, removidos ou modificados em tempo real. Em tempos mais recentes, tem ganhado destaque nas artes cênicas e no estudo da criatividade, já que é frequentemente utilizada para criar mídia digital baseada em som. Embora seja prevalente na música, esta técnica pode ser empregada em trabalhos audiovisuais, em instalações artísticas, no controle de sistemas de luz, geração de passos improvisados de dança e de poesia, e ser combinada com composição algorítmica e demais conceitos da computação musical. Normalmente, o processo de escrita do código é tornado visível para a audiência.
O Live Coding tem sido frequentemente associado a estilos musicais contemporâneos, como a Electronic Music Dance (EDM), já que favorece o design de ritmos e não requer um treinamento extensivo de musicalidade. Já os codificadores ao vivo são retratados como “artistas que querem aprender a escrever códigos ou programadores que querem ser expressar de forma artística”, resultando em uma junção de técnicas de programação, composição e performance.
Existem diferentes abordagens para o Live Coding, mas uma bastante comum é inspirada na improvisação do Jazz, onde a música é desenvolvida e moldada a partir de interações ao vivo entre os musicistas e das respostas do público.

## História

Alguns autores argumentam que a técnica de codificação ao vivo surgiu na década de 1950, quando Antonio Maria Fior e Nicolo Tartaglia, dois matemáticos italianos, participaram de um torneio que tratava de equações cúbicas. Entretanto, surgem algumas divergências por conta do desafio e da codificação terem durado várias semanas, de modo a não ser diretamente comparável com as performances de curta duração que existem hoje.
Mas com o advento do microcomputador na década de 1970, os computadores finalmente se tornaram pequenos o suficiente para caberem no palco, podendo ser utilizados como instrumentos de execução. Em 1980, o The Hub, uma das primeiras bandas que utilizaram recursos computacionais para criação artística, permitiu que o público visualizasse seus monitores e suas tomadas de decisão, enquanto que uma das primeiras sessões conhecidas de Live Coding neste formato é atribuída a Ron Kuivila, em apresentação realizada em Amsterdã, em 1985.
No final da década de 1990, a arte através de software continuou a evoluir, explorando a beleza de algoritmos e utilizando-os como uma nova forma de expressão. Com a expansão do poder computacional e dos meios tecnológicos a partir do século XXI, tornou-se viável a geração de áudio e vídeo em tempo real. Seguindo essa tendência, a dupla SLUB, formada por Alex McLean e Adrian Ward, fez sua primeira performance de Live Coding, utilizando um ambiente de criação feito em Perl e RealBasic, e um projetor para exibição do código-fonte. Quase a mesma época, Julian Rohrhuber fez o primeiro experimento de codificação em tempo real na linguagem SuperCollider. Desde então, um número crescente de pessoas começou a se expressar artisticamente através de algoritmos.

## Técnicas

Uma série de técnicas foi desenvolvida ou apropriada para fins de codificação ao vivo. Algumas delas são debatidas a seguir.
Representação e manipulação do tempo: a necessidade de lidar com áudio e vídeo em tempo real levou ao desenvolvimento de novos recursos para as linguagens de programação. Através da incorporação mútua de subsistemas imperativos e declarativos, a linguagem de programação SuperCollider construiu uma biblioteca que permite que especificações incompletas e provisórias possam ser reescritas em tempo de execução. Já a linguagem ChucK introduziu uma abordagem à programação fortemente sincronizada, incorporando o tempo de precisão ao fluxo de controle através de uma sintaxe concisa.
Outra abordagem funcional representa os padrões como combinadores operando sobre funções de tempo, semelhantes às técnicas de programação funcional reativa.
Programação multiusuário e memória compartilhada: este tipo de programação foi desenvolvida no contexto da criação musical em grupo, através de aplicações do sistema Republic que foi criado e empregado pela banda em rede PowerBooks Unplugged. O Republic é integrado à linguagem SuperCollider e permite que os participantes escrevam código ativo de forma colaborativa e distribuído pela rede. Existem esforços semelhantes em outras linguagens, como a Impromptu, Overtone e Extempore, que utilizam espaço de tupla distribuído e suporte a sessões multiusuário, onde qualquer programador pode intervir no código em tempo real.

## Vantagens do Live Coding

* Flexibilidade
* Representa um grande desafio intelectual
* Nova forma de improvisação
* Gratificação por ver, em tempo real, o resultado do esforço produzido
* As linguagens são imensamente ricas e cheias de recursos que podem ser utilizados com propósitos artísticos

## Ambientes notáveis de Live Coding

Em teoria, todo ambiente de programação com a capacidade de produzir som e uma implementação razoavelmente rápida do ciclo de execução pode ser usado para Live Coding. Dentre estes ambientes, alguns se destacam, como:
Sonic Pi: ambiente de Live Coding que apresenta sintaxe simples e organizada, recomendada para iniciantes na música e/ou programação, garantindo que eles se concentrem somente nos conceitos-chave do processo de criação artística. Por conta de seu caráter interdisciplinar, auxilia em uma ampla gama de assuntos, como: desenvolvimento de habilidades artísticas, manuseio de tecnologia de ponta, raciocínio lógico, melhora das abstrações matemáticas, lições sobre improvisação musical, composição e manufatura de instrumentos eletrônicos. Ainda, pode ser considerada uma tarefa lúdica.
Pure Data: ambiente de programação gráfica, usado para composição interativa e síntese de áudio em tempo real, permitindo colaboração simultânea entre músicos conectados em uma mesma rede, seja ela local ou remota. Pode ser utilizado como engine de som em diversas outras aplicações.
ChucK: marcada por auxiliar na composição algorítmica para síntese sonora, gravação e exibição de efeitos visuais. É focada em ser proativa e interativa com o usuário, permitindo ao programador escrever códigos de maneira mais rápida e simples.
SuperCollider: linguagem orientada a objetos, com foco na composição algorítmica e síntese de áudio ao menor esforço. Sua principal função é transformar conceitos musicais em funções ou métodos, criando música a partir de manipulação desses elementos através de blocos gráficos. Destaca-se pelo seu dinamismo e brevidade, permitindo aos usuários criar estruturas que geram eventos de maneira agrupada.
A seguir, são listados os demais ambientes que podem ser empregados no Live Coding:
* Extempore
* Fluxus
* Impromptu
* ixi lang
* LiveCode
* Lua
* Max/MSP
* Pharo
* Scratch
* TidalCycles
* Wolfram Language