Un lenguaje de patrones es un método para describir buenas prácticas de diseño o patrones de organización útil dentro de un campo de experiencia. 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 trae vida dentro de un campo particular del esfuerzo humano, a través de un conjunto de patrones interconectados. La vitalidad es un término de marcador de posición para «la cualidad que no tiene nombre»: una sensación de integridad, espíritu o gracia, que aunque de forma variable, es precisa y empíricamente verificable. Algunos defensores de este enfoque de diseño afirman que la gente común puede usarlo para resolver con éxito problemas de diseño muy grandes y complejos.
¿Qué es un patrón?
Cuando un diseñador diseña algo, ya sea una casa, un programa de computadora o una lámpara, debe tomar muchas decisiones sobre cómo resolver problemas. Se documenta un único problema con su lugar típico (la sintaxis) y el uso (la gramática) con la solución más común y reconocida que se ve en la naturaleza, como los ejemplos que se ven en los diccionarios. Cada entrada es un patrón de diseño único. Cada patrón tiene un nombre, una entrada descriptiva y algunas referencias cruzadas, muy parecido a una entrada de diccionario. Un patrón documentado debería 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 encuentran en la experiencia o para su uso como componentes en la práctica, explícitamente descritos como resoluciones holísticas de las fuerzas en contextos y circunstancias recurrentes, ya sea en arquitectura, medicina, desarrollo de software o gobierno, etc. Los patrones pueden ser inventados o encontrados y estudiados, como los patrones naturales de diseño que caracterizan los entornos humanos.
Como todos los idiomas, un lenguaje de patrones tiene vocabulario, sintaxis y gramática, pero un lenguaje de patrones se aplica a alguna actividad compleja que no sea la comunicación. En los lenguajes de patrones para el diseño, las partes se descomponen de esta manera:
La descripción del lenguaje, el vocabulario, es una colección de soluciones con nombres y descripciones para problemas en un campo de interés. Estos se llaman patrones de diseño. Entonces, por ejemplo, el lenguaje de la arquitectura describe elementos como: asentamientos, edificios, habitaciones, ventanas, pestillos, etc.
Cada solución incluye sintaxis, una descripción que muestra dónde encaja la solución en un diseño más grande, más completo o más abstracto. Esto vincula automáticamente la solución a una red de otras soluciones necesarias. Por ejemplo, las salas tienen formas de obtener luz y formas de que las personas entren y salgan.
La solución incluye una gramática que describe cómo la solución resuelve un problema o produce un beneficio. Entonces, si el beneficio no es necesario, la solución no se usa. Quizás esa parte del diseño se puede dejar vacía para ahorrar dinero u otros recursos; si las personas no necesitan esperar para ingresar a una habitación, una simple puerta puede reemplazar una sala de espera.
En la descripción del lenguaje, la gramática y el índice cruzado de sintaxis (a menudo con un índice alfabético literal de nombres de patrones) a otras soluciones nombradas, para que el diseñador pueda pensar rápidamente de una solución a soluciones relacionadas y necesarias, y documentarlas de una manera lógica. En el libro A Pattern Language de Christopher Alexander, los patrones están en orden decreciente por tamaño, con un índice alfabético separado.
La red de relaciones en el índice del lenguaje proporciona muchos caminos a través del proceso de diseño.
Esto simplifica el trabajo de diseño porque los diseñadores pueden comenzar el proceso desde cualquier parte del problema que entienden 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 comprende 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 deben arrojar nieve y almacenar el equipo. La nieve desordenada y los limpiadores de botas deberían permanecer afuera. El equipo necesita cuidado, por lo que los estantes deben estar adentro.
Muchos patrones forman un lenguaje
Del mismo modo que las palabras deben tener relaciones semánticas y gramaticales entre sí para hacer útil un lenguaje hablado, 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 (tal vez una tarea comercial), selecciona una solución y luego descubre problemas nuevos y más pequeños como resultado 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. Eventualmente, todos los problemas de diseño restantes son lo suficientemente pequeños o lo suficientemente rutinarios para ser resueltos mediante la improvisación de los constructores, y el «diseño» ya está hecho.
La estructura organizativa real (jerárquica, iterativa, etc.) queda a discreción del diseñador, dependiendo del 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 realmente 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 como un todo. Esto le da al diseñador que usa el lenguaje una gran cantidad de orientación sobre los problemas relacionados que deben ser resueltos.
La parte más difícil de tener un experto externo para aplicar un lenguaje de patrones es, de hecho, obtener una lista completa y confiable de los problemas que se deben resolver. Por supuesto, las personas más familiarizadas con los problemas son las personas que necesitan un diseño. Por lo tanto, Alexander defendió la improvisación en el sitio por parte de usuarios preocupados y empoderados, como una forma poderosa de formar soluciones iniciales a gran escala muy viables, maximizando la utilidad de un diseño y minimizando la repetició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.
Problemas de diseño en un contexto
Un aspecto importante de los patrones de diseño es identificar y documentar las ideas clave que hacen que un buen sistema sea diferente de un sistema pobre (que puede ser una casa, un programa de computadora o un objeto de uso diario) y para ayudar en el diseño del futuro sistemas. La idea expresada en un patrón debe ser lo suficientemente general como para aplicarse en sistemas muy diferentes dentro de su contexto, pero aún lo suficientemente específica como para proporcionar una guía constructiva.
La gama de situaciones en las que se aplican los problemas y las soluciones abordadas en un patrón se denomina contexto. Una parte importante en cada patrón es describir este contexto. Los ejemplos pueden ilustrar cómo el patrón se aplica a situaciones muy diferentes.
Por ejemplo, el patrón de Alexander «A LUGAR PARA ESPERAR» aborda las paradas de autobús de la misma manera que las salas de espera en una cirugía, al mismo tiempo que propone soluciones útiles y constructivas. El libro «Gang-of-Four» de Design Patterns de Gamma et al. propone soluciones que son independientes del lenguaje de programación y del dominio de aplicación del programa.
Aún así, los problemas y soluciones descritos en un patrón pueden variar en su nivel de abstracción y generalidad por un lado, y la especificidad en el otro lado. Al final, esto depende de las preferencias del autor. Sin embargo, incluso un patrón muy abstracto generalmente contiene ejemplos que son, por naturaleza, absolutamente concretos y específicos.
Los patrones también pueden variar en la medida en que se prueban en el mundo real. Alexander le da a cada patrón una calificación de cero, una o dos estrellas, lo que indica qué tan bien están probados en los ejemplos del mundo real. En general, se afirma que todos los patrones necesitan al menos algunos ejemplos existentes del mundo real. Sin embargo, es concebible documentar ideas aún no implementadas en un formato tipo patrón.
Los patrones en el libro de Alexander también varían en su nivel de escala: algunos describen cómo construir una ciudad o un vecindario, otros tratan sobre edificios individuales y el interior de las habitaciones. Alexander ve los artefactos de baja escala como elementos constructivos del mundo a gran escala, por lo que pueden conectarse a una red jerárquica.
Equilibrio de fuerzas
Un patrón debe caracterizar los problemas que debe resolver, el contexto o la situación donde surgen estos problemas, y las condiciones bajo las cuales pueden recomendarse las soluciones propuestas.
A menudo estos problemas surgen de un conflicto de intereses o «fuerzas» diferentes. Un patrón emerge como un diálogo que luego ayudará a equilibrar las fuerzas y finalmente 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». Los 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 pantalones vaqueros) no debe interferir con otras actividades.
Aunque es bastante inespecífico en su contexto, las fuerzas en el patrón «ACTIVIDAD SECUNDARIA» son muy similares a las del «TELÉFONO INALÁMBRICO». Por lo tanto, las fuerzas competidoras pueden verse como parte de la esencia de un concepto de diseño expresado en un patrón.
Los patrones contienen su propio razonamiento
Usualmente un patrón contiene un razonamiento que se refiere a algunos valores dados. Para Christopher Alexander, es muy importante 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).
En términos más generales, podríamos decir que un buen sistema debe ser aceptado, bienvenido y felizmente aceptado como un enriquecimiento de la vida cotidiana por aquellos que están destinados a usarlo o, mejor aún, por todas las personas a las que afecta. Por ejemplo, cuando habla de un café de la calle, Alexander discute los posibles deseos de un invitado, pero también menciona a personas que simplemente pasan caminando.
El mismo pensamiento 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 de computadora. Las cualidades de un sistema de software, por ejemplo, se pueden clasificar observando si los usuarios pasan su tiempo disfrutando o luchando con el sistema.
Al centrarnos en los impactos en la vida humana, podemos identificar patrones que son independientes de la tecnología cambiante y, por lo tanto, encontrar una «calidad intemporal» (Alexander).
Estructura y diseño genéricos
Por lo general, el autor de un lenguaje o colección de patrones elige una estructura genérica para todos los patrones que contiene, dividiendo cada uno en secciones genéricas como contexto, enunciado del problema, solución, etc.
Los patrones de Christopher Alexander, por ejemplo, consisten en un nombre corto, una clasificación (hasta dos símbolos «*»), una imagen sensibilizadora, la descripción del contexto, la declaración del problema, una parte más larga del texto con ejemplos y explicaciones, una solución declaración, un boceto y más referencias. Esta estructura y disposición a veces se conoce como la «forma alejandrina».
Alexander usa un diseño de texto especial para marcar las diferentes secciones de sus patrones. Por ejemplo, la instrucción de problema y la declaración de solución están impresas en negrita, esta última siempre va precedida de la palabra clave «Por lo tanto:». Algunos autores usan etiquetas explícitas, lo que crea cierto grado de redundancia.
Nombres significativos
Cuando el diseño lo realiza un equipo, los nombres de los patrones formarán un vocabulario que pueden compartir. Esto hace necesario que los nombres de patrones sean fáciles de recordar y altamente descriptivos. Algunos ejemplos de las obras de Alexander son WINDOW PLACE (ayuda a definir dónde deben ir las ventanas en una habitación) y A LUGAR A ESPERA (ayuda a definir las características de las paradas de autobús y las salas de espera de los hospitales, por ejemplo).
Agregación en una red asociativa (lenguaje de patrones)
Un lenguaje de patrones, tal como lo concibió Alexander, contiene enlaces de un patrón a otro, de modo que cuando se intenta aplicar un patrón en un proyecto, un diseñador se ve empujado a otros patrones que se consideran útiles en su contexto.
En el libro de Alexander, tales enlaces se recopilan en la parte de «referencias» y se repiten en la parte de «contexto» del patrón vinculado, por lo que 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 ESCALERA».
Incluso sin la descripción del patrón, estos enlaces, junto con nombres significativos, llevan un mensaje: Cuando construyas un lugar al aire libre donde las personas puedan pasar el tiempo («SALA PÚBLICA AL AIRE LIBRE»), considera rodearlo por una escalera donde la gente pueda sentarse («ASIENTOS DE ESCALERA» «). Si está planeando una oficina («TALLERES Y OFICINAS»), considere organizar los espacios de trabajo en grupos pequeños («PEQUEÑOS GRUPOS DE TRABAJO»). Alexander argumenta que las conexiones en la red se pueden considerar incluso más significativas que el texto de los patrones mismos.
Los enlaces en el libro de Alexander resultan claramente en una red jerárquica. Alexander dibuja un paralelo con la jerarquía de una gramática: ese es un argumento para que él hable de un lenguaje de patrones.
La idea de vincular es generalmente aceptada entre los autores de patrones, aunque la lógica semántica detrás de los enlaces puede variar. Algunos autores, sin embargo, como Gamma et al. en Patrones de diseño, haga un pequeño uso de la vinculación de patrones, posiblemente porque no tiene 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.
Uso
Alexander animó a las personas que usaban su sistema a expandir su lenguaje con patrones propios. Para permitir esto, sus libros no se enfocan estrictamente en arquitectura o ingeniería civil; él también explica el método general de lenguajes de patrones. El concepto original para el libro A Pattern Language era que se publicaría en forma de una carpeta de 3 anillos, por lo que las páginas podrían agregarse fácilmente más tarde; esto resultó poco práctico en la publicación. El enfoque del lenguaje de patrones se ha utilizado para documentar la experiencia en diversos campos. Algunos ejemplos son patrones arquitectónicos, patrones de informática, patrones de diseño de interacción, patrones pedagógicos, patrones de acción social y patrones de facilitación grupal. El enfoque del lenguaje de patrones también ha sido 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 significativos. Las especificaciones de Alexander para el uso de lenguajes de patrones y la creación de nuevas siguen siendo influyentes, y sus libros son referenciados por expertos en campos no relacionados.
Es importante tener en cuenta que las anotaciones como UML o la colección de símbolos del diagrama de flujo no son lenguajes de patrones. Se podrían comparar más estrechamente con un alfabeto: sus símbolos podrían usarse 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 solo una ruta correcta 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.
Ejemplo simple de un patrón
Nombre: ChocolateChipRatio
Contexto: está horneando galletas de chocolate en pequeños lotes para familiares y amigos
Considere estos patrones primero: SugarRatio, FlourRatio, EggRatio
Problema: Determine la proporción óptima de chispas de chocolate a la masa para galletas
Solución: observe que la mayoría de la gente considera que el chocolate es la mejor parte de la galleta con chispas de chocolate. También observe que demasiado chocolate puede evitar que la galleta se mantenga unida, disminuyendo su atractivo. Dado que cocina en lotes pequeños, el costo no es una consideración. Por lo tanto, use la cantidad máxima de chispas de chocolate que resulte en una galleta realmente sólida.
Considere lo siguiente: NutRatio o CookingTime o FreezingMethod
Origen
Christopher Alexander, arquitecto y autor, acuñó el término lenguaje de patrones. Lo usó para referirse a los problemas comunes del diseño y la construcción de edificios y ciudades y cómo deberían ser resueltos. Las soluciones propuestas en el libro incluyen sugerencias que van desde cómo las ciudades y los pueblos deberían estructurarse hasta dónde deben 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 Center for Environmental Structure en Berkeley, California, a fines de los años setenta. Mientras A Pattern Language contiene 253 «patrones» desde el primer patrón, «Regiones independientes» (la más general) hasta la última, «Things from Your Life», el libro de Alexander The Timeless Way of Building profundiza 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:
«Un patrón es una descripción cuidadosa de una solución perenne a un problema recurrente dentro del contexto de construcción, que describe una de las configuraciones que da vida a un edificio. Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, y luego describe la solución central para ese problema, de modo que pueda usar la solución un millón de veces, sin hacerlo nunca de la misma manera dos veces «.
Un lenguaje de patrones es una red de patrones que se convocan entre sí. Los patrones nos ayudan a recordar los conocimientos y el conocimiento sobre el diseño y se pueden usar en combinación para crear soluciones.
Dominios de aplicación
La idea de Christopher Alexander ha sido adoptada en otras disciplinas, a menudo mucho más que la aplicación original de patrones a la arquitectura como se describe en el libro A Pattern Language. Ejemplos recientes incluyen patrones de diseño de software en ingeniería de software y, más en general, patrones arquitectónicos en ciencias de la computación, así como patrones de diseño de interacción. Los patrones pedagógicos se utilizan para documentar buenas prácticas en la enseñanza. El libro Liberating Voices: A Pattern Language for Communication Revolution, que contiene 136 patrones para usar la información y la comunicación para 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. El mazo «Trabajos grupales: un lenguaje de patrones para traer vida a las reuniones y otras reuniones» se publicó en 2011. Recientemente, también se introdujeron patrones en el diseño de arquitectura de sistemas. La estrategia y las tácticas de ajedrez involucran muchos patrones desde la apertura hasta el jaque mate.
Ward Cunningham, el inventor de wiki, fue coautor de un trabajo con Michael Mehaffy argumentando que existen relaciones profundas entre wikis y lenguajes de patrones, y que los wikis «de hecho se desarrollaron como herramientas para facilitar el intercambio y la modificación eficientes de patrones».