2009-09-16 5 views
102

Ich bin in den letzten Monaten ziemlich interessiert an Coding-Katas interessiert. Ich glaube, dass sie eine gute Möglichkeit sind, meine Programmierkenntnisse zu verbessern und die Qualität des Codes zu verbessern, den ich bei der Arbeit schreibe.Coding Katas für das Refactoring von Legacy-Code

Es gibt zahlreiche Orte, an denen Katas gefunden werden können. wie ..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

Ich habe diese als hervorragend Repositorys von Katas ... meine Versuche, einige von ihnen gefunden ungeheuer lohnend sind.

Allerdings habe ich das Gefühl, dass alle Katas, die ich bisher gesehen habe, nur kurz bevorstehen. Keiner von ihnen scheint mir zu erlauben, schlechten Code zu refaktorisieren. Es ist großartig zu lernen, wie man beim ersten Mal sauberen Code schreibt ... aber in meinem aktuellen Job habe ich nicht viele Möglichkeiten, um neuen Code zu schreiben. Stattdessen kämpfe ich oft gegen Legacy-Code und versuche herauszufinden, wie man Module umstrukturiert, Abhängigkeiten beseitigt und die Kopplung reduziert.

Als solche bin ich auf der Suche nach ein paar Katas, die ich verwenden kann, um meine Fähigkeiten des Refactoring Legacy-Code zu verbessern und es in sauberen Code zu verwandeln.

Weiß jemand von irgendwelchen, die bereits existieren? Ich weiß, dass ich eine Menge Übung darin mache, während ich bei der Arbeit bin ... aber ich möchte meine Fähigkeiten bis zu dem Punkt verbessern, an dem ich in der Lage bin, schnell zu sehen, wie man Abhängigkeiten aufspaltet und Bedenken in Klassen löst mach viel zu viel.

+0

+1 schöne Frage, mit nützlichen Informationen zur Verfügung gestellt – KLE

+0

Ich wünschte, ich könnte mehr als +1 geben :) Große Frage. Ich habe noch nie über diese Art von Praxis dachte auch für die Programmierung ... – TJMonk15

+0

Ich würde gerne sehen, dass jemand tatsächlich ein kleines System schreiben speziell für Refactoring von Legacy-Code ... etwas, das würde leuchten Teile, bei denen die Michael Federn Refactorings hat. Ich habe jetzt nach etwas ähnlichem als nach einer Woche gesucht. jemand? jemand? :) –

Antwort

79

ich nicht von einer Website weiß, dass sie direkt katalogisiert, sondern eine Strategie, die ich gelegentlich verwendet habe, ist dies:

  1. Finden Sie ein altes, kleines, nicht betreute Open-Source-Projekt auf Source
  2. Download, erhalten sie/build zu kompilieren/ausführen
  3. die Dokumentation lesen, um ein Gefühl für den Code erhalten
  4. Verwenden sie die Techniken in effektiv Arbeiten mit Legacy Code ein Stück davon zu test
  5. zu erhalten
  6. Umgestalten, das Stück, vielleicht Fehler und das Hinzufügen von Funktionen auf dem Weg
  7. Wiederholen Sie die Schritte 4 bis 6

Wenn Sie einen Teil finden, die besonders anspruchsvoll war, wegzuwerfen Ihre Arbeit und wiederholen Sie es ein paar Mal Festsetzung verstärken Sie Ihre Fähigkeiten.

Dies umfasst nicht nur Refactoring, sondern auch andere Fähigkeiten wie Codelesen, Testen und Umgang mit Build-Prozessen. Das schwerste Problem besteht darin, ein Projekt zu finden, an dem Sie interessiert genug sind, um weiter zu arbeiten. Das letzte, an dem ich arbeitete, war eine Python-Bibliothek für genetische Programmierung, und die aktuelle, an der ich arbeite, ist eine IRC-Bibliothek für Java.

+3

+1 sehr interessanter Vorschlag. Wie Sie sagten, ist das Schwierige, ein passendes Projekt zu finden. Ich werde dieses eine viel Rücksicht geben. Vielleicht, wenn ich oder andere, finden einige, die sehr nützlich sind, könnte es irgendwo als Kata gespeichert und dokumentiert werden ... – mezoid

+2

„Umgang mit Legacy Code“ - meinen Sie „Effektives Arbeiten mit Legacy Code“? http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 – TrueWill

+0

Ja, ich meine „Effektives Arbeiten mit Legacy Code“. Danke für den Fang! – Ryan

18

Ich fühle mich wie Nekromant auf so einen alten Thread antworten, aber es gibt eine Sache, die für eine würdige Ergänzung - Legacy Code Retreat.

Idee ist eine Code Retreat mit Legacy-Code zu haben und versuchen, die Techniken für den Umgang mit solchen zu üben, aber ich kann nichts sehen, das Sie davon abhalten würde, einfach den Code zu verwenden und damit selbst zu üben. Wenn Sie es nur für die Erstellung eines Goldenen Meisters verwenden, ist das eine Stunde Arbeit, und Sie können noch viel mehr tun. Wenn deine Kata in der Regel 2 Stunden dauert, würde ich sagen, dass du durch das Aufteilen von dem, was normalerweise auf LCR geschieht, in Kata vier verschiedene Dinge zum Arbeiten erhältst.

Es gibt eine GitHub repository von Idee Autor, J. B. Rainsberger, die ein einfaches Legacy-System enthält, mit dem Sie arbeiten, Trivia Game.

Aus meiner Erfahrung als Organisator/Teilnehmer haben die Leute das wirklich gemocht und es war aufschlussreich zu sehen, was ein Problem in einem Legacy-Code sein kann und wo Sie Ihr Refactoring in die Irre führen kann (und wie!). Hier ist noch ein weiterer Bericht, wie es aussieht, unter Andreas Leidig.

15

Emily Bache hat eine Github-Repository mit einigem Refactoring Katas: Emily Bache's Refactoring Kata Repo. Es gibt Varianten von KataYahtzee und KataTennis zu refactor. Außerdem hat sie eine Variante der Gilded Rose Kata, die als Refactoring Kata konzipiert wurde.

Auch sie hat die Rennwagen Katas in ihrer Repo: Racing Car Kata. Die Race Car Katas beinhalten auch gute Übungen zum Refactoring.

Diese kata haben den Code in mehrere langauages:

  • C++
  • C#
  • Java
  • Javascript
  • Python
  • Rubin
+3

Emily hat auch das Buch The Coding Dojo Handbook veröffentlicht, das die Katas auflistet und beschreibt, wie man eigene Coding Dojos startet und ausführt. Ich empfehle das Buch hoch: https://leanpub.com/codingdojohandbook –

+0

Ich habe ihr Buch verwendet Dojos zu laufen, und ich stimme zu, dass es eine hervorragende Ressource ist. Emily hat auch einen verwandten Kurs bei pluralsight.com/courses/the-coding-dojo. –