Un lenguaje de patrones es un conjunto organizado y coherente de patrones , cada uno de los cuales describe un problema y el núcleo de una solución que se puede utilizar de muchas maneras dentro de un campo específico de especialización. El término fue acuñado por el arquitecto Christopher Alexander y popularizado por su libro de 1977 A Pattern Language .
Un lenguaje de patrones también puede ser un intento de expresar la sabiduría más profunda de lo que aporta vitalidad a un campo particular de la actividad humana, a través de un conjunto de patrones interconectados. La vitalidad es un término que se usa para designar "la cualidad que no tiene nombre": una sensación de totalidad, espíritu o gracia que, si bien tiene formas variables, es precisa y verificable empíricamente. [1] Alexander afirma que la gente común puede utilizar este enfoque de diseño para resolver con éxito problemas de diseño muy grandes y complejos.
Cuando un diseñador diseña algo (ya sea una casa, un programa informático o una lámpara), debe tomar muchas decisiones sobre cómo resolver problemas. Un problema individual se documenta con su lugar típico (la sintaxis ) y su uso (la gramática ) con la solución más común y reconocida que se encuentra en la práctica, como los ejemplos que se ven en los diccionarios . Cada una de esas entradas es un patrón de diseño individual . Cada patrón tiene un nombre, una entrada descriptiva y algunas referencias cruzadas, de forma muy similar a una entrada de diccionario. Un patrón documentado debe explicar por qué esa solución es buena en los contextos del patrón.
Los patrones elementales o universales como “puerta” o “asociación” son ideales versátiles de diseño, ya sea que se encuentren en la experiencia o para su uso como componentes en la práctica, descritos explícitamente como resoluciones holísticas de las fuerzas en contextos y circunstancias recurrentes, ya sea en arquitectura, medicina, desarrollo de software o gobernanza, etc. Los patrones pueden inventarse o encontrarse y estudiarse, como los patrones de diseño que ocurren naturalmente y que caracterizan los entornos humanos. [2]
Como todos los lenguajes, un lenguaje de patrones tiene vocabulario , sintaxis y gramática , pero se aplica a alguna actividad compleja que no sea la comunicación. En los lenguajes de patrones para el diseño, las partes se dividen de esta manera:
Esto simplifica el trabajo de diseño porque los diseñadores pueden comenzar el proceso desde cualquier parte del problema que entiendan y trabajar hacia las partes desconocidas. Al mismo tiempo, si el lenguaje de patrones ha funcionado bien para muchos proyectos, hay razones para creer que incluso un diseñador que no entienda completamente el problema de diseño al principio completará el proceso de diseño y el resultado será utilizable. Por ejemplo, los esquiadores que entran al interior deben quitarse la nieve y guardar el equipo. La nieve sucia y los limpiadores de botas deben quedarse afuera. El equipo necesita cuidado, por lo que los estantes deben estar dentro.
Así como las palabras deben tener relaciones gramaticales y semánticas entre sí para que un lenguaje hablado sea útil, los patrones de diseño deben estar relacionados entre sí en orden de posición y utilidad para formar un lenguaje de patrones. El trabajo de Christopher Alexander describe un proceso de descomposición, en el que el diseñador tiene un problema (quizás un encargo comercial), selecciona una solución y luego descubre nuevos problemas más pequeños que resultan de la solución más grande. Ocasionalmente, los problemas más pequeños no tienen solución y se debe seleccionar una solución más grande diferente. Finalmente, todos los problemas de diseño restantes son lo suficientemente pequeños o lo suficientemente rutinarios como para que los constructores los resuelvan mediante improvisación, y el "diseño" está hecho.
La estructura organizativa real ( jerárquica , iterativa , etc.) queda a criterio del diseñador, según el problema. Esto permite explícitamente que un diseñador explore un diseño, comenzando desde una pequeña parte. Cuando esto sucede, es común que un diseñador se dé cuenta de que el problema es en realidad parte de una solución más grande. En este punto, el diseño casi siempre se convierte en un mejor diseño.
En el lenguaje, por lo tanto, cada patrón debe indicar sus relaciones con otros patrones y con el lenguaje en su conjunto, lo que proporciona al diseñador que utiliza el lenguaje una gran cantidad de orientación sobre los problemas relacionados que deben resolverse.
La parte más difícil de que un experto externo aplique un lenguaje de patrones es, de hecho, obtener una lista completa y fiable de los problemas que se deben resolver. Por supuesto, las personas que están más familiarizadas con los problemas son las que necesitan un diseño. Por eso, Alexander abogó por la improvisación in situ por parte de usuarios interesados y empoderados [3] [4] como una forma poderosa de formar soluciones iniciales a gran escala muy viables, maximizando la utilidad de un diseño y minimizando la reelaboración del diseño. El deseo de empoderar a los usuarios de la arquitectura fue, de hecho, lo que llevó a Alexander a emprender un proyecto de lenguaje de patrones para la arquitectura en primer lugar.
Un aspecto importante de los patrones de diseño es identificar y documentar las ideas clave que diferencian un buen sistema de un sistema deficiente (que puede ser una casa, un programa de computadora o un objeto de uso diario), y ayudar en el diseño de sistemas futuros. La idea expresada en un patrón debe ser lo suficientemente general como para ser aplicada en sistemas muy diferentes dentro de su contexto, pero lo suficientemente específica como para brindar una guía constructiva.
El conjunto de situaciones en las que se aplican los problemas y las soluciones que se abordan en un patrón se denomina contexto. Una parte importante de cada patrón es describir este contexto. Los ejemplos pueden ilustrar mejor cómo se aplica el patrón a situaciones muy diferentes.
Por ejemplo, el patrón de Alexander "UN LUGAR PARA ESPERAR" aborda las paradas de autobús de la misma manera que las salas de espera de un consultorio, aunque sigue proponiendo soluciones útiles y constructivas. El libro "Gang-of-Four" Design Patterns de Gamma et al. propone soluciones que son independientes del lenguaje de programación y del dominio de aplicación del programa.
De todos modos, los problemas y las soluciones que se describen en un patrón pueden variar en su nivel de abstracción y generalidad por un lado, y en su especificidad por el otro. Al final, esto depende de las preferencias del autor. Sin embargo, incluso un patrón muy abstracto normalmente contendrá ejemplos que son, por naturaleza, absolutamente concretos y específicos.
Los patrones también pueden variar en cuanto a su grado de comprobación en el mundo real. Alexander otorga a cada patrón una calificación de cero, una o dos estrellas, indicando su grado de comprobación en ejemplos del mundo real. En general, se afirma que todos los patrones necesitan al menos algunos ejemplos existentes en el mundo real. Sin embargo, es concebible documentar ideas aún no implementadas en un formato similar al de un patrón.
Los patrones del libro de Alexander también varían en cuanto a su nivel de escala: algunos describen cómo construir una ciudad o un barrio, otros tratan sobre edificios individuales y el interior de habitaciones. Alexander considera los artefactos de pequeña escala como elementos constructivos del mundo a gran escala, de modo que pueden conectarse a una red jerárquica.
Un patrón debe caracterizar los problemas que pretende resolver, el contexto o situación donde surgen estos problemas y las condiciones bajo las cuales se pueden recomendar las soluciones propuestas.
A menudo, estos problemas surgen de un conflicto entre diferentes intereses o "fuerzas". De ahí surge un patrón de diálogo que ayudará a equilibrar las fuerzas y, finalmente, a tomar una decisión.
Por ejemplo, podría haber un patrón que sugiera un teléfono inalámbrico. Las fuerzas serían la necesidad de comunicarse y la necesidad de hacer otras cosas al mismo tiempo (cocinar, inspeccionar la estantería). Un patrón muy específico sería simplemente "TELÉFONO INALÁMBRICO". Patrones más generales serían "DISPOSITIVO INALÁMBRICO" o "ACTIVIDAD SECUNDARIA", lo que sugiere que una actividad secundaria (como hablar por teléfono o inspeccionar los bolsillos de los vaqueros) no debería interferir con otras actividades.
Aunque no son muy específicas en su contexto, las fuerzas del patrón "ACTIVIDAD SECUNDARIA" son muy similares a las del patrón "TELÉFONO INALÁMBRICO". Por lo tanto, las fuerzas en competencia pueden verse como parte de la esencia de un concepto de diseño expresado en un patrón.
Normalmente, un patrón contiene una justificación que hace referencia a unos valores determinados. Para Christopher Alexander, lo más importante es pensar en las personas que entrarán en contacto con una pieza de arquitectura. Uno de sus valores clave es hacer que estas personas se sientan más vivas. Habla de la "calidad sin nombre" (QWAN, por sus siglas en inglés).
En términos más generales, podríamos decir que un buen sistema debería ser aceptado, bienvenido y felizmente adoptado como un enriquecimiento de la vida diaria por quienes están destinados a usarlo o, mejor aún, por todas las personas a las que afecta. Por ejemplo, al hablar de un café en la calle, Alexander habla de los posibles deseos de un cliente, pero también menciona a las personas que pasan por allí.
El mismo razonamiento se puede aplicar a dispositivos técnicos como teléfonos y automóviles, a estructuras sociales como un equipo que trabaja en un proyecto o a la interfaz de usuario de un programa informático. Las cualidades de un sistema de software, por ejemplo, se podrían evaluar observando si los usuarios pasan su tiempo disfrutando o teniendo dificultades con el sistema.
Al centrarnos en los impactos en la vida humana, podemos identificar patrones que son independientes de los cambios tecnológicos y así encontrar una "calidad atemporal" (Alexander).
Generalmente, el autor de un lenguaje o colección de patrones elige una estructura genérica para todos los patrones que contiene, dividiéndolos en secciones genéricas como contexto, enunciado del problema, solución, etc.
Los patrones de Christopher Alexander, por ejemplo, consisten cada uno en un nombre corto, una calificación (hasta dos símbolos '*'), una imagen sensibilizadora, la descripción del contexto, el enunciado del problema, una parte más larga del texto con ejemplos y explicaciones, un enunciado de la solución, un esquema y referencias adicionales. Esta estructura y disposición a veces se denomina "forma alejandrina".
Alexander utiliza un formato de texto especial para marcar las distintas secciones de sus patrones. Por ejemplo, el enunciado del problema y el enunciado de la solución se imprimen en negrita, y este último siempre va precedido de la palabra clave "Por lo tanto:". Algunos autores, en cambio, utilizan etiquetas explícitas, lo que crea cierto grado de redundancia.
Cuando el diseño lo realiza un equipo, los nombres de los patrones forman un vocabulario que pueden compartir. Esto hace que sea necesario que los nombres de los patrones sean fáciles de recordar y muy descriptivos. Algunos ejemplos de los trabajos de Alexander son WINDOW PLACE (ayuda a definir dónde deben ir las ventanas en una habitación) y A PLACE TO WAIT (ayuda a definir las características de las paradas de autobús y las salas de espera de los hospitales, por ejemplo).
Un lenguaje de patrones, tal como lo concibió Alexander, contiene enlaces de un patrón a otro, por lo que cuando intenta aplicar un patrón en un proyecto, el diseñador se ve obligado a recurrir a otros patrones que se consideran útiles en su contexto.
En el libro de Alexander, estos vínculos se recogen en la parte de "referencias" y se reflejan en la parte de "contexto" del patrón vinculado; por lo tanto, la estructura general es un gráfico dirigido . Un patrón que está vinculado en las "referencias" generalmente aborda un problema de menor escala, que se sugiere como parte del problema de mayor escala. Por ejemplo, el patrón "SALA PÚBLICA AL AIRE LIBRE" tiene una referencia a "ASIENTOS DE ESCALERAS".
Incluso sin la descripción del patrón, estos vínculos, junto con nombres significativos, transmiten un mensaje: cuando se construye un lugar al aire libre donde la gente puede pasar el tiempo ("SALA PÚBLICA AL AIRE LIBRE"), considere rodearlo de escaleras donde la gente pueda sentarse ("ASIENTOS EN LA ESCALERA"). Si está planeando una oficina ("TALLERES Y OFICINAS"), considere organizar los espacios de trabajo en grupos pequeños ("GRUPOS DE TRABAJO PEQUEÑOS"). Alexander sostiene que las conexiones en la red pueden considerarse incluso más significativas que el texto de los propios patrones.
Los vínculos que aparecen en el libro de Alexander dan como resultado claramente una red jerárquica. Alexander traza un paralelo con la jerarquía de una gramática, lo que constituye un argumento para hablar de un lenguaje de patrones .
La idea de vincular patrones es generalmente aceptada entre los autores de patrones, aunque la lógica semántica detrás de los vínculos puede variar. Sin embargo, algunos autores, como Gamma et al. en Design Patterns , hacen un uso limitado de la vinculación de patrones, posiblemente porque no tenía mucho sentido para su colección de patrones. En tal caso, hablaríamos de un catálogo de patrones en lugar de un lenguaje de patrones . [5]
Alexander animó a las personas que utilizaban su sistema a ampliar su lenguaje con patrones propios. Para ello, sus libros no se centran estrictamente en la arquitectura o la ingeniería civil; también explica el método general de los lenguajes de patrones. El concepto original del libro A Pattern Language era que se publicara en forma de carpeta de tres anillos, de modo que se pudieran añadir páginas fácilmente más adelante; esto resultó poco práctico en la publicación. [6] El enfoque del lenguaje de patrones se ha utilizado para documentar la experiencia en diversos campos. Algunos ejemplos son los patrones arquitectónicos , los patrones de informática , los patrones de diseño de interacción , los patrones pedagógicos , la jardinería de patrones , los patrones de acción social y los patrones de facilitación de grupos. El enfoque del lenguaje de patrones también se ha recomendado como una forma de promover la inteligencia cívica al ayudar a coordinar acciones para diversas personas y comunidades que trabajan juntas en problemas compartidos importantes. [7] Las especificaciones de Alexander para el uso de lenguajes de patrones, así como para la creación de otros nuevos, siguen siendo influyentes, y sus libros son referenciados por expertos en campos no relacionados.
Es importante señalar que las notaciones como UML o la colección de símbolos de diagramas de flujo no son lenguajes de patrones. Se podrían comparar más con un alfabeto: sus símbolos se podrían utilizar para documentar un lenguaje de patrones, pero no son un lenguaje en sí mismos. Una receta u otro conjunto secuencial de pasos a seguir, con un único camino correcto de principio a fin, tampoco es un lenguaje de patrones. Sin embargo, el proceso de diseño de una nueva receta podría beneficiarse del uso de un lenguaje de patrones.
Christopher Alexander , arquitecto y autor, acuñó el término lenguaje de patrones. [3] Lo utilizó para referirse a problemas comunes del diseño y la construcción de edificios y ciudades y cómo deberían resolverse. Las soluciones propuestas en el libro incluyen sugerencias que van desde cómo deberían estructurarse las ciudades y los pueblos hasta dónde deberían colocarse las ventanas en una habitación.
El marco y la filosofía del enfoque del "lenguaje de patrones" se popularizaron inicialmente en el libro A Pattern Language , escrito por Christopher Alexander y cinco colegas en el Centro de Estructura Ambiental en Berkeley, California, a fines de la década de 1970. Si bien A Pattern Language contiene 253 "patrones", desde el primer patrón, "Regiones independientes" (el más general) hasta el último, "Cosas de tu vida", el libro de Alexander The Timeless Way of Building profundiza más sobre la motivación y el propósito del trabajo. Las siguientes definiciones de "patrón" y "lenguaje de patrones" están parafraseadas de A Pattern Language : [3]
"Un patrón es una descripción cuidadosa de una solución perenne a un problema recurrente dentro de un contexto de construcción, que describe una de las configuraciones que dan vida a un edificio. Cada patrón describe un problema que se produce una y otra vez en nuestro entorno y luego describe la solución central a ese problema, de tal manera que se puede utilizar la solución un millón de veces, sin tener que hacerlo dos veces de la misma manera". [3]
Un lenguaje de patrones es una red de patrones que se invocan entre sí. Los patrones nos ayudan a recordar ideas y conocimientos sobre diseño y pueden usarse en combinación para crear soluciones.
La idea de Christopher Alexander ha sido adoptada en otras disciplinas, a menudo mucho más fuertemente que la aplicación original de patrones a la arquitectura como se describe en el libro A Pattern Language . [3] Los ejemplos desde la década de 1990 incluyen patrones de diseño de software en ingeniería de software y, de manera más general, patrones arquitectónicos en informática , así como patrones de diseño de interacción . Desde finales de la década de 1990, los patrones pedagógicos se han utilizado para documentar buenas prácticas en la enseñanza. [8] Desde al menos mediados de la década de 2000, la idea del lenguaje de patrones se introdujo en el diseño de arquitectura de sistemas [9] [10] y los patrones de ciencia del diseño (metodología) en un libro escrito por Vijay Vaishnavi y William Kuechler con 66 patrones; [11] la segunda edición revisada y ampliada de este libro se publicó en 2015 con 84 patrones. [12] El libro Liberating Voices: A Pattern Language for Communication Revolution , que contiene 136 patrones para utilizar la información y la comunicación con el fin de promover la sostenibilidad, la democracia y el cambio social positivo, se publicó en 2008 junto con un sitio web que contiene aún más patrones. [13] La baraja "Group Works: A Pattern Language for Bringing Life to Meetings and Other Gatherings" se publicó en 2011. [14] La idea de un lenguaje de patrones también se ha aplicado en el diseño de permacultura . [15]
Ward Cunningham , el inventor de wiki , fue coautor de un artículo con Michael Mehaffy en el que sostenía que existen relaciones profundas entre los wikis y los lenguajes de patrones, y que los wikis "de hecho se desarrollaron como herramientas para facilitar el intercambio y la modificación eficiente de patrones". [16]