Java 8 vermitteln ist schwierig

Neulich hielt ich den zweiten Vortrag in unserem Team zum Thema Java 8. Im Team bin ich sowas wie der Scout für neue Techniken und Themen. Schon nach der Jax 2014 habe ich einen kurzen Vortrag dazu gehalten. Leider verzögerte sich der Einsatz im Projekt aber, so daß jetzt ein Refresh notwendig erschien.

Das Problem beginnt schon damit, daß die Neuerungen gleichzeitig sehr unscheinbar daherkommen – als die neue Streams-Library – und zugleich aus vielen Kanälen als die große neue Funktionale Programmierung angekündigt werden. Dazu wird der Begriff des Lambdas benutzt, der in anderen Zusammenhängen aber mit ganz anderen Bedeutungen belegt wurde.

Im ersten Vortrag bin ich noch etwas naiv damit umgegangen. Erklärte zunächst, was Lambdas sind. Danach die Bedeutung von Functional Interfaces (also ein Schritt rückwärts, abstrakter). Und zum Schluß die Benutzung der Java Streams Library (also wieder ein Schritt konkreter). Leider führte das dazu, dass die Zuhörer zu Anfang nicht verstanden, wozu Lambdas überhaupt dienen. Beim Schlußteil hatten sie dann nicht mehr im Blickfeld, was Lambdas denn sind. Ganz abgesehen davon, dass die Lazy-Betriebsart der Streams überhaupt nicht offensichtlich ist – der Benutzer sieht einen Methodenaufruf, zum Beispiel „filter“ oder „map“, aber es ist überhaupt nicht offensichtlich, dass diese beim Aufruf gar nicht ausgeführt werden, sondern nur vorbereitet werden.

Letztlich merkt man auch selbst, dass es erhebliche Überlegung (und Tests) kostet, herauszufinden, wie man im Code Lambdas als Argumente eigener Methoden sinnvoll nutzt. Oder auch: welche Grenzen zu beachten sind, zum Beispiel die Grenzen der VM.

Hinzu kommt noch, dass es überhaupt nicht trivial einsichtig ist, dass für die Implemen-tierung der Streams auch Default-Methoden in Interfaces notwendig waren. Oder auch die Optional-Klasse (die man aber auch ganz allgemein nutzbringend anwenden kann).

Im zweiten Vortrag habe ich es wohl etwas besser gemacht. Da habe ich quasi TDD bei der Gestaltung des Vortrags angewendet: ich habe mir klare Ziele überlegt, und auch nur das aufgenommen. Vor allem noch einige Hinweise auf häufige Hype-Begriffe hinzugefügt: Map-Reduce sowie Fold erklärt. Und viele Beispiele aufgenomen. Das war weniger glatt, mehr zum Mitdenken, aber hoffentlich nachhaltiger.

Insgesamt glaube ich, dass sich Java 8 an der Basis nur sehr langsam durchsetzen wird. Auch wenn die veröffentlichte Meinung ganz etwas anderes sagt. Viele der Meinungsführer (auch der vermeintlichen oder selbsternanten) haben offenbar ein sehr anderes Bild der Arbeit mit Java als es m. E. im Alltag ist. Dazu kommt, dass sich die Denkweise der funktionalen Programmierung erst langsam herumspricht.

Ungefragte Fragen (3)

In der losen Reihe Ungefragte Fragen hier der Frageblock des Java-Magazins. Dieses fragt immer wieder wichtige Leute. Eigentlich klar daß ich mich da auch dazwischen mogele, von selber würden die mich nie fragen…

Wie bist Du zur Software-Entwicklung gekommen?

Als EDV Operator wollte ich das nervige System verbessern, das war Mitte der Achtziger Damals lochte ich Tausende Lochkarten, legte Magnetbänder ein und gab Oktalsequenzen ein. Das nervte. In den Nachtschichten las ich daraufhin Kurseinheiten in Informatik der damals noch jungen Fernuniversität, und lernte verstehen was der Apparat machte.

Was ist für Dich der schönste Aspekt in der Software-Entwicklung?

Für Andere ein System zu entwerfen, das sie von Routinearbeiten entlastet, oder ihnen auf andere Weise weiterhilft.

Was ist für Dich ein weniger schöner Aspekt?

Gelegentlich wünschen sich Kunden Dinge, die man schon vor der Realisierung als Fehler erkennt, aber trotzdem umsetzen muss.

Wie und wann bist Du auf Java gestoßen?

Meine ersten Java-Versuche tat ich mit JDK 1.2. Anfang der 90er waren die Java JITs soweit, daß die Performance in C-Reichweite kam. Ab Version 1.4 war dann nicht mehr die Frage „warum Java“ sondern „warum nicht Java“. Wer die Welt vor Java nicht erlebt hat weiß wohl kaum welches Leiden mit Anwendungsentwicklung in C (und auch C++) verbunden war, so entpuppte sich später die Java Library Landschaft und die Frameworks als der größte Vorteil.

Wenn Du für einen Tag König der Java-Welt wärst, was würdest Du verändern?

Es würde wohl viel(en) helfen, wenn man auch die Sprachsyntax sanft modernisieren würde. Außerdem müsste man mehr dafür tun, daß Java in der Webentwicklung auch im Browser besser benutzbar wird, sonst nimmt diese JavaScript-Pest noch mehr Überhand.

Was ist zur Zeit Dein Lieblingsbuch?

Das grad neueste IT-Buch ist Haskell Intensivkurs, es macht sich gut, ich möchte Frege (das neue Haskell für die JVM) testen können. Das beste IT-Buch in diesem Jahr war Functional Programming in Java von Venkat Subramaniam.

Was machst Du in Deinem anderen Leben?

täglich Yoga 🙂 und gelegentlich Boshis häkeln 😉