Joshua Bloch: Das Gewissen der Java-Plattform
„Die Programmiersprache Java hat ihr Komplexitätsbudget mit den Änderungen in Version 5.0 aufgebraucht.“ Es ist ein erstaunlicher Satz, vor allem wegen der Person, die ihn gesagt hat. Joshua Bloch verbrachte Jahre bei Sun Microsystems damit, die fraglichen Erweiterungen zu entwerfen, und die JDK 5.0-Version, die er mitgestaltete, war die ehrgeizigste Erweiterung, die die Sprache je hatte. Dann sagte er der Welt, dass es genug sei. Dieser Instinkt – ein System zu überwachen, das er persönlich erweitert hatte, und in Budgets statt in Funktionen zu denken – ist sein ganzes Wesen in einer Zeile.
Southampton, Columbia, Pittsburgh
Bloch wurde am 28. August 1961 in Southampton, New York, geboren. Er erwarb einen Bachelor-Abschluss in Informatik an der School of Engineering and Applied Science der Columbia University und ging dann für eine Promotion, die er 1990 abschloss, an die Carnegie Mellon. Seine Dissertation, „A Practical Approach to Replication of Abstract Data Objects“, wurde für den ACM Distinguished Doctoral Dissertation Award nominiert.
Der Titel ist es wert, zweimal gelesen zu werden. Selbst als Doktorand war das operative Wort in Blochs Arbeit praktisch. Er griff die Replikation nicht als theoretisches Problem in verteilten Systemen an; er suchte nach einer Version, die Ingenieure tatsächlich gegen abstrakte Datenobjekte einsetzen konnten. Er hat den Rest seiner Karriere in dieser schmalen, unmodischen Lücke zwischen dem, was nachweislich korrekt ist, und dem, was ein arbeitender Programmierer sicher verwenden kann, verbracht.
Sun und das Collections Framework
Nach einer Zeit bei Transarc als leitender Systemdesigner kam Bloch zu Sun Microsystems, wo er Distinguished Engineer wurde und das Design und die Implementierung mehrerer Teile leitete, die Java erkennbar zu Java machen. Das Java Collections Framework ist das größte davon: die Menge an Schnittstellen und Implementierungen – Listen, Mengen, Maps und die Algorithmen, die auf ihnen operieren –, auf denen seitdem jedes Java-Programm aufgebaut ist. Er leitete auch das java.math-Paket und den Assert-Mechanismus der Sprache und trieb wichtige Verbesserungen in JDK 5.0 voran.
Dies ist eine eigentümliche Art der Autorschaft. Eine Collections-Bibliothek ist keine Anwendung; sie ist ein Vokabular. Millionen von Programmierern, die noch nie von Blochs Namen gehört haben, verbringen ihr Arbeitsleben innerhalb der Substantive und Verben, die er gewählt hat, und die Form ihres Denkens wird durch die Form seiner Schnittstellen eingeschränkt. Es falsch zu machen, hätte kein schlechtes Programm hervorgebracht; es hätte eine schlechte Sprache zum Schreiben von Programmen hervorgebracht, dauerhaft.
Zwanzig Fragen, acht Minuten auf der Uhr und ein Perzentil, gemessen an allen bisherigen Teilnehmern. Ohne Anmeldung.
IQ-Test starten →Effective Java
Im Jahr 2001 veröffentlichte er Effective Java, und es tat etwas, was Bücher über Programmiersprachen selten tun: Es wurde zur moralischen Autorität für eine Gemeinschaft. Strukturiert als eine nummerierte Reihe unabhängiger Punkte, von denen jeder eine Regel aufstellt und dann aus realen Fehlermodi argumentiert, gewann es 2001 den Jolt Award. Die zweite Ausgabe im Jahr 2008 wuchs von siebenundfünfzig auf achtundsiebzig Punkte, ohne schwerer zu lesen zu sein; eine dritte erschien 2017.
Er schrieb zwei weitere Bücher mit Mitarbeitern. Java Puzzlers mit Neal Gafter aus dem Jahr 2005 ist eine Anthologie der Fallen der Sprache – Code, der sich laut Spezifikation korrekt und laut Intuition wahnsinnig verhält –, präsentiert als Diagnoseübung. Java Concurrency in Practice aus dem Jahr 2006 wurde mit fünf Mitarbeitern, darunter Doug Lea, geschrieben und wurde zum Standardreferenzwerk für das Schwierigste, was die Plattform von ihren Benutzern verlangt.
Google und API-Design
Bloch war von Juni 2004 bis August 2012 Googles leitender Java-Architekt. Dort kristallisierte sich seine zentrale Sorge zu einem öffentlichen Argument heraus. Sein Konferenzpapier von 2006, „How to design a good API and why it matters“, behandelt das Schnittstellendesign als eine Disziplin mit Einsätzen statt als eine Frage des Geschmacks, mit der Begründung, dass eine API ein Vertrag ist, den man nicht neu verhandeln kann. Er beschrieb die Frustration konkret: Bei Google konnte er keine alternativen Implementierungen für bestimmte Klassen bereitstellen, weil sie als konkrete Typen statt als Schnittstellen deklariert worden waren – eine Entscheidung, die Jahre zuvor von jemand anderem getroffen wurde, was, wie er es ausdrückte, die Art von Einschränkung ist, die „normale Entwickler jeden Tag spüren“.
Sein Rat hat einen beständigen Geschmack: Bescheidenheit gegenüber dem eigenen Urteil. Wiederhole dich nicht; greife auf eine etablierte Bibliothek zurück, insbesondere für Nebenläufigkeit, anstatt deine eigene zu schreiben. Misstraue dem Gefühl, dass allgemeine Warnungen vor vorzeitiger Optimierung nicht für andere gelten – „es ist leicht zu fühlen, dass die allgemeinen Warnungen vor vorzeitiger Optimierung nicht auf dich zutreffen, weil du einfach weißt, welcher Code zeitkritisch ist.“ Und lies The Elements of Style, denn „gutes Programmieren und gutes Schreiben haben beide mit Klarheit und Ökonomie des Ausdrucks zu tun.“
Warum Joshua ein Genie genannt wird
Die fragliche Fähigkeit ist nicht rohe Erfindung, sondern etwas Selteneres: die Fähigkeit, ein Stück Software aus der Position des Fremden zu sehen, der es benutzen muss, und für die wahrscheinlichen Fehler dieses Fremden zu entwerfen, statt für die eigene Kompetenz. Eine API ist in Blochs Rahmen eine Sprache, die Menschen aufgezwungen wird, die nie zugestimmt haben und sie nicht ändern können, was das Entwerfen zu einer Übung in der Vorwegnahme von Missbrauch im großen Maßstab macht, Jahrzehnte im Voraus. Das Collections Framework ist der Beweis: ein Vokabular, das von einem riesigen Teil aller arbeitenden Programmierer verwendet wird, korrekt genug, um weitgehend unverändert überlebt zu haben. Das zweite Stück ist die Kodifizierung: Effective Java nahm stillschweigendes Fachwissen, das zuvor nur in den Köpfen einiger weniger Plattformingenieure lebte, und verwandelte es in übertragbare, argumentierbare Regeln.
Das Gegenargument verdient es, genannt zu werden. Bloch produzierte keine neue Informatik. Seine Dissertation wurde für einen Preis für herausragende Dissertationen nominiert, erhielt ihn aber nicht; sein bekanntestes Werk ist ein Buch über Best Practices, das eher Kuratierung und Urteilsvermögen als Entdeckung ist. Die aufgezeichneten Ehrungen sind ein Verlagspreis und eine Zeitschriftenliste, nicht die großen Forschungspreise des Fachgebiets, und keine hier konsultierte Quelle berichtet, dass ihn jemand ein Genie nennt. Das Collections Framework war eine große Teamleistung, die er leitete, keine Solokomposition. Das faire Urteil ist, dass Bloch ein herausragender Praktiker und Lehrer für technisches Urteilsvermögen ist – eine Disziplin, die in der Software mehr zählt als Neuheit und viel weniger Anerkennung erhält.
Vermächtnis
Er prägte die Sprache nach seinem Ausscheiden bei Sun weiter und schlug gemeinsam Blöcke für automatisches Ressourcenmanagement und prägnante Instanzerzeugungsausdrücke als Ansätze für Closures vor; ARM-Blöcke schafften es in JDK 7. Im Dezember 2004 nannte ihn das Java Developer's Journal unter den vierzig wichtigsten Software-Persönlichkeiten der Welt. Er ist seitdem an die Carnegie Mellon zurückgekehrt, wo er Professor für Praxis im Department of Software and Societal Systems ist – ein Titel, der sich wie eine Zusammenfassung seiner Karriere liest, da die Praxis immer der Punkt war.
Das Maß der Arbeit ist, dass ihr Einfluss nicht zugeschrieben wird. Irgendwo heute wird ein Programmierer, der noch nie eine Zeile von Blochs Prosa gelesen hat, nach einer Schnittstelle statt nach einer konkreten Klasse greifen oder sich weigern, ein Nebenläufigkeits-Primitiv selbst zu schreiben, weil ein Kollege ihm einmal sagte, er solle es nicht tun, nachdem er es in einem nummerierten Punkt in einem Buch gelesen hatte.
