Coding Dojo: técnica de entrenamiento

Por Pablo Tortorella, @pablitux

Palabras clave

Coding dojo, conocimientos, experiencia, práctica, entrenamiento

Intención

Muchas empresas y profesionales creen que el aprendizaje continuo trae grandes beneficios. Por otro lado, los desafíos del mundo globalizado, competitivo y cambiante muchas veces llevan a los equipos de trabajo a focalizarse exclusivamente en resolver sus problemas, dejando así poco espacio para la reflexión, la mejora y la transferencia de conocimientos.

En este capítulo quiero dar a conocer las ventajas y contar cuáles son las características de un método de capacitación e integración que considero eficaz, eficiente, divertido y serio al mismo tiempo. Se trata del Coding Dojo.

Motivación

Messi entrena a diario. Corre, hace ejercicio físico y practica jugadas con pelota. Hace prácticas de tiros libres de todo tipo: con barrera, sin barrera, con arquero/portero, sin él, desde lejos y desde más cerca. Fue elegido como el mejor jugador de fútbol del planeta tierra, cinco veces. Cinco. Y aun así, el tipo sigue entrenando. A diario. Y lo mismo hacen todos los deportistas profesionales y de alto rendimiento. ¿Por qué lo hacen? Para mejorar su nivel, para perfeccionarse.

Así como Messi y los demás deportistas, también los músicos entrenan: ensayan. Aun siendo autores de las canciones. Aun conociendo cada una de las notas y de los ritmos con los cuales quieren interpretarlos en un concierto. Aun así, ensayan una y otra vez los temas, sus introducciones, sus estribillos y sus finales. Ensayan solos con sus instrumentos y también ensayan con los demás integrantes de las bandas u orquestas de las cuales forman parte.

Todas estas personas ejercitan sus habilidades y las potencian mediante práctica y más práctica. Saben que son capaces de mejorar y seguir mejorando. Refinando tanto detalles gruesos como finos. Mejoras que tal vez para otros sean imperceptibles. Mejoras que se identifican luego de miles de horas de entrenamiento.

¿Por qué nosotros, los profesionales del conocimiento, no practicamos, no entrenamos y no ensayamos? ¿Será nuestro ego? ¿Será un tema cultural? ¿Qué tan ciegos nos están dejando nuestras urgencias laborales? Creo que debemos cambiar esto: Aún los mejores en nuestras disciplinas, deberían seguir practicando, practicando y practicando para mejorar de forma permanente.

Es por eso, porque no practicamos -excepto algunos en los cursos y las carreras académicas que realizan por fuera del horario laboral- que considero que el Coding Dojo puede ser de gran utilidad para todos nosotros.

Dojo es una palabra japonesa. Significa "el lugar del camino", que hace alusión al camino de la perfección espiritual, física y mental. No es un camino con un destino, sino que es un camino en el que se ingresa para -ojalá- mantenerse toda la vida.

El Dojo, en Japón, es concretamente el lugar físico en el que se practica, donde se entrena. Existen dojos para variadas disciplinas, por ejemplo, para artes marciales. En este caso particular, en el Coding Dojo, se trata de la búsqueda de la perfección en el uso de las técnicas ágiles de desarrollo de software

Descripción

Roles

En un Coding Dojo la práctica suele hacerse en grupos. Específicamente suelen ser grupos de 3 participantes. Dentro de cada grupo hay roles y cada rol tiene sus responsabilidades. Los roles dentro de un grupo son Coder, Co-piloto y Asistente. El Coder también es llamado Driver, haciendo referencia al conductor de autos de Rally. Es quien puede tocar el teclado para escribir código fuente, con foco en lo que se está haciendo en ese mismo momento. El Co-piloto es llamado así haciendo referencia al acompañante del conductor de un auto de carrera; es quien se encarga de pensar estrategias de más mediano plazo, poniendo foco en los detalles a mejorar y en los escenarios que se irán resolviendo a continuación. El Asistente es como el Co-piloto, con la salvedad de que tiene una responsabilidad adicional, relacionada con un tablero del cual se habla más adelante en este mismo capítulo.

Estos tres roles suelen rotar a medida que se desarrolla la práctica, de forma tal que cada participante pueda practicar todos los roles. Ahondaremos más adelante al respecto de esta rotación.

En todo Dojo, también participa un Sensei. Es quien tiene la responsabilidad de guiar a los participantes, llamados también aprendices, en el camino de la mejora. También suele conocer en detalle las técnicas que se practicarán en su Dojo. Debe tener la tolerancia y la capacidad didáctica para lograr compartir sus conocimientos y su experiencia con los aprendices. También es recomendable que tenga la habilidad de transmitir esos saberes a diferentes asistentes, por ejemplo, de distintos niveles de experiencia.

Etapas

Un Coding Dojo es un evento que puede realizarse de muy variadas formas. Personalmente he facilitado más de 100 dojos en estos últimos años a lo largo y ancho del continente americano y tengo una agenda tentativa bastante refinada que casi siempre consta de las etapas que describo a continuación.

Invitación

Si querés que alguien participe de tu Coding Dojo, deberás -como mínimo- avisarle. Aprovechando el aviso, podés comentarle que se necesitarán computadoras (notebooks, netbooks, ultrabooks o las máquinas que se puedan conseguir). ¿Cuántas se requieren? Aproximadamente una computadora por cada dos a cinco participantes. Será provechoso si ya llevan instalado y configurado, antes de comenzar el evento, algún entorno de desarrollo (del inglés, IDE: Integrated Development Environment) con algún framework de pruebas unitarias, como es el caso de JUnit para Java, por mencionar un ejemplo.

En la invitación también es relevante que asistan con la intención de aprender cosas nuevas, dado que muchas personas participan de reuniones sólo para "difundir todo eso que ya saben a las personas ignorantes que las rodean" y se pierden grandes oportunidades de incorporar novedades a sus vidas. También les pido que traigan buena onda, pues es algo que nunca está de más y aporta grandes beneficios.

Preparación

En todos los casos que facilité un Coding Dojo permití, exceptuando un solo evento en una pequeña ciudad de la selva en el interior de Perú, que cada participante tuviera su silla o banqueta para sentarse. En aquel evento académico fueron 60 alumnos y docentes al Coding Dojo en el que -directivos y quien escribe- calculamos que irían sólo 15. A pesar de las condiciones, fue un hermoso Dojo en el que, algo incómodos, alcanzamos los objetivos.

Entonces, al preparar tu Coding Dojo deberás tener en cuenta lo siguiente:

  1. Calculá cuánta gente entra cómoda, y evitarás así que te pase lo que a mí en el evento mencionado anteriormente.

  2. Un Coding Dojo que tiene algo ligero para comer y tomar, es un mejor Coding Dojo.

  3. Un Coding Dojo con comida y sin servilletas, será un desastre para los teclados.

  4. Estos eventos duran entre una y dos horas, aproximadamente.

  5. El foco suele tenerlo la práctica de desarrollo ágil de software, con lo cual vendrá bien que haya interés de los organizadores en prácticas tales como Pair Programming (Programación de a Pares), TDD (Test Driven Development) y Refactoring, así como también conocimiento en principios SOLID de diseño, por mencionar algunos temas ágiles relacionados con el desarrollo de software.

  6. Los invitados pueden no saber qué es TDD, Refactoring ni SOLID. Lo aprenderán en el Dojo. Tampoco necesitan saber cómo escribir pruebas unitarias.

  7. Si bien se espera que los participantes sepan programar, hubo excepciones en las cuales participaron exitosamente abogados, vendedores y otros perfiles no técnicos.

  8. Deberás tener una agenda para presentarles a los que asistan. Posiblemente se parezca a un listado con los títulos que vienen a continuación.

Llegada y Presentación

La llegada al Dojo puede marcar el estado de ánimo del encuentro. Un ambiente de recepción con música y comida predispone bien a muchas personas. Luego, llegado el momento de iniciar, se hace una ronda para dar lugar a una breve presentación de cada uno de los participantes y de sus intenciones en el Coding Dojo. La disposición en ronda es intencional. Su objetivo es la participación activa, la horizontalidad y la posibilidad de que todo el que hable pueda ser escuchado y mirado por los demás.

Explicación de temas

Luego de la presentación, se da lugar a la explicación de varios conceptos, siempre y cuando esto se necesite. Es habitual describir qué es un Coding Dojo, cuáles son sus objetivos, cómo será el mecanismo de trabajo y cuáles son los roles que se practicarán. También se suele describir -en mayor o menor detalle- qué es TDD y técnicas de desarrollo ágil, como puede ser Refactoring. En general es útil ilustrar estos conceptos con ejemplos simples y concretos, llevados adelante en vivo, ahí mismo.

A partir de la explicación de TDD, suelo pedir a los participantes que esquematicen en una hoja de papel las etapas del ciclo de trabajo que esa técnica propone, llamado RGR (del inglés Red, Green, Refactor). Con la hoja del ciclo RGR, el Asistente guiará y controlará a su grupo en el seguimiento del ciclo RGR. El uso que se da a esta hoja se asemeja al que tiene el tablero en un juego de mesa.

Esta etapa de explicación podría durar entre 15 y 45 minutos, dependiendo del grado de conocimiento que existe al respecto entre los participantes. Y, dado que el objetivo del Dojo es aprender y mejorar mediante la práctica, es importante que la explicación no dure demasiado, aún si quedan dudas. Durante la práctica y en las conclusiones finales, muchas de esas dudas suelen resolverse.

El desafío o la Kata

El Coding Dojo fomenta la práctica a través de ejercicios concretos y finitos que representen un desafío y resulten motivadores. Estos desafíos no son problemas que los equipos deban resolver para sus trabajos. Al tratarse de un entrenamiento, se proponen desafíos que les sirvan a los participantes para aprender y mejorar. Los desafíos se llevan adelante mediante la realización de una actividad. Esa actividad suele ser una Kata, palabra que en japonés significa “forma”. Las katas en las artes marciales son ejercicios que se realizan repetidamente, con el objetivo de incorporar movimientos de forma evolutiva. Así, en un combate, luego de muchas repeticiones, esos movimientos se podrán realizar naturalmente sin siquiera pensarlos.

Por ejemplo, una Kata que suelo proponer para aprender TDD es crear un componente de software que convierta números naturales a números romanos. Si el componente recibe un 1 deberá devolver “I”, si recibe un 2 deberá devolver “II”, si recibe 5 deberá devolver “V” y así para todos los números romanos hasta 3999. El objetivo de la Kata no es resolver el desafío por completo ni diseñar desde el inicio la solución final, sino practicar paso a paso, resolviendo cada una de las partes, tal como propone TDD.

Desarrollo de la Kata

Una vez que los conceptos han quedado claros y se ha elegido una Kata, comienza la práctica. Se invita a los participantes a que se organicen en grupos de 3 integrantes. Si son pares, que se armen todos los grupos de 3 que sean posibles y finalmente quedará algún grupo de 4 o de 2. Todo el grupo trabajará en una misma computadora.

Se trabajará en ciclos cortos, también llamados iteraciones. Son períodos de tiempo que pueden ir entre 5 y 10 minutos. En los Dojos en los cuales hay mayoría de grupos con 3 integrantes, la duración que he encontrado más conveniente es de 7 minutos.

Al cabo de los 7 minutos, pedir a los participantes que roten de rol. Entonces el Coder pasará a ser Co-piloto, el Co-piloto pasará a ser Asistente y el Asistente pasará a ser Coder. Eso será así durante los siguientes 7 minutos. Y así se repetirá durante 4 a 8 iteraciones, aproximadamente. Esta cantidad depende del tiempo que se quiere invertir en el Coding Dojo.

El Sensei deberá estar atento a las necesidades que los grupos puedan tener durante en el desarrollo de la Kata, compartiendo oportunamente su conocimiento y experiencia. También podrá realizar aclaraciones y comentarios entre ciclos, para compartir con todos los grupos algún conocimiento o hallazgo que haya ocurrido en algún grupo en particular.

Una posibilidad opcional es fomentar, cada 3 o 4 iteraciones, la rotación de los grupos para que los participantes trabajen también con el código fuente que fue desarrollado por otros. El objetivo de esta otra rotación es generar mayor conciencia al respecto de la mantenibilidad, un atributo de calidad esencial en el desarrollo ágil de software. Este tipo de rotación implica que todo el grupo (o parte del mismo) se mueva a otra computadora y trabaje allí durante algunas iteraciones. Si alguien del grupo se queda trabajando en la computadora original, es deseable que comience la iteración como Co-piloto o Asistente, para permitir, a sus nuevos compañeros de grupo, que conozcan la solución que se ha estado desarrollando antes de su llegada.

Conclusiones y cierre del Dojo

Un rato antes de terminar el encuentro, se suele realizar una nueva ronda. En esta ronda de cierre, se invita a los participantes a que compartan sus conclusiones, a partir de lo que han aprendido, de los desafíos que se han encontrado, de las emociones y sensaciones que han sentido. También se los invita a compartir cómo han pasado en general. Esto último apunta a que no solamente compartan cuestiones técnicas, sino que también puedan también conversar sobre lo que les haya resultado relevante a lo largo del Coding Dojo. No es raro escuchar reflexiones acerca del trabajo en equipo, la distribución de teclados ajenos, la tolerancia frente a diferentes formas de pensar soluciones para la Kata y las inquietudes más profundas relacionadas con las técnicas que se han estado utilizando durante la práctica.

Para poder mejorar entre un Coding Dojo y el siguiente, es habitual pedir retroalimentación a los participantes, para que compartan qué les pareció útil, qué les gustó, qué no les gustó y qué ideas tienen para mejorar de cara al siguiente encuentro.

Conclusión

Habiendo facilitado más de cien Coding Dojos en estos últimos cinco años, tanto en ámbitos comunitarios como académicos y corporativos, puedo asegurar que siempre ocurrió la magia: gente que aprendió cosas nuevas relevantes para su día a día y que pasó a ser más consciente. A partir de participar activamente de un Coding Dojo, miles de personas empezaron a ver cosas a su alrededor que antes no habían visto: Temas técnicos, metodológicos, humanos y tecnológicos.

Gracias a esa experiencia, puedo garantizar que organizar eventos del tipo Coding Dojo en el marco de un equipo, compañía o comunidad de práctica, sirve para:

  • Difundir y compartir conocimientos de todo tipo.

  • Fomentar la posterior auto-capacitación.

  • Mejorar el uso de técnicas y herramientas.

  • Ampliar capacidades.

  • Refinar habilidades.

  • Establecer bases de un lenguaje común que mejora la comunicación.

  • Crear y mejorar relaciones entre los participantes.

  • Mejorar potencialmente la calidad del código fuente y por ende del producto.

  • Establecer un ambiente en el cual la mejora continua sea posible y real.

¿Qué hacés ahí, leyendo? ¿Qué esperás para organizar y facilitar tu propio Coding Dojo?