2009-09-16 21 views
102

Me he interesado bastante en la codificación de katas en los últimos meses. Creo que son una excelente manera de perfeccionar mis habilidades de programación y mejorar la calidad del código que escribo en el trabajo.Codificación de Katas para practicar la refactorización del código heredado

Hay numerosos lugares donde se pueden encontrar Katas. como ..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

he descubierto que son excelentes para ser depositarios de Katas ... mis intentos de algunos de ellos se han sido enormemente gratificante.

Sin embargo, siento que todos los Kata que he visto hasta ahora tienen una breve venida. Ninguno de ellos parece permitirme practicar la refacturación del código incorrecto. Es genial aprender a escribir código limpio la primera vez ... pero en mi trabajo actual, no tengo muchas oportunidades para escribir código nuevo. Por el contrario, a menudo estoy luchando contra el código heredado y tratando de descubrir cómo refactorizar módulos, eliminar dependencias y reducir el acoplamiento.

Como tal, estoy buscando un par de Katas que pueda usar para perfeccionar mis habilidades de refactorizar el código heredado y convertirlo en código limpio.

¿Alguien sabe de alguno que ya exista? Sé que practico mucho mientras estoy en el trabajo ... pero me gustaría perfeccionar mis habilidades hasta el punto en que pueda ver rápidamente cómo separar dependencias y separar preocupaciones en clases que hacer demasiado.

+0

+1 buena pregunta, con información útil proporcionado – KLE

+0

Ojalá pudiera dar más de +1 :) Gran pregunta. Nunca pensé en este tipo de práctica para la programación ... – TJMonk15

+0

ME ENCANTARÍA que alguien realmente publicara un pequeño sistema específicamente para la refacturación del código heredado ... algo que tiene partes donde brillarían las refactorizaciones de Michael Feathers. He estado buscando algo así por más de una semana. ¿nadie? ¿nadie? :) –

Respuesta

79

No sé de un sitio que los cataloga directamente, pero una de las estrategias que he utilizado en ocasiones es la siguiente:

  1. Encuentra un proyecto viejo, pequeño, sin mantenimiento de código abierto en SourceForge
  2. descargarlo, que se compile/build/RUN
  3. leer la documentación, tener una idea de un código
  4. uso de las técnicas en trabajo efectivo con el código heredado para conseguir un pedazo de ella bajo prueba
  5. Refactor esa pieza, quizás corrigiendo errores y añadiendo características a lo largo del camino
  6. Repita los pasos 4 a 6

Cuando encuentre una pieza que era especialmente difícil, de deshacerse de su trabajo y repetir un par de veces a refuerza tus habilidades

Esto no solo practica la refacturación, sino también otras habilidades como la lectura de códigos, las pruebas y el tratamiento de los procesos de compilación.

El problema más difícil es encontrar un proyecto que te interese lo suficiente como para seguir trabajando. El último en el que trabajé era una biblioteca de Python para programación genética, y el actual en el que estoy trabajando es una biblioteca de IRC para Java

+3

+1 sugerencia muy interesante. Como dijiste, lo difícil es encontrar un proyecto apropiado. Le prestaré mucha atención a esto. Quizás si yo, u otros, encuentro algunos que son muy útiles, podría guardarse y documentarse en algún lugar como un Kata ... – mezoid

+2

"Tratando con el código heredado", ¿quiere decir "Trabajar eficazmente con el código heredado"? http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 – TrueWill

+0

Sí, me refiero a "Trabajar eficazmente con código heredado". Gracias por la captura! – Ryan

18

Me siento como nigromante respondiendo a un hilo tan viejo, pero hay una cosa que haría una adición digna: Legacy Code Retreat.

La idea es tener un código heredado y tratar de practicar las mismas técnicas para tratar con eso, pero no puedo ver nada que te impida simplemente usar el código preparado y practicarlo solo. Solo usarlo para crear un Golden Master supone una hora de trabajo, y hay mucho más que puedes hacer. Si tu kata usualmente dura alrededor de 2 horas, yo diría que al dividir lo que generalmente ocurre en LCR en kata te da cuatro cosas diferentes para trabajar.

Hay un GitHub repository del autor de la idea, J.B. Rainsberger, que contiene un sistema heredado simple con el que se debe trabajar, Trivia Game.

Desde mi experiencia como organizador/participante, a la gente realmente le gustó esto y fue esclarecedor ver qué puede ser un problema en un código heredado y dónde su refactorización puede llevarlo por mal camino (¡y cómo!). Aquí hay otra cuenta de cómo se ve, por Andreas Leidig.

15

Emily Bache tiene un repositorio github con algunas katas de refactorización: Emily Bache's Refactoring Kata Repo. Hay variantes de KataYahtzee y KataTennis para refactorizar. Además, tiene una variante de Gilded Rose Kata, que fue diseñada como un kata de refactorización.

Además, ella tiene el Racing Car Katas en su repo: Racing Car Kata. Los Race Car Katas también incluyen buenos ejercicios para refactorizar.

Esos kata tienen el código en múltiples langauages:

  • C++
  • C#
  • Java
  • Javascript
  • Python
  • Rubí
+3

Emily también ha publicado el libro The Coding Dojo Handbook que enumera los Katas y describe cómo iniciar y ejecutar sus propios dojos de codificación. Recomiendo mucho el libro: https://leanpub.com/codingdojohandbook –

+0

He usado su libro para ejecutar dojos, y estoy de acuerdo en que es un excelente recurso. Emily también tiene un curso relacionado en pluralsight.com/courses/the-coding-dojo. –

Cuestiones relacionadas