La generación de código y el trabajo de desarrollo de software

Published on Author lopezLeave a comment

Antes de ayer, 20 de Julio, @hallo twittereaba:

Recibió varias respuestas, acá va una mía y otra que recibió:

Lo que pasa es que hemos estado generando código por décadas. La herramientas que usamos para eso tiene nombre: compilador. Recuerdan los viejos días? Había que setear los relés en la ENIAC, o usar el panel frontal de la micro Altair para inicializar su memoria. Los compiladores acudieron en nuestra ayuda, generando código desde un modelo de más alto nivel: el lenguaje de programación.

Pero por las últimas tres décadas, no elevamos el nivel de abstracción: seguimos usando lenguajes de programación directamente, para programa. Algunas excepciones: el lenguaje SQL, que nos relevó de recorrer cursores o buscar en índices ISAM, o el diseñador de formularios de Visual Basic, que nos liberó de escribir decenas de páginas de código de Windows a la Petzold.

El generar código desde un modelo (como trato de promover desde mi proyecto personal AjGenesis), es la manera de obtener y usar un nuevo “lenguaje”: sea un DSL, domain specific language, o un DSM, domain specific model, o lo que querramos usar como punto de partida.

Hoy mismo tenemos demasiadas tecnologías, con miríadas de detalles y configuraciones a atender. Pienso en Spring Framework, Hibernate, Struts 2, JavaServer Faces, ASP.NET MVC, Web Services, Windows Communication Foundation, etc… Sabemos más cosas hoy de cómo desarrollar software, pero las aplicaciones actuales están infectadas de toneladas de detalles técnicos, fruto de problemas y errores. Muchos de esos detalles podrían ser derivados desde un modelo, como en mostrado en ejemplos de AjGenesis que he posteado por acá en los últimos años, creando salidas para diferentes tecnologías.

Si lo miran bien, esto es lo mismo que decir: “a=fact(4)” es el modelo, y registros de procesador, manipulación de pila, reserva y liberación de memoria, son los detalles que nos resuelve un compilador.´

Más respuestas en Twitter:

Sí, la manipulación de registros de procesador puede ser interesante la primera vez que la aprendemos, pero después de horas y horas de trabajo, y con fechas de entrega para mañana, puede volverse no sólo aburrida, sino también problemática. Es por eso que hubo motivación para crear assemblers, macro assemblers, lenguajes de alto nivel y compiladores para los mismos.

En mi tweet de arriba, mencion la inteligencia artificial. Bien, debo admitir que es sólo una idea, pero pienso que la generación de código es un campo apropiado para la inteligencia artificial aplicada, que es un término demasiado amplio hoy en día. Daría para otro post en detalle.

Otra pregunta:

Bien, es difícil que en corto y mediano plazo consigamos generar todo desde un modelo. Lo que más afecta: hay muchas tecnologías y cada año aparece un nuevo muchacho en elbarrio (Scala, Clojure, Rest, Cloud Computing, Sharding, aplicaciones móviles… etc…). Entonces, no hay una sola forma de generar software, siempre habrá trabajo para estudiar y aplicar nuevas tecnologías. Pero veo que en cada una de esas tecnologías, hay lugar para aplicar la generación de código, y si partimos de un modelo de alto nivel, el pasaje de una tecnología a otra debe ser menos traumático.

Estoy de acuerdo. Pero déjenme soñar: aplicaciones creando aplicaciones… No podríamos generar en el futuro ese tipo de aplicaciones? … Por lo menos para cuando lleguemos a la Enterprise de Star Trek 🙂

Generanción de código: sky is the limit (es la frase directrix de AjGenesis… 🙂

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Leave a Reply

Your email address will not be published. Required fields are marked *