Putting it together

by Luismi Cavallé

Babel

16 Jan 07

Finalmente la última película de Alejandro González Iñárritu, Babel, ha obtenido el Globo de Oro al mejor drama. Esto la convierte en favorita para los Oscars. A mí la película me gustó bastante —a pesar de parecerme inferior a su opera prima, Amores Perros.

Como es previsible por el título, el tema que subyace en las cuatro historias que cuenta la película es la confusión y la dificultad en la comunicación entre personas, ya hablen la misma lengua o distinta o pertenezcan a culturas diferentes. Y esto me da pié a escribir de lo que se escribe en este blog. [Un fotograma de la peli con Brad Pitt y comenzamos]

El desarrollo de software tiende a parecerse a una torre de Babel. Por un lado, los expertos de negocio utilizan sus propias jergas, las cuales les permiten comunicarse eficientemente con otros expertos dentro de su dominio. Los desarrolladores, por nuestra parte, solemos pensar y expresarnos en términos bastante peculiares, hablamos de clases, relaciones, workflows, etc… e, incluso, disponemos de lenguajes específicos para ello (UML, etc.). Por último están las máquinas, que finalmente solo entienden un conjunto muy limitado de instrucciones, sobre las que utilizamos lenguajes de programación de alto nivel que nos permiten comunicar el comportamiento que deben ejecutar.

Para algunos el desarrollo de software es fundamentalmente un problema de comunicación. De la comunicación entre el experto del negocio y el desarrollador. De la comunicación entre el desarrollador y la máquina. De la comunicación entre desarrolladores, directamente o a través del lenguaje de las máquinas. El problema surge, precisamente, por el efecto torre de Babel que se produce ya que cada uno de los actores habla su propia lengua, o bien, comparten lenguajes imprecisos o difíciles de entender. Para algunos, buena parte del esfuerzo en el proceso de desarrollo se invierte en “traducir” de unos lenguajes a otros.

La eterna promesa de un software capaz de traducir las necesidades del cliente a programas de ordenador, directamente, sin intervención de personal técnico, parece ya una quimera. Por ello, algunas de las últimas tendencias en el desarrollo de software pretenden optimizar esta comunicación desde puntos de vista más realistas y pragmáticos, poniendo el foco sobre el lenguaje:

El Domain-Driven Design (DDD) propone el concepto de lenguaje ubícuo. Un lenguaje común entre desarrolladores y expertos de negocio, basado en un modelo, una abstracción compartida y expresada en el software de la manera más fiel que la tecnología permita. El libro de Eric Evans al respecto es la referencia en este sentido.

Los Lenguajes Específicos del Dominio (DSL) son pequeños lenguajes, creados ad-hoc para resolver problemas concretos. Muy en la línea del lenguaje ubícuo_, los DSLs pretenden proporcionar a los desarrolladores de software la capacidad de crear y utilizar lenguajes más expresivos que las construcciones básicas que los lenguajes de programación proporcionan. Utilizando DSLs el código escrito por los programadores no solo sirve para comunicarse con la máquina, sino también con otros programadores. Los "_fluent interfaces":http://www.martinfowler.com/bliki/FluentInterface.html también tienen mucho que ver con esto.

El Behavior-Driven Development (BDD) sigue en la línea de los DSLs en el sentido de que el lenguaje que utilizan las máquinas sea comprensible por los desarrolladores, y exprese la intención del software en relación al dominio del problema. En este caso, evolucionando a partir del TDD, se propone que las especificaciones del comportamiento esperado del software sean escritas mediante DSLs ejecutables por las máquinas, de manera que estas puedan validar de forma automática que el comportamiento del software se corresponde con el esperado. Los programadores ya no escriben pruebas, sino que especifican comportamientos utilizando lenguajes específicos para ello.

Más de uno está comenzando a preguntarse qué nos depara la era post-ágil. Tiene pinta de que esto de los lenguajes y de la comunicación puede tener algo que ver con el futuro del software.

[PD: Cine, desarrollo de software y referencias bíblicas en un solo post. Esto va a ser difícil de superar!]