# Live coding

Il live coding, a volte indicato anche con i termini on-the-fly programming, just in time programming e conversational programming, è una tecnica che rende l'attività di programmazione parte integrante del programma in esecuzione.
Il live coding è maggiormente praticato come forma d'arte performativa e tecnica creativa. L'attività è caratterizzata dalla scrittura del codice sorgente dal vivo e sull'uso della programmazione interattiva in modo improvvisato. Il live coding viene spesso impiegato per creare media digitali basati su suoni e immagini, nonché per gestire sistemi di illuminazione, danza e poesia. Tuttavia, è maggiormente diffuso per la creazione di computer music o musica informatica a carattere improvvisativo, anche se possiamo trovarlo impiegato anche in combinazione con la composizione algoritmica . Tipicamente, il processo di scrittura del codice sorgente è reso visibile proiettando lo schermo del computer nello spazio del pubblico, mostrando quindi l'attività di continua ricerca compiuta dal performer. Le tecniche di live coding sono impiegate anche al di fuori della performance dal vivo, come nella produzione di colonne sonore per film o lavori audiovisivi per installazioni artistiche interattive. Inoltre, i computer dei performer possono essere interconnessi grazie a una rete creata ad hoc, rendendo possibile la realizzazione di performance collaborative e l'interazione in gruppo.
Il o la live coder è la persona che esegue l'atto del live coding, solitamente "artisti o artiste che vogliono imparare a programmare, e programmatori che vogliono esprimersi" o, utilizzando i termini di Wang & Cook il "programmatore/esecutore/compositore" .
Il live coding è anche una tecnica sempre più popolare nelle lezioni e nelle conferenze relative alla programmazione ed è stata descritta come una "buona pratica" per le lezioni di informatica da Mark Guzdial .

## Tecniche

Il live coding viene praticato attraverso una serie di modalità che sono state sviluppate nel corso della sua storia.

### Rappresentazione e manipolazione del tempo

Le possibilità offerte dai media con un forte legame alla temporalità e l'interazione dal vivo con il codice hanno portato a tutta una serie di sviluppi innovativi nel campo dei linguaggi di programmazione. Attraverso l'incorporamento reciproco di sottosistemi imperativi e dichiarativi, all'interno del linguaggio di programmazione SuperCollider è stata realizzata una libreria che consente di inserire dati ed istruzioni incomplete e provvisorie che possono essere poi riscritte e modificate in maniera processuale ovvero mentre sono in esecuzione.
Il linguaggio di programmazione ChucK ha introdotto il concetto della programmazione "fortemente temporizzata" nel 2002, incorporando una precisa scansione dei tempi all'interno del flusso di controllo, grazie all'uso di una sintassi concisa.
"Ricorsività temporale" era un termine coniato inizialmente in relazione all'ambiente di programmazione Impromptu. Gli elementi tecnici all'interno di un ambiente di programmazione continuano a risolvere i problemi di tempo attraverso l'uso di compressori e soluzioni basate sulla ricorsività, ma la sincronizzazione e la scansione temporale rimane comunque un problema significativo. Mentre la forma generale di una ripetizione, essendo qualsiasi ricorsività di funzione asincrona nel tempo, è disponibile per qualsiasi sistema guidato da eventi, Impromptu ha posto un'enfasi speciale su questo particolare modello di progettazione, rendendolo il pezzo centrale dell'architettura della concorrenza su quella piattaforma. La ricorsività temporale è stata ripetutamente utilizzata in SuperCollider e da allora è stata implementata anche nell'ambiente Fluxus .
Un altro approccio funzionale alla rappresentazione del tempo è mostrato nel caso del DSL Tidal, che rappresenta gli schemi temporali come combinatori che operano attraverso funzioni del tempo, simili alle tecniche di programmazione reattiva funzionale .

### Programmazione multiutente e memoria condivisa

Per quanto riguarda il live coding, la programmazione multiutente si è sviluppata nel contesto della produzione musicale di gruppo, attraverso il lungo sviluppo del software Republic sviluppato e impiegato dai membri della band PowerBooks Unplugged, un gruppo che si riunisce ed esibisce attraverso l'uso di una rete informatica. Republic è stato integrato all'interno del linguaggio SuperCollider e consente ai partecipanti di scrivere un codice in maniera collaborativa e dal vivo, attraverso una rete informatica. Sono stati fatti altri tentativi con linguaggi di programmazione diversi, come lo spazio di tuple distribuito utilizzato nel linguaggio Impromptu. Inoltre, i linguaggi Overtone, Impromptu ed Extempore supportano sessioni multiutente, in cui un numero qualsiasi di live coder può intervenire sul codice durante una determinata fase del processo di runtime. La scrittura di codice in maniera condivisa può avvenire anche nella stessa stanza, attraverso una rete locale, oppure anche da postazioni remote accedendo, attraverso Internet, ad un server condiviso. Termini come laptop band, laptop orchestra, live coding collaborativo o live coding collettivo vengono utilizzati per inquadrare una pratica di programmazione dal vivo in rete sia attraverso un network locale sia da remoto attraverso l'uso di Internet.

## Organizzazioni collettive di live coder

TOPLAP è il nome dell'organizzazione informale costituita nel febbraio 2004 allo scopo di riunire le comunità che si erano formate in diverse parti del mondo attorno alla pratica del live coding. Il nome deriva da un acronimo derivante da termini variabili, ma sempre con le stesse lettere iniziali. Di seguito una lista dei termini più impiegati per comporre l'acronimo: (The|Temporary|Transnational|Terrestrial|Transdimensional) Organization for the (Promotion|Proliferation|Permanence|Purity) of Live (Algorithm|Audio|Art|Artistic) Programming)). L'organizzazione si è dotata anche di un manifesto, ovvero una dichiarazione di intenti dove si affermano alcuni principi che stanno alla base di una performance di live coding. In particolare, uno degli enunciati del manifesto afferma che i o le performer dovrebbero mostrare al pubblico gli schermi dei propri computer durante la loro esibizione. Questo enunciato afferma un principio di trasparenza della performance: ogni membro del pubblico deve essere consapevole che la performance alla quale sta assistendo avviene dal vivo e che il prodotto artistico è creato dal o dalla performer e non dal computer autonomamente.

## Ricerca sul live coding

Diversi progetti e gruppi di ricerca sono stati creati per esplorare la tecnica del live coding, spesso adottando approcci interdisciplinari, creando ponti tra l'ambito umanistico e quello scientifico. Le prime esperienze di questo tipo, sia per potenziare lo sviluppo della tecnica sia per collocarla all'interno di uno schema teorico coerente, si sono avute dal 2005 al 2008 con il progetto chiamato "Interactivity in Hybrid Networks", finanziato dalla Fondazione tedesca per la ricerca .
Un'altra esperienza di ricerca è stata quella del Live Coding Research Network, supportato dai finanziamenti dell'Arts and Humanities Research Council del Regno Unito. Per due anni, a partire dal febbraio 2014, questo progetto ha organizzato una serie di attività come simposi e laboratori ed una conferenza internazionale, con cadenza annuale, chiamata International Conference on Live Coding (ICLC).
A ottobre 2020 ha preso il via il progetto di ricerca On-The-Fly, finanziato con risorse del programma Creative Europe dell'Unione Europea e condotto da alcuni centri culturali basati in diverse città europee come: Hangar di Barcellona, Spagna; Cretive Coding Utrecht, Paesi Bassi; Ljudmila, Lubiana, Slovenia; ZKM, Karlsruhe, Germania. Lo scopo del progetto è promuovere la pratica del live coding, diffondere la filosofia del software open-source, stimolare la ricerca scientifica nell'ambito del live coding e allargare il pubblico che assiste agli spettacoli o che fruisce di arte creata attraverso il live coding.

## Ambienti di live coding

* Chuck
* Extempore
* Fluxus
* Foxdot
* Hydra
* Impromptu
* ixi lang
* LiveCode
* Lua
* Max
* Orca
* Pharo
* Pure Data
* Scratch
* Sonic Pi
* SuperCollider
* TidalCycles
* Wolfram Language

## Live coder internazionali

* Joanne Armitage
* Renick Bell
* Benoît and the Mandelbrots
* Alexandra Cardenas
* Nick Collins
* Shelly Knotts
* Ron Kuivila
* Alex McLean
* Kate Sicchio
* Slub
* Ge Wang
* Adrian Ward
* Matthew Yee-King
* Libertad Figueroa
* Antonio Roberts