15.3.05

El neolítico del desarrollo software

Mientras más programo más convencido estoy de que se podría conseguir el mismo resultado sin tener que escribirlo tanto código. No me estoy refiriendo a programar mejor, me estoy refiriendo al hecho de que una gran parte de la información que es expresa mediante código, podría expresarse mediante otro tipo de lenguajes y herramientas que ofreciesen un nivel de abstracción mayor.

Hablo de neolítico porque cada día tenemos mejores IDEs para escribir, compilar, depurar y controlar las versiones de los fuentes y productos. Pero todo se sigue moviendo alrededor del código, hemos pulido las herramientas, pero hay que dar un salto cualitativo, hay que pasar de la piedra a los metales para poder afrontar los retos que tiene el desarrollo de software en una sociedad cada vez más dependiente de su software. Tengo muy presente la frase y comentarios de Frederick P. Brooks en "No Silver Bullet". Esto no resolverá todos los problemas del desarrollo software, muchos no tienen su origen en la tecnología, y su solución no es tecnológica, pero el paso del que hablo no sólo es posible, sino necesario, aunque no sea la panacea.

Para que todo esto no sea demasiado abstracto voy a hablar de la propuesta del OMG llamada MDA. La propuesta consiste en convertir a los lenguajes de modelado (como UML) en el centro de gravedad del proceso de desarrollo. El objetivo es que los modelos sean la herramienta básica del desarrollador, que le valgan para realizar la mayor parte de su trabajo. Los lenguajes de modelado son lo suficientemente potentes y abiertos como para poder descargar en ellos esta 'responsabilidad'. Por ejemplo, UML es un lenguaje que proporciona varios mecanismos de extensión (estereotipos, valores etiquetados, restricciones, perfiles UML) que permiten aprovechar de muchas maneras la información contenida en sus modelos, entre ellas, la de automatizar muchas de las tareas actuales de programación, no sólo la generación de código.
Por otra parte, en MDA se hace hincapié en el uso de varios tipos de modelos, destacan aquellos que no están vinculados a una tecnología concreta (PIM-Platform Independent Model), y aquellos que representan los sistemas empleando una tecnología concreta (PSM-Platform Specific Model).
Otro aspecto destacable de MDA es que formaliza los mapeos entre los modelos, es decir, el conocimiento necesario sobre una determinada tecnología, que permite pasar de un PIM a un PSM está en las herramientas de desarrollo, de forma que el paso de uno a otro puede ser en gran parte automático, lo que implica no sólo un importante ahorro de esfuerzo, sino lo que es más importante, permite que los desarrolladores dediquen su esfuerzo a tareas que no se pueden automatizar, y que requieren de su creatividad e ingenio.

Un lenguaje con un nivel de abstracción superior al del código tiene ventajas considerables:
  • Un lenguaje más abstracto es un lenguaje más cercano al problema y a su solución que el código. Esto facilita la descripción y comprensión.
  • Permiten centrarse más en el contenido. Se podría decir que es más 'denso'. Hay que escribir menos para decir lo mismo. Las aportaciones que se hacen contienen más semántica, y requieren ocuparse menos de los aspectos sintácticos.
  • Cuanto más tempranas sean las fases del desarrollo en las que se comiencen a usar lenguajes formales, antes se puede aprovechar la información. Para hacer comprobaciones, obtener métricas, controlar el avance, control más riguroso de versiones, ...
Las ventajas que reportaría al desarrollo un salto como el descrito abarcan muchos aspectos de éste: productividad, reutilización, mantenimiento, portabilidad, interoperabilidad. Pero eso es tema para otra ocasión.

Techorati tags: ,