Node.js vs Java: une bataille épique pour le partage d'esprit des développeurs

Dans l'histoire de l'informatique, 1995 a été une période folle. Java est apparu en premier, puis JavaScript a suivi. Les noms les faisaient ressembler à des jumeaux siamois nouvellement détachés, mais ils ne pouvaient pas être plus différents. L'un d'eux est compilé et typé statiquement; l'autre interprété et typé dynamiquement. Ce n'est que le début des différences techniques entre ces deux langages extrêmement distincts qui ont depuis évolué vers une sorte de parcours de collision, grâce à Node.js.

Si vous êtes assez vieux pour avoir vécu à l'époque, vous vous souviendrez peut-être du premier pic épique de Java. Il a quitté les laboratoires et son indicateur de battage publicitaire a été épinglé. Tout le monde y voyait une révolution qui ne s'arrêterait qu'à une prise de contrôle totale de l'informatique. Cette prédiction n'a finalement été que partiellement correcte. Aujourd'hui, Java domine les téléphones Android, l'informatique d'entreprise et certains mondes embarqués comme les disques Blu-ray.

Malgré tout son succès, cependant, Java n'a jamais établi beaucoup de traction sur le bureau ou dans le navigateur. Les gens ont vanté la puissance des applets et des outils basés sur Java, mais la saleté a toujours eu des problèmes avec ces combinaisons. Les serveurs sont devenus le sweet spot de Java.

Pendant ce temps, ce que les programmeurs ont initialement confondu avec le jumeau stupide a pris tout son sens. Bien sûr, JavaScript a été suivi pendant quelques années alors que HTML et le Web attiraient un Borg sur le monde. Mais cela a changé avec AJAX. Soudain, le jumeau muet avait du pouvoir.

Puis Node.js a été engendré, faisant tourner la tête des développeurs avec sa vitesse. Non seulement JavaScript était plus rapide sur le serveur que quiconque ne l'avait prévu, mais il était souvent plus rapide que Java et d'autres options. Son régime régulier de petites demandes de données rapides et sans fin a depuis rendu Node.js plus courant, car les pages Web sont devenues plus dynamiques.

Bien que cela ait pu être impensable il y a 20 ans, les quasi-jumeaux sont maintenant enfermés dans une bataille pour le contrôle du monde de la programmation. D'un côté se trouvent les fondations profondes d'une ingénierie et d'une architecture solides. De l'autre côté se trouvent la simplicité et l'ubiquité. Le monde de Java, basé sur les compilateurs à l'ancienne, va-t-il tenir bon, ou la vitesse et la flexibilité de Node.js aideront-elles JavaScript à continuer à engloutir tout sur son passage?

Là où Java gagne: une base solide comme le roc

J'entends les développeurs rire. Certains peuvent même mourir d'insuffisance cardiaque. Oui, Java a des problèmes et des bugs, mais relativement parlant, c'est le rocher de Gibraltar. La même foi en Node.js remonte à plusieurs années. En fait, il faudra peut-être des décennies avant que l'équipe JavaScript n'écrive presque autant de tests de régression que Sun / Oracle a développé pour tester la machine virtuelle Java. Lorsque vous démarrez une JVM, vous bénéficiez de 20 ans d'expérience d'un conservateur solide déterminé à dominer le serveur d'entreprise. 

Le monde JavaScript rattrape rapidement son retard. Lorsqu'une grande partie du Web dépend du moteur d'exécution JavaScript, un milliard d'heures de développeur sont consacrées au polissage de tous les bords. Mais toute l'innovation a un inconvénient, car les nouvelles fonctionnalités peuvent proliférer plus rapidement que la base de développeurs ne peut les absorber. Les développeurs de la vieille école sont souvent confus par le code rempli des nouvelles améliorations de la syntaxe ECMAScript - et ce même nouveau code plantera tranquillement certains navigateurs plus anciens. L'offre infinie de préprocesseurs innovants comme CoffeeScript et JSX peut être idéale pour les développeurs qui souhaitent ces fonctionnalités, mais ils rendent plus difficile pour le reste d'entre nous d'ouvrir un fichier aléatoire et de le comprendre immédiatement.

Java a son lot de nouvelles fonctionnalités et options, mais pour la plupart, c'est une plate-forme stable. Cela rend la vie beaucoup plus facile pour les développeurs qui construisent quelque chose pour durer.

Là où Node.js gagne: Ubiquity

Grâce à Node.js, JavaScript trouve une maison sur le serveur et dans le navigateur. Le code que vous écrivez pour l'un fonctionnera probablement de la même manière sur les deux. Rien n'est garanti dans la vie, mais c'est aussi proche que possible dans le secteur informatique. Il est beaucoup plus facile de s'en tenir à JavaScript pour les deux côtés de la fracture client / serveur que d'écrire quelque chose une fois en Java et à nouveau en JavaScript, ce que vous auriez probablement besoin de faire si vous décidiez de déplacer la logique métier que vous avez écrite en Java pour le serveur vers le navigateur. Ou peut-être que le patron insistera pour que la logique que vous avez créée pour le navigateur soit déplacée vers le serveur. Dans les deux sens, Node.js et JavaScript facilitent la migration du code.

L'avance de Node dans ce monde ne fait que s'étendre. Les frameworks Web les plus sophistiqués, comme React, décideront à la dernière seconde d'exécuter le code sur le serveur ou le client. Un jour, il fonctionnera sur le client et un autre jour, il fonctionnera sur le serveur. Une logique intelligente prendra la décision à la volée en fonction de la charge, de la mémoire RAM disponible ou de quelque chose d'autre. Certains frameworks expédient JavaScript à la base de données sous forme de requête où il est exécuté. Votre code peut s'exécuter n'importe où et il devient plus difficile de suivre le rythme car il n'envoie pas de carte postale à la maison. Soyez simplement heureux parce que vous n'avez pas besoin de penser aux détails.

Là où Java gagne: de meilleurs IDE

Les développeurs Java ont Eclipse, NetBeans ou IntelliJ, trois outils de premier ordre qui sont bien intégrés aux débogueurs, décompilateurs et serveurs. Chacun a des années de développement, des utilisateurs dédiés et des écosystèmes solides remplis de plug-ins.

Pendant ce temps, la plupart des développeurs Node.js saisissent des mots dans la ligne de commande et codent dans leur éditeur de texte préféré. Oui, certains des meilleurs éditeurs de texte comme Atom ont des collections élaborées de plug-ins qui font presque tout, mais même dans ce cas, on a l'impression que Node.js est plus old school qu'Eclipse. Nous remplacerons bientôt notre souris par un joystick Atari.

Certains développeurs utilisent Eclipse ou Visual Studio, qui prennent tous deux en charge Node.js. Bien sûr, le regain d'intérêt pour Node.js signifie que de nouveaux outils arrivent, dont certains, comme Node-RED d'IBM, offrent des approches intrigantes, mais ils sont encore loin d'être aussi complets ou aussi dominants qu'Eclipse ou IntelliJ.

Le plus étrange, c'est que les développeurs ne semblent pas utiliser ces outils. La ligne de commande était censée disparaître il y a 35 ans avec l'arrivée du Mac, mais personne ne l'a dit aux développeurs de Node.js. Les options sont là. WebStorm, par exemple, est un outil commercial solide de JetBrains qui intègre de nombreux outils de création en ligne de commande.

Bien sûr, si vous recherchez un IDE qui édite et jongle avec le code, les nouveaux outils qui prennent en charge Node.js sont assez bons. Mais si vous demandez à votre IDE de vous laisser modifier pendant que vous utilisez le code source en cours d'exécution comme un chirurgien cardiaque coupe un coffre, eh bien, les outils Java sont beaucoup plus puissants. Tout est là, et tout est local.

Où Node.js gagne: requêtes de base de données

Les requêtes pour certaines des bases de données les plus récentes, comme CouchDB et MongoDB, sont écrites en JavaScript. Le mélange de Node.js et d'un appel à la base de données ne nécessite aucun changement de vitesse, encore moins le besoin de se souvenir des différences de syntaxe. 

Pendant ce temps, de nombreux développeurs Java utilisent SQL. Même lorsqu'ils utilisent Java DB - anciennement Derby, une base de données écrite en Java pour les développeurs Java - ils écrivent leurs requêtes en SQL. Vous penseriez qu'ils appelleraient simplement des méthodes Java, mais vous vous trompez. Vous devez écrire le code de votre base de données en SQL, puis laisser Derby analyser le SQL. SQL est un langage agréable, mais il est complètement différent de Java, et de nombreuses équipes de développement ont besoin de personnes différentes pour écrire SQL et Java.

Pour aggraver les choses, de nombreux codeurs Java utilisent des bibliothèques et des schémas élaborés pour convertir les données de la requête SQL en objets Java afin de pouvoir les refondre en modèles. C'est un processus fou, et finalement assez coûteux.

Là où Java gagne: les types 

De nombreux cours d'introduction à la programmation continuent à utiliser Java car de nombreux programmeurs sérieux ont tendance à aimer le code de type statique à la fois pour la simplicité et la sécurité. Le code semble plus rigoureux après que le compilateur a détecté les bogues évidents.

JavaScript, cependant, rattrape son retard et certains développeurs passent à TypeScript, un sur-ensemble de JavaScript typé statiquement qui applique toute la magie de la vérification de type avant de cracher quelque chose qui s'exécute dans la pile JavaScript de votre navigateur. Si vous aimez les types, cela peut suffire pour que vous adoptiez JavaScript. Ou vous pouvez simplement reconnaître l'imitation comme la forme la plus sincère de flatterie et vous en tenir à Java, qui a adopté la saisie statique depuis le début.

Là où Node.js gagne: la flexibilité syntaxique

JavaScript était autrefois un langage simple permettant d'afficher des boîtes d'alerte indésirables et de vérifier la saisie du formulaire. Ensuite, la communauté des développeurs a créé de nombreuses versions différentes du langage qui pourraient être transposées en quelque chose pour le navigateur. Il y a la foule CoffeeScript offrant une poignée de syntaxes différentes conçues pour satisfaire le goût de la ponctuation plus propre. Il y a la foule React / Vue qui mélange HTML et JavaScript simplement parce que c'est plus propre. Il existe TypeScript pour les amateurs de type et LiveScript pour les adeptes du langage fonctionnel.

Vous trouverez également une énorme quantité de créativité dans le monde Java, mais pour une raison quelconque, elle n'est pas exprimée avec de nombreux pré-processeurs. Il existe un certain nombre de langages tels que Kotlin, Scala et Clojure qui sont transformés en code octet pour la JVM, mais ils se sentent assez différents pour se démarquer en tant que langues séparées. Tous les préprocesseurs rendent la vie plus amusante pour les programmeurs JavaScript qui aiment différentes façons de formuler ou de ponctuer leur code.

Là où Java gagne: un processus de construction simple 

Des outils de construction compliqués comme Ant et Maven ont révolutionné la programmation Java. Mais il n'y a qu'un seul problème. Vous écrivez la spécification en XML, un format de données qui n'a pas été conçu pour prendre en charge la logique de programmation. Bien sûr, il est relativement facile d'exprimer des branches avec des balises imbriquées, mais il y a quelque chose d'ennuyeux à passer de Java à XML simplement pour construire quelque chose. Avec JavaScript, il n'y a pas de changement de vitesse. 

Node.js avait la version la plus simple. Il vous suffit de modifier le code, puis d'appuyer sur «exécuter». C'était alors. Au fur et à mesure que les développeurs de Node ont «amélioré» le processus, ils ont ajouté des préprocesseurs qui prennent votre sous-dialecte préféré de JavaScript et le transforment en quelque chose d'exécutable. Ensuite, le gestionnaire de packages Node doit trouver la bonne bibliothèque. La plupart du temps, cela fonctionne, mais parfois ce n'est pas le cas et vous passez du temps à rechercher le bon numéro de version d'un artefact que vous créez vous-même dans une étape distincte. Et si vous commettez une erreur dans le référentiel d'artefacts, eh bien, ce numéro de version est tiré et vous devez à nouveau tourner les roues du compteur kilométrique.

Java a également un processus de construction complexe qui est assez similaire à la méthode Node.js, mais il ne semble pas qu'il soit devenu plus complexe. D'une manière ou d'une autre, Maven et Ant semblent faire partie de la fondation Java maintenant. La plupart des aspérités ont disparu depuis longtemps et les constructions fonctionnent plus souvent. S'il y avait une mesure absolue des tracas de construction, les deux langages pourraient être similaires, mais l'explosion rapide de la complexité de JavaScript signifie que Java gagne.

Vidéo connexe: trucs et astuces Node.js

Dans cette vidéo explicative, découvrez plusieurs techniques qui peuvent améliorer votre expérience de développement de nœuds.

Où Node.js gagne: JSON

Lorsque les bases de données crachent des réponses, Java met tout en œuvre pour transformer les résultats en objets Java. Les développeurs se disputeront pendant des heures sur les mappages POJO, Hibernate et d'autres outils. Leur configuration peut prendre des heures, voire des jours. Finalement, le code Java obtient des objets Java après toute la conversion. Et en ce qui concerne la configuration, le monde Java s'accroche toujours à XML et propose même deux analyseurs majeurs pour donner aux développeurs plus de raisons de s'inquiéter.

Aujourd'hui, de nombreux services Web et bases de données renvoient des données en JSON, une partie naturelle de JavaScript. JSON est maintenant si courant et utile que de nombreux développeurs Java utilisent le format, et un certain nombre de bons analyseurs JSON sont également disponibles en tant que bibliothèques Java. Mais JSON fait partie de la base de JavaScript. Vous n'avez pas besoin de bibliothèques. Tout est là et prêt à partir.

Là où Java gagne: le débogage à distance

Java possède des outils incroyables pour surveiller les grappes de machines. Il existe des liens profonds avec la JVM et des outils de profilage élaborés pour aider à identifier les goulots d'étranglement et les échecs. La pile d'entreprise Java exécute certains des serveurs les plus sophistiqués de la planète, et les entreprises qui utilisent ces serveurs ont exigé le meilleur de la télémétrie. Tous ces outils de surveillance et de débogage sont assez matures et prêts à être déployés.

Là où Node.js gagne: Desktop

Il peut y avoir des applets Java en cours d'exécution, et je maintiens toujours des fichiers Java JAR sur lesquels je peux cliquer pour les exécuter, mais pour la plupart, le monde du bureau est largement libre de Java. JavaScript, en revanche, continue de capturer de plus en plus l'action, car le navigateur occupe la plupart des rôles de notre bureau. Lorsque Microsoft a réécrit Office pour qu'il fonctionne dans le navigateur, les dés ont été jetés. Si vous vous demandez toujours, il existe des options intéressantes comme Electron qui prennent votre code Web et le transforment en une application de bureau autonome.

Là où Java gagne: les ordinateurs de poche

Les applications Android sont souvent écrites en Java et 90% des nouveaux téléphones utilisent une version d'Android. Beaucoup de gens n'utilisent même plus les ordinateurs de bureau parce que les téléphones sont assez bons pour tout.

Bien sûr, il y a un peu de confusion. De nombreux développeurs écrivent des applications Web Node.js qui ciblent les navigateurs mobiles à la fois sur l'iPhone et les Androids. Si cela est bien fait, les performances sont souvent assez bonnes.