Clean Code Developer
Posts 1-3 of 3
-
Ralf Westphal Premium Member Group moderatorThe company name is only visible to registered members.Aus Legacy Code lernen - Erfahrung des 1. Clean Code Developer Camp
Im Feb/März 09 haben Stefan Lieser und ich ein erstes Clean Code Developer Camp mit 10 Teilnehmern durchgeführt. Insgesamt 10 Tage haben wir uns einem Ausschnitt der CCD Bausteine gewidmet. Die Teilnehmer haben in Pair Programming und Gruppenübungen insbesondere das konsequente autom. Testen und die komponentenorientierte Programmierung "am eigenen Leibe erfahren". Positiv natürlich ;-)
CCD Prinzipien haben wir im Rahmen von Refactoring-Übungen vorgestellt und trainieren lassen. Die Aufgabe mit dem größten Effekt lautete: "Nimm diese monolithische Legacy Anwendung und refaktorisiere sie in Bezug auf ein Feature." Die Legacy Anwendung war eine kleine, aber vollständige Solution aus einem dotnetpro Artikel. Der Autor hatte sein funktionales Ziel erreicht; das Programm funktionierte und man konnte (irgendwie) sehen, wie die in Frage stehende Technologie zu bedienen ist. Unter der Haube jedoch... nun, da war der Code in wunderbar unverständlichem Zustand. Nicht schön, wenn man ihn warten muss - aber toll für die Übung.
Und das war eben ein schönes Erlebnis für uns als Trainer: zu sehen, wie die Teilnehmer typischen Legacy Code anschauen und "sich winden vor Ekel" ;-) Die Ausrufe des Unmuts wollten kaum enden. Nach knapp einer Woche intensiver Beschäftigung mit Bausteinen des CCD sprang den Teilnehmern die geringe innere Qualität des Codes an wie eine Dogge. Da half auch nicht sich zu sagen, "Der will nur spielen!" ;-) Denn so ist es ja und wird der Autor im Zweifelsfall für sich reklamieren: Das ist doch nur "Spielcode" und kein Produktionscode.
Die Teilnehmer hatten schon im Verlauf der ersten Woche ein "ästhetisches Empfinden" entwickelt, das sie intuitiv richtig urteilen ließ: das ist schlechter Code, der dringend refaktorisiert werden muss. Natürlich haben viele (oder gar die meisten?) Entwickler ein solches mehr oder weniger ausgeprägtes "ästhetisches Empfinden" - aber das ist selten reflektiert. D.h. es ist nicht entstanden aus der bewussten Beschäftigung mit Prinzipien für Qualität, sondern hat sich "halt so gebildet" im "eigenen Leiden an unwartbarer Software". Deshalb ist es nicht weniger wertvoll - allerdings wenig hilfreich. Denn ohne Reflektion fehlt es meist an Ideen, es besser zu machen. Der Entwickler weiß dann nur, dass es anders sein wollte, aber nicht wie. Im Zweifelsfall verändert er dann den Code, führt ein neues Feature ein - und erreicht damit nur eine andere Unwartbarkeit.
Es war für uns daher schön zu sehen, dass die Teilnehmer nicht nur ein gesundes Empfinden hatten, sondern es wirklich besser wussten. Sie konnten den Code "nach den Regeln der CCD-Kunst" zu etwas besserem refaktorisieren. Und das hat ihnen sogar Spaß gemacht.
Eine Erkenntnis, die wir nämlich gewonnen haben ist, dass Legacy Code so undankbar ist, nicht nur, weil man ihn so schwer versteht, sondern weil man sich machtlos ihm gegenüber fühlt. Mit den Mustern der Refaktorisierung, deren Anwendung die CCD-Prinzipien treiben, gewinnt man als Entwickler jedoch Kontrolle zurück. CCD erlaubt nicht nur die (massive) Veränderung von Code, CCD ermutigt sogar dazu; CCD gibt konkrete Werkzeuge an die Hand. Und stärkt als Community-gestützte Initiative das Selbstvertrauen. Als Entwicklerin kann man sich sagen: "Ich darf und sollte das tun, weil es eine Community gibt, die das so tut. Ich bin nicht allein mit meiner Meinung. Ich darf auch meinem Urteil trauen, weil es hier ein Regelwerk gibt, das mein Urteil leitet."
Bottom line: CCD zu sein, lässt sich lernen. Das Urteilsvermögen wächst sehr schnell. Allerdings: Es bedarf schon intensiver Beschäftigung damit und der Unterstützung einer Gruppe, um so ein Wertesystem zu verinnerlichen. Neue Gewohnheiten und Wahrnehmungen sind erhebliche Veränderungen "der persönlichen Systems". Da ist es vorteilhaft, bei ihrer Einübung nicht zwei Herren dienen zu müssen: dem Lernstoff und dem Tagesgeschäft - in dem man nicht nur immer wieder gegen Fokusverlust zu kämpfen hat, sondern womöglich unverholener Skepsis ausgesetzt ist. Nichts schlimmer jedoch für einen Lernenden, als ständig die eigener Unsicherheit beim Lernen noch durch schele Blicke verstärkt zu bekommen.
-Ralf
- 18 Mar 2009, 09:23 am
-
Martin MayrThe company name is only visible to registered members.Re: Aus Legacy Code lernen - Erfahrung des 1. Clean Code Developer Camp
Hallo Ralf,
das klingt äußerst interessant. Ist auch ein 2. Clean Developer Camp geplant?
Auch ich habe oft das Problem, dass ich zwar sehe, dass Code nicht "clean" ist, mir aber die Routine beim Refactoring fehlt, um zu einem befriedigenden Ergebnis zu kommen.
Die Aussage, dass es wohl an der nötigen Reflektion mangelt, kann ich so nur unterstützen. Ich sehe an mir selbst, dass ich zwar jede Menge Patterns, deren Bedeutung und Umsetzung kenne, es jedoch oft am Blick fehlt, wann diese bei einem Refactoring gezielt zum Einsatz kommen sollten.
Das Camp klingt nach einem Ort, wo man den Anfang des Weges finden kann, sich BEWUSST und selbständig mit diesen Problemen und deren Lösung auseinandersetzen zu können.
Viele Grüße
Martin
- 09 May 2009, 12:42 pm
-
Ralf Westphal Premium Member Group moderatorThe company name is only visible to registered members.Re^2: Aus Legacy Code lernen - Erfahrung des 1. Clean Code Developer Camp
Hallo, Martin!
Ja, es wird ein zweites Camp geben. Hier findest du die Beschreibungen der Camps:
http://www.prodevcollege.de/produkte-ccdcamp.html
Wir mussten Sie in mehrere Teile zerlegen, da der Stoff sonst nicht unterzubringen ist. Uns ist ja wichtig, dass die Teilnehmer viel, viel üben.
Dazu werden aber noch andere Formate kommen. Wir planen z.B. auch noch eine "School of .NET" als berufsbegleitende Ausbildung für diejenigen, die nicht in 5-Tage-Blöcken aus dem Unternehmen raus können. Im Blog des College (
http://prodevcollege.blogspot.com/) werden wir davon berichten, wenn es konkreter wird. Und auch neue Termine kündigen wir dort natürlich an.
-Ralf
- 10 May 2009, 07:48 am
