Buch-Rezension zu "Code Complete 2nd Edition"
"Code Complete - A Practical Handbook of Software Construction (2nd edition)" von Steve McConnell gilt als Standardwerk das man unbedingt gelesen haben muss. Es behandelt alle wichtigen Themen der Softwareentwicklung und gewann zahlreiche Preise.
Nach langem fand ich doch noch die Zeit um dieses Buch zu lesen. Allerdings fragte ich mich sehr bald ob die Empfehlungen auf Amazon vom gleichen "Code Complete" handeln. Entgegen der weit verbreiteten Meinung hatte ich kein praktisches Handbuch vor mir, sondern die ausführlichste Auflistungen von Studien die ich je gesehen habe. Nach zahlreichen weiteren Entdeckungen kann ich von diesem Buch nur abraten.
Solider 1. Eindruck
Liest man das Inhaltsverzeichnis durch sieht man dass alle wesentlichen Teile der Erstellung von Software in diesem Buch behandelt werden. Wie McConnell im Vorwort schreibt geht es ihm um eine ausgewogene Diskussion und nicht um Hype. Dies tönt vielversprechend und durchs ganze Buch hinweg untermauert er seine Aussagen mit Studien.
Die zahlreichen Diagramme helfen einem beim Verstehen der gerade vorgestellten Ideen und die Checklisten sind ein guter Ausgangspunkt um die gewonnenen Erkenntnisse im eigenen Code umzusetzen.
Versucht man allerdings mit dem Buch zu arbeiten bemerkt man schnell die ersten Probleme.
Genauer hingeschaut
Die objektive und ausgewogene Diskussion erreicht McConnell durch das Referenzieren von Studien. Über die ersten Kapitel hinweg erweckt dies einen sehr professionellen Eindruck. Bis man feststellt das McConnell einen Artikel eines gewissen "McConnell, S." zitiert. Einen eigenen Artikel zu zitieren ist ja kein Problem, doch sollte man auf diesen Punkt hinweisen. Dies wäre besonders wichtig wenn es sich um ein eher kontroverses Thema handelt und der eigene Artikel der einzige Text ist der die eigene These stützt.
Richtig interessant wird es aber erst wenn die einzige Studie zu einem Thema unübersehbar falsch ist. Auf Seite 518 werden die Fehlerarten gemäss der Studie von Boris Beizer von 1990 aufgeführt. Es wurde dabei so genau gearbeitet dass die Prozentwerte auf 2 Nachkommastelen genau ausgewiesen werden. Dies obwohl die Studie nur die Resultate anderer Studien kombinierte und deren Werte mehr als 50% voneinander abweichen. Auf all diese Fehler weist McConnell explizit hin. Seine Schlussfolgerung daraus ist, die Werte mögen so nicht stimmen aber die Richtung ist in Ordnung. Er verwendet diese Werte danach um seinen Punkt zu beweisen – allerdings ohne die Nachkommastellen…
Wenn man so mit Studien arbeitet kann man auch gleich darauf verzichten. Dieses Beispiel ist das offensichtlichste, allerdings gibt es noch zahlreiche weitere Stellen wo die Resultate so lange verdreht werden bis der gewünschten Punkt „bewiesen“ ist.
Zu kurz
Obwohl das Buch rund 960 Seiten hat ist es viel zu kurz um die Fülle an Themen auch wirklich zu erklären. Lässt man das Vorwort, den Anhang, die einzelnen Verzeichnisse, die Checklisten und die Zusammenfassungen weg bleiben für jedes der 35 Kapitel nur noch 20 Seiten übrig. Das reicht in der Regel nur um das jeweilige Thema kurz anzuschneiden.
Besonders deutlich wird dies beim Kapitel "Refactoring". Die Gründe für Refactoring werden von McConnell sehr gut dargelegt, gleiches gilt für mögliche Strategien. Wie man allerdings den eigenen Code umbauen soll bleibt unklar. Zu mehr als 2-3 Sätzen pro Refactoring-Technik reicht der Platz in diesem Kapitel nicht. Der Praxisnutzen ist dementsprechend gering und das Vorgehen für Refactorings erschliesst sich nur den Lesern, die den zu vermittelnden Inhalt bereits kennen. Da könnte man das Kapitel eigentlich gleich ganz weg lassen.
Leider ist dieser Platzmangel nicht auf ein Kapitel beschränkt sondern zieht sich durchs ganze Buch.
Wo es gefährlich wird
Der lockere Umgang mit Studien und der zu knappe Platz um ein Thema wirklich zu erklären birgt ein grosses Gefahrenpotential. Dies wird besonders bei den Kapiteln 25 und 26 deutlich, wo das Thema "Code-Tuning" behandelt wird.
Nach einem Hinweis über die Wichtigkeit von Messungen zu Beginn der Optimierung (Baseline) beginnt eine kaum enden wollende Reihe von Mikro-Optimierungen. Ist es schneller eine Schlaufe zum zuweisen der Array-Werte zu verwenden oder sollte man diese einzeln aufschreiben? Soll man bei verschachtelten Schlaufen zuerst über die innere oder über die äussere Schlaufe iterieren? Zu all diesen Fragestellungen gibt es einen Codeschnipsel und eine Tabelle. Je nach Sprache und Problem variiert die Grösse der Einsparmöglichkeiten oder ist sogar negativ. Es fehlt einzig ein Hinweis wie diese Werte zustande kommen.
Erst nach gut 50 Seiten dieser Mikro-Optimierungen erklärt McConnell wie er diese Werte berechnet hat:
[For the first edition] I ran most of the tests in this chapter 10‘000 to 50‘000 times to get meaningful, measurable results. For this edition I had to run most tests 1 million to 100 million times. When you have to run a test 100 million times to get measurable results, you have to ask whether anyone will ever notice the impact in a real program.
Diese Fragestellung hätte McConnell zu Beginn des Kapitels aufwerfen müssen. So allerdings erklärt man den Lesern erst ausführlich wie gross die Unterschiede zwischen den einzelnen Varianten sind obwohl diese in der Realität keine Bedeutung haben. In der Folge davon darf man in unzähligen Projekten grosse Diskussionen über die Reihenfolge von Schlaufen führen. Denn schliesslich hat McConnell ja gezeigt das dieser Ansatz 73% schneller ist...
Alternativen
Wer seine Lesezeit sinnvoller verwenden will sollte sich diese 3 Bücher anschauen:
Lässt man die Anhänge weg sind diese Bücher zusammen auch rund 960 Seiten lang. Allerdings werden hier die jeweiligen Themen praxisnah und verständlich beschrieben.
Fazit
Auf den ersten Blick ist "Code Complete" ein sehr gutes Buch mit zahlreichen interessanten Ideen. Betrachtet man es genauer sieht man sehr bald die vielen Unstimmigkeiten. Aus einer objektiven Darstellung wird so ein zurechtrücken von Studien und durch die vielen angeschnittenen Themen fehlt der Platz um einen wirklichen Praxisnutzen zu vermitteln.
Für Einsteiger ist dieses Buch dadurch nicht geeignet und durch die realitätsfremden Mikro-Optimierungen sogar gefährlich. Und wer sich mit der Thematik bereits auskennt wird kaum etwas Neues finden. Statt "Code Complete" liest man besser die 3 alternativen Bücher, da hat man am Ende auch etwas mit Praxisbezug gelernt.
Zum Buch
"Code Complete - A Practical Handbook of Software Construction (2nd edition)" von Steve McConnell, 2004 Microsoft Press, ISBN 978-0-7356-1967-8, 960 Seiten, Englisch