Début d’année oblige, je vous propose de faire un peu de prospective pour 2014. Nous nous plaçons bien entendu dans le contexte d’un développeur Java, et allons donc éviter de parler d’imprimantes 3D ou de quadricoptères, technologies fort intéressantes au demeurant.
Ces technologies sont listées par ordre d’importance, pour terminer par la plus importante à mon avis à suivre en 2014.
10. Jekyll
Jekyll est un système de génération de site Web statique… C’est simple, c’est basique, ce n’est pas nouveau, mais cela répond à un besoin particulièrement crucial, celui de pouvoir mettre rapidement et facilement en place un site Web.
Personnellement, j’ai utilisé pendant plus de 10 ans un script Perl “maison” qui faisait le même genre de travail, mais là nous arrivons à un nouveau de fonctionnalité et de facilité d’utilisation inégalé :
- Utilisation de Git pour gérer le contenu
- Utilisation d’un système de templating (Markdown en particulier)
- Mécanisme de gestion de blog
Le tout pouvant être hébergé et géré de manière entièrement automatique via Github : http://pages.github.com/
Jusqu’à présent plutôt confidentiel, mais poussé fortement par Github, ce système a beaucoup gagné en popularité en 2013, et je pense qu’il a le potentiel pour remplacer un grand nombre de sites utilisant des CMS complexes ou du HTML “maison”, et simplifier ainsi la vie de beaucoup de monde.
9. Java EE 7
J’avais fait un bilan de l’arrivée de Java EE 7 à sa sortie sur ce blog : rien de révolutionnaire dans cette nouvelle version, mais il est toujours important de se tenir à jour concernant notre standard bien-aimé.
Une déception récente cependant, c’est qu’il est aujourd’hui impossible d’avoir une version “production ready” en Open Source de Java EE 7 :
- Les “petits” serveurs on disparu du marché. Le seul que l’on peut encore croiser (rarement) est JOnAS, qui n’est pas encore certifié Java EE 7
- Glassfish n’est maintenant plus maintenu par Oracle en tant que “vrai” serveur d’application prêt pour la production, et Oracle a très largement déstaffé son équipe de développement
- Enfin, pour avoir beaucoup travaillé sur JBoss en 2013, je peux vous confirmer que seule la version EAP (payante) est utilisable, et qu’il faut absolument éviter la version “community”… Prennons par exemple ce bug : pendant 1 an et demi, impossible d’avoir des JSPs qui se rechargent à chaud (ou toute ressource statique d’ailleurs), ce qui rend le développement d’application très pénible. Et bien sûr ce bug était corrigé dans la version “entreprise” (mais pour le savoir il faut avoir payé). On est loin de l’esprit des débuts… Et je doute que JBoss change de politique avec “WildFly” et Java EE 7.
Quel retour en arrière, donc, par rapport aux années passées, où l’on avait accès à plusieurs serveurs Java EE Open Source de grande qualité !
8. Java 8 et les lambdas
Depuis le temps que l’on attend les lambdas dans Java, on peut difficilement parler de “nouveauté”, d’où cette place n°8.
En 2014, il faudra donc enfin suivre cette technologie : elle va nous amener des évolutions dans les outils existants, et peut-être de nouveaux frameworks. On peut également espérer qu’elle permettra de faire évoluer un peu plus les mentalités sur la programmation “orientée” fonctionnelle, même si rares seront ceux qui pourront vraiment en faire en 2014.
7. Spring 4
Spring 4 vient avec un certain nombre de mises à jour, en particulier le support de Java 8 et des lambdas, dont nous venons de parler.
Les principales autres innovations pour moi sont :
- Spring Boot, qui permet de considérablement simplifier la mise en œuvre d’une application Spring. Nous venons justement de publier un post sur ce blog sur les fonctionnalités d’auto-configuration fournies par Spring Boot
- Le support très avancé de JavaConfig, y compris dans l’ensemble de l’écosystème Spring (je pense à Spring Security – voici d’ailleurs un exemple), ce qui permet d’avoir des configurations nettement plus souples qu’auparavant.
Grâce à ces nouveautés et à son écosystème complet, Spring se démarque toujours très largement de Java EE, tout en restant entièrement Open Source.
6. Hadoop
L’intérêt des éditeurs pour Hadoop ne faiblit pas, Ippon lui a d’ailleurs consacré un white paper très populaire.
Entre Cloudera, Hortonworks, et surtout Pivotal (qui est arrivé en force sur ce marché en 2013), cette nouvelle année va donc être particulièrement tendue.
Une première tendance qui me semble particulièrement intéressante est celle de mettre en place un système Hadoop privé, à la demande, utilisable de manière globale pour une entreprise. Chaque projet a alors accès à une énorme force de calcul, et paie en fonction de ses besoins pour une partie du système.
Une deuxième tendance est l’arrivée d’Hadoop en “temps réél”. A l’origine Hadoop était destiné à faire des traitements batchs (c’est le fonctionnement même de l’algorithme Map/Reduce), mais de nombreux projets (Storm-YARN, Spark, Impala, Drill…) proposent maintenant de faire du “streaming” et de réaliser des traitements à la volée.
Cependant, et même si l’intérêt d’Hadoop est incontestable dans un certain nombre d’industries, on peut se demander si ce niveau d’investissement va pouvoir être maintenu en 2014, et surtout si le retour des clients sera suffisamment positif pour le justifier.
5. phantom.js
Webkit est le système de rendu utilisé par Chrome et Safari, et phantom.js permet d’utiliser ce moteur en ligne de commande (sans environnement graphique !).
Cela permet donc de lancer des tests fonctionnels de votre interface graphique en ligne de commande, par exemple avec Karma (le système de test proposé par AngularJS, dont nous allons parler plus loin dans ce classement).
L’utilisation de phantom.js dans un système de build moderne (je pense à Yeoman, dont nous allons également parler…) permet donc d’avoir enfin des tests fonctionnels complets, sur une interface Web moderne en JavaScript, le tout exécuté de manière simple, rapide et reproductible. C’est un grand pas en avant par rapport aux solutions utilisées aujourd’hui en entreprise (en particulier la suite HP Quality Center).
Si vous voulez aller plus loin que phantom.js, vous pouvez également regarder casper.js qui l’étend et vous permet de gérer des règles de navigation, des formulaires, etc…
4. Google Watch, Google Car, Google Glass, Google TV…
Ce n°4 est la seule entrée du classement qui porte sur des technologies qui ne sont pas encore prêtes en ce début d’année, mais qu’il faut à mon avis suivre de très près.
Google est en train de nous proposer un ensemble de technologies très complet, basé sur Android, et qui devrait changer notre vie au quotidien.
En tant que développeur Java, il y a donc ici un énorme potentiel de travail. Je pense que nous allons bientôt en finir avec les sites Internet dits “mobile”, qui sont généralement des versions bridées des sites Web “desktop” : les utilisateurs vont vouloir avoir accès à votre application sur toutes leurs “devices” de manière homogène. A terme, il n’y aura donc plus de distinction de desktop/mobile, et l’accès sera majoritairement via des systèmes “non desktop”.
Enfin, nous avons actuellement deux grandes tendances de développement pour ces “devices” : les applications HTML5, qui sont en train de prendre de plus en plus d’ampleur, et les applications natives, qui restent plus dynamiques et plus agréables pour l’utilisateur final. Dans ces deux types d’application, nous avons un potentiel énorme de développement dans nos technologies favorites (Web et Java), et nous avons un travail conséquent pour comprendre leur fonctionnement et les nouvelles possibilités offertes. Il va donc falloir commencer à se mettre à niveau sur ces sujets dès début 2014.
3. Yeoman
Yeoman est un ensemble de technologies qui regroupe :
- yo, un générateur d’applications
- grunt, un outil de build en JavaScript
- bower, un gestionnaire de dépendances JavaScript
Cet ensemble d’outils permet de générer rapidement des applications “modernes” (basées sur des frameworks JavaScripts modernes, en particulier AngularJS), et d’avoir un cycle de build complet (qui ressemble un peu à ce que nous connaissons avec Maven, mais côté JavaScript).
Il me semble indispensable de connaître ce genre d’outil en 2014 si l’on veut réussir à développer des applications Web modernes, car les stacks techniques côté client sont devenues extrêmement complexes : l’outillage fourni permet de les appréhender de manière plus simple, et de maîtriser leur cycle de développement.
2. AngularJS
Après deux ans à développer Tatami avec Backbone.js je n’avais franchement pas envie d’apprendre un nouveau framework MVC JavaScript, et j’ai donc été très réticent par rapport à AngularJS. Mal m’en a pris !
AngularJS est pour moi l’une des excellentes surprises de 2013, et même si j’ai souffert de pas mal de bugs et de manques de fonctionnalités par rapport à Backbone.js, j’ai été bluffé par :
- Sa courbe d’apprentissage ultra-rapide
- La facilité à mettre en place des écrans, en particulier des formulaires
- Le système de binding des variables
- Certaines fonctionnalités avancées comme les “directives” ou la validation
En moins d’une journée vous pouvez être très productif avec AngularJS (ce qui est loin d’avoir été mon cas avec backone.js…), n’hésitez pas à vous lancer si vous ne connaissez pas encore !
1. Docker
Docker est pour moi LA grosse révolution qui est en train d’arriver.
Depuis 2006 je suis un grand utilisateur de VMWare, et si j’aime beaucoup la souplesse proposée par cette solution, il y a un certain nombre de points que je n’ai jamais aimés :
- Le fait de lancer plusieurs systèmes d’exploitation en parallèle sur un même hôte, et même si aujourd’hui VMWare va optimiser la gestion de cette mémoire (en réutilisant les plages de mémoire identiques), cela m’a toujours semblé un gros gâchis de ressources
- Le “memory ballooning”, utilisé pour reprendre de la mémoire sur les systèmes invités, reste un “hack” qui ne me satisfait pas totalement
- Le système de réservation de ressources, souvent mal maîtrisé par les équipes de production (et là ce n’est pas une critique envers VMWare…), m’a conduit de nombreuses fois à avoir de très mauvaises performances : dès que votre système hôte swappe, vos JVM vont avoir une partie de leur mémoire dans ce swap, et là tout est fini… Nous n’avons donc pas un système capable de se dégrader en cas de forte charge, mais un système qui crashe dès qu’une certaine charge est atteinte
- Le fait que VMWare soit un système propriétaire particulièrement onéreux est également un souci pour moi : si les équipes de production en bénéficient, les équipes de développement y ont rarement accès, ou alors avec des systèmes tellement chargés qu’il est impossible de développer avec (on est en continuellement en over-commit de la mémoire, et dès que plusieurs utilisateurs lancent leur Eclipse, tout s’écroule…)
- La création et la maintenance des machines virtuelles sont un dernier souci, qui n’est pas normalement traité directement par VMWare. J’ai ainsi pu travailler plusieurs mois sur la mise en place de Puppet sur une ferme de serveurs VMWare. Même si au final cette solution fonctionne bien, je l’ai trouvée complexe à mettre en place, onéreuse (là aussi il faut prendre une version “entreprise”) et surtout gourmande en ressources (Puppet consomme énormément de ressources, et par conséquent fonctionne mal en parallèle de VMWare)
Docker, a contrario, est un système de virtualisation “léger”, qui se base sur les fonctionnalités du noyau Linux :
- Il s’agit d’un projet Open Source, disponible sur Github – vous pouvez donc l’installer sur tous vos postes de développement et tous vos serveurs sans coût supplémentaire, avec une communauté particulièrement dynamique qui est prête à vous aider. C’est déjà un premier point très important pour moi.
- Ce n’est pas de la “vraie” virtualisation, en ce sens que Docker ne fonctionne que sous Linux (mais qui utilise autre chose en production ? …). Pour information, les versions de Docker sous des systèmes “non Linux” utilisent en fait Vagrant, afin de lancer une machine virtuelle Linux dans laquelle on utilise Docker… Vous pouvez donc ainsi lancer une JVM dans Docker dans VMWare, dans un magnifique empilement de couches virtualisées !
- Le lancement d’un “container” Docker s’apparente au lancement d’un process Linux, qui a la particularité d’avoir son propre filesystem et ses propres interfaces réseau. Ce lancement est donc quasi-instantané et l’overhead de la virtualisation est négligeable. La gestion de la mémoire reste gérée par votre OS, ce qui pour moi résout une grande partie des problèmes évoqués précédemment.
- Vous pouvez créer et maintenir vos machines virtuelles grâce à un fichier appelé “Dockerfile” : il en existe de nombreux disponibles sur Internet, et qui vous proposent des systèmes déjà pré-configurés avec des serveurs d’application, des bases de données, des environnements de développement… Sur https://index.docker.io/ vous avez ainsi accès à de très nombreuses machines prêtes à l’emploi, que vous pouvez ensuite re-configurer à votre goût, et partager à votre tour.
Je vois ainsi deux cas d’utilisation pour Docker :
- La mise en place d’environnements de développement “prêts à l’emploi” pour les développeurs. Ce sera le thème de mon intervention la semaine prochaine à la conférence “Docker Paris”. Cela pourrait radicalement changer notre manière de mettre en place nos projets et de développer, car l’utilisation des nouveaux outils de type AngularJS (notre n°2), Yeoman (n°3) ou Phantom.js (n°5) nous pousse à avoir des environnements de développement de plus en plus complexes à mettre en place.
- La production, évidemment, en remplacement des solutions basées sur VMWare ou ses alternatives. Un certain nombre d’acteurs du cloud ont pris cette voie, par exemple Baidu ou bien évidemment Dotcloud, le créateur de Docker (dont les prix sont très compétitifs).