🔑 Habilidad Técnica: 5. Emplear Patrones de diseño 📏 📐
Tags: spanish, beginners, career, latam
Published: 2022-02-18 04:16:33

Se dicen cosas como:
* Los patrones de diseño son importantísimos
* Conocer patrones de diseño te convertirá en Arquitecto
* Si no programas con patrones de diseño no eres Senior
* Los buenos programadores se comunican a través de patrones de diseño

Alguien me comento que tenía un conocido, que en un proyecto personal había implementado todos los patrones de diseño, como resultado el código era innecesariamente complicado, es mejor enamorarse del problema y no de la solución.

Yo tengo mi propia opinión sobre los patrones de diseño, pero no puedo saltar directamente a ella, para escribir esto me puse a leer un montón de comentarios en Stack Overflow y otros foros sobre la “importancia” de éstos. 

##Conocerlos

Los recursos de cabecera que recomienda normalmente la gente son: 
* 📕 Design Patterns: Elements of Reusable Object-Oriented Software ([link Amazon](https://www.amazon.com/dp/0201633612))
* 💻 Refactoring.Guru ([link](https://refactoring.guru/))

Pero hay muchísimos más recursos que puedes usar, te recomiendo que busques y tomes una decisión informada, la verdad es que Refactoring.Guru lo considero la opción de cabecera, puedes complementarlo con recursos en línea de acuerdo al lenguaje de programación que tu utilices, por ejemplo mi amigo Héctor de León tiene [un curso sobre patrones de diseño en Udemy](https://www.udemy.com/course/aprender-patrones-de-disenos-aplicados-en-asp-net/) que es uno de los más vendidos.

Un tema tal vez controversial es decir que los patrones de diseño es algo que debes de conocer, como cuando utilizas ciertas fórmulas para poder resolver algo, esto no quiere decir que esa sea la única forma de resolverlo, pero si te ofrece algo común para poder resolver ese problema de una forma generalmente aceptada, no significa que hacerlo diferente sea malo. 

Es cierto que puedes crecer y ser programador por años sin saber un sólo patrón de diseño, yo mismo así lo hice, pero eventualmente se empezó a hablar de ellos en mi ambiente laboral, así que me tuve que poner a estudiarlos. 

##Lo positivo

1. Los patrones de diseño son una serie de herramientas que definidas y validadas para resolver problemas comunes en el diseño de software. Es para que **no reinventes la rueda**. 
2. Proporcionan un **vocabulario común**, cuando la gente dice Singleton, Factory, Entity, tu sabrás a que se refieren, la comunicación con tu equipo de trabajo será más fluida. 
3. **Reconocerás patrones de diseño en librerías, frameworks** y distintos lenguajes, esto te ayudará a conocer como funcioonan las cosas e incluso contribuir a esos proyectos. 
4. Muestran la intención de cómo se quería resolver algo, debido al vocabulario común que estas utilizando.


##Lo negativo

1. A veces hay personas que tienen diferentes interpretaciones para distintos patrones de diseño como MVC que es distinto en django o Ruby on Rails. 
2. _Si tienes un martillo todo parece un clavo_, ese es posiblemente el argumento que tienen más en contra, que cuando conoces patrones de diseño muchas veces los quieres aplicar en todo para demostrar cierto conocimiento. 
3. Soluciones ineficientes, aunque se diga mucho de que los patrones resuelven problemas de una forma demostrada, eso puede significar que te encuentres ignorando el problema real de tu proyecto, porque no aplican en tu contexto. 

---

Sigo trabajando en mis productos con el fin de ayudar de forma más estructurada a la comunidad de TI, si te interesan [pásale a mi perfil de Gumroad](https://marianorenteria.gumroad.com/)
- 📕 Líder Técnico
- 📘 De Junior a Senior
- 🗓 Mentorías
- 📑 Revisión de C.V.

Te invito a que **[me sigas en Twitter](https://twitter.com/marianorenteria/)** para que te enteres de todo el contenido que hago normalmente 🙃.

También soy creador del [podcast Chile, Mole & Tech](#)(https://dev.to/chilemoleytech), el cual esta [en todas las plataformas](#)(https://linktr.ee/chilemoleytech).

** Si te gusto este post, no dudes en compartirlo, me ayuda mucho. **