Lenguaje de patrón

En diseño, un lenguaje de patrón es un método estructurado para describir una serie de buenas prácticas de diseño en un área particular. Se caracteriza por:
Los lenguajes de patrón se utilizan para formalizar los valores de decisiones cuya efectividad resulta obvia a través de la experiencia, pero que es difícil de documentar y pasar a los aprendices. También son herramientas útiles a la hora de estructurar el conocimiento y comprender sistemas complejos sin caer en la simplificación extrema. Estos procesos incluyen la organización de personas o grupos que tienen que tomar decisiones complejas, y revelan cómo interactúan las diferentes funciones como parte del total.
Christopher Alexander acuñó el término lenguaje de patrón. Lo usó para referirse a los problemas normales del diseño arquitectónico y civil. Su uso iba desde la forma de estructurar una ciudad a como debían disponerse las ventanas en una habitación. La idea se popularizó gracias a su libro A Pattern Language.
El libro de Alexander The Timeless Way of Building describe qué significa para él lenguaje de patrón y cómo se aplica al diseño de edificios y ciudades. Sin embargo, este sistema es aplicable a cualquier otro campo del diseño.
Alexander da la siguiente definición de patrón: "Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, para describir después el núcleo de la solución a ese problema, de tal manera que esa solución pueda ser usada más de un millón de veces sin hacerlo ni siquiera dos veces de la misma forma."
Según Richard Gabriel: "Cada patrón es una regla de tres partes, la cual expresa una relación entre un cierto contexto, un conjunto de fuerzas que ocurren repetidamente en ese contexto y una cierta configuración software que permite a estas fuerzas resolverse por sí mismas."
Así como las palabras deben tener una relación gramática y semántica entre ellas para crear un lenguaje oral útil, los patrones de diseño deben estar relacionados los unos con los otros para poder formar un lenguaje de patrones. En el trabajo de Alexander está implícita la idea de que los patrones deben estar organizados en estructuras lógicas o estructuras intuitivas. La estructura (jerárquica, iterativa, etc) puede variar, dependiendo del tema. Cada patrón debe indicar su relación con otros patrones y con el lenguaje en sí.
Alexander animó a la gente que usaba su sistema a expandirlo con patrones que los usuarios creasen. Para hacer esto posible, sus libros no se centran de forma estricta en arquitectura o en ingeniería civil. En los libros también habla del método general de los lenguajes de patrón. De esta forma, sus métodos se han usado para documentar el conocimiento experimental en diversos campos, como los patrones informáticos que se usan en ingeniería de software, patrones de diseño de interacción en Interacción del hombre con la computadora y patrones pedagógicos en educación. Sin embargo, las especificaciones de Alexander sobre como usar un lenguaje de patrón así como cómo crear uno nuevo siguen ejerciendo su autoridad, y sus libros son la referencia para expertos en campos muy diversos.
Es importante señalar que notaciones como UML o la colección de símbolos de los diagramas de flujo no son lenguajes de patrón (aunque podrían utilizarse para expresar un lenguaje de patrón). Una receta o cualquier otro conjunto de secuencias a seguir, con sólo un posible camino desde el inicio hasta el final, tampoco es un lenguaje de patrón. Sin embargo, el proceso de diseño de una nueva receta puede beneficiarse del uso de los lenguajes de patrón.
Siguiendo las enseñanzas de Alexander, un patrón individual debe describirse en 3 partes:
Contexto -> Sistema de fuerzas -> Solución
Así, una entrada en un lenguaje de patrón debería tener un nombre sencillo, una descripción concisa del problema, una solución clara, y suficiente información para ayudar al lector a entender cuando aplicar esta solución. También debería mostrar que patrones deben tenerse en consideración de ante mano, y que patrones se deberían considerar más adelante.
Nombre: GalletaChocolateRelación
Contexto: Cocinando galletas de chocolate para tu familia y amigos
Considera estos patrones anteriormente: AzucarRelación, HarinaRelación, HuevoRelación
Problema: Determinar la relación óptima entre trozos de chocolate y masa de galleta
Solución: Observe que la mayoría de la gente considera los trozos de chocolate como lo mejor de la galleta. También observe que demasiado chocolate haría que la galleta no se mantuviese junta, disminuyendo su atractivo. Como se están cocinando pocas galletas, el coste no es un gran problema. Así, utilice tanto chocolate como pueda manteniendo la galleta compacta.
A considerar ahora: NuecesRelación o TiempoCocción o MetodoCongelación.
Ward Cunningham creó la Wiki original, el Portland Pattern Repository, como una forma de expresar los lenguajes de patrón de forma efectiva. En la actualidad tiene cientos de patrones de diferentes campos, incluyendo muchos sobre programación extrema.
Los siguientes pasos asumen el uso de una aplicación informática de hipertexto, como una wiki.