La programación alfabetizada es un paradigma de programación introducido por Donald Knuth en el que un programa informático recibe una explicación de su lógica en un lenguaje natural , como el inglés, intercalado con fragmentos de macros y código fuente tradicional , a partir de los cuales se puede generar código fuente compilable . [1] El enfoque se utiliza en la informática científica y en la ciencia de datos de forma rutinaria para fines de investigación reproducible y acceso abierto . [2]En la actualidad, millones de programadores utilizan herramientas de programación alfabetizadas. [3]
El paradigma de la programación alfabetizada, tal como lo concibe Knuth, representa un alejamiento de la escritura de programas de computadora en la forma y el orden impuestos por la computadora y, en cambio, permite a los programadores desarrollar programas en el orden exigido por la lógica y el flujo de sus pensamientos. [4] Los programas alfabetizados están escritos como una exposición ininterrumpida de lógica en un lenguaje humano común , muy parecido al texto de un ensayo , en el que se incluyen macros para ocultar abstracciones y código fuente tradicional .
Las herramientas de programación alfabetizada (LP) se utilizan para obtener dos representaciones de un archivo fuente alfabetizado: una adecuada para su posterior compilación o ejecución por una computadora, el código "enredado", y otra para verla como documentación formateada , que se dice que está "tejida". "de la fuente alfabetizada. [5] Si bien la primera generación de herramientas de programación alfabetizadas eran específicas del lenguaje de computadora , las últimas son independientes del lenguaje y existen por encima de los lenguajes de programación.
Historia y filosofia
La programación alfabetizada fue introducida por primera vez por Knuth en 1984. La principal intención detrás de este enfoque era tratar un programa como literatura comprensible para los seres humanos. Este enfoque se implementó en la Universidad de Stanford como parte de una investigación sobre algoritmos y tipografía digital . Esta implementación fue llamada " WEB " por Knuth porque creía que era una de las pocas palabras de tres letras en inglés que aún no se había aplicado a la informática. [6] Sin embargo, se parece correctamente a la naturaleza complicada del software delicadamente ensamblado a partir de materiales simples. [1] La práctica de la programación alfabetizada ha experimentado un resurgimiento importante en la década de 2010 con el uso de portátiles, especialmente en ciencia de datos .
Concepto
La programación alfabetizada es escribir la lógica del programa en un lenguaje humano con fragmentos de código y macros incluidos (separados por un marcado primitivo). Las macros en un archivo fuente alfabetizado son simplemente frases explicativas o similares a títulos en un lenguaje humano que describen abstracciones humanas creadas mientras se resuelve el problema de programación y ocultan fragmentos de código o macros de nivel inferior. Estas macros son similares a los algoritmos en pseudocódigo que se utilizan normalmente en la enseñanza de la informática . Estas frases explicativas arbitrarias se convierten en nuevos operadores precisos, creados sobre la marcha por el programador, formando un metalenguaje sobre el lenguaje de programación subyacente.
Se utiliza un preprocesador para sustituir jerarquías arbitrarias, o más bien "redes interconectadas de macros", [7] para producir el código fuente compilable con un comando ("enredo") y la documentación con otro ("tejido"). El preprocesador también proporciona la capacidad de escribir el contenido de las macros y agregar macros ya creadas en cualquier lugar del texto del archivo fuente del programa alfabetizado, eliminando así la necesidad de tener en cuenta las restricciones impuestas por los lenguajes de programación tradicionales. o interrumpir el flujo del pensamiento.
Ventajas
Según Knuth, [8] [9] la programación alfabetizada proporciona programas de mayor calidad, ya que obliga a los programadores a expresar explícitamente los pensamientos detrás del programa, haciendo que las decisiones de diseño mal pensadas sean más obvias. Knuth también afirma que la programación alfabetizada proporciona un sistema de documentación de primer nivel, que no es un complemento, sino que se desarrolla de forma natural en el proceso de exposición de los pensamientos durante la creación de un programa. [10] La documentación resultante permite al autor reiniciar sus propios procesos de pensamiento en cualquier momento posterior y permite que otros programadores comprendan la construcción del programa más fácilmente. Esto difiere de la documentación tradicional, en la que a un programador se le presenta un código fuente que sigue un orden impuesto por el compilador y debe descifrar el proceso de pensamiento detrás del programa a partir del código y sus comentarios asociados. También se afirma que las capacidades del metalenguaje de la programación alfabetizada facilitan el pensamiento, dando una mayor "vista de pájaro" del código y aumentando el número de conceptos que la mente puede retener y procesar con éxito. La aplicabilidad del concepto a la programación a gran escala, la de los programas de grado comercial, está probada por una edición del código TeX como programa alfabetizado. [8]
Knuth también afirma que la programación alfabetizada puede llevar a una fácil adaptación del software a múltiples entornos, e incluso cita la implementación de TeX como ejemplo. [11]
Contraste con la generación de documentación
La programación alfabetizada a menudo se malinterpreta [12] para referirse solo a documentación formateada producida a partir de un archivo común con código fuente y comentarios, lo que se denomina propiamente generación de documentación , o comentarios voluminosos incluidos con el código. Esto es lo opuesto a la programación alfabetizada: el código bien documentado o la documentación extraída del código sigue la estructura del código, con documentación incrustada en el código; mientras que en la programación alfabetizada, el código está incrustado en la documentación, y el código sigue la estructura de la documentación.
Este concepto erróneo ha llevado a afirmar que las herramientas de extracción de comentarios, como Perl Plain Old Documentation o los sistemas Java Javadoc , son "herramientas de programación alfabetizadas". Sin embargo, debido a que estas herramientas no implementan la "red de conceptos abstractos" que se esconde detrás del sistema de macros de lenguaje natural, ni brindan la capacidad de cambiar el orden del código fuente de una secuencia impuesta por una máquina a una conveniente para la mente humana. , no pueden llamarse propiamente herramientas de programación alfabetizadas en el sentido que pretende Knuth. [12] [13]
Crítica
En 1986, Jon Bentley le pidió a Knuth que demostrara el concepto de programación alfabetizada escribiendo un programa en WEB. A Knuth se le ocurrió una lista monolítica de 8 páginas que se publicó junto con una crítica de Douglas McIlroy de Bell Labs. McIlroy elogió la complejidad de la solución de Knuth, su elección de una estructura de datos (el hash trie de Frank M. Liang ), pero señaló que la solución del problema más práctica, mucho más rápida de implementar, depurar y modificar requiere solo seis líneas de script de shell mediante la reutilización utilidades estándar de Unix . McIlroy concluyó: [14]
Knuth nos ha mostrado aquí cómo programar de manera inteligible, pero no sabiamente. Compro la disciplina. No compro el resultado. Ha creado una especie de huevo de Fabergé de potencia industrial: intrincado, maravillosamente trabajado, refinado más allá de todos los deseos ordinarios, una pieza de museo desde el principio.
McIlroy admitió más tarde que su crítica fue injusta, ya que criticó el programa de Knuth por motivos de ingeniería, mientras que el propósito de Knuth era solo demostrar la técnica de programación alfabetizada. [15] En 1987, Communications of the ACM publicó un artículo de seguimiento que ilustraba la programación alfabetizada con un programa en C que combinaba el enfoque artístico de Knuth con el enfoque de ingeniería de McIlroy, con una crítica de John Gilbert. [dieciséis]
Flujo de trabajo
La implementación de la programación alfabetizada consta de dos pasos:
- Weaving: Generación de un documento completo sobre el programa y su mantenimiento.
- Enredos: generación de código ejecutable de la máquina
El tejido y el enredo se realizan en la misma fuente para que sean coherentes entre sí.
Ejemplo
Un ejemplo clásico de programación alfabetizada es la implementación alfabetizada del programa estándar de conteo de palabras de Unix wc
. Knuth presentó una versión CWEB de este ejemplo en el Capítulo 12 de su libro Literate Programming . El mismo ejemplo se reescribió más tarde para la herramienta de programación alfabetizada noweb . [17] Este ejemplo proporciona una buena ilustración de los elementos básicos de la programación alfabetizada.
Creación de macros
El siguiente fragmento del wc
programa de leer y escribir [17] muestra cómo se utilizan frases descriptivas arbitrarios en un lenguaje natural en un programa de leer y escribir para crear macros, que actúan como nuevos "operadores" en el lenguaje de programación literaria y trozos de piel de código o otras macros . La notación de marcado consta de corchetes angulares dobles (" <<...>>
") que indican macros, el @
símbolo " " que indica el final de la sección de código en un archivo noweb. El <<*>>
símbolo " " representa la "raíz", el nodo superior desde el que la herramienta de programación alfabetizada comenzará a expandir la red de macros. En realidad, se puede escribir el código fuente expandido desde cualquier sección o subsección (es decir, un fragmento de código designado como " <
", con el signo igual), por lo que un archivo de programa alfabetizado puede contener varios archivos con código fuente de máquina.
El propósito de aseo es para contar líneas , palabras , y / o caracteres en una lista de archivos . El número de líneas en un archivo es ........ / más explicaciones /Aquí , entonces , es una visión general de la archivo de aseo . c que está definido por el programa noweb wc . nw : << * >> = << Archivos de encabezado para incluir >> << Definiciones >> << Variables globales >> << Funciones >> << El programa principal >> @ Nosotros debemos incluir los estándares I / O definiciones , ya que queremos para enviar el formato de salida a la salida estándar y stderr . << Archivos de encabezado para incluir >> = #include @
La descomposición de los fragmentos se puede realizar en cualquier lugar del archivo de texto del programa alfabetizado, no necesariamente en el orden en que están secuenciados en el fragmento adjunto, sino como lo exige la lógica reflejada en el texto explicativo que envuelve todo el programa.
Programa como una web: las macros no son solo nombres de sección
Las macros no son lo mismo que los "nombres de sección" en la documentación estándar. Las macros de programación alfabetizadas pueden ocultar cualquier fragmento de código detrás de sí mismas y usarse dentro de cualquier operador de lenguaje de máquina de bajo nivel, a menudo dentro de operadores lógicos como " if
", " while
" o " case
". Esto se ilustra con el siguiente fragmento del wc
programa alfabetizado. [17]
El fragmento actual , que es el que cuenta , fue en realidad uno de los más sencillos de escribir . Nos fijamos en cada personaje y el cambio de estado si se inicia o termina una palabra . << escaneo de archivos >> = , mientras que ( 1 ) { << Fill búfer si se está vacía ; romper al final del archivo >> c = * ptr ++ ; if ( c > '' && c < 0177 ) { / * códigos ASCII visibles * / if ( ! in_word ) { word_count ++ ; in_word = 1 ; } continuar ; } if ( c == '\ n' ) line_count ++ ; de lo contrario, si ( c ! = '' && c ! = '\ t' ) continuar ; in_word = 0 ; / * c es nueva línea, espacio o tabulación * / } @
De hecho, las macros pueden representar cualquier fragmento arbitrario de código u otras macros y, por lo tanto, son más generales que la "fragmentación" descendente o ascendente, o que la subdivisión. Knuth dice que cuando se dio cuenta de esto, comenzó a pensar en un programa como una red de varias partes. [1]
Orden de la lógica humana, no del compilador
En un programa noweb leer y escribir, además de la orden exenta de su exposición, los trozos detrás de macros, una vez introducidos con " <<...>>=
", se pueden hacer crecer más tarde en cualquier lugar en el archivo simplemente escribiendo " <
" y añadiendo más contenido a la misma, como el siguiente fragmento ilustra (el formateador de documentos agrega "más" para facilitar la lectura y no está en el código). [17]
Los totales generales deben inicializarse a cero al comienzo del programa.Si hiciéramos estas variables locales a main, tendríamos que hacer esta inicializaciónexplícitamente; sin embargo, los valores globales de C se ponen a cero automáticamente. (O más bien, `` estáticamentecero. '' (¿Lo entiendes?) << Variables globales >> + = largo tot_word_count, tot_line_count, tot_char_count; / * número total de palabras, líneas, caracteres * / @
Registro del tren del pensamiento
La documentación para un programa alfabetizado se produce como parte de la redacción del programa. En lugar de comentarios proporcionados como notas al margen del código fuente, un programa alfabetizado contiene la explicación de conceptos en cada nivel, con los conceptos de nivel inferior diferidos a su lugar apropiado, lo que permite una mejor comunicación del pensamiento. Los fragmentos de alfabetización wc
anteriores muestran cómo se entrelazan una explicación del programa y su código fuente. Tal exposición de ideas crea el flujo de pensamiento que es como una obra literaria. Knuth escribió una "novela" que explica el código del juego de ficción interactivo Colossal Cave Adventure . [18]
Ejemplos notables
- Axiom , que se desarrolló a partir de scratchpad, un sistema de álgebra informática desarrollado por IBM. Ahora está siendo desarrollado por Tim Daly, uno de los desarrolladores de scratchpad, Axiom está totalmente escrito como un programa alfabetizado.
Prácticas de programación alfabetizadas
El primer entorno de programación alfabetizado publicado fue WEB , introducido por Knuth en 1981 para su sistema de composición tipográfica TeX ; utiliza Pascal como su lenguaje de programación subyacente y TeX para la composición tipográfica de la documentación. El código fuente completo comentado de TeX fue publicado en Knuth's TeX: The program , volumen B de sus 5 volúmenes Computers and Typesetting . Knuth había utilizado en privado un sistema de programación alfabetizado llamado DOC ya en 1979. Se inspiró en las ideas de Pierre-Arnoul de Marneffe . [19] El CWEB gratuito , escrito por Knuth y Silvio Levy, es WEB adaptado para C y C ++ , se ejecuta en la mayoría de los sistemas operativos y puede producir documentación TeX y PDF .
Hay varias otras implementaciones del concepto de programación alfabetizada (algunas de ellas no tienen macros y, por lo tanto, violan el orden del principio de lógica humana ):
Nombre | Idiomas admitidos | Escrito en | Lenguaje de marcado | Comentarios |
---|---|---|---|---|
WEB | Pascal | Pascal | TeX | El primer entorno de programación alfabetizado publicado. |
CWEB | C ++ y C | C | TeX | Es WEB adaptado para C y C ++ . |
NoWEB | Alguna | C , AWK e Icon | LaTeX , TeX , HTML y troff | Es bien conocido por su simplicidad y permite formatear texto en HTML en lugar de pasar por el sistema TeX. |
Alfabetizado | Alguna | D | Reducción | Soporta ecuaciones TeX. Compatible con Vim ( literate.vim ) |
FunnelWeb | Alguna | C | HTML y TeX | Tiene un marcado más complicado, pero tiene muchas opciones más flexibles |
NuWEB | Alguna | C ++ | Látex | Puede traducir una sola fuente LP en cualquier número de archivos de código. Lo hace en una sola invocación; no tiene comandos separados de tejido y enredo. No tiene la extensibilidad de noweb |
pyWeb | Alguna | Pitón | Texto reestructurado | Respeta la sangría que lo hace utilizable para lenguajes como Python , aunque puede usarlo para cualquier lenguaje de programación. |
muchacha | Alguna | Perl | HTML | Tiene como objetivo modernizarlo y escalarlo con "HTML plegable" y "vistas virtuales" en el código. Utiliza el marcado "noweb" para los archivos fuente alfabetizados. |
Codnar | Rubí | Es una herramienta de programación alfabetizada inversa disponible como Ruby Gem. En lugar de extraer el código fuente legible por máquina de las fuentes de documentación alfabetizadas, la documentación alfabetizada se extrae de los archivos de código fuente legibles por máquina normales. | ||
Modo org de Emacs | Alguna | Emacs Lisp | Texto sin formato | Requiere Babel, [20] que permite incrustar bloques de código fuente de múltiples lenguajes de programación [21] dentro de un solo documento de texto. Los bloques de código pueden compartir datos entre sí, mostrar imágenes en línea o analizarse en código fuente puro utilizando la sintaxis de referencia noweb . [22] |
CoffeeScript | CoffeeScript | CoffeeScript , JavaScript | Reducción | CoffeeScript admite un modo "alfabetizado", que permite que los programas se compilen a partir de un documento fuente escrito en Markdown con bloques de código sangrados. [23] |
Hojas de trabajo de arce | Arce (software) | XML | Las hojas de trabajo de Maple son un entorno de programación alfabetizado independiente de la plataforma que combina texto y gráficos con código en vivo para el cálculo simbólico. "Hojas de trabajo de arce" . www.maplesoft.com . Consultado el 30 de mayo de 2020 . | |
Cuadernos Wolfram | Wolfram Language | Wolfram Language | Los cuadernos Wolfram son un método de programación alfabetizado independiente de la plataforma que combina texto y gráficos con código en vivo. [24] [25] | |
Patios de recreo | Swift (lenguaje de programación) | Proporciona un entorno de programación interactivo que evalúa cada declaración y muestra resultados en vivo a medida que se edita el código. Los parques infantiles también permiten al usuario agregar lenguaje de marcado junto con el código que proporciona encabezados, formato en línea e imágenes. [26] | ||
Jupyter Notebook , anteriormente IPython Notebook | Python y cualquiera con un kernel de Jupyter | HTML | Funciona en formato de cuadernos, que combinan títulos, texto (incluido LaTeX), tramas, etc. con el código escrito. | |
nbdev | Cuaderno de Python y Jupyter | nbdev es una biblioteca que le permite desarrollar una biblioteca de Python en Jupyter Notebooks, poniendo todo su código, pruebas y documentación en un solo lugar. | ||
Julia (lenguaje de programación) | Admite el modo de desarrollo iJulia que se inspiró en iPython. | |||
Agda (lenguaje de programación) | Admite una forma limitada de programación alfabetizada lista para usar. [27] | |||
Lenguaje de programación Eve | Los programas son principalmente en prosa. [28] Eve combina variantes de Datalog y Markdown con un entorno de desarrollo gráfico en vivo. | |||
Cuadernos R Markdown (o cuadernos R) | R , Python , Julia y SQL | PDF , Microsoft Word , LibreOffice y formatos de presentación o presentación de diapositivas , además de formatos interactivos como widgets HTML | [29] | |
Sweave | R | [30] [31] | ||
Knitr | R | LaTeX , PDF , LyX , HTML , Markdown , AsciiDoc y reStructuredText | [32] [33] | |
Codebraid | Pandoc , óxido , Julia , Python , R , Bash | |||
Pweave | Pitón |
Otras herramientas útiles incluyen
- El editor de texto Leo es una esquematización editor que soporta noweb opcional y marcado CWEB. El autor de Leo combina dos enfoques diferentes: primero, Leo es un editor de esquemas, que ayuda con la gestión de textos grandes; En segundo lugar, Leo incorpora algunas de las ideas de la programación alfabetizada, que en su forma pura (es decir, la forma en que la usa la herramienta web Knuth o herramientas como "noweb") es posible solo con cierto grado de inventiva y el uso del editor. de una manera que su autor no imaginó exactamente (en nodos @root modificados). Sin embargo, esta y otras extensiones (@file nodos) hacen que la programación de esquemas y la administración de texto sean exitosas y fáciles y de alguna manera similares a la programación alfabetizada. [34]
- El lenguaje de programación Haskell tiene soporte nativo para programación semi-alfabetizada. El compilador / intérprete admite dos extensiones de nombre de archivo:
.hs
y.lhs
; este último significa Haskell alfabetizado.
- Los scripts alfabetizados pueden ser texto fuente completo de LaTeX, al mismo tiempo que se pueden compilar, sin cambios, porque el intérprete solo compila el texto en un entorno de código, por ejemplo
% aquí texto que describe la función: \ begin { code } fact 0 = 1 fact ( n + 1 ) = ( n + 1 ) * fact n \ end { code }aquí más texto
- El código también se puede marcar en el estilo de Richard Bird, comenzando cada línea con un símbolo mayor que y un espacio, precediendo y terminando el fragmento de código con líneas en blanco.
- El
listings
paquete LaTeX proporciona unlstlisting
entorno que se puede utilizar para embellecer el código fuente. Se puede usar para definir uncode
entorno que se usará dentro de Haskell para imprimir los símbolos, algo como: \ newenvironment { código } { \ lstlistings [idioma = Haskell] } { \ endlstlistings }\ begin { código } los :: ( beta -> gamma ) -> ( alfa -> beta ) -> ( alfa -> gamma ) ( g ` los ` f ) x = g ( f x ) \ end { código }
- se puede configurar para producir algo como esto:
- Aunque el paquete no proporciona los medios para organizar fragmentos de código, se puede dividir el código fuente de LaTeX en diferentes archivos. Consulte el manual de listados para obtener una descripción general.
- El sistema de programación literaria Web 68 utilizaba Algol 68 como lenguaje de programación subyacente, aunque no había nada en el 'tang' del preprocesador para forzar el uso de ese lenguaje. [35]
- El mecanismo de personalización de la Iniciativa de codificación de texto que permite la restricción, modificación o extensión del esquema TEI permite a los usuarios mezclar documentación en prosa con fragmentos de especificación de esquema en su formato One Document Does-it-all . A partir de esta documentación en prosa, se pueden generar esquemas y canalizaciones de modelos de procesamiento, y se cita el paradigma de programación alfabetizada de Knuth como la inspiración para esta forma de trabajar. [36]
Ver también
- Generador de documentación : lo inverso a la programación alfabetizada donde la documentación está incrustada y generada a partir del código fuente.
- Interfaz de portátil: entorno de portátil virtual utilizado para programación alfabetizada
- Sweave y Knitr : ejemplos de uso de la herramienta de programación alfabetizada similar a "noweb" dentro del lenguaje R para la creación de informes estadísticos dinámicos
- Código autodocumentado: código fuente que se puede entender fácilmente sin documentación.
Referencias
- ^ a b c v w x y zKnuth, Donald E. (1984). "Programación alfabetizada" (PDF) . The Computer Journal . Sociedad Británica de Computación . 27 (2): 97-111. doi : 10.1093 / comjnl / 27.2.97 . Consultado el 4 de enero de 2009 .
- ^ Schulte, Eric (2012). "Un entorno informático en varios idiomas para la programación alfabetizada y la investigación reproducible" (PDF) . Revista de software estadístico . 46 (3). doi : 10.18637 / jss.v046.i03 . Archivado (PDF) desde el original el 9 de noviembre de 2014 . Consultado el 30 de mayo de 2020 .
- ^ Kery, Mary Beth (abril de 2018). "La historia en el cuaderno: ciencia de datos exploratoria utilizando una herramienta de programación alfabetizada". CHI '18: Actas de la Conferencia CHI 2018 sobre factores humanos en sistemas informáticos . ACM. págs. 1-11. doi : 10.1145 / 3173574.3173748 .
- ^ "Tenía la sensación de que top-down y bottom-up eran metodologías opuestas: una más adecuada para la exposición de programas y la otra más adecuada para la creación de programas. Pero después de adquirir experiencia con WEB, me he dado cuenta de que no es necesario elegir de una vez por todas entre top-down y bottom-up, porque es mejor pensar en un programa como una red en lugar de un árbol. Existe una estructura jerárquica, pero lo más importante de un programa son sus relaciones estructurales. La pieza compleja de software consta de partes simples y relaciones simples entre esas partes; la tarea del programador es establecer esas partes y esas relaciones, en el orden que sea mejor para la comprensión humana, no en un orden rígidamente determinado como de arriba hacia abajo o de abajo hacia arriba. " - Donald E. Knuth , Programación alfabetizada [1]
- ^ Si uno recuerda que la primera versión de la herramienta se llamaba WEB, la divertida referencia literaria escondida por Knuth en estos nombres se vuelve obvia: "Oh, qué telaraña enredada tejemos cuando practicamos por primera vez para engañar" - Sir Walter Scott , en Canto VI, estrofa 17 de Marmion (1808), un poema épico sobre la batalla de Flodden en 1513. - la cita real apareció como epígrafe en un artículo de mayo de 1986 de Jon Bentley y Donald Knuth en una de las columnas clásicas de Programming Pearls en Communications del ACM, vol 29 núm 5 en p.365
- ^ "Programación alfabetizada" (PDF) . archive.computerhistory.org . Consultado el 3 de junio de 2019 .
- ^
"Las macros de WEB pueden tener como máximo un parámetro. De nuevo, lo hice en aras de la simplicidad, porque me di cuenta de que la mayoría de las aplicaciones de múltiples parámetros podrían, de hecho, reducirse al caso de un parámetro. Por ejemplo, suponga que quiere definir algo como ... En otras palabras, el nombre de una macro puede ser un parámetro útil para otra macro. Este truco en particular hace posible ... "
- Donald E. Knuth , Programación alfabetizada [1] - ^ a b Knuth, Donald E .; Binstock, Andrew (25 de abril de 2008). "Entrevista con Donald Knuth" . Consultado el 4 de enero de 2009 .
Sin embargo, para mí, la programación alfabetizada es sin duda lo más importante que surgió del proyecto TeX . No solo me ha permitido escribir y mantener programas de manera más rápida y confiable que nunca, y ha sido una de mis mayores fuentes de alegría desde la década de 1980, sino que en ocasiones ha sido indispensable. Algunos de mis programas principales, como el meta-simulador MMIX, no podrían haber sido escritos con ninguna otra metodología de la que haya oído hablar. La complejidad era simplemente demasiado abrumadora para que mi cerebro limitado la manejara; sin una programación alfabetizada, toda la empresa habría fracasado estrepitosamente. ... La programación alfabetizada es lo que necesita para elevarse por encima del nivel ordinario de logros.
- ^
"Otra cosa sorprendente que aprendí mientras usaba WEB fue que los lenguajes de programación tradicionales me habían estado haciendo escribir programas inferiores, aunque no me había dado cuenta de lo que estaba haciendo. Mi idea original era que WEB sería simplemente una herramienta para la documentación, pero De hecho, descubrí que mis programas WEB eran mejores que los programas que había estado escribiendo en otros idiomas ".
- Donald E. Knuth , Programación alfabetizada [1] - ^
"Por lo tanto, el lenguaje WEB permite a una persona expresar programas en un orden de " flujo de conciencia " . TANGLE es capaz de mezclar todo en el orden que exige un compilador PASCAL. Esta característica de WEB es quizás su mayor activo; hace un WEB -Programa escrito mucho más legible que el mismo programa escrito puramente en PASCAL, incluso si el último programa está bien comentado. Y el hecho de que no hay necesidad de estar colgado en la cuestión de arriba hacia abajo o de abajo hacia arriba, ya que un programador Ahora puedo ver un programa grande como una red, explorarlo en un orden psicológicamente correcto es quizás la lección más grande que he aprendido de mis experiencias recientes ".
- Donald E. Knuth , Programación alfabetizada [1] - ^ " " Historia oral de Donald Knuth "- una entrevista con Ed Feigenbaum" (PDF) . archive.computerhistory.org . Consultado el 7 de diciembre de 2018 .
- ^ a b Dominus, Mark-Jason (20 de marzo de 2000). "POD no es una programación alfabetizada" . Perl.com . Archivado desde el original el 2 de enero de 2009.
- ^
"Elegí el nombre WEB en parte porque era una de las pocas palabras en inglés de tres letras que aún no se habían aplicado a las computadoras. Pero a medida que pasaba el tiempo, me sentí extremadamente satisfecho con el nombre, porque creo que De hecho, la mejor forma de considerar una pieza de software compleja es como una red que se ha ensamblado con delicadeza a partir de materiales simples. Entendemos un sistema complicado al comprender sus partes simples y al comprender las relaciones simples entre esas partes y sus vecinos inmediatos. expresamos un programa como una red de ideas, podemos enfatizar sus propiedades estructurales de una manera natural y satisfactoria ".
- Donald E. Knuth , Programación alfabetizada [1] - ^ Bentley, Jon ; DE Knuth; MD McIlroy (1986). "Programación de perlas" (PDF) . Comunicaciones de la ACM . 29 (6): 471–483. doi : 10.1145 / 5948.315654 . S2CID 10128137 .
- ^ Mahoney, Michael S. (18 de agosto de 1989). "Entrevista con M. D. McIlroy" .
- ^ Van Wyk, Christopher J .; Hanson, David R .; Gilbert, John (julio de 1987). "Programación alfabetizada" (PDF) . Comunicaciones de la ACM . 30 (7): 593–599. doi : 10.1145 / 28569.315738 . S2CID 5328652 .
- ^ a b c d Ramsey, Norman (13 de mayo de 2008). "Un ejemplo de noweb" . Consultado el 4 de enero de 2009 .
- ^ El juego, también conocido como ADVENT , fue escrito originalmente por Crowther en unas 700 líneas de código FORTRAN; Knuth lo reformuló en el idioma WEB. Está disponible en literateprogramming.com o en el sitio web de Knuth. Archivado el 20 de agosto de 2008 en Wayback Machine .
- ^ de Marneffe, Pierre Arnoul (diciembre de 1973). "Programación de Holon - Informe PMAR 73-23". Universidad de Lieja , Service d'Informatique. Cite journal requiere
|journal=
( ayuda ) - ^ https://orgmode.org/worg/org-contrib/babel/intro.html
- ^ https://orgmode.org/worg/org-contrib/babel/languages.html#langs
- ^ https://orgmode.org/worg/org-contrib/babel/intro.html#literate-programming
- ^ Ashkenas, Jeremy. "Literate CoffeeScript" . Consultado el 13 de noviembre de 2014 .
- ^ Hitos en informática y tecnología de la información por Edwin D. Reilly, p. 157.
- ^ "Cuadernos Wolfram" . www.wolfram.com . Consultado el 28 de noviembre de 2018 .
- ^ "Referencia de formato de marcado: descripción general del marcado" . developer.apple.com . Consultado el 15 de noviembre de 2015 .
- ^ "Alfabetizado Agda" . Agda Wiki . Consultado el 26 de marzo de 2017 .
- ^ "Eva y la programación literaria" . Manual de Eva . Archivado desde el original el 24 de mayo de 2017 . Consultado el 25 de mayo de 2017 .
- ^ Yihui Xie; Joseph J. Allaire ; Garrett Grolemund (2019), R Markdown: La guía definitiva , Chapman & Hall , Wikidata Q76441281
- ^ Leisch, Friedrich (2002). "Sweave, Parte I: Mezcla de R y LaTeX: una breve introducción al formato de archivo Sweave y las funciones R correspondientes" (PDF) . R News . 2 (3): 28–31 . Consultado el 22 de enero de 2012 .
- ^ Pineda-Krch, Mario (17 de enero de 2011). "La alegría de Sweave: una guía para principiantes sobre la investigación reproducible con Sweave" (PDF) . Consultado el 22 de enero de 2012 .
- ^ Xie, Yihui (2015). Documentos dinámicos con R y knitr, 2ª edición . Chapman y Hall / CRC. ISBN 9781498716963.
- ^ Xie, Yihui. "Knitr: una herramienta de propósito general para la generación de informes dinámicos en R" (PDF) .
- ^ Ream, Edward K. (2 de septiembre de 2008). "Página de inicio de Leo" . Consultado el 3 de abril de 2015 .
- ^ Mountbatten, Sian. "Web 68: Programación alfabetizada con Algol 68" . Archivado desde el original el 20 de enero de 2013 . Consultado el 1 de enero de 2013 .
- ^ "Directrices TEI" . Consorcio TEI . Archivado desde el original el 22 de agosto de 2018 . Consultado el 23 de agosto de 2018 .
Otras lecturas
- Sewell, Wayne (1989). "Tejiendo un programa: Programación alfabetizada en WEB" . Van Nostrand Reinhold. ISBN 0-442-31946-0.
- Knuth, Donald E. (1992). Programación alfabetizada . California: Centro de la Universidad de Stanford para el Estudio del Lenguaje y la Información. ISBN 978-0-937073-80-3.
- Guari, Eitan M. (1994). TeX & LaTeX: dibujo y programación literaria . McGraw Hill. ISBN 0-07-911616-7. (incluye software)
- Nørmark, Kurt (13 de agosto de 1998). "Programación alfabetizada: cuestiones y problemas" . Universidad de Aalborg .
- Schulte, Eric (enero de 2012). "Un entorno informático en varios idiomas para la programación alfabetizada y la investigación reproducible" (PDF) . 46 (3). Revista de software estadístico. doi : 10.18637 / jss.v046.i03 .
- Mall, Daniel. "Programación alfabetizada" .
- Walsh, Norman (15 de octubre de 2002). Programación alfabetizada en XML . XML 2002. CiteSeerX 10.1.1.537.6728 . Archivado desde el original el 11 de mayo de 2008.
enlaces externos
- Programación alfabetizada en WikiWikiWeb
- Preguntas frecuentes sobre programación alfabetizada en CTAN