Esta mañana repasaba unas antiguas notas de la conferencia de Michael Feathers titulada “Seven blind alleys in software design” que dió en la Norwegian Developers Conference. Para quién no le conozoca, Michael es el autor del conocido libro: Working Effectively with Legacy Code.
El resumen de la charla, según el autor imsmo, es el siguiente: “El desarrollo de software no es muy antiguo, pero lo es lo suficiente como para que hayamos visto algunas ideas improductivas repetirse una y otra vez. Estas ideas son los ‘callejones sin salida’ del diseño de software que seducen a cada nueva generación de desarrolladores, project managers e investigadores”.
Desafortunadamente, parece que el video de la charla ya no está disponible. Pero estos son los siete callejones sin salida que propuso:
- Programar con dibujos: No se puede programar todo con dibujos, siempre hay casos especiales
- Metaprogramación: La metaprogramación no lo resuelve todo. Es interesante, pero peligrosa.
- La abstracción definitiva: Nunca la encontrarás
- La taxonomía perfecta: No existe una taxonomía perfecta
- Modelar el mundo real: En el mundo del software el objetivo no es modelar el mundo real
- Generación de código: Falla porque nunca es completa
- Lenguaje natural: Nunca programaremos en lenguaje natural
No pongo en duda el conocimiento de Michael Feathers pero sí que me pareció una charla un poco pesismista. En resumen, parece decir que muchas de las innovaciones realizadas en el desarrollo de software en los últimos 20 años son simplemente basura. ¿UML y modelado? malo; ¿Reflection? demasiada flexibilidad; ¿Abstracción? causa perdida; ¿Lenguaje Natural y DSLs? Pérdida de tiempo; ¿Plantillas y generadores de código? Mala calidad.
Los lectores de este blog pueden suponer (y acertarán) que no estoy de acuerdo con la mayoría de sus afirmaciones, incluso si por supuesto todas son parcialmente ciertas (por ejemplo, UML necesita OCL para una especificación completa), pero también parcialmente falsas 😁, por ejemplo, los avances en IA están amenazando la última. Aunque justo esta última es un gran ejemplo del porqué deberíamos evitar los mensajes absolutistas. Algunas aplicaciones se podrán, y de hecho ya están, programarse en lenguaje natural. Pero esto tampoco implica que los programadores vayan a perder su trabajo. La realidad del desarrollo es más complicada.
Con el único que estoy completamente de acuerdo es con el callejón sin salida de Modelar el mundo real. Como él dice, es bueno si los conceptos y elementos utilizados en el código se asemejan a los del mundo real, pero esto no debería ser un objetivo en sí mismo; cuando desarrollamos, debemos centrarnos en resolver el problema de ingeniería, no en modelar fielmente el dominio real. Por ejemplo, tratar de modelar el mundo real genera el error común de UML de asociaciones recursivas infinitas.
¿Estás de acuerdo con estos callejones sin salida? ¿Qué otros añadirías a la lista?
Más opiniones sobre esta charla en este hilo de reddit.
Últimos comentarios