Patrones de diseño, la importancia de aprenderlos

septiembre 11, 2006
Design Patterns

Cuando era pequeño aprendí a hablar. Lo mejor de todo es que la gente me entendía. Y mientras más practicaba, y más viejo me ponía, pronunciaba las palabras más claramente, y me era más sencillo expresar mis ideas. En ese entonces no tenía idea de lo que era una oración, un verbo, un sustantivo. No conocía esos conceptos, sin embargo, los usaba diariamente. Fue después, en escuela primaria, que aprendí de gramática. Y para mí, aparte de que era una materia aburrida, no se trataba de aprender nada nuevo, sino de una materia que aclaraba lo que yo ya sabía y venía usando desde hace años. Aprender de gramática me aclaró el panorama, me ayudó a utilizar mi idioma de mejor manera.

Si tu, profesionalmente, o como hobby, te dedicas a programar, de seguro has escuchado hablar a diestra y siniestra de los famosos patrones de diseño. Que el singleton, que el factory, que el mvc, etc. Si no has oido de ellos, entonces, realmente, vives en otro planeta. Yo no vivía en otro planeta, pero por mucho tiempo me hice de la vista gorda y siempre daba la espalda cada vez que habia oportunidad de aprender sobre ese tema. Simplemente creía que ese tema y que mi vida simplemente era más fácil sin usar los famosos patrones de diseño.

De repente, Adobe (o fue Macromedia) inventó Flex, una solución de desarrollo de RIA’s (en pocas, aplicaciones para internet) que hace uso extensivo, según lo que he leído, del patrón MVC. Como me interesa aprender Flex, decidí que era hora de saber un poco más acerca de los complicados y famosos patrones de diseño, sobre todo el famosísimo MVC. Cogí un libro sobre el tema, y mientras más leía, me daba cuenta que estaba aprendiendo sobre algo que ya sabía. Igual que años antes, con la gramática, ahora mi libro de patrones de diseño no me enseñaba nada nuevo, sino que aclaraba el uso de algo que yo ya venía usando, bien o mal, desde hace tiempos. Ese librito vino a poner un nombre a lo que yo ya usaba, pero que no había bautizado, y aparte, vino a ayudarme a ver problemas en mis programas que por falta de experiencia yo no había visto.

Qué son los patrones de diseño

Cuando diseñas un programa (digamos que usando Flash y Actionscript) , muchas veces te encontrarás con problemas que tienes que resolver, para que tu programa funcione como lo requieres. Sin embargo, todo problema tiene una solución. De seguro siempre encuentras la solución, pero puede que te demores 3 días hasta que se te ilumine el cerebro y veas claramente lo que tienes que hacer, o qué codigo tienes que modificar para que el problema deje de existir.

No eres el único. A lo largo de los años, todos los programadores encuentran problemas en el diseño de sus programas. Es más, muchas veces encontrarás los mismos problemas, y generalmente la solución será la misma. Los problemas son repetitivos, y la solución óptima generalmente es la misma. Ahí hay un patrón. En este caso, el patrón es la solución a un problema en un contexto determinado.

Los patrones de diseño son exactamente eso: un conjunto de soluciones a problemas que generalmente encuentras en el diseño de un programa. Cada patrón explica cómo resolver un determinado problema, bajo determinadas circunstancias, y las ventajas y desventajas de su uso.

Por qué es importante aprenderlos?

Si ya llevas un tiempo programando, de seguro has encontrado muchos problemas y muchas soluciones en el código de tus programas. De hecho, sabes que soluciones funcionan mejor, o que consecuencias traen (puede que al solucionar un problema específico, aparezcan otros 10 distintos) y sabes cuando o donde usar esas soluciones. Esos son tus patrones, y de hecho, aunque no lo sepas, de seguro estás utilizando uno que otro de los patrones de diseño que otros sitios y otros libros mencionan. Los usas, aunque no sabes su nombre.

Como ya dije, los patrones de diseño son una guía para resolver problemas comunes en programación. Al aprenderlos, aprenderás a identificar de mejor manera los problemas que vas a tener, antes de que aparezcan, y aprenderás qué solución es la que mejor se aplica a tu problema.

Ninguna solución es perfecta, de seguro has visto eso en el código de tus programas. Aplicas una solución, pero sabes que talvez te quita flexibilidad en partes de tu programa, o que puede traer otros problemas. Como ya dije, de una u otra forma, si programas, ya has usado patrones de diseño. Pero ahora, cuando aprendas de que tratan, sabrás identificarlos en tus programas, y sabrás no solo por qué fue la mejor solución a tu problema, sino que te ayuda a darte cuenta de las consecuencias que tendrás en el futuro. Porque uno no se da cuenta de los problemas que pueden aparecer, sino hasta dos o tres meses, cuando te toque mejorar tu programa, o agregarle funcionalidad.

Finalmente, saber de patrones de diseño te ayuda a tener un lenguaje común con otros programadores. Si trabajas en un grupo de programadores. Cuando te toque modificar un programa, el autor del código seguramente tendrá que explicarte que fue lo que hizo, cómo funciona su código y por qué hizo tal o cual cambio. Se puede demorar horas. Pero esa conversación puede acortarse si te dice, aquí estoy utilizando tal o cual patrón (por ejemplo: el patrón Factory). Punto. Detrás de esa sola palabra, tu ya conoces los conceptos, y sabes cómo fue codificado el programa.

Todo exceso es malo?

Uno de los errores más comunes después de aprender sobre patrones de diseño es querer utilizarlos para todo y en todo tipo de código. Eso es definitivamente dañino para tu salud. Si aprendes de patrones de diseño, es para facilitar tu vida como programador, y no complicarla. Sigue viviendo tu vida diaria normalmente, y solo utiliza un patrón cuando de veras lo necesites.

Recuerda que los patrones son solo guías, pero no están escritos en piedra con letra de oro. No siempre son las mejores soluciones para el diseño de tu propio programa. Es más, mucha gente utiliza variaciones de los patrones de diseño. No tienes que adaptar tu código a patrones de diseño, todo lo contrario, debes adaptar los patrones a tu código.

Y bien, por qué hablo de este tema?

Simple. Quiero aprender Flex. Leí que hace uso extensivo del patrón MVC (Model view controller), y como no tenía idea, decidí aprender de qué se trataba. Ahora que sé de patrones, ya se de qué hablan cuando mencionan una vista, un controlador, o un modelo. Son cosas que de hecho ya he utilizado, pero ahora sé que las he utilizado. Ya tengo un lenguaje común para aprender Flex con su bendito patrón MVC.

Ah, y puede que Flex no utilice MVC, solo lo leí por ahí….mi siguiente tarea es ir y aprender Flex, y luego ver si era verdad 🙂

Cómo Aprendo?

Pues recomiendo Head First Design Patterns. Es una muy buena introduccion a este tema, aunque sus ejemplos se enfocan a Java. Claro que si sabes AS2, entenderás el código en su mayoría, y si no lo entiendes, entonces aún no estás listo para aprender de patrones de diseño…necesitas aprender actionscript 2 😀

Además, recomiendo que visiten design-nation, excelente blog donde encontrarás buenos artículos sobre el uso de patrones en Flash.

Si alguien quiere recomendar algún libro o sitio web, comenten al respecto, para actualizar este post.

Qué es el famoso MVC?

MVC es un patrón de diseño. De hecho, es un conjunto de patrones. Varias veces traté de entenderlo, pero me parecía muy complejo. Estaba equivocado. Lo que pasa es que para entenderlo, primero necesitaba saber de otros patrones y sus usos. Por eso no voy a mencionar de qué se trata. No vale la pena meterse de una a MVC….mejor es comenzar por el principio, por los patrones menos complejos. Cuando ya los entiendan, MVC se les hará bastante sencillo.

3 responses to Patrones de diseño, la importancia de aprenderlos

  1. Hola qué tal?
    Excelente comentario sobre la importancia de los patrones,.. y como lo comentaste seríamás práctico para un equipo de desarrollo para que puedan comunicar mucho mejor y en pocas palabras la solución que utilizó en su diseño.
    Yo trabajo con Java y la verdad también me costó aprender los benditos patrones.

    Saludos,
    Gisella

  2. hola me parece genial tu comentario y muy acorde con el tema, personalmente en estos momento estoy algo confundida con los patrones no cual escoger para mi tesis y mucho menos por donde empezar ya que todos me parecen utiles y cada uno tiene sus ventajas y desventajas en el momento de su implementacion. Me seria de gran ayuda cualquier consejo que me puedan dar sobre el tema .
    GRACIAS

  3. hola
    muy interesante y de verdad me di cuenta que uno los utiliza a diario en programacion