Pendant que j'écris, la 21e version du langage de programmation Java vient de sortir. Cette version propose, comme toujours, des fonctionnalités telles que les threads virtuels, les modèles d'enregistrement, l'API de mécanisme d'encapsulation des clés, la correspondance de motifs générationnels, et d'autres, certaines étant encore en phase de prévisualisation. Cependant, je ne cherche pas à mettre en avant ces fonctionnalités, mais plutôt à discuter de la pertinence de Java aujourd'hui et à déterminer s'il vaut toujours la peine pour un programmeur d'investir du temps et des efforts dans ce langage.
En tant qu'ancien programmeur Java, avec plus de 23 ans d'expérience, je peux apporter mon point de vue. Bien sûr, je ne prétends pas apporter une réponse définitive à cette question, mais je peux partager mon expérience et mes opinions sur les forces et les faiblesses de Java.
En 1995, Java a vu le jour officiellement avec sa première version, la 1.0, publiée en janvier 1996. À l'époque, Sun Microsystems, l'entreprise à l'origine de Java, était surtout connue pour ses ordinateurs, mais aussi pour son engagement en faveur des logiciels libres. Cet engagement a marqué le développement de Java, comme en témoigne l'acquisition de la base de données MySQL en 2008, juste avant la vente de l'entreprise à Oracle.
Ayant été programmeur Java au fil des ans
Au début de ma carrière professionnelle dans le domaine de Java, nous étions à l'époque de sa version 1.2, et le contexte des développeurs était bien différent de celui que nous connaissons aujourd'hui, notamment en matière de développement web.
Java était alors considéré comme un choix de prédilection pour la création d'applications web, alors même que les concepts de "front-end" et de "back-end" étaient encore flous. Les outils disponibles étaient principalement limités à HTML, CSS et JavaScript pour la conception des interfaces web.
Nous étions au commencement de l'ère des frameworks. Les technologies telles que les Java Server Pages (JSP) et les Servlets étaient largement utilisées pour la programmation des applications web. Cependant, l'émergence progressive de nouveaux frameworks a commencé à simplifier les processus de développement, même si cette idée n'était pas partagée par tous.
Au fil du temps, de nouveaux frameworks et outils sont apparus tandis que d'autres ont disparu, et les nouvelles versions de Java ont introduit des solutions innovantes pour résoudre les défis rencontrés. Ces évolutions ont profondément transformé le paysage du développement, au point qu'il est parfois difficile de croire que le langage lui-même est resté aussi pertinent.
Aujourd'hui, Java est largement reconnu pour son excellence dans le développement back-end. Au cours de ma carrière, j'ai exploré divers frameworks tels que les Java Server Pages, Struts, Java Server Faces, PrimeFaces, tout en les combinant avec HTML, CSS et JavaScript. Cependant, il est apparu clairement que Java n'était pas la solution idéale pour le développement front-end. L'avènement des frameworks JavaScript a consolidé l'utilisation de Java comme norme pour le développement back-end.
La programmation orientée objet en JAVA
Avant d'aborder certains problèmes et avantages (supposés) de Java, je souhaite discuter d'un autre concept que je considère comme fondamental pour le langage, en m'appuyant sur mon expérience en tant qu'enseignant. Java a été le premier langage de programmation grand public à intégrer les concepts de l'orientation objet à un niveau commercial, avec un succès notable. Ainsi, pour apprendre Java et le maîtriser, il a toujours été essentiel de comprendre le paradigme de la programmation orientée objet (POO).
J'ai été confronté à ce défi non seulement en tant que développeur, mais également en tant qu'enseignant. Pendant 16 ans, j'ai formé des étudiants à devenir des programmeurs en leur enseignant Java, la POO, ainsi que l'analyse et la conception orientées objet. Pour exceller en programmation, il est essentiel de posséder une pensée logique et mathématique solide. Cependant, la plupart des étudiants (60 à 80%) qui arrivaient dans mes cours de Java n'avaient pas acquis ces bases, ce qui rendait mon travail considérablement plus difficile.
Bien entendu, ce type de défi se rencontre lors de l'apprentissage de n'importe quel langage de programmation. Cependant, dans le cas de Java, les étudiants devaient également assimiler les principes de l'orientation objet, ce qui pouvait susciter beaucoup de frustration. Dans l'ensemble, de nombreux étudiants en sont venus à blâmer Java pour sa prétendue complexité, alors que la réalité est bien plus nuancée. Un point important à noter est que certains étudiants, une fois qu'ils avaient saisi les concepts fondamentaux de la POO, comme l'héritage et le polymorphisme, étaient tellement enthousiastes à l'idée de les utiliser qu'ils finissaient par les appliquer de manière incorrecte. Mais c'est un autre débat.
Les aspects moins favorables de Java
Examinons maintenant certains aspects de Java qui ouvrent la voie à la discussion : les caractéristiques positives et négatives qui amènent les gens à aimer ou à détester le langage.
- Java est généralement considéré comme plus lent que d'autres langages, notamment C/C++.
Depuis ses débuts, Java a adopté le principe "WORA" (Write Once, Run Anywhere). En tant que langage interprété, Java peut effectivement être moins performant que d'autres langages produisant du code machine.
Cependant, les compilateurs Java ont beaucoup progressé pour générer un code prêt à être exécuté, ce qui peut entraîner une utilisation plus élevée de la mémoire. De plus, avec l'avènement des processeurs multicœurs, il est possible de diviser le travail d'exécution d'un programme, ce qui peut améliorer les performances dans certains cas.
Il existe également des bonnes pratiques que les programmeurs Java peuvent adopter pour optimiser les performances de leurs programmes. Celles-ci incluent :
-
Le choix judicieux des structures de données
-
La réduction de la complexité des méthodes
-
L'optimisation des boucles
-
L'évitement des structures de contrôle excessivement complexes
En suivant ces bonnes pratiques, il est possible d'améliorer considérablement les performances des programmes Java.
-
- Java est souvent dépassé par ses concurrents et met plus de temps à adopter les innovations.
De nombreux critiques de Java soulignent que le langage tarde à intégrer les changements importants, contrairement à des alternatives telles que Kotlin, Python, JavaScript ou Golang. Ayant travaillé pour des entreprises où Java est le langage principal pendant presque toute ma carrière de programmeur, et ayant traité des systèmes critiques ayant un impact significatif sur les organisations, je peux affirmer que le fait de ne pas adopter de nouvelles versions de Java immédiatement après leur lancement est une pratique très répandue parmi les entreprises de taille moyenne et grande.
- Java est considéré comme dépassé et, par conséquent, n'est plus utilisé pour développer de nouveaux systèmes.
De nos jours, les entreprises examinent attentivement les nombreuses possibilités de langages de programmation avant de démarrer un nouveau projet. Comprendre ce que chaque langage peut offrir est crucial lors du choix de l'outil à utiliser dans un projet.
Il est indéniable que Java est présent dans de nombreux systèmes installés à travers le monde, ce qui ne peut être ignoré. Avec plus de 25 ans d'existence, Java a été largement utilisé au fil du temps, ce qui en fait un choix naturel pour les systèmes hérités. De nombreux systèmes évoluent à partir de systèmes existants, et la compatibilité avec Java, un langage maintenu, est un critère important lorsqu'il s'agit d'ajouter de nouvelles fonctionnalités à une application existante.
En outre, comme mentionné précédemment, même si une fonctionnalité spécifique n'est pas présente dans le noyau de Java, elle peut souvent être fournie par un outil de l'écosystème, voire par plusieurs fournisseurs.
Ainsi, même lorsqu'il s'agit de démarrer un nouveau projet à partir de zéro, je suis d'avis que Java ne devrait pas être écarté. Il est également important de souligner que les systèmes modernes ne sont pas créés exclusivement avec un seul langage, mais sont plutôt construits à partir d'une pile d'outils intégrés pour créer de la valeur. Java présente l'avantage d'être facilement intégré avec de nombreux outils du marché, grâce à sa longue existence, sa grande communauté et son acceptation générale.
Aujourd'hui, Java lance de nouvelles versions tous les six mois, en mars et en septembre, et seules certaines d'entre elles sont recommandées pour une utilisation en production (les versions 8, 11, 17 et 21 étant les dernières). Ces versions, appelées versions à long terme (LTS), sont généralement adoptées par les entreprises longtemps après leur lancement, comme moyen d'éviter les problèmes (elles attendent souvent une nouvelle version LTS pour adopter la précédente).
Ainsi, de mon point de vue, les entreprises recherchent un langage fiable qui répond à leurs besoins (et à ceux de leurs clients), qui sont des préoccupations plus importantes que d'avoir leurs produits dotés des dernières innovations. Parfois, une nouvelle fonctionnalité n'est pas présente dans Java lui-même, mais dans certains outils de son écosystème, qui est immense. Par exemple, c'est le cas de Spring, peut-être l'écosystème Java le plus connu sur le marché. Spring offre un ensemble de fonctionnalités qui étendent et améliorent Java lui-même, et il est largement adopté aujourd'hui pour les applications web et les applications Java basées sur le cloud. Quarkus est un autre exemple d'outil permettant le développement d'applications Java pour le cloud.
En conclusion, ce que j'ai constaté de mon expérience, c'est que les entreprises qui comptent sur Java pour leurs systèmes critiques sont plus préoccupées par la stabilité de leurs systèmes d'entreprise que par les nouvelles fonctionnalités du langage.
Java est encore bien vivant
Selon l'indice TIOBE, qui mesure la popularité des langages de programmation et est mis à jour chaque mois, Java reste dans le top 5 des langages les plus utilisés dans le monde. Cette position constante indique clairement que le langage conserve une forte présence dans le domaine de la programmation.
Une des forces de Java réside dans sa compatibilité avec de nombreuses solutions utilisées par les développeurs pour créer des systèmes informatiques fonctionnels. La grande majorité des outils développés sur le marché sont compatibles avec Java, témoignant ainsi de sa popularité et de sa versatilité.
Par ailleurs, en consultant des plateformes telles que Stackshare, qui permet aux développeurs et aux entreprises de partager les outils qu'ils utilisent au quotidien, on constate que des géants comme Uber, Instagram, Airbnb, Netflix, Google et Amazon intègrent Java dans leur stack technologique.
Cela signifie que les opportunités d'emploi pour les développeurs Java restent nombreuses et stables. Une simple recherche d'offres d'emploi Java sur des plateformes telles que LinkedIn confirme cette tendance.
Enfin, mon expérience personnelle confirme également la prévalence de Java dans le développement de systèmes essentiels. Tout au long de ma carrière, j'ai été impliqué dans de nombreux projets d'envergure où Java constituait la pierre angulaire, notamment dans le développement du système de paiement instantané Pix, utilisé par des millions de personnes.
Conclusion
Il est évident que Java n'a plus la même prépondérance qu'auparavant. Le temps que le langage continuera de jouer un rôle majeur demeure incertain, mais pour l'instant, rien n'indique sa disparition à court ou moyen terme. Les produits Java continuent d'être développés et maintenus, ce qui témoigne d'une demande constante que nous observons quotidiennement.
Ainsi, on ne peut affirmer que Java est obsolète, du moins pas encore. Malgré ses défis, le langage demeure largement utilisé, en partie grâce à sa solide base d'utilisateurs et à son écosystème dynamique, ainsi qu'à sa réputation de fiabilité. Il est également vrai que Java évolue continuellement pour rester pertinent dans un environnement technologique en constante mutation.
Avec l'émergence de nouvelles technologies, notamment dans le domaine de l'intelligence artificielle (IA), certains prédisent que les langages de programmation seront bientôt dépassés. Que cette hypothèse se concrétise ou non, c'est un défi majeur non seulement pour Java, mais pour tous les langages de programmation. Ils devront s'adapter pour rester pertinents dans un monde en perpétuelle évolution.