domingo, 14 de junio de 2015

Por qué el pensamiento computacional (IX): Patrones y lenguaje de patrones.

Una vez concluida la primera serie de entradas sobre componentes del pensamiento computacional, he recapacitado que hay otras que igualmente podemos o debemos tener en cuenta y que, de forma más o menos frecuente y explícita, están presentes en los procesos de programar. De esta manera al análisis descendente, al ascendente, la heurística, el aprendizaje divergente, la creatividad, etc habría que añadir los patrones y el lenguaje de patrones, la metacognición y la sinéctica.

Vamos a empezar por el primero, que será repetir pero corregido lo dije en 13 de julio de 2011 en un post de que curiosamente es el post más leído desde el principio del blog de la Cátedra UNESCO de Educación a Distancia.

Los patrones constituyen una herramienta para el análisis de la programación con una doble singularidad: Evitan el trabajo tedioso que supone repetir partes de código, de diagramas de flujo o de procedimientos que en esencia se repiten pero aplicados a contextos y situaciones distintas, y por otro lado exige la capacidad de distinguir lo que tienen de común situaciones distintas. Esta facultad es útil en la programación pero igualmente en multitud de situaciones de la vida o de las actividades científica y profesionales, de hecho nacieron como tales en la arquitectura. Un ejemplo de actividad muy alejada a la computación es la enseñanza, la pedagogía. En ese apartado hablo de un patrón pedagógico, el que se basa en el aprendizaje activo. Hay muchas disciplinas o dominios de aprendizaje muy distintos por su objeto de tratamiento, la naturaleza de lo que se aprende y los objetivos: el qué, de lo que se aprende, pero que tienen en común que se aprende mediante la actividad. Pues bien el diseñar esas actividades para que se produzca el aprendizaje es común a los distintos ámbitos de aprendizaje. Y el patrón consiste en las pautas comunes para todos esos casos y situaciones.

Patrones

El concepto de patrón y su práctica se aplica, en la computación y en otros dominios, a estructuras de información que permiten resumir y comunicar la experiencia acumulada y la resolución de problemas, tanto en la práctica como en el diseño.

De esta forma un patrón puede entenderse como una plantilla, una guía, un conjunto de directrices o de normas de diseño. Los patrones pueden entenderse desde dos perspectivas: La propia del dominio en el que estamos trabajando (la arquitectura, el diseño industrial, el diseño instruccional, etc.), o bien desde la perspectiva de los lenguajes y las técnicas computacionales que permiten el desarrollo de patrones.

Un patrón pues permite la adquisición de “buenas prácticas” y sirve como referencia para nuevas aplicaciones y casos. El almacenamiento y proceso sistemático de estos patrones permite construir corpus de información o bases de datos de referencias documentadas a las que los distintos profesionales o investigadores pueden dirigirse para sus trabajos específicos.

Los patrones tienen su origen en los patrones de diseño, o en lo patrones genéricos, y sirven  para aplicar en un campo cualquiera de la actividad de creación y de desarrollo, donde se quiere optimizar el trabajo intelectual haciendo más eficaz el trabajo empleado, o bien donde se quiere comunicar una parte operativa del diseño independientemente del dominio técnico del que se trate. Originalmente los patrones de diseño se deben al arquitecto Christopher Alexander (…). Posteriormente estas técnicas se han adoptado en el campo de la ingeniería de software, y de allí se han incorporado al diseño instruccional tecnológico.

Podríamos plantearnos pues qué son en esencia los patrones. Un patrón (Alexander et al., 1977) “describe un problema que ocurre una y otra vez en nuestro entorno y, a continuación, describe el núcleo de la solución de ese problema, de tal manera que el usuario puede utilizar esta solución un millón de veces más, sin tener que hacerlo de la misma manera dos veces ".

Especial importancia merecen los los patrones instruccionales, aunque el término igualmente acuñado puede ser el de patrones pedagógicos (Pedagogical Patterns Project, 2008), porque sirven de comunicación en equipos pluridiceplinares en los que concurren técnicos en computación, diseñadores instruccionales y profesores.

Se utiliza indistintamente el término patrón y plantilla como traducciones del termino original  pattern. Sin embargo creemo squ ees más apropiado patrón que pauta o plantilla. Pauta o conjunto de pautas hace referencia a procedimientos a aplicar de forma algorítmica o automática en un contexto donde se cumplan determinadas condiciones. Mientras que patrón como hemos visto hace referencia a un esquema completo de resolución de un problema teniendo solo en presencia la perspectiva del patrón (por ejemplo si a un problema de aprendizaje queremos aplicar el patrón de “aprendizaje autónomo”, tendremos que aplicar, para la resolución del problema, la alternativa de las posibles que implique al máximo la participación del alumno sin ayuda externa).

El objetivo en todo caso es captar la esencia de la buena práctica de una forma resumida e independiente (abstrayendo los elementos más significativos) de manera que pueda ser fácilmente comunicada a los que la necesitan en un contexto de condiciones distinto. En su naturaleza el patrón puede ser igualmente la presentación de esta información (de las buenas prácticas, los conocimientos expertos, las soluciones a problemas,…) de una forma accesible y sistematizada, de manera que para cada nuevo diseñador pueda aprender o tener en cuenta lo que se conoce por expertos que hayan resuelto ya el problema en cuestión, y sea fácil la transferencia de conocimiento dentro de la comunidad.

De esta forma en esencia un patrón resuelve un problema. Este problema debe ser una naturaleza tal que se repita en distintos contextos. En el ámbito de la educación  tenemos muchos problemas de esta naturaleza: Son por ejemplo los que tienen que ver con la motivación, o con determinadas motivaciones, de los estudiantes, la elección de los materiales para cada situación de aprendizaje y la secuencia de los contenidos, los conocimientos previos, las ideas implícitas, los criterios de evaluación de los estudiantes,…
Pedagogical Patterns Project (2008) establece una clasificación de los patrones pedagógicos en tres categorías, basados en otras tantas formas de aprendizaje:

·        Aprendizaje activo. Un patrón de este tipo se basaría en un conjunto de actividades que involucren a los alumnos de manera activa. El  patrón se construye utilizando algún problema concreto que a menudo pueden ocurrir en un entorno de enseñanza y que maximice la atención del alumno por estar implicado en la resolución, o por sus experiencias pasadas o presentes, por su carácter real etc.
·        Aprendizaje experimental. Un patrón de este tipo se basaría en lo que es necesario aprender mediante la experimentación o bien mediante las experiencias pasadas de los alumnos estudiantes.
·        Enseñando desde diferentes perspectivas. Un patrón de este tipo se basaría en la bondad de los aprendizajes que supone por los alumnos el estudio de los recursos educativos desde diferentes perspectivas, tratando los siguientes problemas: preparar al estudiante para el mundo real, hacer uso de diferentes perspectivas por pares (por ejemplo utilizando personal profesional de empresa).

A los que podríamos añadir un patrón pedagógico para el “aprendizaje autónomo”, con abundancia de elementos de metacognición.

La naturaleza de estos problemas (los que originan el patrón) es, como vemos, que se pueden repetir de forma diferente (en las partes no sustanciales) cada vez. Y cuando aparece un problema de este tipo conlleva consideraciones a tener en cuenta para tomar las decisiones en la selección del procedimiento a utilizar para la resolución. Estas consideraciones son las que influyen en los expertos a optar por una u otra resolución. Son las consideraciones que el patrón presenta para que las tengamos en cuenta en nuestra elección y que nos pueden acercar o alejar de una buena solución al problema.

Un patrón presenta un problema y una solución. O bien el criterio de la solución. De tal forma que los criterios que deben aplicarse deben hacer que la solución sea la más acertada para el problema planteado.

Lenguajes de patrón

La expresión “lenguajes de patrón”, al igual que el término “patrón” son constructos acuñados por el arquitecto Christopher Alexander. Los defensores de este enfoque para los métodos de diseño suponen que esta forma de proceder ayuda a los no expertos a resolver con éxito problemas de diseño complejo en bastantes ocasiones. Al igual que todos los idiomas, un lenguaje de patrones tiene un vocabulario, una sintaxis y una gramática. La parte distinta es que el lenguaje se aplica a una actividad compleja que no es la comunicación. En los lenguajes de patrones utilizados para el diseño, las partes se descomponen de esta manera:

1.                 El vocabulario. Es el contenido del lenguaje. Lo constituyen una colección de términos, que de forma especializada van a ayudar a describir soluciones a los problemas “en un campo de interés”.  Así, por ejemplo, en el lenguaje Arquitectura el lenguaje lo constituyen términos como: cimientos, edificios, salas, ventanas, cerraduras, etc
2.                 "Sintaxis". Cada solución a un problema  incluye  una descripción insertándola en una solución, o en un contexto, más amplio, de manera que cada solución se ajusta a un diseño más grande, más amplio o más abstractos. De manera que cada solución se vincula a otras soluciones en una red de soluciones necesarias. Por ejemplo, las habitaciones disponen de formas de obtener la luz, y las formas de acceder y de salir.
3.                 "Gramática". Cada patrón, cada solución, incluye la descripción del problema que resuelve y cómo lo hace, y el beneficio que se obtiene. Por lo tanto, si el beneficio no es necesario o no compensa, la solución no se utiliza. Incluso puede darse que una parte del diseño se puede omitir para ahorrar recursos. En el ejemplo de la arquitectura, en el diseño de edificios o viviendas podría darse el caso de que la gente no tenga que esperar para entrar en una habitación, y en lugar de una sala de espera, tal vez se pueda utilizar un sencillo vestíbulo.
4.                 Índice de relaciones entre términos. La descripción del lenguaje debe de contemplar el índice que incluya aspectos gramaticales y sintácticos,  con otros tipos de enlaces entre términos (patrones) de manera que el diseñador puede pensar rápidamente de  una solución a soluciones relacionadas de una manera lógica. 
5.                 La red de relaciones en el índice de la lengua permite muchas rutas diferentes a través del proceso de diseño. Esto simplifica el trabajo del diseñador, ya que el proceso puede comenzar desde cualquier parte del problema que el diseñador ya conoce, y caminar hacia lo que se quiere construir de nuevo en el diseño. No es preciso incluso que el diseñador comprenda de forma exhaustiva las razones que llevan a solucionar un problema para aceptar en un primer momento la estructura del patrón. Puede aceptarlo si el patrón ha funcionado bien y en un momento posterior comprenderlo, y el diseño resultante puede resultar utilizable. Por ejemplo podríamos no comprender que el equipo de limpieza de los esquís se quedase fuera de la casa, y después comprender con el uso o incluso antes, que esto debe ser así porque los esquiadores se deshacen del equipo antes de entrar en casa.
En este sentido el lenguaje de patrones no tiene porqué ser un instrumento de comunicación o de transmisión de información, o de procedimientos, sólo entre individuos de distintos niveles de experticia sino incluso de ámbitos de conocimiento diferentes. Puede ser un instrumento de comunicación y de trabajo interdisciplinar.

En el caso que nos planteamos, el aprendizaje en redes y la docencia virtual, el diseño instruccional, los patrones pueden ser un instrumento de comunicación entre pedagogos (expertos en enseñanza), o psicólogos (expertos en aprendizaje), de una parte, e informáticos expertos en sistemas computacionales, desarrolladores ingenieros de arquitectura, etc.  De esta manera, y de igual forma que señalábamos en los ámbitos y con los ejemplos de arquitectura en los que no era preciso en un primer momento comprender enteramente la naturaleza de patrón, es decir no hace falta las razones que llevan a solucionar un problema, para aceptar la estructura del patrón, se pueden dar situaciones análogas en los patrones de e-learning. Así por ejemplo se pueden definir pautas (elementos de patrones no justificados) que tengan en cuenta los principios del aprendizaje significativo de Ausubel (Ausubel, 1963) o los principios de la secuenciación de contenidos de  cualquiera de las teorías existentes, sin necesidad de comprender su esencia más profunda desde el primer momento.

Así pues 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.

 

Cómo describir un patrón. El ejemplo más sencillo.

Siguiendo lo establecido por Alexander, un patrón singular debe describirse en 5 partes:

1. "Contexto" - ¿Bajo qué condiciones resolverá el problema la solución propuesta?
Un aspecto importante de los patrones de diseño es identificar y documentar las ideas claves que hacen de un buen sistema un sistema diferente de un sistema normal (para construir una casa, un programa de ordenador, un objeto de uso cotidiano, o una secuencia de contenidos de e-learning), y que ayude en el diseño de futuros sistemas. La idea que se expresa en un patrón debe ser lo suficientemente general para ser aplicadas en casos muy diferentes dentro de un contexto, pero aún lo suficientemente específico como para dar orientaciones constructivas. El contexto donde se aplica es pues el elemento definitorio del patrón

La gama pues de situaciones en las que los problemas y soluciones se resuelven desde un patrón se llama su contexto. De ahí se deriva que una parte importante de cada patrón es la descripción de su contexto. 

Por ejemplo del patrón que propone Alexander es "un lugar para esperar", que puede referirse  a una parada de bus, a la sala de espera de un dentista,...

2. "Sistema de fuerzas" - Se puede considerar como el problema o el objetivo
Frecuentemente estos problemas surgen en un conflicto de intereses encontrados o "fuerzas". Un patrón emerge como un diálogo entre posturas contrapuestas o en tensión, de tal forma que la solución ayudará a equilibrar las fuerzas y finalmente a tomar una decisión.

Por ejemplo, en un patrón cuya solución fuese utilizar un teléfono inalámbrico las fuerzas serían: por un lado la necesidad de comunicarse, y por otro la necesidad de hacer otras cosas al mismo tiempo (cocinar, limpiar el polvo,…). Un patrón muy concreto sería simplemente "utilizar teléfono inalámbrico". Patrones más generales sería "dispositivo inalámbrico" o "actividad secundaria", lo que sugiere que una actividad secundaria no deben interferir con otras actividades.

3.  "Solución" – Es una  configuración del sistema que pone las fuerzas en equilibrio o resuelve el problema presentado

Contexto à Sistema de fuerzas à Solución

De esta forma un patrón siempre tendría: Una entrada, que es un nombre sencillo, una descripción concisa del problema, una solución definida, y suficiente información para ayudar al usuario a entender cuando debe aplicar esa solución.

Ejemplos
Un ejemplo sencillo de patrón que exponen DeLano, D.E. y  Rising, L. (1997) es cómo fabricar galletas (cookies) con trozos de chocolate:

Nombre: CookieChocolateProporción
Contexto: Preparando galletas de harina con trozos de chocolate para familia y amigos
Considera estos patrones anteriormente: AzucarProporción, HarinaProporción, HuevoProporción.
Problema: Determinar la proporción optima entre los trozos de chocolate y la masa de harina de la galleta
Solución: Se sabe que la gente considera los trozos de chocolate como lo más deseable de la galleta. También se sabe  que si echamos demasiado chocolate la harina perdería poder de cohesión y la galleta se desharía. Como se hacen pocas galletas, el coste no es un gran problema. Por tanto la solución es echar tanto chocolate como se pueda con tal de mantener la masa unida y las galletas compactas.
A considerar ahora: NuecesProporción o TiempoCocción o MetodoCongelación.

DeLano, D.E. y  Rising, L. (1997) presentan bastantes más ejemplos.

Las wikis el ejemplo más importante.

Nadie prácticamente ignora qué es Wikipedia. Como su nombre indica Wikipedia es una wiki. El origen de las wikis está en la comunidad de patrones de diseño Portland Pattern, cuyos integrantes, informáticos las utilizaron para escribir patrones de programa de ordenador. La primera wiki llamada WikiWikiWeb fue creada por Ward Cunningham, quien creó y dio nombre al concepto wiki, además implementó el primer servidor WikiWiki, y con él creó el primer servicio de este tipo, para el repositorio de patrones del Portland (Portland Pattern Repository) en 1995.

Ward Cunningham (…) diseñó la Wiki original como un ejemplo concreto para expresar los lenguajes de patrón de forma efectiva (http://c2.com/cgi/wiki). A partir de ella dio las pautas paraa crear un lenguaje de patrón, que reproducimos. Pautas que asumen el uso de una aplicación informática de hipertexto, como una wiki (Cunningham, …).

·                    Piense sobre la situación, la web que desea crear, como una jerarquía de ideas, como un fractal, desde lo general a lo particular, al detalle.
·                    Ponga cada idea en una página web diferente, nombrándola con un título que describa la idea en pocas palabras.
·                    Aparte, en otra página, ponga un índice, ordenando las ideas desde las más amplias hasta los detalles. Esto permitirá que el desarrollo (lenguaje de patrón), en este caso la wiki,  sea lineal, comprensible en conjunto y fácilmente imprimible, si es necesario. Este paso incrementa de forma amplia la usabilidad del sistema si todas las páginas, o la mayoría, se mencionan en la tabla de contenidos o índice.
·                    Además de esto, que es lo que conocemos, estableció como pauta también que para cada patrón, escriba una descripción del problema (tal como se lo ha planteado, la solución la solución que ha dado y un ejemplo (realmente estaba hablando de metainformación). En función de esta justificación, indica que se conecte con los patrones con los que se relaciona.
·                    Utilice gráficos (esquemas, mapas de la web), son de gran ayuda.
·                    Si hay varios autores editando el lenguaje de patrón, cada uno debe firmar su trabajo. Además de la razón más obvia, establecer la autoría y responsabilidad, permite conseguir una lista de las páginas usando enlaces recíprocos en cada página.
·                    Ponga enlaces donde sea apropiado
·                    Ponga un enlace al índice desde el final de cada página.
·                    Establezca ventanas de edición o para escribir al autor su página, con la posibilidad de establecer las referencias con otras páginas.

 

Cronología


Año
Hecho
Obra
1979
El arquitecto Christopher Alexander aportó en el contexto de la Arquitectura los conceptos de patrón y de lenguajes de patrón.
Libro The Timeless Way of Building; en él proponía el aprendizaje y uso de una serie de patrones para la construcción de edificios de una mayor calidad.
1979
Christopher Alexander y sus colegas dentro del libro anterior establecen de manera formal y práctica el conocimiento arquitectónico en lenguaje de patrones
A Pattern Language, volumen de The Timeless Way of Building
1987
Ward Cunningham y Kent Beck usaron varias ideas de Alexander para desarrollar cinco patrones de interacción hombre-ordenador (HCI)
Using Pattern Languages for OO Programs, artículo en OOPSLA-87
1995
Los patrones de diseño impactan fuertemente en el mundo de la informática a partir de la publicación del libro Design Patterns, GoF (Erich Gamma, Richard Helm, Ralph Johnson y John Vlisides), en el que se recogían 23 patrones diseño comunes.
Libro Design Patterns, del GoF (Gang of Four)

 


Concluido la primera vez el 13 de julio de 2011



Referencias.-

Alexander, Christopher, … http://downlode.org/Etext/Patterns/
Alexander, Christopher, … A Pattern Language. Summary of a book by Christopher Alexander, Sara Ishikawa, Murray Silverstein, with Max Jacobson, Ingrid Fiksdahl-King and Shlomo Angel. Published by Oxford University Press. The original book contains much essential detail behind each of the following patterns and is recommended reading.
Alexander et al., 1977, A Pattern Language, Oxford University Press, px.
Ausubel, D. P. (1963). The psychology of meaningful verbal learning; an introduction to school learning. New York: Grune & Stratton.
DeLano, D.E. y  Rising, L. (1997).  Introducing Technology into the Workplace. Proceedings  PLoP’97 Conference. Consultado el [dd/mm/aaaa] en http://hillside.net/plop/plop97/Proceedings/delano.pdf
Fricke, A. y Voelter, M. (2000). SEMINARS: A Pedagogical Pattern Language about teaching seminars, [en línea]. Trabajo presentado en EuroPLoP 2000. Disponible en: http://www.voelter.de/publications/seminars.html [2008, 2 diciembre].
Pedagogical Patterns Project (2008), [en línea]. Disponible en: http://www.pedagogicalpatterns.org/ [2008, Enero]

Bibliografía básica de referencia
Design Patterns. Elements of Reusable Object-Oriented Software - Gamma, Helm, Johnson, Vlissides - Addison Wesley
A System of Patterns - Buschmann, Meunier, Rohnert, Sommerlad, Stal - Wiley
UML y Patrones. Introducción al análisis y diseño orientado a objetos - Larman - Prentice Hall
AntiPatterns. Refactoring Software, Architectures and Projects in Crisis - Brown, Malveau, McCormick Mowbray - Wiley
Patterns in Java - Mark Grand - Wiley
EJB Design Patterns - Floyd Marinescu - Wiley
PATRONES DE DISEÑO: ELEMENTOS DE SOFTWARE ORIENTADO A OBJETOS REUTILIZABLES

Referencias en la web
Conservation Economy Pattern Language - ejemplo de uso de lenguaje de patrón para organizar grupos y recursos en una situación compleja (movimiento sostenible)

No hay comentarios:

Publicar un comentario en la entrada