Was von der JAX 2014 in Erinnerung blieb

Sascha Iseli

Bereits sieben Wochen sind seit der JAX in Mainz vergangen. Vieles ist verblasst, nicht aber drei äusserst interessante Sessions. Sascha Iseli fasst diese für uns kurz zusammen.

Scala, Metriken, Java 8. Mit diesen Themen befassten sich die wohl interessantesten Sessions an der diesjährigen JAX. Bis heute sind die Sessions – neben den Diskussionen mit Entwicklern aus ganz Europa – in Erinnerung geblieben.

Sieben gute Gründe, sich Scala einmal genauer anzuschauen

Der Saal ist bis auf den letzten Platz ausgebucht, dies obwohl der Scala-Hype bereits am Abklingen ist. Heiko Seeberger macht dem Scala-Newbie die Sprache schmackhaft und das gelingt ihm bestens. Die Maxime heisst bei Scala “Reduce to the max”. Mit weniger Code daselbe erreichen. Ein bestechender Vorteil. Was mit Java auf 20 Zeilen implementiert wird, kann in Scala locker in deren fünf oder gar weniger umgesetzt werden. Die Lesbarkeit sowie das Verständnis bleibt definitiv nicht auf der Strecke. Boilerplate-Code wie Getters und Setters gehören in Scala der Vergangenheit an.

Ein weiterer interessanter Punkt sind die Traits. Grundsätzlich ist auch in Scala eine Mehrfachvererbung nicht möglich. Scala Klassen können allerdings mehrere Traits erweitern. Traits sind eigentlich Interfaces mit konkreten Implementierungen. Dieser Mechanismus nennt sich “Mixin”. Traits fördern das Konzept “Separation of concers”. So wird Code wirklich nach Fachlichkeit geschnitten und kann sinnvoll wiederverwendet und getestet werden.

Wie fälsche ich Metriken

Metriken sind vor allem bei Manager und Projektleiter ein viel verwendetes Instrument um die Leistungen und Qualität ihrer Entwickler zu messen. Jörg Bächtiger zeigt uns in seinem Vortrag nicht, wie Metriken effizient gefälscht werden, viel mehr zeigt er auf, wie anfällig Metriken für Missverständnisse sind und wie sie falsche Anreize schaffen können.

Ein ganz einfaches Beispiel ist die Vorgabe, dass die Testabdeckung mindestens X% sein muss. Dies kann schlicht und einfach dazu führen, dass Entwickler Unit Tests schreiben, die den produktiven Code zwar durchlaufen, aber keineswegs sinnvolle Asserts machen. Dies führt dazu, dass der Code zwar die erreichte Coverage hat, aber die Qualität deutlich in den Keller gesunken ist. Bei einem künftigen Refactoring – und das kommt sicherlich – muss sich der Entwickler auf die Unit-Tests verlassen können.

Dieses Verhalten ist unter dem Hawthorne Effekt bekannt. Sobald eine Gruppe Individuen (Entwickler) unter Beobachtung stehen (Manager verlangen 75% Testabdeckung), ändern diese ihr natürliches Verhalten (unsinnige Tests werden nur der Testabdeckung wegen geschrieben).

Neue Sprachmittel in Java 8

Eine wirklich gelungene und interessante Präsentation: Angelika Langer präsentiert in etwas mehr als einer Stunde die wichtigsten Neuerungen von Java 8. Hier nur ein kurzer Blick auf die wohl gravierenste Erweiterung seit Generics mit Java 5, den Lambdas:

Mit Lambda-Expressions kann funktional programmiert werden. Bereits vor Java 8 war es möglich, funktionale Sprachen auf der JVM zu verwenden. Die populärste davon ist wohl Scala. Daher ist es nur naheliegend, dass Oracle und die Community darauf drängten, dieses Feature direkt in Java 8 einzubauen.

Der folgende Ausdruck ist eine typische Lambda-Expression:

Lambda

Der obige Ausdruck ist ein einfacher Lambda Ausdruck. Als Argument wird ein java.io.File mit dem Namen f definiert. Der Body der Expression returniert einfach, ob f ein File ist.

Dieses “Lambda” kann im folgenden Beispiel verwendet werden:

Lambda
Die Methode listFiles verlangt ein java.io.FileFilter als Parameter. Der FileFilter ist ein funktionales Interface. Ein funktionales Interface ist ein Interface mit nur einer Methode. Ein weiteres Beispiel von einem funktionalen Interface wäre java.lang.Runnable. Weil FileFilter eben ein funktionales Interface ist, können wir anstelle einer anonymen Klasse gleich einen Lambda Ausdruck mitgeben.

Selbstverständlich können auch selber funktionale Interfaces erstellt werden: Das Interface muss einfach mit @FunctionalInterface annotiert werden und darf nur eine Methode beinhalten.

Mit den Lambda Expressions wurde Java um einiges mächtiger. Java-Entwickler sollten sich schon mal mit der neuen Syntax vertraut machen.

Diskussionen mit Entwicklern

Die JAX bot auch dieses Jahr wieder einen sehr interessanten Ein- und Ausblick auf die Java Plattform. Die (meisten) Sessions waren fachlich hochstehend und regten zum Mit- und Nachdenken an. Abgesehen von dem Essen war die JAX eine inspirierende und interessante Konferenz. Interessant an solchen Konferenzen ist selbstverständlich auch immer wieder das Networking und die Diskussionen mit anderen Entwicklern. Zum Austausch eignet sich das Restaurant Patagonia Steakhouse bestens – und gut gegessen hat man dann auch gleich.

Kommentare sind geschlossen.