Vous pensiez être débarrassé de Java ? Hahahahahaha….

closeCet article a été publié il y a 6 ans 11 mois 16 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Sur Twitter à l’occasion d’un échange privé à propos de Grafana, Nicolas Simond m’a sorti la blague « Java, l’ancien cancer », laissant entendre que le Java reculait sérieusement dans les langages que l’on croise tous les jours – on évoquait les horreurs en node.js qui se présentaient comme « modernes ». Mais si l’on s’est débarrassé de Java au sein du navigateur (et j’espère bientôt définitivement de Flash), aussi bien côté serveur que côté client, il est toujours aussi présent et bien vivant.

Au delà du troll, les avantages

Java est un des langages qui peuvent réellement se présenter comme multiplateformes, avec la logique « code once, run everywhere », un point qui a tout son sens comme on le verra par la suite. C’est un langage orienté objet, mature, qui peut vraiment être performant quand on code pas comme un porc (ce qui peut arriver très souvent, comme en PHP d’ailleurs), et toujours maintenu, même si la future version se fait attendre suite à des désaccords majeurs de la part de gros contributeurs et utilisateurs, Red Hat et surtout IBM (rien que ça).

Du fait de son grand âge, les ressources sont également nombreuses, et les développeurs Java sont toujours prisés notamment grâce à un autre acteur de poids dans le domaine (un certain Google, on verra pourquoi pour ceux qui l’ignore), et de nouveaux usages pour lesquels il semble bien adapté. Bref, avant même de regarder dans le concret quelques noms qui vous seront connus et qui font appel au langage Java, il n’est pas près de disparaître, et ses avantages restent toujours d’actualité pour plusieurs projets.

Android, la raison des 6Go de RAM sur smartphone

Oui bon hein, elle est facile la blague, car les programmes en Java sont réputés consommer beaucoup de mémoire. Et pourtant c’est bien le langage qui a été retenu par Google pour les applications de son système d’exploitation mobile. Java était déjà un langage répandu dans pas mal de téléphones mobiles de l’ère pré-smartphone (avec J2ME, pour Mobile Edition), et Google a voulu capitaliser dessus pour son système. La particularité étant sa propre machine virtuelle d’exécution, ce qui déplaît au grand méchant Oracle qui détient notamment des brevets (non, le rachat de Sun n’était pas motivé par la grandeur d’âme).

Le troll à propos de la consommation de mémoire sur Android par rapport à Apple est essentiellement du à une gestion des mises en pause des applications différentes : comprendre, le système du robot garde plus d’informations en mémoire que son concurrent fruité.

Le Big Data, nouvel eldorado

A tous les niveaux, l’analyse de données à grande échelle (de plus en plus aidée par l’intelligence artificielle), est très souvent effectuée à l’aide du Framewok Hadoop, qui est, je vous le donne en mille, écrit en Java, tout comme le cousin Spark, très pratique pour du calcul distribué. Le langage semble très approprié pour rester performant tout en traitant une masse de données conséquente. Je n’ai clairement pas les capacités de juger de la pertinence de ces choix, mais c’est un fait, Java est un des langages les plus utilisés ces dernières années dans ce domaine en plein essor.

Un autre outil qui sert souvent à la centralisation de certaines données est ELK. C’est une description un peu réductrice des capacité de la « stack », mais c’est en tout cas l’une des principales utilisations : collecter (Logstash), indexer (Elasticsearch), visualiser (Kibana). Et ces trois composants sont écrits en Java. Ils ont d’abord été développés indépendamment, mais c’est leur mise en relation qui a fait des étincelles.

Une présence rare, mais remarquée dans les jeux vidéo

Rare, c’est vite dit puisque j’ai déjà évoqué Android, et les plateformes mobiles sont devenues particulièrement visibles dans le paysage vidéoludique. Mais si le langage n’est pas un choix répandu (ne serait-ce que par le fait que les plateformes imposent de plus en plus leurs propres langages), un petit « village » résiste encore et toujours à l’envahisseur : Minecraft. Le bac à sable géant de Mojang, depuis racheté par Microsoft, a bénéficié des capacités du langage pour développer son incroyable diversité.

Et c’est aussi ce qui a permis sa grande modularité, et la capacité de le faire tourner sur un nombre de plateformes conséquent. Un choix qui pourrait cependant être mis à mal par Microsoft, qui a déjà contribué à le porter vers d’autres langages, avec notamment la version Xbox 360, mais dans ce cas, que deviendra son universalité (si Microsoft a évolué dans le bon sens, certaines technos sont juste là pour verrouiller l’utilisateur sur Windows, notamment dans le jeu vidéo).

Des applications métier/serveur toujours vaillantes

Pour le voir au travail toutes les semaines (pas tous les jours heureusement, pour ma santé mentale), les applications serveurs écrites en Java, lancées au travers de Tomcat ou de JBoss, deux serveurs d’application les plus répandus dans l’univers du langage, sont très populaires. Les usages sont très variés, de la gestion de diffusion vidéo (via Dedicast), à l’analyse de données agricoles (appli maison du client), en passant par les framework CMS (Liferay, Jahia, Alfresco), voire carrément de l’e-commerce (Hybris), et domaine que j’ai découvert récemment des moteurs de recherche web (avec indexation oui oui, comme Google), on pourrait presque dire que rien ne résiste au langage. Plusieurs de ces solutions sont pratiquement toujours payantes, ne serait-ce que pour disposer d’un support à la hauteur de la complexité et la puissance de l’outil en question. J’ai pu lire à une époque qu’une banque avait entamé un travail de fond pour remplacer ses vieux applicatifs en Cobol (un langage qui a été créé dans les années 60), par des équivalents en Java. Je ne sais cependant pas si ça a eu le succès escompté en tout cas c’est dispo en open-source.

Pour autant, c’est souvent une purge à gérer, notamment si besoin de débug, j’ai encore en mémoire récente l’exemple des logs catalina sous Tomcat avec des stack trace de plus de 200 lignes, c’est très verbeux et difficilement lisible par dessus le marché. Mais pour peu que le soft soit bien fini, bien poli, c’est rock-solid, et ça encaisse.

Des applications clientes plus discrètes, mais souvent bien pratiques

N’importe quel tipiakeur en herbe saura vous parler de jDownloader, qui est certes un parfait représentant de la lourdeur que peut induire le langage, mais dont les fonctionnalités, la modularité et sa disponibilité sur un nombre d’OS conséquent en font un incontournable. Sans même parler de « piratage », s’il n’était pas aussi lourdingue ça serait un très bon gestionnaire de téléchargements.

Mais d’autres domaines aussi ont un « poulain » : on présente souvent Jitsi comme client « potable » pour faire de la visio sur XMPP, et ce même si le tout récent Jitsi Meet est codé en Node.js (me demandez pas pourquoi ils ont échangé peste contre choléra). Vous avez déjà pu voir passer, pour certains articles, notamment celui sur l’évolution d’une plateforme d’hébergement, des graphes d’architecture conçus avec yEd, qui est, coucou, écrit en Java. Actuellement, j’étudie l’utilisation de jMeter pour proposer une solution « simple » de test de montée en charge à mes clients, et ce dernier, exploitable aussi bien depuis son interface graphique qu’en mode « console », plus adapté aux serveurs, est là encore un fleuron du genre (et assez lourd sur des configurations modestes, d’ailleurs la doc officielle recommande de ne pas lancer les tests avec l’interface, mais plutôt en ligne de commande et de stocker les résultats du plan dans un fichier qu’on consultera avec l’interface après coup).

Beaucoup de développeurs ne jureront que par Eclipse, Redbeans ou encore IntelliJ IDEA pour leur environnement de développement intégré, et les deux premiers sauront vous faire ressentir très vite le prix de leur puissance et de leur modularité.

Un acteur de poids dans le domaine : la fondation Apache

En effet, Spark, Hadoop, jMeter, Tomcat, Maven, Groovy, Cassandra sont des projets de la fondation; ElasticSearch utilise le moteur de stockage Apache Lucene; on a eu droit à une grosse frayeur avec la faille Apache Struts qui a mis à mal une quantité non négligeable de sites gouvernementaux notamment français, bref, la fondation est un incontournable acteur du langage, certes bien que plus silencieux qu’IBM ou RedHat, qui ont des impératifs financiers plus importants à surveiller. C’est aussi la fondation qui a récupéré le mourant OpenOffice après qu’Oracle, encore lui, l’a laissé pourrir, OpenOffice qui contient des bouts de code Java pour certaines fonctionnalités (pendant que LibreOffice prenait son envol et démarrait ses travaux de réécriture, et de suppression de ce code).

Et à l’image de Struts, dont beaucoup ont découvert l’existence lors de l’annonce de la faille de sécurité, si les projets de la fondation ne sont pas nécessairement célèbres, ils sont non seulement répandus, mais utilisés par des acteurs particulièrement sérieux : Cassandra, qui est une base de données optimisée pour les grosses quantités, est utilisée notamment par des universités, des centres de recherche, mais aussi des sociétés plus traditionnelles, le point commun étant la criticité et la disponibilité de ces gros volumes de données. Tomcat est un des serveurs d’applications les plus utilisés, et comme je l’ai déjà dit, Hadoop est un outil très populaire dans le domaine grandissant du big data.

Un langage qui n’est pas près de disparaitre

On le voit, l’écosystème Java est plus que jamais vivant, les applications du langage couvrent des domaines particulièrement variés, l’aspect multiplateformes reste un atout non négligeable, il a même trouvé un nouveau public alors qu’on le pensait sur le déclin. Certes il conserve toujours une image pas toujours sexy (lourdeur à l’exécution, sécurité discutable, lourdeur à l’écriture), je suis le premier à saluer sa disparition de nos navigateurs, et suis toujours inquiet de le voir installé sur des postes clients pour des applications susceptibles d’être reliées au réseau des réseaux. Mais je suis obligé de reconnaître que sur un poste de travail les quelques applications que j’ai pu utiliser sont particulièrement puissantes et stables, et c’est une qualité qui est justement appréciée des développeurs. Certes on pourra arguer qu’il est possible d’atteindre cette stabilité avec d’autres langages qui ne sont pas atteints des mêmes lourdeurs, mais l’écriture sera certainement plus ardue (je pense notamment à la gestion de la mémoire).

Bon par contre, c’est pas la peine d’attendre que je code des bidouilles en Java, hein. J’ai juste fait un constat de la « vie » du langage, et c’est déjà pas mal, j’ai même découvert quelques trucs au passage en plus de ce que j’avais appris soit par le quotidien de mes clients, soit par mes lectures. Et non, j’ai pas prévu de faire la même chose avec Node.js, je tiens à ma santé mentale.

6 Commentaires
Le plus ancien
Le plus récent
Commentaires en ligne
Afficher tous les commentaires
ValCapri
ValCapri
09/05/2017 22:58

Spark n’est pas codé en Java mais en Scala. Certes, ils tourne tous les 2 sous la JVM. Il ne faut pas oublier des langages comme Ceylon, Clojure, Kotlin, Scala qui tourne sur la JVM et interopable avec Java.

Thierry
Thierry
10/05/2017 00:14

Je ne connaissais pas nodejs jusqu’à ce week-end où j’ai récupéré un petit code en nodejs que j’ai décidé de parallèliser. Ça se parallélise rapidement et à part quelques trucs que j’ai trouvé étrange (bind par exemple) cette surcouche ne me fait pas hurler. Par conséquent qu’avez-vous à reprocher à nodejs ? Concernant Java je ne suis pas d’accord avec les défauts que vous listes : * lourdeur à l’exécution : la jvm n’est à mon avis pas forcément plus lourde qu’un interpréteur, * manque de sécurité : puisque c’est exécuté dans une VM il est possible de vérifier le… Lire la suite »

Rousseau Alexandre
11/05/2017 06:41

Très bon article et très belle analyse.

Bruno
Bruno
11/05/2017 09:46

Tu pourrai nous expliquer pourquoi tu hais Node.js ?

Claude
Claude
08/11/2017 17:10

Google pousse le langage Java vers la porte de sortie, avec Kotlin, devenu langage officielle pour Android.
Java est obsolète et en fin de carrière.
Évidement il faut éviter de confondre le langage avec la machine virtuelle

Côté serveur, Kotlin vise également à remplacer Java, c’est une évidence.

Et donc si, contrairement à ce que dit cet article, Java en tant que langage va débarrasser le plancher: Du reste il présente trop de défauts et trop de lacunes pour continuer à subsister: Il a fait son temps.

Eric
Eric
05/05/2018 14:21
Répondre à  Claude

Bravo!

Pour résumer Java, je dirais pourquoi faire simple quand on peut faire compliqué?

La réponse, c’est Java, juste une horreur. J’ai perdu un an avec ce langage bientôt (j’espère) obsolète, j’aurais mieux fait de me mettre sur Angular ou un autre framework Js, j’aurais été plus productif.

Je déconseille définitivement Java à quelqu’un qui voudrait s’y mettre, passez votre chemin et choisissez une technologie plus moderne! (moins verbeuse, moins compliquée)