Si bien soy bastante nuevo en el concepto de programación literaria (y, por lo tanto, es probable que me haya perdido el barco por completo), parece alinearse con el concepto de DSL .
La idea detrás de un DSL es desglosar un dominio de problemas en una gramática simple orientada al lenguaje natural que se pueda usar para construir algoritmos para resolver esos problemas.
Para mí, esa misma idea, o al menos la base fundamental de la misma, es la misma o al menos estrechamente relacionada con la programación alfabetizada.
En el mundo maravilloso, por ejemplo, existe un fuerte impulso para usar DSL más regularmente y para crear nuevas DSL para resolver problemas comunes. Este impulso proviene de ambas herramientas dentro del lenguaje (constructores fáciles), así como de bibliotecas centrales que admiten una API basada en DSL.
Dado que la tendencia, al menos en ese rincón del mundo, es hacia la programación alfabetizada, diría que es una buena metodología para luchar.
Desafortunadamente, el nivel de pensamiento necesario para crear un buen dsl está a menudo más allá de la mayoría de los programadores, por lo que he visto. Sé que personalmente lucho con algunos de los conceptos necesarios de vez en cuando. Puede ser esta dificultad la que ha impedido que tales técnicas obtengan una adopción más amplia.
Es el caso clásico de cuando usar la herramienta es una cosa, pero crearla está en un nivel completamente diferente.
Para ampliar un poco mi punto de vista, no es tanto que las DSL sean lo mismo que la programación alfabetizada, sino que hacen que la programación alfabetizada sea mucho más posible . Particularmente cuando son DSL de lenguaje natural .
En la versión 1.8 de groovy, la capacidad DSL en lenguaje natural se mejoró sustancialmente con la adición de cadenas de comandos más potentes.
Por ejemplo, las siguientes líneas de código son programación , no solo pseudo-oraciones:
drink tea with sugar and milk
move left by 30.centimeters
sendFrom "Guillaume" to "Jochen"
send from: "Jochen" to "Lidia"
Email.from "Lidia" to "Guillaume" withBody "how are you?"
contact.name "Guillaume" age 33
move left by 30.centimeters
sell 100.shares of MSFT
take 2.pills of chloroquinine in 6.hours
blend red, green of acrylic
artist.paint "wall" with "Red", "Green", and: "Blue" at 3.pm
wait 2.seconds and execute { assert true }
concat arr[0] with arr[1] and arr[2]
developped with: "Groovy" version "1.8-beta-2"
Nota: el ejemplo de código proviene del blog de Guillaume Laforge
La idea central detrás de la programación alfabetizada es que el lenguaje natural es más comprensible para los humanos y eso es lo que importa. Las capacidades DSL de lenguaje natural de Groovy hacen que sea una realidad mucho más cercana, en mi opinión. Especialmente cuando esas DSL se utilizan para crear reglas comerciales para una aplicación.
Ser capaz de "codificar" los componentes críticos de un sistema utilizando lenguaje natural es la esencia misma de la programación alfabetizada. Tener que intercalar el lenguaje natural con fragmentos de código es una forma bastarda de programación alfabetizada. Si bien es útil, creo que las DSL de lenguaje natural que le permiten usar lenguaje natural como el código en sí mismo son un gran avance.
Ampliar la capacidad de programación en general es el siguiente paso en el proceso, pero en gran medida las herramientas para hacerlo ya están implementadas. Sí, todavía no hay un DSL "general", pero para dominios más pequeños, la capacidad está ahí.
Para obtener más ejemplos de esto en acción (sin ningún orden en particular):