Aquí estoy a la carga de nuevo para comentar otro de los libros que acabo de terminar. Llevaba tiempo en mi agenda por considerarlo básico, ya no el nivel, sino el tema, y siempre lo leía a ratos... esta vez ha caído del tirón y tomándome mi tiempo para sacar algunos apuntes que luego me gustaría plasmar en post... ya se verá ;) Pero vamos al lío: Head First Design Patterns

Voy a intentar resumir el contenido del libro:

Es una guía de los patrones de diseño básicos y más utilizados, mostrados y explicados con el ánimo de ser asimilados de forma fácil por nuestro cerebro. Para ello se basan en las imágenes, un lenguaje menos formal, repetición (oculta) de conceptos a lo largo de los capítulos, estilo humorístico, etc. Lo que viene a ser una "guía amigable para un cerebro" :)

¿Lo consideraría tan esencial como Clean Code? Hombre, considero muy muy importante el conocimiento de los patrones de diseño, no a nivel obsesivo-compulsivo, sino como guías de resolución de problemas comunes (definición de patrón de diseño). Pero puestos a leer un libro sobre ellos el más esencial sería el Design Patterns del GoF.

Esto no quiere decir que no recomiendo su lectura y compra, al contrario! A mi me ha encantado, me parece un texto genial para introducirse en este tema ya que el libro de los GoF es más técnico y más denso, comparado con este. Los patrones de los cuáles hablan en profundidad son:

Pero no solo de patrones vive el hombre, menos mal, porque estos no deben ser el primer recurso que usemos a la hora de enfrentarnos a los desarrollos software. Son una herramienta para la resolución de problemas y situaciones una vez que se han dado, no a priori mientras no sabemos como va a ir evolucionando un sistema.
A raíz de esto, buscando por la red, encontré este artículo sobre el libro en Coding Horror que me parece muy interesante, no solo el artículo sino también los comentarios. En uno de ellos se habla que los patrones son necesarios, de acuerdo, pero que hay que tener claro que los principios de todo esto es buscar la simplicidad y evitar la repetición. Y esto, nos suena a algo... KISS, DRY y YAGNI. Aquí un breve artículo donde habla de estos conceptos. Además, en el libro también aparece esta idea, la idea que los patrones no son el arma definitiva para todo, sino que de fondo hay un buen diseño orientado a objetos y unos principios básicos:
  • Abstracción, Encapsulación, Polimorfismo y Herencia (OOP)
  • Identificar los aspectos de una aplicación que varía y separarlos de los que permanecen quietos
  • Programa contra interfaces, no contra implementaciones
  • Favorece la composición sobre la herencia
  • Esfuérzate por diseño con bajo acoplamiento entre objetos que interaccionan
  • Las clases deben estar abiertas a la extensión pero cerradas a la modificación
  • Principio de Inversión de Dependencias
  • El principio Hollywood: "No nos llames, nosotros te llamaremos a ti"
  • El principio de una sola responsabilidad: "Una clase debe tener solo un razón para cambiar". Relacionado con la cohesión.
De lo anterior, sacado del libro vienen más cosas a la cabeza como los principios SOLID y los patrones GRASP. Ya no es que muchas cosas diferentes estén relacionadas, sino que vienen a decir lo mismo, a lograr una misma meta, como es lograr un buen software reutilizable, mantenible y extensible.
Enlace del libro en amazon.
Bonus: Hay un poster que engloba los conceptos que se ven durante el libro. Si alguien lo quiere ya sabe por donde encontrarme ;)