Muchos dirían que la década de 1970 fue una gran época para la tipografía1. No así el caso del científico de la computación y matemático Donald E. Knuth quien en 1978 presentó TeX, un sistema tipográfico con el que esperaba terminar con la, en ese entonces y según el propio Knuth, cada vez menor calidad de la tipografía.
A mediados de los 80s, como parte de los trabajos de desarrollo de WEB2, Knuth introdujo el concepto de programación literaria.
Lo que Knuth propone con la programación literaria es un programa de computadora en el que se combina texto en lenguaje natural, con bloques de código incrustados que cuando se ejecutan generan otros elementos (textos, gráficos, tablas) que forman parte del documento final. Esto es, combina el código/cálculos y el texto en un mismo documento. De hecho, el propio nombre de programación literaria o programación letrada (como también se le conoce), es una critica que hace Knuth a los llamados sistema de programación estructurada que imperaban en la época3.
Esta idea comenzó a ganar adeptos rápidamente, al punto que entre 1989 y 1999, Norman Ramsey desarrolló una herramienta de programación literaria inspirada en WEB, denominada noweb4. La principal característica de esta nueva implementación, radicaba en su independencia del lenguaje de programación, lo que permitiría el desarrollo de herramientas de programación literaria en lenguajes de programación distintos de C, en el que se basaba su predecesor.
De hecho, anclado en estos trabajos, Friedrich Leisch presentó en 2002 una herramienta de programación literaria propia del lenguaje de programación R llamada Sweave, que permitía combinar código R y texto en lenguaje natural para producir documentos LaTeX y LyX. Rápidamente, Sweave se convirtió en el estándar y prácticamente único mecanismo para le generación y presentación de la documentación de los paquetes de R, mejor conocidos como viñetas.
Una década después, en el año 2012, un equipo interno de RStudio presentó Knitr, una clase de superset de Sweave que además agregaba soporte para otros lenguajes de programación como Python, Julia, JavaScript, etc. Conjuntamente introdujeron RMarkdwon (.Rmd), un formato que permitía la generación de los documentos que posteriormente eran procesados por Knitr.
Con el paso de los años, RMarkdown y Knitr comenzaron a ganar popularidad, llegando a irrumpir no solo en la documentación de los paquetes R, sino también en la generación de documentos técnicos y científicos tanto en R como en los otros mas de 60 lenguajes de programación que estos llegaron a soportar.
En consecuencia, surgieron proyectos derivados que se especializaban en la generación de documentos más estructurados5: i) dashboards, ii) websites, iii) documentación HTML para paquetes R completos, iv) libros, v) tutoriales interactivos, entre otros.
Hasta este punto hemos centrado la atención en la evolución de la programación literaria en el ámbito de R. Pero, fuera de R, la programación literaria ha tenido muchas implementaciones igual o más exitosas que las de este último.
- Jupyter Notebooks (2015): una implementación de la programación literaria con soporte para la ejecución de código en los entornos de Julia, Pyton y R. Esta implementación es la favorita en el ambiente de la ciencia de datos, sobre todo entre los usuarios de Python.
- nbdev (2020): basado en Jupyter Notebooks, propone una herramienta para la creación de paquetes Python utilizando la programación literaria.
El éxito de esta idea en la comunidad científica se debe principalmente a que la programación literaria introduce múltiples ventajas al momento de crear un documento, entre las que podemos mencionar por lo menos dos:
- Una única fuente de la verdad: esto combina las funciones de un editor de texto para la narrativa y una hoja de cálculo, por ejemplo, para el análisis y procesamiento de los datos, en un único documento.
- Cálculos reactivos: esto permite que los cálculos, gráficos, tablas y otros elementos del documento se actualicen automáticamente cada vez que se corre el programa, recogiendo cualquier cambio que los datos hayan sufrido desde la última ejecución.
En la ilustración que se muestra a continuación, se presenta el concepto de la programación literaria de forma resumida y generalizada.
El archivo de la izquierda, en formato .qmd
, es un archivo de texto plano que permite insertar código en lenguaje natural con bloques de código que tienen como objetivo producir otros elementos que también formarán parte del documento final.
Mientras que el archivo de la derecha, en formato .md
, es el archivo que resulta después que el archivo .qmd
es procesado, en este caso por Knitr, reemplazando los bloques de código por los elementos que estos producen.
Este proceso, por lo general va acompañado de otras etapas donde este archivo es procesado y convertido en un documento final, con un formato de presentación más común, como por ejemplo, PDF, DOCX, HTML, etc.
En definitiva, la programación literaria es una herramienta que permite la creación de documentos técnicos y científicos que combinan texto, código y resultados de forma interactiva.
Notas
Véase @2010Tipografia:e183↩︎
El sistema de programación computacional propio de TeX, y que estaba formado por dos componentes: 1) TANGLE: que produce código Pascal compilable a partir de los textos fuente y 2) WEAVE: que produce documentación imprimible con un buen formato utilizando TeX. Vea @web-tex↩︎
Vea https://es.wikipedia.org/wiki/Programaci%C3%B3n_literaria↩︎
Con sus correspondientes dos componentes: 1) notangle y 2) noweave↩︎
Vea @Xie2022R:62fa↩︎
Reutilización
Cómo citar
@online{e. de la rosa2022,
author = {E. de la Rosa, Daniel},
title = {Programación literaria},
date = {2022-08-31},
url = {https://adatar.do/blog/programacion-literaria/programacion-literaria-como-tenia-que-ser.html},
langid = {es}
}