¿Qué es toda esta tontería de las katas?
Escrito por Uncle Bob
Traducido por el grupo de contenidos de agile-spain
Artículo Original
Últimamente hay un interes creciente por las Katas de Software. ¿Qué es todo este ruido, y por qué puede ser importante?
Hace varios años Dave Thomas (Pragmatic Programmer) inició un blog especial sobre la programación de katas. La idea era simple: los profesionales practican.
Quizás no se te había ocurrido antes, pero es evidentemente cierto por sí mismo. Los músicos profesionales practican. Los bailarines profesionales practican. Los médicos practican. Los soldados practican. De hecho, cualquier tipo de artesano profesional debe practicar el oficio que ejerce a fin de desarrollarlo bien a la hora de la verdad.
El punto de Dave fue que los programadores profesionales necesitan practicar como cualquier otro profesional. Estableció una serie de sencillos ejercicios y problemas que los programadores podían resolver durante su tiempo de práctica. También sugirió que el tiempo de práctica debía ser planificado y protegido como parte de la rutina normal de un desarrollador de software.
En la XP2005 en Sheffield (Reino Unido), asistí a la sesión de Coding Dojo de Laurent Bossavit y Emmanuel Gaillot. Escribí sobre ello en mi blog en aquella época. Salí de aquella sesión con una visión diferente de lo que podría ser una Kata. En opinión de Dave Thomas una kata es un ejercicio a resolver. Cada vez que se intenta resolver se hace desde un enfoque diferente. La idea de Dave es que una kata es una forma de explorar el espacio de solución de un problema. Pero en las artes marciales una kata es algo diferente, es un conjunto de movimientos que uno memoriza en detalle. Una kata de las artes marciales es un baile ejecutado con precisión. Salí de Sheffield con la idea de que una kata de codificación (coding kata) podría ser más como una kata de las artes marciales.
Hace aproximadamente un año, Corey Haines (nuestro juglar errante del código) me visitó y me habló de algunas mini-conferencias que habían adoptado el concepto de la kata de codificación. Lo que describió sonaba más como un grupo de baile que como un grupo de personas resolviendo un problema dado de forma independiente. Esto me hizo pensar. Así que en la próxima reunión de Artesanía del software en 8th Light (que, no casualmente, toma su nombre de una filosofía de las artes marciales) llevé a cabo una simple sesión de kata al estilo dojo.
Yo, actuando como el Sen Sei, puse a todo el mundo en fila en la sala como si estuvieran en un dojo. Tuve que ponerles sus pulseras verdes en las muñecas (¡la mía era negra!). Les pedí que se sentaran, y luego hice un gesto de silencio. Durante los siguientes 15 minutos les guié a través de la Kata de factores primos en Java, sin pronunciar ni una palabra (o casi). Yo escribiría una prueba sencilla, y luego haría el gesto para que ellos hicieran lo mismo. Entonces yo haría pasar la prueba, y de nuevo haría el gesto para que ellos repitieran mis movimientos.
Entonces, este otoño, asistí a la sesión Programando con las Estrellas en el Agile 2009. Mientras miraba a los participantes realizar sus sesiones de programación, me di cuenta de que no estaban simplemente demostrando habilidades de programación; de hecho estaban compitiendo en cómo de bien ejecutaban su sesión. Ahí fue cuando se me ocurrió. ¡Se trataba de un arte de interpretación!
Parece absurdo pensar en la programación como un arte de interpretación. Y sin embargo, ver a aquella gente en el escenario trabajando a través de rutinas, que claramente habían practicado una y otra vez, era deliciosamente entretenido para mí, y para el público. Hubo vítores y aplausos cuando un pareja de intérpretes hizo algo especialmente bien. Hubo risas cuando una pareja ejecutó una broma inteligente en el código, o en el comportamiento. Para los programadores, ¡ver a otros programadores ejecutando rutinas bien practicadas fue divertido!
Ahora había visto katas de artes marciales ejecutadas como arte de performance durante las competiciones. De hecho, es bonito ver a un artista hábil y bien entrenado ejecutar un kata. Y eso me llevó a pensar. ¿Por qué un artista marcial práctica estas formas de manera tan intensa que podrían llevarse a cabo como un arte?
El objetivo de las artes marciales no es llevar a cabo una representación. ¡El objetivo de las artes marciales es la defensa propia! Y, sin embargo, cuando un artista marcial que está en la cima de sus habilidades, su práctica le lleva sobre la calidad de un arte de realización. Cuando ves a un artista marcial cualificado ejecutando, tú sabes que no quieres pelear con él. La ejecución es una demostración, y una realización, de la maestría.
Y sin embargo la ejecución no es el objetivo. Ni los expertos de artes marciales practican su arte para que puedan realizarlo en un escenario. Un artista de artes marciales practica para alcanzar la perfección personal en el arte de defensa personal. El hecho de que la práctica se puede realizar es un (agradable) efecto secundario.
¿Podría ser que estos kata de codificación con los que hemos estado coqueteando en los últimos años se pudieran realizar? ¿Existe un beneficio para practicarlos tanto que la ejecución sea una opción? ¿Hay realmente alguna razón para un programador para crear y memorizar una rutina hasta el nivel de pulsaciones de teclas individuales? ¿Hay beneficios que pueden obtenerse de la práctica de esa rutina tan a fondo que se pueda hacer a alta velocidad, prácticamente sin errores? Este mes de agosto, decidí averiguarlo.
Empecé con la Kata de los Factores Primos en Java, y puse la música inspirada en este video de baile de cometas. La pieza es de aproximadamente 4 minutos de duración, y pensé que iba a necesitar aproximadamente el doble, por lo que he encontrado dos versiones diferentes de la música y las puse una a continuación de la otra. Pero trabajar en Java es pesado, y no pude completar el kata antes de que las dos piezas hubieran terminado. Así que me cambié a Ruby. Usando Ruby y Rspec fui capaz de terminar el Kata con un montón de tiempo de sobra.
Entonces comenzó una evolución. Como tenía tiempo, añadí más elementos a la kata. Como he mejorado en mi práctica me encontré con que tenía más tiempo, por lo que agregué incluso aún más elementos. Yo refiné y pulí. Refactoricé mis refactorizaciones. Acorté las pulsaciones de teclado, y aprendí muchas nuevos atajos del teclado en el proceso. Abandoné completamente el ratón, y luego más tarde lo recobré para florituras y realces (pero nunca para la codificación real).
Semana tras semana, he apartado 30 minutos o más diariamente para practicar, y practicar, y practicar, simplemente de la manera que solía practicar mis Katas de Jiu Jitsu. Practicaría en los aviones durante el vuelo a ver clientes. Practicaría en la cama con mi portátil en mi regazo. Practicaría por la noche en habitaciones de hotel después de un largo día de consultoría con los clientes. Practicaría temprano en la mañana antes de la ducha y el desayuno. Y la práctica comenzó a dar sus frutos.
Diez semanas más tarde, finalmente decidí que estaba listo para crear un screencast. Reduje mi resolución de pantalla a 1024x768. He configurado Snapz ProX para grabar toda la pantalla en un 80% del tamaño. Y comencé a grabar.
Realizar una kata de codificación al mismo tiempo que la música es algo muy difícil de hacer. El mantenimiento de la línea temporal es crítico. Hay muy pocos errores de los que te puedas recuperar de manera efectiva. Si sufres un accidente, la secuencia entera se derriba. Y el derrumbe sucedió. Una y otra y otra vez. Pasé semanas tratando de grabar una sesión bastante buena. Debo de haber hecho cientos de tomas. Fue muy frustrante.
Pero, cada día lo tenía más y mejor. Por último, después de semanas intentándolo, tuve lo que considero que es una grabación que, aunque no es perfecta, es lo suficientemente buena hasta la fecha. Puedes ver la grabación aquí.
¿Ha merecido la pena en la programación diaria que hago? Creo que sí. Mi uso del ratón es mucho menor de lo que solía ser. Conozco un número mucho mayor de atajos de teclado que antes, y puedo usarlos casi instintivamente. Mi mecanografía y precisión han mejorado un poco, y ahora pulso más teclas de puntuación y numéricas sin mirar. Así que, sí, creo que el esfuerzo ha dado sus frutos, aunque no estoy nada seguro si la rentabilidad compensa el esfuerzo.
Pero algo más compensa el esfuerzo. Hacer esta grabación fue muy divertido, fue muchísima diversión. Y esa es probablemente la verdadera respuesta a la pregunta planteada en el título de este blog.

