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.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s