Java à 20 ans: comment il a changé la programmation pour toujours

Se souvenir de ce qu'était le monde de la programmation en 1995 n'est pas une tâche facile. La programmation orientée objet, pour sa part, était un paradigme accepté mais rarement pratiqué, une grande partie de ce qui passait comme des programmes soi-disant orientés objet n'étant guère plus que du code C renommé qui utilisait à la >>place printfet classau lieu de struct. Les programmes que nous avons écrits à l'époque vidaient régulièrement le cœur en raison d'erreurs arithmétiques de pointeur ou manquaient de mémoire en raison de fuites. Le code source pouvait à peine être porté entre les différentes versions d'Unix. Exécuter le même binaire sur différents processeurs et systèmes d'exploitation était un discours fou.

Java a changé tout cela. Alors que le code procédural C dépendant de la plate-forme, alloué manuellement, continuera d'être avec nous pendant au moins 20 ans, Java a prouvé que c'était un choix, pas une exigence. Pour la première fois, nous avons commencé à écrire du vrai code de production dans un langage multiplateforme, ramassé et orienté objet; et nous l'avons aimé ... des millions d'entre nous. Les langages qui sont venus après Java, notamment C #, ont dû effacer la nouvelle barre supérieure de productivité des développeurs établie par Java.

James Gosling, Mike Sheridan, Patrick Naughton et les autres programmeurs de Sun's Green Project n'ont pas inventé la plupart des technologies importantes que Java a généralisées. La plupart des caractéristiques clés qu'ils incluaient dans ce qu'on appelait alors Oak trouvent leurs origines ailleurs:

  • Une classe Object de base dont toutes les classes descendent? Smalltalk.
  • Vérification de type statique forte au moment de la compilation? Ada.
  • Interface multiple, héritage d'implémentation unique? Objectif c.
  • Documentation en ligne? CWeb.
  • Machine virtuelle multiplateforme et code d'octet avec compilation juste à temps? Smalltalk à nouveau, en particulier le dialecte de Sun's Self.
  • Collecte des ordures? Zézayer.
  • Types primitifs et structures de contrôle? C.
  • Système de type double avec des types primitifs non-objet pour la performance? C ++.

Java a cependant été le pionnier d'un nouveau territoire. Rien de tel que les exceptions vérifiées n'est présent dans une autre langue avant ou depuis. Java a également été le premier langage à utiliser Unicode dans le type de chaîne natif et le code source lui-même.

Mais la principale force de Java était qu'il a été conçu pour être un outil pratique pour accomplir le travail. Il a popularisé les bonnes idées des langages précédents en les reconditionnant dans un format familier au codeur C moyen, bien que (contrairement à C ++ et Objective-C) Java ne soit pas un sur-ensemble strict de C.En effet, c'était précisément cette volonté de non seulement ajouter mais supprimez également les fonctionnalités qui ont rendu Java tellement plus simple et plus facile à apprendre que les autres descendants C orientés objet.

Java n'a pas (et ne pas encore) ont structs, unions, typedefs, et les headerfichiers. Un langage orienté objet non entravé par l'exigence d'exécuter du code hérité n'en avait pas besoin. De même, Java a sagement omis les idées qui avaient été essayées et jugées insuffisantes dans d'autres langages: l'héritage d'implémentation multiple, l'arithmétique des pointeurs et la surcharge des opérateurs, le plus notable. Ce bon goût au début signifie que même 20 ans plus tard, Java est encore relativement libre des avertissements «here be dragons» qui jonchent les guides de style de ses prédécesseurs.

Mais le reste du monde de la programmation n'est pas resté immobile. Des milliers de langages de programmation se sont développés depuis que nous avons commencé à programmer Java, mais la plupart n'ont jamais atteint plus d'une infime fraction d'attention collective avant de finalement disparaître. Ce qui nous a vendu sur Java, ce sont des applets, de petits programmes exécutés à l'intérieur de pages Web qui peuvent interagir avec l'utilisateur et faire plus que d'afficher du texte statique, des images et des formulaires. Aujourd'hui, cela ne semble pas grand-chose, mais rappelez-vous - en 1995, JavaScript et le DOM n'existaient pas, et un formulaire HTML qui parlait à un script CGI côté serveur écrit en Perl était à la pointe de la technologie.

L'ironie est que les applets n'ont jamais très bien fonctionné. Ils étaient complètement isolés du contenu de la page, incapables de lire ou d'écrire du HTML comme le pourrait éventuellement JavaScript. Les contraintes de sécurité ont empêché les applets d'interagir avec le système de fichiers local et les serveurs de réseau tiers. Ces restrictions rendaient les applets adaptées à un peu plus que de simples jeux et animations. Même ces preuves de concept triviales ont été entravées par les mauvaises performances des premières machines virtuelles de navigateur. Et au moment où les lacunes des applets ont été corrigées, les navigateurs et les développeurs frontaux avaient depuis longtemps dépassé Java. Flash, JavaScript et, plus récemment, HTML5 ont attiré notre attention en tant que plates-formes bien plus efficaces pour fournir le contenu Web dynamique que Java nous avait promis mais n'a pas réussi à fournir.

Pourtant, ce sont les applets qui nous ont inspirés à travailler avec Java, et ce que nous avons découvert, c'est un langage propre qui a lissé bon nombre des aspérités et des problèmes avec lesquels nous avions du mal dans des alternatives telles que C ++. La collecte automatique des ordures valait à elle seule le prix d'entrée. Les applets ont peut-être été surchargées et sous-livrées, mais cela ne voulait pas dire que Java n'était pas un sacré bon langage pour d'autres problèmes.

Initialement conçu comme une bibliothèque client multiplateforme, Java a rencontré un réel succès dans l'espace serveur. Les servlets, les pages Java Server et un éventail de bibliothèques destinées aux entreprises qui étaient périodiquement regroupées et renommées dans un acronyme déroutant ou un autre ont résolu de réels problèmes pour nous et pour les entreprises. Mis à part les échecs marketing, Java a atteint un statut presque standard dans les services informatiques du monde entier. (Rapide: Quelle est la différence entre Java 2 Enterprise Edition et Java Platform Enterprise Edition? Si vous avez deviné que J2EE est le successeur de JEE, vous l'avez exactement en arrière.) Certains de ces produits axés sur l'entreprise étaient plutôt lourds et inspirés source d'alternatives et de suppléments tels que Spring, Hibernate et Tomcat, mais ceux-ci sont tous construits au-dessus de l'ensemble Sun de base.

La contribution la plus importante de l'open source à Java et à l'artisanat plus large de la programmation est sans doute JUnit. Le développement piloté par les tests (TDD) avait déjà été essayé avec Smalltalk. Cependant, comme de nombreuses autres innovations de ce langage, TDD n'a pas été largement diffusé et adopté jusqu'à ce qu'il soit disponible en Java. Lorsque Kent Beck et Erich Gamma ont sorti JUnit en 2000, TDD est rapidement passé d'une pratique expérimentale de quelques programmeurs à la manière standard de développer des logiciels au 21ème siècle. Comme l'a dit Martin Fowler, "Jamais dans le domaine du développement de logiciels, autant n'a été dû autant à si peu de lignes de code", et ces quelques lignes de code ont été écrites en Java.

Vingt ans après sa création, Java n'est plus le parvenu décousu. Il est devenu le principal rebelle contre les autres langues. Des langages plus légers comme Ruby et Python ont fait des percées significatives sur le territoire de Java, en particulier dans la communauté des startups où la vitesse de développement compte plus que la robustesse et l'évolutivité - un compromis dont Java lui-même a profité au début lorsque les performances des machines virtuelles accusaient un retard de code compilé.

Java, bien sûr, n'est pas en reste. Oracle continue d'incorporer des technologies éprouvées d'autres langages tels que les génériques, l'autoboxing, les énumérations et, plus récemment, les expressions lambda. De nombreux programmeurs ont d'abord rencontré ces idées en Java. Tous les programmeurs ne connaissent pas Java, mais qu'ils le sachent ou non, tous les programmeurs d'aujourd'hui en ont été influencés.

Articles Liés

  • Review: Comparaison des 4 grands IDE Java
  • Java pour toujours! 12 clés de la domination durable de Java
  • Java vs Node.js: une bataille épique pour partager l'esprit des développeurs