¿Qué es un Patrón de Diseño?

Ayer a la tarde nos cayó una evaluación sorpresa en nuestra empresa.
La hoja de evaluación estaba totalmente en blanco y la consigna fue:
“Por favor, escriban lo que saben de Patrones de Diseño. Solo necesito nombres, clasificación, Intención (que problema pretende resolver). Escriban solo si pueden completar los tres ítems”.
Para sorpresa de todos, nadie pudo escribir más de un único patrón de diseño que conocía básicamente, pero que nunca utilizó, o al menos concientemente!
Entonces sumido en la vergüenza me pareció que lo más lógico era investigar un poquito y creo que al menos por ahora, estos dos enlaces me serán útiles.
Espero les sea útil a ustedes también.
Advertisements

Como codificar Software que sea fácil de mantener?

Hay que diferenciar entre software fácil de mantener (mantenibilidad) y fácilidad en la codificación del software.
La facilidad para la codificación de software hoy en día son bien sostenidas por los nuevos IDEs y herramientas existentes y mucho más si se considera la relativa facilidad de obtención, aprendizaje e implementación de tales herramientas.
A su vez cada lenguaje tiene su particularidad y cada programador es particular en su forma de codificar y tal vez ese sea el motivo por el cual las organizaciones podrían necesitar establecer estándares de codificación y patrones de soluciones, proponiendo un método de trabajo homogéneo para toda la empresa. Esto sin lugar a dudas (de mi parte) ahorra muchos problemas y mejora la productividad.
Por cierto que tiene costos iniciales y me atrevo a decir que tienen más que ver con el cambio que implica en la metodología de trabajo que con el costo monetario.
Ahora bien, tener todas estas facilidades de ninguna manera garantiza que logremos genera software fácil de mantener ya que este aspecto de mantenibilidad, tiene que ver con la concepción misma del sistema.
Muchos dicen que es competencia exclusiva del Diseño y Arquitectura del software, pero yo me atrevo a decir que esto se trata mucho antes, cuando se plantean los alcances y se reconocen las limitaciones a nivel de herramientas tecnológicas, conocimientos del equipo del proyecto, cuestiones políticas, legales y hasta culturales.
La arquitectura y el diseño del sistema brindarán las propiedades de mantenibilidad necesarias y atributos como  testeabilidad, flexibilidad, escalabilidad, fiabilidad entre otros, pero siempre tendrán de limitantes los ítemes que antes mencioné.

Sin embargo, para no dejar colgado a aquellos que quieren alguna respuesta relacionada a la codificación y tanto a otros aspectos, comparto con ustedes este artículo de Martín Fowler “Código como documentación”