Sunday, October 2, 2011

5 Gründe warum man Quellcode nicht liest


Am häufigsten von allen Guten Dinge in Software-Entwicklung ignoriert man das Lesen von Quellcode. Warum eigentlich? Fünf Gründe und eine Lösung folgen.

Psychologische Gründe
Warum liest man kaum Code? Vielleicht hat man den nicht zum Lesen geschrieben. Die wichtigste Fähigkeit von Code ist doch, dass er funktioniert. Nur funktionieren genügt, wenn man von kleiner Mengen Testcode oder von kleinen Hilfsprogramme spricht. In grösseren Projekten wird Wartbarkeit extrem wichtig. 

Wenn Testen zeigt, dass Code funktioniert und nur funktionieren genügt, warum sollte man Code lesen? Statistik als Wissenschaft macht es klar dass die grosse Mehrzahl wird den Zaun da überqueren wo er niedrig genug ist. Diese Norm-Nerds sind nicht böse, die arbeiten so gut sie können oder die Managers von ihnen anfordert. Statistisch eine kleine Minderheit schummelt und versucht unter den Zaun zu schlittern. Diese böse Entwickler kann man Coder-Otter nennen. Sie sind auf der Dunklen Seite der Macht gefallen. Eine kleine Minderheit will den Zaun und die Qualität aktiv erhöhen. Das seid ihr, die Leser dieses Blogs, die Tick-Könige, unsere letzte und einzige Hoffnung auf Qualität in Software-Entwicklung. 

Die Norm-Nerds schreiben oft Code der nur funktioniert. Sie denken nie ihren eigenen Code zu lesen. Wenn sie Code lesen, ist es meistens schlecht. Je mehr schlechten Code sie sehen, desto sicherer schreiben sie selbst weiterhin unlesbaren Code. 

Jede Küchenpsychologe weiß dass die eigene Einstellung färbt wie man die Welt sieht. Wenn Markus immer lügt, muss er vorsichtig sein, weil er denkt dass alle andere lügen auch. Wenn ich also Code schreibe der unlesbar ist, wie könnte Code von anderen besser sein? Unlesbaren Code liest man selten, obwohl genau unlesbaren Code sollte man lesen.

Die Jagd auf Perfektion
Warum liest man kaum Code? Vielleicht ist es noch keine richtige Zeit Code zu lesen. Man scheitert so lange man nach die richtige Zeit sucht. Die richtige Zeit kommt nämlich sobald eine Klasse fertig ist, so früh wie möglich, bevor Testen, nach der letzten Änderung, erst wenn die Klasse oder Packung komplette Funktionalität hat, usw.
“ Es gibt keine richtige Zeit Code zu lesen.”
Ernst R. Hauschka schrieb es so: 
“Nicht wer Zeit hat, liest Bücher, sondern wer Lust hat, Bücher zu lesen, der liest ob er viel Zeit hat oder wenig.”
Ich kann es nicht besser ausdrücken.

Die die nicht können, aufschieben
Warum liest man kaum Code? Es ist besonders einfach eine Aufgabe aufzuschieben, wenn es nicht ganz klar ist. Norm-Nerds wissen nicht wie man Code liest und was man zu suchen hat. Man würde annehmen dass weil die Code schreiben können, könnten sie auch Code lesen. Ein Buch zu lesen als Unterhalt ist völlig anders als ein Buch zu lesen mit den Ziel ein Report daraus zu schreiben. Kritisches Lesen unterscheidet sich von normales Lesen wie Streifen auf einem Zebra. Das Produzieren von Text ist wirklich viel einfacher als das Produzieren von gutem Text. Das kann auch erklären wieso Norm-Nerds Code produzieren können. Kritisches Lesen von Code benötigt Können und Erfahrung.

Feedback ist eine soziale Herausforderung
Warum liest man kaum Code? Erzeugen von Kritik mag schwer sein, aber das Liefern von negatives Feedback ist fast unmöglich. Dafür braucht man besondere soziale Kenntnisse, welche technische Menschen oft nicht besitzen. Managers kennen das Problem. Sie müssen ja Kritik liefern so dass die Objekte noch weiterhin arbeiten wollen und sogar noch bessere Ergebnisse produzieren. Man muss die Kritik positiv bekleiden aber nicht so dass es nicht als Kritik genommen wird. Unverdientes Loben wird schnell vergessen.

Ohne Hierarchie hat man die Situation dass Kollegen sich gegenseitig kritisieren. Dann muss man sich vorsichtig bewegen. Wenn man über kleinen Fahrlässigkeiten meckert, wird der Schreiber sich nicht vertrauenswürdig fühlen und wenn man grössere Fehler findet, wird der Schreiber sich dumm fühlen. In beiden Fällen ist das Feedback falsch geliefert geworden. Feedback muss in einer gesunden Arbeitsumgebung die ganze Zeit fließen. Jeder kann sich immer noch verbessern.

Das Prüfen wird untergeschätzt
Warum liest man kaum Code? Für Norm-Nerds ist das Prüfen als Aktivität nicht so produktiv wie das Schreiben von neuen Code. Dieser Grund erklärt auch warum man zu wenig testet in Softwareprojekten. Wenn man die Aufgabe nicht für hochwertig hält, wird die nie hoch genug priorisiert um gemacht zu werden. Der Wert einer Aufgabe hängt von deren Ergebnissen ab, und wenn man beim Code-Lesen keine wertvolle Befunde findet, sollte man wahrscheinlich nicht Code lesen. Anstatt Zeit in eine ineffiziente Aufgabe zu verschwenden, wird man eher mehr neuen Code schreiben, weil es wertvoller wirkt, obwohl sehr viel geschriebener Code besser wäre ungeschrieben geblieben.

Die Lösung
Man liest Code schon
-wenn alle schreiben Code für andere Menschen,
-wenn Prüfen von Code wird als notwendig in Software-Entwicklung gesehen, 
-wenn Leute können Code lesen und prüfen,
-wenn das generierte Feedback konstruktiv und belehrend ist,
-wenn die Prüfergebnisse den jetzigen Code (und allen zukünftigen Code) verbessern.  

No comments:

Post a Comment