Buch-Rezension zu „Java by Comparison“

Java by Comparison“ von Simon Harrer, Jörg Lenhard und Linus Dietz erschien 2018 bei The Pragmatic Programmers. Dieses Buch wagt sich an eine grosse Herausforderung: Wie kann man das über Jahre angeeignete Expertenwissen in einfacher Form Programmier-Anfängern zugänglich machen?

Die Autoren nutzen dazu 70 Beispiele, in denen ein funktionierender erster Wurf einer wartbaren und durchdachten Lösung gegenübergestellt wird. Die Unterschiede lassen sich ohne grossen Aufwand direkt erkennen. In der Druckversion ist die Ausgangslage jeweils auf der linken Seite beschrieben und das Resultat sowie die Verbesserungen befinden sich auf der rechten Seite – dadurch hat man immer beides im Blick.

Kleiner Tipp: Bei der PDF-Version empfiehlt es sich in Adobe Acrobat die Option „Deckblatt in Zweiseitenansicht einblenden“ unter dem Reiter Anzeige / Seitenanzeige auszuwählen. Schaut man sich dann 2 Seiten an hat man die gleiche Darstellung wie im Buch.

[Hinweis: Ich habe dieses Buch als Rezensionsexemplar von den Autoren erhalten. Wie immer, wenn ich über Bücher blogge, schreibe ich was mir daran gefällt und was nicht. Dies mache ich unabhängig davon ob ich ein Rezensionsexemplar bekomme oder das Buch selber kaufe.]

Aufräumen

Das Buch beginnt mit dem für Entwickler wohl langweiligsten Teil: den eigenen Code aufzuräumen. Die gezeigten Beispiele sind aber mehr als mühsames Pflichtprogramm. Hier geht es um die Vereinfachung von Ausdrücken, der Verhinderung von Negierung und der Verdeutlichung der eigentlichen Aufgabe. Alles Themen die gerne übersehen werden, obwohl nur damit überhaupt Code verständlich geschrieben werden kann. Gerade Kleinigkeiten wie fehlende {} bei mehreren IF Blöcken führen auch bei bekannten Softwarefirmen immer wieder zu peinlichen Sicherheitslücken. Hier gut aufzupassen lohnt sich!

Zurückhaltend Kommentieren

Bei der Kommentierung von Code scheint es nur 2 Lager zu geben: Diejenigen, die gar nichts kommentieren und diejenigen, die sogar die Klammern-Paare mit einem Kommentar versehen. Beides ist problematisch und stört in der Wartung enorm. Die Autoren haben im Kapitel 3 sehr viele gute Beispiele gefunden und zeigen wie man kommentieren sollte: zurückhaltend, auf das Wesentliche beschränkt und dabei begründen wieso man etwas so gelöst hat. Die Erklärung zum Wie? kann man sich sparen – dafür hat man ja den Code.

Fehlerbehandlung nicht vergessen

Fehler passieren allen Entwicklern. Wichtig ist das der Code damit umgehen kann oder schnell und mit einer klaren Fehlermeldung die Verarbeitung abbricht. Nur so verhindert man Folgefehler und endlose Debugging-Sitzungen. Die Verwendung von passenden Exceptions und die entsprechende Behandlung ebendieser kann einem viel Arbeit abnehmen. Auch hierzu liefern die Autoren sehr passende Beispiele, die man direkt anwenden kann.

Automatisiertes Testen ist unverzichtbar

Ein ganzes Kapitel wird dem automatisierten Testen gewidmet. Die Autoren beschränken sich im Buch auf Unit-Tests und wie man diese mit einfachen Mitteln verbessern kann. Die kleinen Fehler wie das Vertauschen der erwarteten Werte mit den effektiven wird hier ebenso behandelt wie die Notwendigkeit eine Toleranz anzugeben, wenn man Gleitkommazahlen vergleicht. Dies sind für erfahrene Programmierer mühsam erlernte Erkenntnisse, die man dank diesem Buch deutlich schneller und ohne schmerzhafte Erfahrungen lernen kann. Das Kapitel schliesst mit der Verdeutlichung der Wichtigkeit guter Namen und der Eigenständigkeit der einzelnen Tests. Beherzt man diese Hinweise wird der eigene Code deutlich robuster und wartungsfreundlicher.

Eine Erwähnung der Testpyramide und weiteren Testarten habe ich in diesem Kapitel leider vergebens gesucht. Dafür ist die Erklärung mit JUnit sehr ausführlich und gibt den Lesern eine gute Basis für weitere Erkundungen im Bereich der Testautomatisierung.

Gute Hinweise für die eigene Umsetzung

Als Schlusskapitel geben einem die Autoren etliche gute Hinweise auf den Weg. Ein solcher Tipp ist die Verwendung einer statischen Codeanalyse. Dies ist ein Thema, das für viele Anfängern wohl völlig unbekannt sein dürfte. Das Buch nennt zahlreiche Werkzeuge, kann aus Platzmangel jedoch kein konkretes Beispiel liefern. Die Automatisierung des Build-Prozesses inklusive Continuous Integration und der Wichtigkeit guter Logmeldungen werden ebenfalls behandelt. Zwar nur im Schnelldurchgang, doch hat man so wenigstens einmal die Begriffe gehört und kann auf eigene Faust weitersuchen.

Auch für .Net Entwickler

Fast alle Beispiele im Buch sind auch für .Net Entwickler von Nutzen. Meistens lassen sich diese 1:1 übertragen. Wo dies nicht geht ist die vergleichbare Methode des .Net Framework schnell gefunden (z.B. String.IsNullOrEmpty()).

Mein Fazit

Die Strukturierung und die Umsetzung der Wissensvermittlung für Programmier-Anfänger hat mir sehr gefallen. Die Themen stammen allesamt aus der Praxis und mussten bisher mühsam erlernt werden. Dieses Buch kürzt den Weg deutlich ab und erlaubt den Lesern sehr schnell die wichtigen Unterschiede zwischen funktionierendem und wartbarem Code zu erkennen.

Mit rund 200 Seiten bleibt auch kein Platz für Wiederholungen und Worthülsen. Damit setzt sich dieses Buch wohlwollend von der Masse anderer Programmierbücher ab. Ich kann jedem Java und C# Entwickler dieses Buch voll empfehlen – auch (oder gerade) wenn die Entwickler bereits einiges an Erfahrung gesammelt haben.

Zum Buch

Java by Comparison“ von Simon Harrer, Jörg Lenhard und Linus Dietz, 2018 The Pragmatic Programmers, ISBN: 978-1-68050-287-9, 206 Seiten, Englisch

Werbeanzeigen