Extreme Java Camp: Was ist nach so vielen Jahren eigentlich noch interessant an Java?
Heinz Kabutz: Die Fehler sind dieselben wie vor 20 Jahren. Java ist ganz groß mit Backwards Compatibility, und selbst die Fehler, die sie in Java 1 verbrochen haben sind – nicht alle, aber zum Teil – noch drin in Java 11 und 12, und die nehmen die auch nicht weg. Wenn die einmal einen Fehler eingebaut haben, dann sind alle ganz vorsichtig, die Fehler wieder wegzunehmen, weil das dann ein Teil vom Feature ist. Es ist also kein Fehler, sondern ein Feature geworden.
Extreme Java Camp: Du unterrichtest und coachst nur wieder neue Java-Entwicklergenerationen, die dann mit den gleichen Problemen zu kämpfen haben?
Heinz Kabutz: Genau (lacht). Also in meinem Newsletter schreibe ich viel über verschiedene Ecken, die nicht richtig oder merkwürdig funktionieren. Viele Newsletter, die ich vor 20 Jahren geschrieben habe, sind immer noch aktuell, denn es hat sich eben nichts geändert. Manchmal verändert es sich auch auf eine komische Art und Weise. Wenn du zum Beispiel mit einer HashMap arbeitest, kannst du erwarten, dass es zwischen Java 7 und Java 8 dreimal langsamer wird. Denn innerhalb der HashMap gibt es eine Funktion, die deinen Hashcode umwandelt in eine andere Nummer – und die wurde verschlechtert von Java 7 nach Java 8. Ich habe händeringend versucht zu überzeugen, das zu ändern, dass es wieder gleich schnell wird wie früher, aber ich konnte sie nicht überzeugen.
Extreme Java Camp: Und wie sieht es heute aus? In Java 10, 11, 12?
Heinz Kabutz: Es ist immer noch gleich langsam wie in Java 8. Sogar noch langsamer.
Extreme Java Camp: Wenn wir über so große Zeiträume sprechen: Hast du Beobachtungen gemacht, wie unterschiedliche Java-Developer-Generationen mit dem Problemen umgehen? Ich selbst habe ja auch als Beobachter die Community ähnlich lang begleitet, und natürlich gab es eine Zeit, in der es JDK 1.1 und 1.2 gab, und irgendwann kamen Servlets und irgendwann kam dann JSP und so weiter. Wir alle haben dieses unglaublich große und reichhaltige System wachsen gesehen und haben seine Genese miterlebt. Heutzutage kommst du in die Java Welt und – knick knack – machst du Spring Boot. Was unterscheidet die Java-Generationen in deiner Wahrnehmung?
Heinz Kabutz: Auf meinen Schulungen habe ich eine ziemliche Variation von Leuten. Ich habe die, die wirklich nur mit Spring Boot arbeiten, und dann die, die hardcore wissen, was alles läuft. Die Leute, die sich nicht so auskennen damit, wie Sachen funktionieren, die verstehen oft nicht, warum manche Sachen nicht funktionieren. Die sehen einfach nicht das Problem und weshalb wir die Sachen machen. Ich denke, die Leute, die eine tiefere Kenntnis haben, haben einen Riesenvorteil gegenüber den anderen. Es ist genauso wie wenn man etwas von Hardware versteht – z. B., wie groß ist mein Level-1-Cache, mein L2-, L3-Cache, das ist alles sehr wichtig. Wenn man das alles nicht weiß, dann wundert man sich auf einmal, warum das Programm zehnmal langsamer wird, einfach weil es im L3-Cache drin ist, und da nicht mehr reinpasst. Wenn man solche Sachen nicht versteht und nicht kennt, hat man da einen großen Nachteil gegenüber den anderen.
Extreme Java Camp: Aber von Anfang an war doch eigentlich die grundlegende Idee von Java, den Level of Attraction hochzusetzen, zum Beispiel mit Garbage Collection. Etwa um zu sagen: „Hey Java-Developer, kümmere dich um die Businessprobleme und weniger um die technischen Probleme.“ Kann man sagen, das ist einerseits ein Komfortfeature für die Entwicklung, und andererseits verleitet es die Leute auch dazu, zu sagen, ich kümmere mich nicht um den Rest, der darunter liegt?
Heinz Kabutz: Das stimmt und das gibt uns viel Arbeit als Consultants. Als Berater ist das fantastisch, du kommst in eine Firma rein und alle haben programmiert und du kannst das supereinfach schneller machen, also es ist sehr gut für uns. (lacht)
Extreme Java Camp: Zwanzig Jahre Java oder mehr, wir sind ja, glaube ich, schon im Jahr 22 oder 23. Seitdem hat sich natürlich viel verändert, kaum eine Programmiersprache hat sich auf dem Markt so konstant gehalten, Java ist viel geprügelt und kritisiert worden, hat aber gleichzeitig eine irrsinnig große Verbreitung, ein irrsinnig vitales Ökosystem. Die Sprache selbst – hat sie aus deiner Sicht immer mitgehalten mit der Entwicklung der Zeit, oder ist sie irgendwann mal ein Stück weit aus der Zeit rausgefallen?
Heinz Kabutz: Nein, nein. Sie hat auf keinen Fall mitgehalten, da sind viele Sachen, die wir schon lange hätten haben sollen, die einfach nicht da sind. Das sehen wir zum Beispiel beim Machine Learning, dass man nicht einfach auf der GP arbeiten kann, dass einfach zu viel verschwendeter Platz dort rumliegt. Aber das, was wir bei Java haben, ist eben, dass es sehr konstant ist. Das heißt ein Programm, das du in Java 1.0 geschrieben hast, das funktioniert noch immer in Java 12, ohne das neu zu übersetzen, neu zu kompilieren. Der Code läuft noch immer, auch wenn sich fast alles geändert hat, läuft der Code fast immer auf der neuen Version. Auch als sie die Generics eingebaut haben, als sie Java 8 Streams eingebaut haben, haben sie versucht, das so zu machen, dass sie den alten Code dabei nicht kaputt bekommen, dass noch alles funktioniert. Selbst mit Java 9 Modules haben sie das versucht, sodass du die Wahl hast als Programmierer, entweder den Module Path oder den Classpath zu nehmen. Die einzigen, die da stöhnen, sind die, die Tools bauen, also die Maven-Leute, die haben da richtig Probleme gehabt. jQuery und solche Produkte, denen fiel das schwer, weil sie eben beides unterstützen müssen. Aber für die Anwender und Nutzer ist das kein Problem.
Extreme Java Camp: Und siehst du das langfristig als Vorteil oder auch als ein Problem, dass vielleicht die Community zu wenig nach vorne gepusht wird?
Heinz Kabutz: Es ist beides. Der Vorteil ist, dass wenn du ein Programm hast, das funktioniert, dann weißt du, das wird auch in Zukunft funktionieren. Es wird nicht auf einmal alles kaputtgehen. Das ist ein Nachteil, den Scala hatte, dass die ab und zu mal die Backwards Compatibility kaputtgemacht haben, und du musstest eben alles neu besetzen und es hat alles nicht mehr funktioniert. Das hast du bei Java nicht so als großes Problem. Ich meine, es passiert bei Java auch, dass du zwischen Java-Versionen Änderungen hast, aber nicht so stark. Jetzt wurden eben in Java viele Features von Scala übernommen, und Scala ist jetzt nicht mehr so interessant für viele von denen, die das früher unbedingt machen wollten.
Extreme Java Camp: Jetzt ist Kotlin das heiße Ding, als Sprache auf der JVM.
Heinz Kabutz: Das ist eine coole Sprache. Und der Vorteil ist, du hast eben all die Stärken von Java, von der Virtuellen Maschine, vom starken Garbage Collector, hast sogar zig verschiedene Garbage Collectors, z. B. Shenandoah ist jetzt bei Java 12 dabei und der G1 ist noch besser geworden. Du hast viel Auswahl an Garbage Collectors. Du hast all diese Vorteile mit Kotlin, und was interessant daran ist, die müssen natürlich auch mithalten. Zurzeit ist es nämlich so, dass wenn du Kotlin übersetzt, dann kommt Java-8-Bytecode raus. Aber der Java-9-Bytecode ist besser. Das heißt, du bekommst nicht die Vorteile, die du mit Java 9 Strings bekommst, wenn du Kotlin in den Java-Bytecode übersetzt. Aber das kommt bestimmt bald, irgendwann wird das neu gemacht. Und das ist auch so etwas, wenn du Kotlin übersetzt, dann ist der Bytecode, der rauskommt, ein bisschen anders als der, der vom Java-Code übersetzt wird. Die machen zum Beispiel automatisch cURLs und allgemein prüfen die alles für dich, aber das sind eben extra Bytecodes, die in die Klasse reinkommen, und der Hotspot Profiler sucht nach bestimmten Mustern, und die sind bei Kotlin und Java unterschiedlich – und bei Java optimiert er besser.
Extreme Java Camp: Also wenn mir etwas am Ressourcenverbrauch liegt und wenn mir Speed und Performance wichtig sind, dann bin ich mit der klassischen Java Language deutlich näher am Just-in-Time-Compiler dran.
Heinz Kabutz: Ja, genau. Du hast eine bessere Chance mit dem Standard-Java-Code, wo du selbst bestimmen kannst, wie groß deine generierte Methode am Ende ist. Die Methodengröße ist hier sehr wichtig. Wenn du zu viele Bytecodes in der Methode hast – also nicht die Anzahl der Zeilen. Zum Beispiel kann ich eine Methode mit fünf Zeilen schreiben, die generiert 300 Bytecodes, in Kotlin oder Java 8. Aber wenn ich es woanders schreibe, dann ist es weniger. Auf Java 9 würden es nur 150 Bytecodes sein. Eben diese Vorteile, die du auf der Virtual Machine hast, die bekommst du nicht sofort, wenn du zwischendurch eine Abstraktion wie Kotlin verwendest. Irgendwann wird das kommen, ich bin ein großer Fan von Kotlin, ich denke, es macht uns produktiver als Programmierer. Aber für sehr performanten Code, für Library-Code würde ich es nicht benutzen. Ich würde es benutzen für Applikationscode.
Extreme Java Camp: Last but not least, du trainierst die Leute jetzt sogar auch beim Thema Gesundheit, du hast die Push-up Competition ausgerufen – erzähl mal, was treibt dich um und wie reagieren die Leute drauf?
Heinz Kabutz: Ich habe letztes Jahr angefangen, vierzig Tage jeden Tag laufen zu gehen. Es war eine Challenge, und ziemlich viele Leute haben dabei mitgemacht. Du musstest mit Hilfe von GPS beweisen, dass du es auch wirklich gemacht hast. Einige Leute haben auch geschummelt, das habe ich dann rausgefunden und habe die rausgeworfen aus der Competition. Ich persönlich gehe jeden Tag laufen, mindestens eine Meile. Ich weiß, ich sehe nicht so aus, aber wenn ich das nicht machen würde, dann würde ich noch schlimmer aussehen als jetzt. Also das hat schon Vorteile. Ich denke, wenn wir uns als Programmierer hinsetzen und programmieren, konzentrieren wir uns so stark auf unsere Arbeit, dass wir alles um uns herum vergessen. Ich höre niemanden mehr, meine Frau kann mich rufen, aber ich höre sie nicht. Meine Kinder können spielen, aber ich denke nur über das Problem nach. Dann kann es passieren, dass ich so fünf Stunden später sage ….
Extreme Java Camp: … völlig dehydriert, schlechte Körperhaltung …
Heinz Kabutz: Ja, genau. Mein Ring sagt mir dann, ich muss mich bewegen, meine Uhr sagt mir, ich muss mich bewegen. Als Programmierer sitzen wir eben zu viel und wir bewegen uns nicht genug. Wir schlafen auch nicht genug und trinken zu viel Kaffee. Letztes Jahr habe ich dann gesagt: Jetzt mach ich mal eine Push-up Competition und die war ziemlich gemein. Der erste Monat war noch relativ einfach, 1 000 Push-ups in einem Monat, das sind ungefähr 30 pro Tag; das haben schon ein paar Hundert geschafft, ca. 400. Wenn du ein paar Tage Pause machst, dann musst du mehr machen. Der zweite Monat war dann 2 000, das war schon ein bisschen schwieriger, da sind schon mehr Leute rausgefallen aus der Challenge. Im dritten Monat dann 3 000, im vierten Monat, im Januar, 4 000 und im Februar, also im kürzesten Monat, waren es 5 000. Das war richtig fies, und ich war am Anfang des Monats auch krank, ich konnte also kein Push-ups machen. Ich habe dann an einem Tag 1 000 Push-ups gemacht, um aufzuholen. Das Feedback von vielen Leuten für die Challenge war phänomenal. Einer, der mitgemacht hat, wird jetzt 69 und der hat auch die 5 000 Push-ups im Februar geschafft und dadurch, dass er seinen Körper jetzt stärker gemacht hat konnte er besser laufen und rennen und hat es geschafft, beim Boston Marathon mitzulaufen. Insgesamt habe ich sehr gutes Feedback bekommen und es ist einfach gut für die Gesundheit.