Code Complete
Ein praxisorientiertes Handbuch zur Software-Herstellung
Steve McConnell
ISBN 1-55615-484-4
Microsoft Press, 1993
Code Complete ist ein Buch mit mehr als achthundert Seiten. Dies dürfte viele Programmierer und die meisten Programmprojektleiter davon abschrecken, es zu lesen. Wer sich dennoch überwindet, diesen Wälzer näher anzuschauen, wird reich belohnt. Der Programmierer in seinen ersten Praxisjahren findet eine Fülle anschaulicher Kodebeispiele und Antworten auf viele seiner Fragen, die anderwärts immer übergangen werden. Der alte Programmierprofi entdeckt mit Vergnügen, dass seine Erfahrungen nicht einzigartig sind. Der Programmprojektleiter findet einen Leitfaden zur Abwicklung von Programmprojekten, welcher ihm viele böse Stunden und viele Kosten sparen kann.
Das Buch beschäftigt sich mit allem was im engeren Zusammenhang mit derjenigen Tätigkeit steht, die wir "Programmieren" nennen. Für alle wichtigen Teile dieses Prozesses sind ausführliche Checklisten abgedruckt, mit denen man die Qualität des jeweiligen Aspekts eigener Programmprojekte messen kann. Das Buch ist voll von guten und schlechten Programmbeispielen welche den Inhalt illustrieren. Schliesslich wird man mit einer Vielfalt von statistisch erhärteten Tatsachen über die Kostenfaktoren verschiedener Entwicklungsmethoden konfrontiert.
Das eigentliche Programmieren (exklusive Spezifikationserstellung einerseits und exklusive Versionenpflege andererseits) ist der einzige Teil eines Softwareprojekts, der mit Sicherheit durchgeführt wird. Vor allem bei kleineren Projekten glaubt man oft, sich die Teile des Projekts sparen zu können (Systemspezifikation, Anforderungsanalyse, Architekturdesign, Feldtest, Kodewartung, Versionenpflege), auf die eigentliche Programmierung kann aber keine Entwicklung verzichten. Diese eigentliche Programmierung, die Programmherstellung, die "Kodekonstruktion" ist das Thema des Handbuchs.
Das Buch geht ein auf die folgenden Aspekte der Programmierung: Design, Daten (Variablen, Strukturen), Steuerung (Kontrollstrukturen), Stil (Layout, Kommentare), Qualität (Reviews, Testen, Debugging), Systemintegration (Tuning) und das Programmierhandwerk (psychologisches, technisches, ökonomisches Umfeld).
Zum Design lernt man etwa, dass die Spezifikationen (und die Kommentare im Programm) immer möglichst problemorientiert und nicht implementationsorientiert sein sollen, denn die Umwandlung der Problemlösung in die Implementation ist ja das Handwerk des Programmierers, welches vom Designer (auch wenn es sich um dieselbe Person handelt) nicht vorweggenommen werden soll. Wenn der Design implementationsorientiert daherkommt, lässt das darauf schliessen, dass die Implementation als Problem empfunden wird.
Das Konzept Modularität wird nicht in leerbuchmässigen Lehrformeln zelebriert, sondern in seiner ganzen Hässlichkeit und Unschärfe behandelt. Der wunderbare Begriff der Kohäsion (zwischen Prozeduren, Moduln, Daten, . . .) wird definiert, um diverse formal modulare Techniken als fundamental nicht-modular zu entlarven. Die Betonung der grundlegenden modularen Strukturierung unabhängig vom Ausmass der Sprachunterstützung beweist, dass Steve McConnell aus der Praxis grösserer Programmprojekte spricht.
McConnell empfiehlt die Mehrprogrammiersprachigkeit als wesentlichen Charakterzug des professionellen Programmierers. Die zahlreichen Kodebeispiele sind abwechslungsweise in Pascal, C, Ada, Fortran und Basic. Bei der Diskussion, wie man Daten und Datenstrukturen optimal einsetzt, widmet er ein ausführliches Kapitel dem leider normalerweise stiefmütterlich behandelten Thema der Namengebung für Typen und Variablen. Dem deutschsprachigen Leser fällt auf, dass dem nicht englischsprachigen Programmierer noch eine weitere Hürde im Weg steht: Der Widerspruch zwischen dem englischsprachigen Programmiersprachgerüst und dem Bedürfnis, selbstbenannt Namen auf Deutsch zu vergeben. Dies ist nicht zu unterschätzen, wenn man mit McConnell die gute Namengebung für einen wichtigen Faktor der Qualität der Software hält.
In Code Complete wird kein einziger aufregender neuer Algorithmus vorgeführt. Dafür schlägt sich der Autor mit konkreten Fragen der Programmorganisation herum: Soll in einer Schleife die Hälfte der Schleife vor der Schleife dupliziert werden, weil man (gemäss strukturierten Grundsätzen) nicht in der Mitte der Schleife abbrechen darf? Wann braucht man for, wann while? Wie vereinfacht man komplexe boolesche Ausdrücke?
Ein weiteres Mauerblümchen der üblichen Programmierbücher ist die Frage der Gestaltung des Kodes und der Kommentare. Steve McConnell gibt diesem Thema den Raum der ihm gebührt und widmet ihm rund hundert Seiten. Die Frage des Managements von grossen Programmprojekten und der Einfluss der Grösse auf den Projektablauf wird ausführlich diskutiert.
Nach dem "Schreiben" des Kodes kommt die Kompilierung und die Überprüfung seiner Korrektheit. In Code Complete wird auf den gewichtigen Einfluss moderner Entwicklungswerkzeuge auf diesen Aspekt der Programmierung eingegangen. Professionelle Techniken der Qualitätssicherung werden ausführlich vorgestellt. Informelle Kodereviews (Lesen des Programms durch 1-2 weitere Mitarbeiter), formalere Inspektionen (Lesen und Besprechen des Kodes in einer Konferenzsituation), Testen auf Modul- und Systemebene und schliesslich die wissenschaftliche Technik des Debugging werden ausführlich beschrieben. Steve McConnell war in den letzten fünf Jahren für Microsoft und andere grosse Softwarefirmen als Programmierer und Berater tätig und berichtet ausführlich über Einsatz und Erfolg dieser Techniken.
Dem traditionellen Tuning widmet McConnell ein Kapitel das voller Warnungen ist: Grundsätzlich darf Verständlichkeit und Klarheit des Kodes nie beim ersten Ansatz der Optimierung geopfert werden. Jegliche Optimierung ist vergebliche Liebesmüh, wenn man sie nicht auf Messungen abstützt. Die Portabilität eines Programms wird beim Tuning geopfert. Wenn man trotz all dieser Warnungen gezwungen ist, den Profiler zu betätigen, erhält man vom Autor einer DES-Implementation (Data Encryption Standard) für den XT wertvolle Tips, was man tun kann und was man lassen soll.
Der abschliessende Teil über das Programmierhandwerk befasst sich mit psychologischen (die Bedeutung von Bescheidenheit, Neugier, Intelligenz, intellektueller Ehrlichkeit, Kommunikationsfähigkeit, Kreativität, Disziplin, Faulheit für die Programmqualität), ideologischen ("Du sollst Religion und Programmierung voneinander scheiden") und ökonomischen (verschiedene Hinweise im Buch, wie man seinen Manager erzieht oder wann es Zeit ist, die Firma zu wechseln) Aspekten des Handwerks. Eine ausführliche Bibliographie mit einer exzellenten Liste der zehn wichtigsten Bücher zum Thema schliessen das Werk ab.
Code Complete ist ein exzellentes Handbuch aus der Perspektive des Praktikers über alle Aspekte der Softwareherstellung, die im allgemeinen nur unvollständig und weniger praktisch in der Informatikausbildung behandelt werden. Steve McConnell betritt mit diesem Buch Neuland, da es kein Vorbild gibt für ein derartiges Handbuch für Programmierer. Die in diesem Buch destillierte Erfahrung mit grossen Softwareprojekten ist von unschätzbarem Wert. Wenn ein Softwareprojektleiter auch nur die in diesem Buch abgedruckten Checklisten kopiert und jeden Aspekt der Programmentwicklung anhand dieser Listen auswertet, wird die Qualität seiner Projekte massiv profitieren.
Steve McConnells Handbuch ist allen Programmierern, Programmprojektleitern und Softwaremanagern wärmstens zu empfehlen.
10.5.94 Hartwig Thomas