Diseño software: después de 60 años aún no sabemos si esencial o es inútil
Por unos adorado y por otros odiado, ese es el diseño software. Llevamos desde que nació la ingeniería software, más de 60 años, dándole vueltas, sin ponernos de acuerdo sobre si es útil o no.
Ninguna ingeniería clásica, ni la construcción de aviones, puentes, tostadoras, ni la arquitectura, la construcción de edificios, etc., ninguna tiene la mínima duda de que antes de construir el producto hay que diseñarlo. Pero no es así en el caso del software, donde el diseño, algo tan obvio y esencial en otras disciplinas, es una tarea, y un producto, sobre el que aún no tenemos un consenso sobre sí es imprescindible o es algo inútil.
Los comienzos de la ingeniería del software intentaron imitar la manera de construir de otras disciplinas, aquellas que crean cosas físicas, y por ello el diseño software se convirtió en una pieza clave, que apoyaban muchos de los primeros e importantes métodos para crear software. El diseño «top down», los métodos de Yourdon,
Jackson, etc. Posteriormente, el movimiento de los patrones de diseño y los arquitectónicos, y otras famosas metodologías, como RUP, y notaciones, como UML, continuaron apoyando a la figura del diseño como algo esencial.
Pero también desde hace muchos años existe otra visión, la visión adaptativa de crear software, los ciclos de vida iterativos, incrementales, en espiral, etc., que relajan esa visión del diseño como pieza esencial, siempre previa a la construcción. No lo eliminan, pero sí que relajan el detalle y minuciosidad de la tarea de diseñar, y entienden que el diseño es principalmente el propio código.
Y todo ello hasta nuestros días, donde continúa el debate, sin una única respuesta. En años más recientes, la agilidad, y la visión de que el diseño es el código, han continuado apostando porque una fase de diseño previa a la construcción no es algo crítico a la hora de desarrollar.
Pero también hoy, áreas tan potentes en investigación como el MDD (te dejo un post sobre qué es esto del MDD), estrategia de desarrollo software que persigue la generación automática del código desde especificaciones de alto nivel, apuestan por el diseño como pieza clave y esencial, previa a la construcción, desde el que se puede crear el código, haciendo de este último algo menos relevante en comparación con el diseño.
Para seguir dándole vueltas al tema, te dejo un post relacionado de hace un tiempo… Qué es más importante mantener… ¿el diseño o el código?