Devoxx Belgium 2016

27 novembre 2016
Devoxx Java Reactive functional

Welcome to Antwerp (Anvers)

A peine remis du DevFest Toulouse, je pars une semaine en Belgique pour aller à Devoxx. Pour ceux qui ne connaissent pas encore Devoxx, c’est une conférence indépendante : elle n’est organisée ni par Google ni par Oracle. Cela dit, ils étaient présents en temps que sponsors et speakers. C’est la plus grosse conférence auquelle j’ai assisté (3500 développeurs), ce n’est pas tous les jours qu’on a l’occasion de croiser des Brian Goetz, Venkat Subramaniam, … en Europe.

Devoxx Belgique c’est aussi un peu la mère de toutes les conférences Devoxx et Voxxed qui se sont créées ces dernières années (France, Maroc, US, Pologne, …). C’est aussi la bataille des buzzwords, à votre avis qui est le perdant parmi : Docker, MicroServices, JEE, Programation Reactive?

La conférence a lieu dans un complexe cinéma, on a donc de grandes salles, les écrans qui vont avec, et des fauteuils super confortables. Coté boissons les sodas, jus d’orange… sont open-bar ; du coup, il y a la queue aux toilettes. Les repas ne sont pas terribles (sandwich bof), c’est sur qu’en France les conférences sont particulièrement attentives aux repas ; à noter tout de même la soirée bières-frites, un moment parfait pour échanger sur des thèmes divers (Merci Pivotal pour les bières). On aura aussi le droit à une séance de ciné pour aller voir “Snowden”, séance que j’ai esquivée pour aller manger en ville avec quelques Toulousaing.

Chose géniale, les vidéos sont uploadés sur Youtube dès le lendemain, vous pouvez donc les trouvées sur Youtube. Par exemple, vous avez une playlist avec les présentations les mieux notées.

Ici, c’est impossible de vous faire un compte rendu détaillé de toutes les conférences auxquelles j’ai assisté, donc je vais juste détailler quelques thématiques que j’ai particulièrement suivies.

Java maintenant

Lors de plusieurs conférences, il y a eu des sondages à main levé pour savoir quelle version du JDK était utilisée, presque tout le monde est sur Java 8, ceux qui sont en dessous sont souvent liés à Android, cela dit on peut combler une partie du déficit avec RetroLambda.

La version 8 du langage apporte une touche de programmation fonctionnelle dans Java, ce qui ouvre de nouvelles portes. J’encourage fortement les équipes de développeurs à se poser la question : ‘Comment ferait-on ça proprement à la mode Java 8 ?’ pendant leurs phases de conceptions, refactoring et dans les revues de codes.

Aujourd’hui les designs patterns classiques (GoF par ex.) sont généralement obsolètes avec l’arrivé de cette nouvelle façon de développer, on y gagne tellement en termes de lisibilité, compacité, maintenabilité, testabilité. Attention toutefois à faire au maximum des fonctions pures (sans effet de bords).

Cela dit, il y a encore une lourdeur ou certains manques dans les API (p. ex. il manque les tuples, flatMap et Optional), et l’on peut espérer que ces points soient améliorés dans le futur (voir plus bas).

Voici quelques présentations intéressantes :

Vous trouverez bien sûr d’autres présentations sur le sujet, par exemple il y a eu deux talks parlant de JavaSlang qui porte beaucoup d’éléments de Scala dans Java par exemple le PatternMatching.

D’autres présentations sont plus dans l’esprit ‘BrainFucking’, je trouve ça amusant quand ça reste à petite dose :

Java demain

Je me suis aussi beaucoup tourné vers les présentations qui parlaient de Java 9, et des éventuelles nouveautés que l’on verra (peut-être) dans les versions postérieures du langage. Les architectes du langage qui avaient fait le déplacement cette année, c’est toujours marrant de les voir se serrer sur une petite table au resto, alors qu’on avait profité de la grande (premier arrivé, premier servi).

On a d’abords eu le droit d’une présentation de Java 9, ainsi que du projet Valhalla et du projet Panama lors de la Keynote d’Oracle, c’est un excellent résumé concernant le futur de Java : Keynote Session (Mark Reinhold and Brian Goetz).

En gros il y a beaucoup de ‘petites’ modifications internes dans Java 9, mais il y a surtout Jigsaw qui apporte la modularité. J’ai évité ce sujet que j’avais déjà pas mal suivi auparavant. Je pense que la modularité va apporter quelque chose d’indispensable en Java pour ne pas être trop vite distancé par les nouveaux langages système comme Swift ou Rust.

J’ai quand même un peu peur que ce JDK prenne plus de temps que Java 8 à être adopté ; l’avenir nous le dira. Maven est plutôt bon dans la compatibilité avec Java 9, c’est plutôt rassurant.

Autre nouveauté dans Java 9, l’arrivée d’un REPL : JShell. C’est assez intéressant, mais j’ai tellement pris l’habitude de m’en passer, qu’il va me falloir du temps pour trouver les usages au quotidien.

Je suis aussi allé voir la présentation sur le nouveau client HTTP/2 (JEP 110), là j’ai été un peu déçu, car il est possible que ce soit considéré en ‘incubation’ pour Java 9. J’espère que nous aurons une bonne surprise. L’usage du CompletableFuture est bienvenu pour les aspects asynchrones.

Et après Java 9, que va-t-il se passer ? Les speakers d’Oracle sont très prudents sur les nouveautés qui sont présentées, il est tout à fait possible qu’elles soient différentes voir abandonnées par la suite. Voici une liste de ceux qui pourraient arriver (on parle pour Java > 9) :

  • Meilleure inférence de type, on pourrait voir des choses comme ça : var url = new URL("...");
  • Data Classes pour faire des trucs comme class Point(int x, int y){}
  • Un meilleur switch qui se rapprochera a du Pattern Matching, on pourrait voir les choses arrivées progressivement, d’autant plus avec les Data Classes.
  • Valhalla étudie la possibilité d’une nouvelle organisation de la mémoire pour des données. Disons plus simplement ça correspondrait à la notion de Value Class. Ces objets seraient passés par valeur (pas par référence) ce qui donnerait “Codes like a class, works like an int”. En gros ça permettrait aussi de faire des List<int>. Ce serait une énorme évolution dans le langage, j’ai beaucoup d’espoir sur cette évolution. Maintenant il ne faudrait pas que ça arrive trop tard par rapport aux nouveaux langages.
  • Panama est un reboot pour faire des appels à du code natif. L’idée c’est de faire plus simple, plus sure, et plus rapide, la démo est fun.

On retrouve beaucoup de choses qui sont déjà présentes dans des langages, j’y vois personnellement une excuse pour étudier ces langages, et pouvoir être à l’aise lorsqu’on aura ces features dans Java.

Voici une sélection de présentations, pour celles qui concernent Jigsaw et la modularité je vous laisse chercher.

Programmation réactive

Dernière grande thématique que j’ai suivie : la programmation réactive. C’est un sujet chaud, il y avait pas mal de présentations concernant de près ou de loin ce sujet. Tout d’abort il faut noter qu’ avec Java 8, les API sont beaucoup plus agréables à utiliser, ensuite les Reactive Streams arrivent dans Java 9 avec la classe Flow.

Aujourd’hui, Akka Stream 2, Reactor Core 3 et RxJava 2 implémentent les Reactives Streams sur la JVM.

Pour une excellente introduction sur le sujet je vous recommande l’université Reactive Programming (Venkat Subramaniam) qui prend le temps pour présenter le concept de la programmation réactive, puis montre beaucoup de code avec RxJava pour montrer : les observables, l’asynchronisme, la gestion des erreurs, les opérateurs sur les Observables, la notion d’observable chaud ou froid, le principe de backpressure. Le backpressure c’est quand votre émetteur va plus vite que le consommateur, c’est quelque chose qui a mis du temps à être simple et proprement implémenté dans les API.

J’ai aussi beaucoup apprécié l’université Developing Reactive applications with Reactive Streams and Java 8 (Brian Clozel, Sébastien Deleuze) qui présente Reactore Core 3 dans la première partie au travers de tests unitaires. Je suis très agréablement surpris par la testabilité qu’apporte le StepVerifier. Dans la seconde partie, une démonstration de Spring Boot 2, avec Spring Framework 5 montre comment on peut passer en réactif côté backend. Très intéressant, j’attends avec impatience la version ‘production-ready’ de ces projets.

Je n’ai pas encore eu le temps de regarder Reactive Web Applications with Spring 5 (Rossen Stoyanchev), mais j’ai eu de bons retours.

Sinon il y avait aussi des présentations concernant Vert.x, Akka Streams, …

Ceux qui me connaissent savent que je suis très intéressé par ce sujet, on prévoit un MonkeyTechDay en début d’année sur le sujet.

Autres sujets

Bien sûr le Machine Learning, et les sujets Devops étaient très bien représentés dans les conférences. Je rattraperais ça avec les vidéos. Je suis aussi allé voir d’autres sujets, je vous fais une petite liste de ce que j’ai trouvé sympa.

Conclusion

Encore une super semaine, j’ai encore appris plein de choses, eu de super échanges, pleins d’envies. Il faut toutefois un peu de temps pour digérer et laisser décanter tout cela (et faire mon compte rendu). Donc merci encore à tous les organisateurs, bénévoles, speaker, et tous les gens sympas avec qui j’ai eu l’occasion d’échanger ou de partager une bière.

Pour finir quelques photos

Fier d’être speaker :

Speaker

Igor Minar nous parle d’Angular2 :

Angular2

Venkat et ces citations :

Venkat

Brian Goetz nous parle de Java > 9 avec un slide de JavaOne 2005

BrianGoetz

CSS is Awesome ! :

CSS

Bonne ambiance lors du Speaker Diner :

Speaker Diner

Interview très sérieuse avec Ray Tsang :

RayTsang

Une pythie pour un mauvais Oracle :

Antonio

Swift coté backend :

Swift

Enfin lorsqu’il qu’il fait froid, et qu’il pleut, il y a toujours une solution en Belgique pour se réconforter :

Reconford

comments powered by Disqus