La programación alfabetizada (GP; English Literate Programming ) es un concepto, metodología de programación y documentación, en la que el programa consiste en prosa en lenguaje natural entremezclada con sustituciones de macros y código en lenguajes de programación [1] . El término y el concepto mismo fueron propuestos por Donald Knuth en 1981 al desarrollar un sistema de diseño por computadora Τ Ε Χ .
La programación alfabetizada es como explicaciones en conferencias de programación usando frases en " pseudocódigo " en lenguaje natural. Aportan claridad al código complejo y ocultan muchas otras abstracciones y códigos anidados en un lenguaje de programación formal bajo una frase.
GP es, en cierto sentido, "programar en pseudocódigo" con frases arbitrarias, que luego se expanden como macros utilizando una utilidad de un archivo fuente que incluye explicaciones textuales documentadas de conceptos, código en sí y pseudocódigo.
En otras palabras, el programa no se construye como una jerarquía ascendente o descendente, sino como una "red de conceptos interdependientes" (de ahí el nombre del primer sistema GP: "Web") y se crea como una "corriente de pensamiento" que pasa a través de esta red de manera coherente y lógica, lo que externamente hace que la descripción parezca un ensayo literario. El orden de presentación resulta ser independiente de los requisitos del traductor de idiomas.
Cambiemos las prioridades tradicionales en la creación de programas: en lugar de pensar en nuestra tarea como crear instrucciones "¿Qué hacer?" para la computadora, nos enfocaremos en explicar a otras personas las descripciones de nuestra visión de lo que la computadora debería hacer bajo el control del programa.
—Donald Knuth , http://community.livejournal.com/ru_perl/249441.htmlEl sistema GP que Knuth propuso como alternativa a la " programación estructurada " de la década de 1970, a pesar de las críticas favorables, no fue ampliamente adoptado debido a la falta de soporte de herramientas y su integración [2] .
Otro problema fue el enfoque de la GPU en el procesamiento por lotes , mientras que los sistemas de programación se centraron cada vez más en las herramientas WYSIWYG [2] .
Además, la difusión de HP se ha visto obstaculizada por la idea errónea de que los "programas alfabetizados" deberían ser monolíticos y que HP es lo opuesto al hipertexto [2] .
Mucha gente piensa que la GPU es solo un sistema de documentación o un sistema de formato para comentarios ordinarios. De hecho, se puede escribir un programa con pocos o ningún comentario usando el enfoque GP, al igual que las notas detalladas por sí mismas no crean un enfoque GP.
El malentendido más común se relaciona con el papel del sistema macro, que le permite construir sistemas arbitrarios de abstracciones sobre abstracciones, y con cambiar el orden de las piezas de una máquina a una que requiere pensar. Por lo tanto, es absolutamente erróneo considerar el uso de sistemas de documentación de interfaz como JavaDoc, doxygen, DOC++, autoduck, POD como programación GPU.
Otro concepto erróneo es que D. E. Knuth quería arreglar el enfoque "de arriba hacia abajo" en el desarrollo de sistemas de software. De hecho, propone combinar enfoques de arriba hacia abajo y de abajo hacia arriba, como se desprende de una cita del libro TeX: El programa: “ Pero el autor sugiere que la mejor manera de entender este programa es seguir más o menos el orden de Los componentes de TeX tal como aparecen en la descripción WEB que está leyendo ahora, ya que el presente ordenamiento pretende combinar las ventajas de los enfoques de "abajo hacia arriba" y "de arriba hacia abajo" al problema de comprender un sistema algo complicado. »