El pasado 22 de octubre tuvo lugar el Global Day of Coderetreat 2016, un evento dirigido a desarrolladores de software y organizado a nivel mundial en más de 100 ciudades, cuyo objetivo es promover buenas prácticas de desarrollo y dar a conocer técnicas como el Test Driven Development (desarrollo guiado por tests), el Pair Programming (programación por parejas), etc.
En Pamplona este evento ha sido organizado por Augusto Mauch y Gorka Gil y ha contado con el patrocinio de Openbravo, que además ha prestado sus instalaciones en Mutilva. A dicho evento asistimos mi compañero Fausto López y yo y en este post quería contaros qué tal fue la experiencia y algunas reflexiones sobre los temas tratados durante la jornada.
¿En qué consistió el Coderetreat?
A grandes rasgos, el Coderetreat es un evento en el que un grupo de desarrolladores invierte una jornada (de 09:00 a 17:00) resolviendo retos y ejercicios de programación, utilizando para ello buenos fundamentos y técnicas de desarrollo de software.
[/responsive]
En nuestro caso, el evento comenzó con los facilitadores (organizadores del evento) explicando la dinámica de trabajo y realizando una ronda de presentaciones. Acto seguido se pasó a explicar el problema que se iba a abordar durante el resto de la jornada. Generalmente, en este tipo de eventos se escoge un problema sencillo (conocido como kata), que pueda ser atacado de diferentes formas. En esta ocasión el problema elegido fue desarrollar el conocido Juego de la vida de Conway haciendo uso de la técnica de Test Driven Development(desarrollo guiado por tests).
[embedvideo type=”youtube” id=”OWXD_wJxCKQ”]
Una vez introducido y explicado el ejercicio a realizar y la dinámica de trabajo, la jornada se dividió en 5 sesiones de 45 minutos, en las que, por parejas, se llevaron a cabo diferentes ejercicios con nuevas restricciones en cada ocasión.
Hay que recalcar que el objetivo del evento no era lograr alcanzar una implementación, sino poner en uso y discutir buenas prácticas de desarrollo de software. De hecho, una de las reglas de oro es que al finalizar cada sesión se debe desechar el código escrito y empezar de nuevo en la siguiente.
Además, en todas las sesiones cada desarrollador debía emparejarse con una persona diferente, lo que da la posibilidad de entrar en contacto con otros lenguajes de programación y entornos y sobre todo de salir de la zona de confort de cada uno. Al finalizar cada sesión dedicamos 15 minutos a compartir impresiones, ideas y consejos acerca de los temas tratados en esa sesión. Tras ello, se explicaba el ejercicio de la siguiente sesión y se formaban nuevas parejas de trabajo.
En definitiva, la dinámica de trabajo del evento se podría resumir en:
- Comenzar por un problema sencillo: en este caso el Juego de la Vida.
- Trabajar por parejas en el problema: para poder discutir entre ambos cómo abordar y solucionar dicho problema.
- Añadir restricciones en cada sesión: que obligan a considerar otros enfoques y refactorizar las soluciones adoptadas.
- Desechar el código realizado en cada sesión: para enfatizar que no importa alcanzar una implementación, sino practicar buenas técnicas de desarrollo.
Objetivos y técnicas de desarrollo
El objetivo del evento era claro: poner en práctica técnicas de desarrollo de software enfocadas a lograr código que sea claro, reutilizable, fácil de mantener, probado, sin duplicidades, etc. Es decir, que siga principios tales como SOLID, DRY, YAGNI o KISS, etc.
Entre las técnicas aplicadas durante el evento destacaron dos: el Test Driven Development (TDD) y el Pair Programming. La primera se basa en escribir primero las pruebas (tests unitarios) y posteriormente el código que hace pasar dichas pruebas (invirtiendo el proceso habitual en el que primero se escribe el código y después sus correspondientes tests que verifican la validez del software). Una vez que se consigue una implementación que verifica los tests se pasa a una fase de refactorización en la que se mejora progresivamente el código.
El objetivo del TDD es obligar al desarrollador a producir código que sea testeable y pueda verificarse de forma automatizada y a pensar en las interfaces de las clases y sus métodos y no en implementaciones concretas (favoreciendo el encapsulamiento y disminuyendo el acoplamiento con otras partes del sistema).
La técnica de TDD se combinó con la de Pair Programming, que consiste en programar por parejas en un sólo ordenador. El objetivo de esta técnica es que los dos participantes puedan discutir y abordar problemas complejos, aportando ideas y diferentes soluciones para los mismos. Así pues, combinando ambas técnicas, se llevaron a cabo ejercicios como el Ping Pong Pair Programming, en el que un desarrollador escribe un test (que inicialmente falla) y el otro la implementación que hace pasar dicho test, intercambiándose las funciones en la siguiente ronda (el segundo escribe el test y el primero pasa a escribir la implementación).
Este ejercicio y otros similares sirvieron para poner también de relieve la importancia de escribir buenos tests, que sean fáciles de entender y mantener (como el resto del código) y que comuniquen de forma clara la intención del desarrollador.
Conclusiones
Mi valoración del evento es realmente positiva. La jornada se desarrolló de una forma muy amena y con un gran ambiente por parte de los organizadores y asistentes. La dinámica de trabajo basada en sesiones “cortas” y en ir añadiendo restricciones al problema hizo imposible aburrirse o quedarse sin cosas que hacer. Además, las reuniones tras cada una de las sesiones dieron lugar a intercambios de ideas muy interesantes que permitieron conocer distintas formas de abordar el problema.
En definitiva, creo que este evento ha sido una gran iniciativa y desde aquí quiero felicitar a los organizadores por el buen trabajo realizado. Espero que el año que viene pueda llevarse a cabo otro Coderetreat en Pamplona y que veamos más eventos de este tipo en nuestra ciudad.