Clean C++ – eine Buchbesprechung

Heute möchte ich einen kleinen Umweg von meiner langen Artikelserie zu den C++ Core Guidelines machen. Ich habe in den letzten Tagen das hervorragende Buch "Clean C++" gelesen und kann es mir nicht verkneifen, eine Rezension darüber zu schreiben.

In Pocket speichern vorlesen Druckansicht 9 Kommentare lesen
Lesezeit: 4 Min.
Von
  • Rainer Grimm

Heute möchte ich einen kleinen Umweg von meiner langen Artikelserie zu den C++ Core Guidelines machen. Ich habe in den letzten Tagen das hervorragende Buch "Clean C++" gelesen und kann es mir nicht verkneifen, eine Rezension darüber zu schreiben.

Oft werde ich am Ende meiner Schulungen gefragt: Mit welchen Büchern soll ich mich beschäftigen, um bessere Software zu schreiben? Meine Antwort bestand bisher aus den bekannten Verdächtigen: "Design Pattern: Elements of reusable object-oriented software", "Pattern-Oriented Software Architecture", "Clean Code", "Working effectively with legacy code" und "UML Distilled". Das war aber erst die halbe Antwort: Aus C++-Perspektive sind natürlich die Bücher von Scott Meyers, Herb Sutter und auch die C++ Core Guidelines ein Muss. Summa Summarum macht das mindesten 3000 Seiten an geballtem Wissen.

Bestand, denn in Zukunft wird meine Antwort ganz einfach sein. Lesen sie das Buch "Clean C++" von Stephan Roth. Das Buch ist ideal für die erste Suche in die Breite, für die Suche in die Tiefe werde ich die Klassiker zitieren. Warum?

Der Autor schafft es in seinem englischsprachigen Werk, einen sehr guten, aber nicht zu oberflächlichen Überblick zu den Themen zu liefern, die für gute Software insbesondere in C++ stehen. Dabei setzt er den C++11-Standard voraus, geht aber in vielen Anschauungsbeispielen auf den aktuellen C++17-Standard ein. Was ich besonders an dem Werk schätzte, ist, dass es nicht nur auf die Don't, sondern auch auf die Do's eingeht.

Nun aber der Reihe nach im Schnelldurchlauf. Clean C++ besteht aus neun Kapiteln und einer kurzen Einleitung zu UML. Die ersten beiden Kapitel sind vollkommen programmiersprachenagnostisch. In den Kapiteln zu Unit Testing und den wichtigsten Prinzipen der Softwareentwicklung, wie (Keep It Simple and Stupid (KISS), You Aren't Gonna Need It (YAGNI), Don't Repeat Yourself (DRY) und Principle Of Least Asthonishment (PLA), beschäftigt sich der Autor mit Evergreens, die gute Softwareentwicklung auszeichnen.

Die verbleibenden Kapitel beschreiben zwar weiterhin die Punkte, die für gute Software stehen. Nun aber aus der Perspektive von modernem C++. Diesen neuen Blickwinkel nimmt er in den Basics von Clean C++ ein und beschreibt darin die Schlüsselfaktoren, die es bei der Auswahl von guten Namen, Kommentaren und Funktionen zu beachten gilt. Was hat modernes C++ zu bieten? Genau diese Frage beantwortet Roth in seinem Kapitel "Advanced Concepts of Modern C++". Die Wurzeln von C++ liegen in der Objektorientierung, seine funktionale Ader wird aber mit modernem C++ zunehmend dominanter. Welche Vor- und Nachteile bieten beide Paradigmen? Weitere Fragen, zu den das Buch auf 60 Seiten die Antworten liefert.

Unit-Testing sollte als Grundlage für Test-Driven Development verwendet werden. Genau diesen Fokus nimmt Roth in seinem gleichnamigen Kapitel ein und zeigt in einem ausführlichen Beispiel, wie sich arabische Zahlen in römische Zahlen mithilfe von TDD konvertieren lassen. Abgerundet wird das Buch durch seine pragmatische Sicht auf die wichtigsten Design Pattern und Idiome. Dabei liegt dem Autor ein Design Pattern sehr am Herzen: Dependency Injection. Es ist die Heilung, wenn es darum geht, dass oft sehr kontrovers diskutierte Singleton Pattern als Anti-Pattern aus unseren Codebasen zu entfernen. Zugegeben, er hat Recht.

Was zeichnet nun Clean C++ aus, sodass es für mich die Empfehlung ist, wenn ich nach weiterführender Literatur am Ende meiner Schulungen gefragt werde? Enthalten die zitierten Klassiker und C++-Bücher nicht schon alle wichtige Informationen? Auf jeden Fall! Das Buch "Clean C++" ist aber aus meiner Sicht der erste und einzige pragmatische Einstieg in die Themen rundum gute Softwareentwicklung in modernem C++, das sich in einer Woche gut konsumieren lässt. Ist dieser Einstieg geschafft, bieten sich natürlich Vertiefungen zu allen Aspekten des Buchs an. Diese Vertiefungen können allgemeiner Natur, aber auch C++-spezifisch sein, und werden wohl jeden professionellen Softwareentwickler sein ganzes Leben beschäftigen. ()