Freitag, 6. September 2019

Buchtipps für Informatik-Studierende und -Praktiker

Ich werde immer wieder nach guten Büchern für die Fächer, die ich unterrichte, gefragt und möchte das bevorstehende Wintersemester zum Anlass nehmen, meine ganz persönlichen Favoriten (ohne Anspruch auf Vollständigkeit) hier für alle nachlesbar mit kurzen Kommentaren aufzulisten.

Ich spare mir weitere Vorreden, here we go...

Datenmanagement & Big Data

N. Marz & J. Warren: Big Data: Principles and Best Practices of Scalable Realtime Data Systems, 2015. (bei Amazon; dt. Version)
Niemand, der mit großen Datenmengen in Berühung kommt, wird an diesem Buch und der darin beschriebenen Lambda-Architektur vorbei kommen. Es beschreibt schlicht den Backbone der Big-Data-Verarbeitung im Hadoop-Zeitalter. Durch die mit einem fortlaufenden Beispiel angereicherte Lektüre wird auch schnell klar, wie Hadoop (bzw. Map/Reduce) zum Synonym für Big Data werden und als eierlegende Wollmichsau Verwendung finden konnte. Aber Achtung, die Entwicklung gerade in diesem Bereich schreitet unheimlich schnell voran und nach Lambda kommt Kappa, nach NoSQL nun NewSQL, es bleibt also spannend. Und wer konkrete Hinweise für die Implementierung entsprechender Systeme sucht, dürfte von diesem Buch ebenfalls eher enttäuscht werden.

M. Kleppmann: Designing Data-Intensive Applications, 2017. (bei Amazon; dt. Version)
Leider gibt es bisher wenig gute Literatur im Bereich Big Data, was nicht zuletzt mit den zahlreichen Einflüssen auf dieses Feld und seine schnelle Entwicklung zurückzuführen sein dürfte. Dieses Buch ist sicher ein großer Schritt in die richtige Richtung, bringt es doch zahlreiche Themen aus den Bereichen Datenbanken und verteilte Systeme toll recherchiert zusammen. Leider hinterlässt es bei mir entsprechend ein wenig den Eindruck eines bunten Sammelsuriums und eine konkrete "Bau-Anleitung" für Big-Data-Systeme sucht man trotz des Titels vergeblich. Nichtsdestotrotz ist es gerade für ein vertiefendes Studium ein unverzichtbares Nachschlagewerk.

B. Stopford: Designing Event-Driven Systems, 2018. (freies PDF bei Confluent)
Wer in seinem Informatiker-Leben ebenfalls von der prozeduralen über die objektorientierte in der Welt der Services gelandet ist, wird sich vielleicht fragen, wie heutige Micro-Service-Architekturen und Polyglot Persistences ihre Daten koordinieren (sollen)? Kafka dürfte dafür natürlich eine naheliegende Antwort sein. Das erklärte Ziel von Confluent (der Firma hinter Kafka) ist nichts weniger als Datenbanken neu zu erfinden, indem Daten als Strom von unveränderlichen Ereignissen betrachtet werden. Zusammen mit Kafka Connect und KSQL (über das ich bereits hier geschrieben habe), ist Confluent diesem Ziel sicher einen guten Schritt näher gekommen. Dieses Buch liefert die Grundlagen und auch einige (wenige) Beispiele für diesen Ansatz und ist daher sicher ein guter Einstieg dafür. Etwas mehr Tiefgang wäre allerdings sicher nicht verkehrt gewesen.

A. Kemper & A. Eickler: Datenbanksysteme: Eine Einführung (10. Aufl.), 2015. (bei Amazon)
Datenbankbücher (für relationale Datenbanken) gibt es in etwa so viele wie Datenbanksysteme. Und wie bei den Datenbanken selbst, entscheidet wohl auch hier in erster Linie der persönliche Geschmack. Ich habe mich in meinen Vorlesungen für das Buch des Kollegen Kemper entschieden, unter anderem deshalb, weil es auch frei verfügbare Videoaufzeichnungen zu seinen Vorlesungen gibt. Ansonsten ist alles drin, was man für eine DB-Einführung braucht und noch so einiges mehr. Wie bei fast allen Büchern in diesem Bereich liegt der Fokus sehr stark SQL und auf relationalen Datenbanken, wer einen Überblick über NoSQL-Systeme sucht, sollte sich anderswo umschauen.

Java-Programmierung

C. Ullenboom: Java ist auch eine Insel (14. Auflage), 2019. (bei Amazon oder die 12. Auflage kostenlos im Web
Wenn ein Buch bei Java-Buchempfehlungen nicht fehlen darf, ist es natürlich "die Insel". Das wohl umfangreichste Java-Nachschlagewerk mit vielen Erklärungen und Beispielen auf weit über 1000 Seiten. Und
gerade deshalb vielleicht für Neueinsteiger im wahrsten Sinn des Wortes zu schwere Kost. Lohnt sich aber spätestens ab dem zweiten Jahr des Programmiererlebens.


P. Deitel & H. Deitel: Java How to Program (11th Ed.), 2019. (bei Amazon)
Als ich vor rund 20 Jahren mit der Java-Programmierung begonnen habe, haben mir Deitel & Deitel bereits gute Dienste geleistet, höchste Zeit also, die elfte Auflage dieses Buches genauer unter die Lupe zu nehmen. Auf rund 1200 Seiten finden sich nach wie vor gute und umfangreiche Erklärungen zu Java mit vielen praxisorientierten Anmerkungen. Wer hier allerdings bunte Bildchen und unterhaltsame Erklärungen á la Head First Java
erwartet, wird sicherlich enttäuscht, es ist ein Lehrbuch ohne viel Schnickschnack, doch wer es schafft, es mit Disziplin durchzuarbeiten, wird mit soliden Java-Kenntnissen belohnt. Und wie es sich für eine aktualisierte Auflage gehört, sind alle wichtigen Neuerungen von Java (Lambdas, NIO, JShell, JavaFX...) mit dabei.

Hier finden Sie übrigens mein Cheat-Sheet für die prozeduralen Sprachelemente von Java.


Software Engineering

C. Larman: Applying UML and Patterns, 2004. (bei Amazon; dt. Version)
Aus meiner Sicht ohne Frage DAS Buch, wenn es darum geht, den Einstieg in die objektorientierte Software-Entwicklung zu finden. Wer schon immer wissen wollte, wie die einzelnen UML-Diagramme zusammenhängen bzw. voneinander abgeleitet werden können, ist hier an der richtigen Stelle. Agil, iterativ, kurz das Wesentliche super auf den Punkt gebracht. Besondere Stärken aus meiner Sicht sind die schrittweise Verfeinerung von Anforderungen und ihre Analyse, die Erklärung einer geschichteten Referenzarchitektur sowie das Responsibility-Driven Design.

A. Cockburn: Writing Effective Use Cases, 2000. (bei Amazon; dt. Version)
Use Cases bestehen nur aus diesen kleinen Diagrammen mit den lustigen Stichmännchen? Weit gefehlt, Use Cases bestehen aus Texten, die mit dem Benutzer hart erarbeitet werden müssen. Worauf man dabei achten sollte, damit sie als Startpunkt für eine gute Entwicklung dienen können, erklärt Cockburn in diesem Buch. Insbesondere seine Gedanken zu den "Goals Levels" sind absolut grundlegend und wichtig für jeden, der Software-Anforderungen erheben möchte; egal in welcher Form.

M. Fowler: Patterns of Enterprise Application Architecture, 2002. (bei Amazon)
Das Standardwerk zum Nachschlagen für alles was mit Software-Architektur zu tun hat. Vielleicht mittlerweile etwas in die Jahre gekommen, da hier zahlreiche neuere Trends wie Microservices und Container natürlich noch nicht enthalten sein können. Für den Einsteiger in das Thema Architektur aber definitiv nach wie vor eine Empfehlung.

E. Freeman & E. Robson: Head First Design Patterns, 2004. (bei Amazon; dt. Version)
Das Buch der Gang of Four (GoF) ist zu angestaubt und komplex für einen Einstieg in Design Patterns? Dafür schafft dieses Werk eine tolle Abhilfe und beschreibt modern und anschaulich zahlreiche (wenn auch leider nicht alle) GoF-Patterns. Den aktivierenden Schreibstil mit zahlreichen Übungen sollte man zwar mögen und sich entsprechend Zeit zum Lesen nehmen, wer aber gute Erklärungen zu den Entwurfsmustern sucht, wird an diesem Buch nicht vorbei kommen.

M. Fowler: Refactoring: Improving the Design of Existing Code (2nd ed.), 2018. (bei Amazon)
Was tun wir eigentlich, wenn die agile Entwicklung ein System nach und nach so richtig schön komplex und unübersichtlich gemacht hat? Wenn es anfängt zu stinken (engl.: code smells)? Martin Fowler mit seinem Refactoring-Buch weiß Rat und stellt zahlreiche Möglichkeiten vor, wie Sourcecode systematisch wieder aufgemöbelt werden kann. Gerade für agile Entwickler eine unverzichtbare Lektüre, die die Augen für sauberen Code neu öffnen kann.

R. Martin: Clean Code: A Handbook of Agile Software Craftsmanship, 2008. (bei Amazon; dt. Version)
Besser (als Refactoring) wäre natürlich von Anfang an ein gutes Gefühl für guten Code und die richtige Anwendung der objektorientierten Techniken zu entwickeln. Den Code sozusagen SOLIDe zu machen. Wie das geht, erklärt "Uncle Bob" in seinem Buch. Gerade für (Berufs)Einsteiger eine grundlegend wichtige Lektüre.

S. Ambler: The Object Primer: Agile Model-Driven Development with UML 2.0 (3rd ed.), 2004. (bei Amazon)
Eine schöne Ergänzung zum Buch von Larman, insbesondere, was das Thema UI-Modelling angeht, das bei Larman leider zu kurz kommt. Namensgebend für die Agile-Modelling-Bewegung und sicherlich das Lesen wert. Im direkten Vergleich für ich allerdings "den Larman" vorziehen.


O. Hummel: Aufwandsschätzungen in der Software- und Systementwicklung - kompakt, 2011. (bei Amazon)
Ein klein wenig Eigenwerbung sei an dieser Stelle erlaubt. Wer Aufwandsschätzungen für die Softwareentwicklung erstellen muss, sollte sich dieses Buch unbedingt einmal ansehen. Auch wenn ich leider ebenfalls kein Patentrezept für den Umgang mittel- und langfristigen Schätzungen in einer agilen Umgebung habe, sind doch alle grundlegendenen Schätztechniken in diesem Buch auf den Punkt gebracht. Und es wird vor den gröbsten Missbräuchen bei der Interpretation von Schätzergebnissen eindringlich gewarnt.


Zugegeben, die meisten dieser Werke fallen eher schon in die Kategorie "Klassiker", und gerade deshalb führt aus meiner Sicht für Einsteiger in die objektorientierte Entwicklung kein Weg an ihnen vorbei. Wer hier neuere Empfehlungen haben sollte oder auch weitere Klassiker vermisst, schreibe mir gerne eine Mail.


Verschiedenes

B. Christian & T. Griffiths: Algorithms to Live by - The Computer Science of Human Decisions, 2017. (bei Amazon)
Langsam aber sicher kommen auch Informatik-Themen in populärwissenschaftlichen Büchern an. Ein unterhalsames Buch, das Komplexitäts- oder Entscheidungstheorie vielleicht auch dem ein oder anderen Informatiker noch einmal etwas näher bringt. Wer schon immer einmal wissen wollte, warum es besser ist, seine Socken lieber öfter in kleinen Tranchen, statt seltener in großen Mengen zu waschen, ist hier an der richigen Stelle.


Anm.: diese Seite wird sicherlich immer mal wieder ergänzt und enthält (recht offensichtlich ;-) Werbung in Form von gesponsorten Links zu Amazon.