staging.inyokaproject.org

Buchbesprechung: Clean Coder

buchrezension.png

Es gibt sehr viele Bücher darüber, wie „ordentlicher“ Code auszusehen hat, wobei das teilweise natürlich auch Geschmackssache ist. Robert C. Martin, der u.a. für sein Buch „Clean Code“ bekannt ist, hat das Konzept auf die Entwickler ausgeweitet und will ein paar Verhaltensregeln für professionelle Programmierer geben.

Was heißt professionell?

Die Antwort auf diese Frage erfährt man, wenn man das Buch durchgelesen hat. Robert Cecil Martin gibt am Anfang keine klare Definition von „Professionalität“, sondern zeigt mehrere verschiedene Verhaltensregeln auf und definiert diese als professionelles Vorgehen.

Worauf baut Martin seine Aussagen? Er selbst schreibt am Anfang des Buches, dass viele Ratschläge auf seiner persönlichen Erfahrung beruhen. Und davon hat er genug, schließlich ist er seit 1970 als Programmierer tätig und hat vermutlich jeden Fehler gemacht, den man in dieser Branche machen kann. Martin sagt aber auch, dass nicht alle Ratschläge auf jeden passen. Einige werden sicherlich nur für Kopfschütteln sorgen, aber im Großen und Ganzen kann jeder etwas aus dem Buch mitnehmen.

Verantwortung: Die Basis der Professionalität

Das Buch beginnt mit einem Unglück. Am 28. Januar 1986 explodierte die Raumfähre Challenger kurz nach dem Start. Sieben Menschen kamen dabei ums Leben. Grund für die Explosion war ein Ausfall der Dichtungsringe zwischen zwei Komponenten, weil es an dem Tag zu kalt war und die Dichtungsringe nicht für solche niedrigen Temperaturen ausgelegt waren. Den Ingenieuren der Raumfähre war das Problem bekannt und sie sprachen auch beim Management vor, um den Start zu verschieben. Das Management setzte sich aber darüber hinweg, was zu der vorhergesagten Katastrophe führte.

Was Martin mit dem Beispiel zeigen will, ist, dass man als Konstrukteur von etwas die Verantwortung zu tragen hat. Sei es als Ingenieur oder Software-Entwickler. Die Verantwortung des Challenger-Unglücks lag sicherlich auch beim Management, weil sie nicht auf ihre eigenen „Profis“ hörte. Sie lag aber auch bei den Ingenieuren, die sich überstimmen ließen, obwohl sie diese Katastrophe voraussagen konnten. Was Martin sagen will: Profis zucken nicht mehr mit den Schultern, wenn sie einen Fehler sehen und keiner auf sie hört, sondern sie setzen alles daran, dass nichts und niemand zu Schaden kommt. (Diese Aussage deckt sich im Übrigen auch mit der Aussage von Martin Fowler auf der OOP 2014, dass Entwickler „not just code monkeys“ sind, auch wenn der Kontext ein anderer ist).

Dementsprechend hat jeder Entwickler „seinen“ Code zu verantworten. Er soll zum einen keinen Schaden am Verhalten zulassen (eine Funktion verhält sich plötzlich anders als zu vor), aber auch keinen Schaden an der Struktur. Vor allem der letzte Punkt ist etwas, der bei langjährigen Projekten früher oder später immer zu einem Problem wird, weil sich die Entwickler nicht daran halten, z.B. durch Refactorings für eine klare Struktur zu sorgen.

Testen, testen, testen

Was einen professioneller Entwickler laut Martin auch auszeichnet, ist, dass er weiß, dass sein Code funktioniert. Und hier bedeutet „wissen“ nicht bloß „glauben“, sondern er muss es beweisen können. Das geht entweder durch sehr intensives Code-Studium oder durch Tests, besser noch automatisierte Tests.

Robert C. Martin nennt hier vor allem den Begriff „Test Driven Development“ (kurz TDD). Darunter versteht man, dass man zuerst den Test schreibt, der scheitert, und danach den Code, der den Test durchlaufen lässt. TDD hat dabei noch andere Vorteile, aber in Bezug auf Professionalität zeigt es, dass der Code funktioniert und genau das tut, was von ihm erwartet.

Neben TDD geht Martin noch auf andere Teststrategien wie Akzeptanztests ein, denen ebenfalls ein eigenes Kapitel gewidmet ist.

Profis sind Teamplayer

Wer heute eine Stellenausschreibung für einen Job als Software-Entwickler anschaut, wird das Wörtchen „Teamarbeit“ so gut wie immer lesen. Nach Martin sind die meisten Entwickler zwar eher Einzelgänger und haben lieber mit abstrakten Problemen als mit Menschen zu tun, aber man kommt normalerweise auch nicht darum herum, mit anderen Leuten zusammenzuarbeiten. Und sei es nur, dass irgendjemand die Anforderung stellt, was man als nächstes entwickeln soll. Hier stellt Martin heraus, dass ein Teamplayer nicht zu allem Ja und Amen sagt, sondern alles daran setzt, dass das Team als Ganzes vorwärts kommt.

Hierzu gehört eine klare Kommunikation mit dem Management und Kollegen. Wer kennt es nicht, dass der Software-Manager oder Product Owner auf einen zukommt und fragt: „Schaffst Du das bis nächste Woche Dienstag?“ und man antwortet: „Ich versuch's.“ In der Regel antwortet man nur so schwammig, weil man sich nicht sicher ist bzw. sich sogar sicher ist, es nicht zu schaffen, aber nicht Nein sagen will. Der Software-Manager oder Product Owner hört aber aus dieser Aussage eher ein „Ja, das ist machbar.“ heraus. Man sollte also grundsätzlich klar ansagen, was möglich ist und was nicht. Und man sollte auch grundsätzlich nichts bloß versuchen. Oder wie Yoda schon sagte: „Tu es oder tu es nicht. Es gibt kein Versuchen.“

Zum Teamwork gehört es aber auch, Hilfe anzubieten, wenn man sieht, dass jemand irgendwo hängt. Ebenso sollte man sich Zeit für Kollegen nehmen, die eine Frage haben. Das muss nicht unbedingt sofort sein, weil man ansonsten ständig in seiner aktuellen Tätigkeit unterbrochen wird, aber fünfzehn Minuten später ist ja auch okay. Auf der anderen Seite sollte man in einem Team auch nicht zögern, um Hilfe zu bitten. Vielen Menschen denken, dass Fragen ein Zeichen von Schwäche ist. Ganz im Gegenteil ist fragen menschlich (um das deutschsprachige Ubuntu-Portal zu zitieren), denn niemand weiß alles. Anstatt einen Woche alleine an einem Problem zu knabbern (und damit den Abgabetermin zu gefährden) ist es sinnvoller, jemanden zu fragen, der die Antwort in zehn Minuten parat hat.

Zeiteinteilung und Stichtage

Zur korrekten Kommunikation mit dem Management zählt laut Martin auch, dass man Aufwände richtig abschätzt. Wie der Ausdruck „Aufwandsabschätzung“ aussagt, handelt es sich dabei um keine definitive Zusage, was allen Beteiligten klar sein sollte. Es kann mal kürzer oder mal länger dauern.

Aus diesem Grund gibt Martin verschiedene Schätztechniken an. So werden zum einen das aus der Agilen Entwicklung bekannte „Planning Poker“ genannt, was auf der Delphi-Methode basiert. Zum anderen wird aber auch PERT erwähnt, was für Program Evaluation and Review Technique steht. Die Besonderheit ist hier, dass man die Schätzung nicht als einfache Zahl angibt, sondern als eine Art Mittel aus Bestfall, Normalfall und schlimmsten Fall. Hiervon berechnet Martin auch noch die Standardabweichung, um so die Abweichung für den Schlechtfall einzukalkulieren.

Damit man seine Aufgaben ordentlich und zeitgemäß erfüllen kann, gehört auch eine Zeiteinteilung. Zeitmanagement ist für einen Entwickler normalerweise sehr wichtig, da er viele Aufgaben „gleichzeitig“ bearbeiten oder zumindest im Kopf halten muss. Darauf wird in einem eigenen Kapitel auch eingegangen, was sich unter anderem dem leidigen Thema der Meetings widmet. Laut Martin ist es okay, ein Meeting frühzeitig zu verlassen (oder erst gar nicht teilzunehmen), wenn man nicht mehr benötigt wird. Vor allem die Aussagen, dass es die Pflicht des Vorgesetzten ist, dem Entwickler Meetings zu ersparen, ist interessant, denn oft sind es genau die Vorgesetzten, die einen zu diesen Meetings „ermuntern wollen“ (um es positiv auszudrücken).

Fazit

Lernt man durch das Buch, ein professioneller Programmierer zu werden? Hier kann man ein ganz deutliches und klares „Vielleicht“ als Antwort geben. Grund für diese ausweichende Antwort ist, dass das Wort Professionalität nicht fest von der Welt definiert ist. Robert C. Martin gibt seine Einschätzung, was er unter Professionalität versteht und wie man diese erreichen kann.

Unter dem Gesichtspunkt kann man zum Buch aber zumindest sagen, dass es wirklich sehr viele hilfreiche Tipps enthält, wie man ein besserer Programmierer werden kann. Angefangen bei der Verantwortung, die man für den Code hat, bis hin zu einer störungsfreien Kommunikation zwischen allen Parteien.

Interessant ist auch, dass Martin das Thema Karriere und Fortbildung in die Hände der Entwickler legt. Sicherlich hat auch eine Firma Interesse daran, seine Entwickler weiter zu auszubilden, um neuen Anforderungen gewachsen zu sein. (Aus einem anderen Buch zwischen zwei Managern: „Was ist denn, wenn wir unsere Leute teuer weiterbilden und sie dann den Job wechseln?“ – „Was ist, wenn wir sie nicht weiterbilden und sie bleiben?“) Aber Martin sieht es als Pflicht eines professionellen Programmierers an, sich auch privat weiterzubilden. Sei es durch kleine Fingerübungen am heimischen PC (am besten in einer Sprache, die man nicht täglich nutzt), bis hin zu Mentorenarbeit oder Hilfe in einem Open-Source-Projekt. (Martin selbst zeigt sich zum Beispiel für das Open-Source-Testing-Framework FitNesse 🇬🇧 verantwortlich.)

Schön ist die klare Gliederung des Buches, deren Kapitel nicht aufeinander aufbauen. So kann man sehr leicht auch nur ein einzelnes Thema durchlesen oder etwas nachlesen, wenn es einen interessiert. Ebenfalls gut sind die Beispiele im Buch, die sehr oft als Gespräch zwischen zwei oder drei Beteiligten dargestellt werden. Nach einem Gespräch analysiert Martin dann, was und wie es gesagt wurde und wo es ggf. zu Problemen bei der Kommunikation kam. Das ist sehr anschaulich und verständlich, da fast jeder schon ähnliche Gespräche gehabt hat.

Eine Besonderheit, die es abschließend noch hervorzuheben gilt ist, dass Robert C. Martin sich gegen den Flow-Zustand ausspricht. Das ist insoweit besonders, da fast alle Programmierbücher propagieren, dass man genau in diesem Zustand bessere Arbeit leistet. Martin ist ein Gegner dieses Flows und versucht alles, nicht dort hineinzukommen bzw. darin zu bleiben, weil man in dem Zustand zwar produktiver ist, aber auch Teile seines Gehirn für rationales Denken ausschaltet und somit eher Fehler macht.

Alles in allem ist „Clean Coder“ ein sehr schönes Buch, das, wenn es einen vielleicht auch nicht gleich professionell werden lässt, zumindest Tipps und Regeln an die Hand gibt, wie man ein besserer Programmierer werden kann.

Buchinformationen
Titel: Clean Coder
Autor: Robert C. Martin
Verlag: mitp-Verlag, 2014
Umfang: 216 Seiten
ISBN: 978-3-8266-9695-4
Preis: 34,99 € (Druck), 29,99 € (EPUB/PDF)