Jan 25, 2008

Sobre diseño y algo más ... reply

Estos dias estuve leyendo un post muy interesante sobre diseño y algo más de alguien a quién respeto mucho, Hernán Wilkinson. Y este post de hoy esta dedicado a hablar sobre eso y tratar de explicar un poco mas extensamente mi punto de vista.

En primer lugar hay una distancia insalvable entre la experiencia de Hernán y la mía, y uno de los grandes hitos que yo no tengo el gusto de conocer es Smalltalk como experiencia de trabajo. Aclarado esto voy a poner sobre la mesa algunas cosas basado en mi [no muy larga] experiencia como desarrollador Java.

Lo primero que me llama la atención del post es que hoy en día se confunde la herramienta con el objetivo o dicho en las palabras de Hernán ..."es la confusión del fin con el medio, donde el medio pasa a ser el fin [...] Cuando a gente que estoy entrevistando, le pregunto si saben diseñar utilizando objetos respondan que sí, que saben UML"... fragmento con el que estoy de acuerdo, la idea no esta en saber tal o cual herramienta, sino comprender el concepto y saber aplicarlo de la manera más acertada.

Vamos a lo que quería explayar. Diseño como actividad implica un cierto grado de conocimiento (patrones, arquitecturas, frameworks, limitaciones, etc) y soy creyente de que esta actividad debe hacerse de manera abstracta al lenguaje
que estamos usando (siempre que hablemos de OOP). En resumen, diseñar es modelar un problema, relacionar los objetos y determinar su comportamiento para llegar a un objetivo claro (la resolución de un problema). La disyuntiva de diseñar en favor de ciertos cambios (pensando en el futuro) y la de diseñar pensando sólo en el ahora es un tema que puede dar para hablar mas de algunos garabatos que puedo expresar aquí. Pero creo fervorosamente que siempre es necesario contemplar algunos posibles cambios que puedan sucederse. Adivinar el futuro es casi imposible, pero prevenir siempre es mejor que curar y mi corta experiencia como diseñador me ha demostrado que no me había equivocado.

Si bien la documentación como artefacto es mas bién estática, siempre es necesaria. No digo que haya que documentar hasta la última línea de código de la última release, pero si digo que una visión global de lo que tenemos debería formar parte de todo desarrollo, llamenló documentación de arquitectura o un simple diagrama de clases que permita saber donde estamos parados y conocer el contexto de referencia, al menos delinearlo.

Quiero recalcar que estoy de acuerdo en que diseñar no implica tener que hacer un millón de documentos, eso es casi absurdo, pero no concuerdo en diseñar usando el código. Como dije antes, no me parece feliz tener ideas en la cabeza y expresarlas en código de manera directa [tal vez entendí mal]. Mi utopía es tener un gran block anotador, del tamaño de un pizarron, e ir bosquejando las ideas y las iteraciones en reuniones de desarrollo, donde todos podamos ver como el pensamiento se va alineando a la solución definitiva y como cada vez que se quiere solucionar un nuevo problema se pueda ver lo que se hizo y como podemos alinear una solución con la actual. Esto es siempre que estemos hablando de proyectos medianos/grandes que requieren una integración continua. He visto como se hacen cosas mas de una vez y se cometen errores por no tener, lo que Edward De Bono llama "pausa creativa" y es tan simple como pensar (con conocimiento del contexto) como solucionar un problema unos minutos antes de "meter un conejo", "atarlo con alambre", hacerlo asi porque lo demás esta hecho así o porque después refactorizamos. El viejo DRY parece perderse en la falta de conocimiento de una aplicación o más bien en la vorágine de somos "ágiles" y podemos tenerlo para ayer.

No estoy en desacuerdo con TDD, creo que es una gran metodología, pero no me parece que sea absolutamente feliz.

Este post se esta haciendo largo, lo leo y lo releo y no puedo cerrar mi idea... espero se entienda. Me gustó el post de Hernán, es un tema de discusión que me parece apasionante, quería tratar de compartir sus ideas y ponerlas con las mías (tal vez un poco irrespetuosamente).

Hernán ojalá algún día podamos sentarnos a tomar un café y charlar sobre esto, realmente me encantaría ....

Bueno, era esto... les dejo arriba el link al blog, leanló no tiene desperdicio alguno de principio a fin.

Saludos!

elmasse!®