Kata (Wikipedia): palabra japonesa que describe lo que en un inicio se consideró una serie, forma o secuencia de movimientos establecidos que se pueden practicar normalmente solo […].
Las artes marciales nos han enseñado que para ser buenos en algo, lo tenemos que repetir muchas, muchas veces. Este concepto se ha llevado a la programación, donde una kata es un pequeño ejercicio de código que plantea un problema que hemos de resolver de manera incremental, empleando TDD (desarrollo dirigido por tests), como si de la secuencia de movimientos de una kata se tratara.
El objetivo de estos ejercicios es mejorar nuestra capacidad de resolución de problemas y familiarizarnos con la manera de desarrollar a partir de pruebas. Estas katas se pueden hacer de manera individual, aunque si nos juntamos varios puede dar como resultado algo muy, muy interesante.
Esto es lo que ocurrió el pasado sábado en el grupo de AgileCyl, que organizaron lo que se conoce como Katayuno, reunir a un grupo de desarrolladores, programar por parejas una kata, y luego comentar la experiencia. En esta edición usamos Ruby, Python, Objective-C, Java, Javascript, C# y Groovy como lenguajes de programación, si no me dejo ninguno.
El funcionamiento fue el siguiente, hubo 3 iteraciones de 40 minutos con una pausa entre la segunda y la tercera para desayunar:
- Primera iteración: Se desarrolla la kata por parejas, se introduce el concepto de TDD a aquellos que no estuvieran familiarizados.
- Segunda iteración: Se cambian las parejas, se borra el código fuente (manteniendo el código de los test) y se re-escribe la kata. Es muy interesante porque el resultado puede llegar a ser bastante diferente a la primera iteración.
- Tercera iteración: Se cambian las parejas (otra vez), se borra todo el código fuente y se re-escribe la kata en otro lenguaje de programación. Una vez más, es una tercera aproximación al mismo problema, aprovechando las características de cada lenguaje.
Al final de cada iteración tenìamos unos minutos en los que comentábamos qué nos había parecido la experiencia, sobre todo a aquellos que se enfrentaban, por primera vez, a un ejercicio de TDD.
La experiencia ha sido muy enriquecedora, he podido desarrollar con tres personas diferentes y tener tres puntos de vista del mismo problema, usando dos lenguajes de programación diferentes, he podido discutir sobre las ventajas o deventajas de usar según qué tipo de estructuras para problemas específicos. Espero poder repetir en el siguiente.