# Programación y _Live Coding_

Algunos afirman que la pregunta que orienta a la informática como disciplina "¿es qué podemos automatizar?"
y dicha pregunta se presenta en varios campos donde los automatismos son posibles (incluida la escritura y
publicación).
Otros afirman que programar es esencialmente modelar y otros, que se trata de construir lenguajes de dominio 
específico que nos permitan expresar nuestro conocimiento sobre algún aspecto en particular.
Acá veremos una aproximación que las conjuga todas y los pone en díaglo, pues ya sea que queramos automatizar, 
modelar o hablar de un dominio particular, tendremos que expresarlo en un lenguaje formal, que permita seguir los 
pasos de dicha automatización, comunicar el modelo o mirar los verbos y actores claves de ese dominio de conocimiento.

Usualmente lo que vemos en películas y currículos es personas escribiendo texto desde oscuras ventanas consolas 
o terminales de comandos  y viendo otras cantidades de críptico texto de salida en ellas .
Esta forma de trabajo es la que hemos usado a lo largo de esta obra, hasta el momento: abrimos una terminal,
introducimos un comando en ella, y esperamos a que ocurra la salida.
Conocemos los argumentos de dicho comando, pero no podemos explorar mucho más acerca de éste o sus
argumentos.
Dichos comandos son expresados en un lenguaje formal y realizan acciones: convertir a PDF una secuencia
de archivos, sincronizar repositorios, etc.
Algunas partes de los comandos se pueden cambiar (por ejemplo la secuencia de archivos que constituyen
un PDF) y otras deben ser colocadas en determinado orden para ser entendidas por el computador (por
eso se trata de un lenguaje formal, mucho más preciso, pero inflexible que los lenguajes humanos).

Ahora veremos una perspectivas a la programación y escritura de código que es diametralmente opuesta
llamativa y poderosa, llamada _live coding_, que se ha  traducido como programación en caliente, en vivo, o en
directo, en contrate con otras formas más indirectas y "frías" de programar, escribiendo un código o comandos,
usualmente convirtiendo esto a código de máquina (lo cual se conoce como compilar) y luego revisando
el resultado, o imaginando lo que el programa de computo hace en nuestra cabeza y luego verificando si es así,
bien sea ejecuándolo y/o colocando mensajes de impresión para ver el estado de ciertos componentes involucrados
(Bret Victor dice, por esta práctica habitual de programación que se podría definir como la manipulación ciega de
símbolos).
El _live coding_, en contraste nos permite la exploración interactiva de los elementos que hacen parte de
la experiencia de computo de maneras más directas y ver los resultados de escribir código en la medida en que éste
se va escribiendo, así como inspeccionar los componentes que hacen parte de la misam y ha sido empleada en artes 
performativas, como la [música](https://toplap.org/), pero también en temas como visualización y el activismo de datos (y ahora también 
para la publicación).

![](https://screenshotscdn.firefoxusercontent.com/images/1fd465cd-9408-4630-9db5-96bf7afa9a17.png) ![](https://screenshotscdn.firefoxusercontent.com/images/9e066857-d77e-4e3b-92a5-3af5d12ca465.png)

La música de hecho nos provee una metáfora adecuada para hablar del _live coding_ pues al igual que ver una partitura 
o fotograías de un concierto no son sustitutos de asistir a éste, el _live coding_ tiene que ser experimentado para
entenderlo mejor, por un lado, y por otro, uno puede disfrutar de una experiencia de _live coding_ sin saber programar, 
así como uno puede disfrutar de un concierto sin ser músico.

Las siguientes secciones introducirán entornos dónde aprender y practicar de live coding