design - practices - ¿Qué es una metáfora en el contexto de XP?
pair programming (6)
Aquí hay un resumen de un informe de experiencia que publicamos en la conferencia Agile hace unos años.
El documento entra en muchos más detalles , pero para resumir, en nuestra experiencia, había 5 rasgos clave que conforman una buena metáfora:
- Representa una vista única.
- Trata con un solo tipo de estructura.
- Brinda una guía clara sobre las decisiones de diseño.
- Arroja luz sobre las propiedades del sistema.
- Se basa en una experiencia compartida.
Corolario: incluso una buena metáfora aún requiere una explicación.
La idea básica es que quieras contar una historia que te permita capturar la esencia de una "carga de información". Cuanto más específico puedas mejorar, tendrás múltiples metáforas en tu sistema. Lo más importante es evitar estirar demasiado la metáfora. En última instancia, es un mecanismo de comunicación y memoria para recordar información más detallada que se decidió y discutió durante una conversación más profunda.
¿Puede una mala metáfora dañar? Solo cuando no tienes la "carga útil de información" para respaldarlo. Una metáfora en realidad no se sostiene por sí misma. Entonces, una metáfora es tan mala o dañina como las historias que la acompañan. Mientras lo tengas en mente, deberías estar bien.
''Metáfora'' parece ser uno de los preceptos menos entendidos de XP (Programación Extrema) aunque se supone que es (¿uno de?) El más importante.
Es difícil de entender y supuestamente ''la bombilla sobre tu cabeza cuando la obtienes''. La metáfora parece ser un frente para ''la programación es un arte místico'' ... los otros son relativamente fáciles de seguir. He leído bastantes libros y luego algunos ... pero sigue siendo confuso.
- Entonces, ¿cómo identifico una metáfora para el sistema en desarrollo?
- ¿Cómo sé si es bueno? ¿Qué hace que una buena metáfora sea buena? edición-aclaración: ¿Puede una mala metáfora hacer más daño que bien?
- ¿Qué habilita?
- ¿Cómo me vuelvo bueno en la búsqueda de metáforas ... o mejor de lo que soy actualmente?
Bueno, investigué la pregunta por poco más de un día y obtuve metáforas un poco mejores (que cuando publiqué la pregunta). Resultó ser un poco largo ... así que no lo incluí aquí y lo publiqué en mi blog. JFYI.
http://madcoderspeak.blogspot.com/2008/10/who-moved-my-metaphor.html
Hay un papel here . Pero un buen ejemplo es este
The metaphor has two purposes. The first is the communication described above. A user ought to have an easier time speaking and giving examples about a “chameleon” than about a window that changes transparency. A second reason is that the metaphor is supposed to contribute to the team’s development of a software architecture.
En cuanto a encontrar uno, idealmente encontrar una metáfora para su proyecto debería ser algo realmente fácil. Lo que quiero decir con eso es que la metáfora debe ser algo trivial que cualquiera pueda entender, incluso alguien sin ningún conocimiento técnico o incluso ninguna idea sobre su sistema en particular (como el ejemplo del Camaleón).
En cuanto a algunos beneficios (levantados directamente del papel)
- The metaphor has been helpful in figuring out the overall design of the program. - The metaphor has helped the team find a common vocabulary. - We often use the metaphor in conversations with each other. - We often use the metaphor in conversations with our customer. - The metaphor is useful in helping everyone reach agreement about our requirements.
La idea de una metáfora en Extreme Programming es desarrollar una visión común de cómo funciona el programa. En el mejor de los casos, una metáfora es una simple descripción evocativa de cómo funciona el programa.
De Agile Business Coach :
Las metáforas son herramientas de enseñanza poderosas. Se usan en una gran cantidad de campos. El objetivo de una metáfora es crear un puente de comprensión: la persona que intenta explicar una nueva idea o concepto intenta encontrar un marco de referencia común entre ellos y la persona a la que están explicando la idea. Luego explican la nueva idea usando el marco de referencia común
Ahora a tus preguntas.
Entonces, ¿cómo identifico una metáfora para el sistema en desarrollo?
Una buena metáfora puede proporcionar rápidamente información suficiente para comprender a un alto nivel el dominio y el funcionamiento de un sistema. Como ejemplo, podemos decir "este programa funciona como una colmena de abejas, saliendo para el polen y devolviéndolo a la colmena" como una descripción para un sistema de recuperación de información basado en agentes. Por lo tanto, debe buscar analogías con situaciones del mundo real, ya que es más probable que se entiendan más rápidamente y todos puedan obtener el mismo ritmo con respecto a la funcionalidad del sistema.
¿Cómo sé si es bueno? ¿Qué hace que una buena metáfora sea buena?
La idea es utilizar un sistema común de nombres o analogías para asegurarse de que todos entiendan cómo funciona el sistema y dónde buscar la funcionalidad que está buscando, o para encontrar el lugar adecuado para poner la funcionalidad de la que se trata. para agregar Una metáfora es más buena ya que más usuarios en presencia de una metáfora obtienen una visión y comprensión inmediata del sistema.
¿Qué habilita?
Permite una comprensión global mínima rápida del propósito y funcionamiento del sistema, basada en una terminología común que todos pueden entender más fácilmente.
¿Cómo me vuelvo bueno en la búsqueda de metáforas ... o mejor de lo que soy actualmente?
Con práctica y mejoras continuas. Asegúrese de que cada iteración se muestre a una masa significativa de personas para evaluar la eficacia de la metáfora. En el camino aprenderás mucho y escribirás rápidamente buenas metáforas. Lo considero un ejercicio viviente casi porque las personas con más experiencias de vida pueden proporcionar metáforas más significativas sin siquiera darse cuenta de que lo están haciendo.
Vea aquí un artículo detallado sobre XP que también cubre metaphors .
La metáfora es algo que comienzas a usar cuando tu madre te pregunta en qué estás trabajando e intentas explicarle los detalles. Cómo lo encuentras es muy específico del proyecto. Use su sentido común o encuentre al tipo de su equipo que sea bueno para explicarle cosas técnicas a los clientes de una manera que sea fácil de entender.
Lo que XP sugiere en mi opinión es lo siguiente:
- Intenta diseñar un sistema que sea fácil de explicar usando analogías de la vida real. Sus sistemas son complejos, trate de usar un diseño, donde la relación y las interacciones entre los subcomponentes sean claras y se asemejen a algo que las personas con sentido común ya han visto.
- Use las analogías en todas las comunicaciones: código fuente, reuniones de planificación, hablar con los usuarios o renunciar a Dios, escribir documentación. Si encuentra que los conceptos que utiliza no se ajustan a alguna área, trate de encontrar una metáfora mejor.
Si tiene problemas para introducir una metáfora, tal vez el problema esté en otro lugar. Es posible que tenga un diseño que no sea apto para XP, o que tenga una cultura empresarial en la que, por ejemplo, los desarrolladores utilicen un idioma diferente al de los profesionales de marketing. Ambos atributos del proyecto pueden vivir fácilmente y llevar su proyecto al éxito, pero será más difícil aceptar XP a menos que realice un cambio en estas áreas.
Las metáforas permiten que el equipo tenga una comprensión común del proyecto. Es una herramienta útil para superar la barrera de la falta de comunicación que casi cualquier equipo tiende a tener debido a los diferentes antecedentes / perspectivas. No tiene que usarlos, pero es útil, especialmente cuando trabaja en un área o en un tipo de aplicación con la que sus desarrolladores no tienen experiencia previa. Para mí, un buen ejemplo del metáfora es la famosa imagen de columpios de árboles . Los desarrolladores nunca trabajaron para ofrecer el "giro del neumático" porque nunca se encontró la metáfora adecuada. En este sentido, el concepto de metáfora es un poco similar al concepto de Visión en RUP pero, por lo que yo entiendo, se enfoca más en el aspecto técnico del desarrollo.
Respondiendo a tus preguntas:
- Trate de encontrar algo que describa bien el sistema. Si intentara hacer eso, trataría de describir los componentes principales por separado.
- Mira si se queda. Si todos entienden inmediatamente de lo que estás hablando, funciona. Si no es así, prueba con otra cosa. Tienes que ver una "chispa de reconocimiento" en los ojos del equipo.
- El uso de la metáfora permite a todos ver la arquitectura de la aplicación / aplicación desde el mismo prospecto.
- Realmente depende de tu forma de pensar. Las metáforas son poéticas y "suaves"; puede que nunca quieras ser bueno con ellas :) Sugeriría leer más libros de "ficción", ya que ayudan a tu mente a obtener más información sobre las metáforas.
Y recuerde: una metáfora no podría extenderse indefinidamente. No esperes que sean ideales.