Java contre Google's Go: une bataille épique pour partager l'esprit des développeurs

Aller contre Java n'est pas une bataille entre égaux. L'un est un poids lourd monstrueux qui domine l'industrie depuis des années. L'autre est un nouveau venu léger et décousu qui fait preuve de beaucoup de jeunesse et de promesse, mais n'a que quelques coups de poing.

Java and Go aborde également différentes niches. L'un vise carrément les applications Web côté serveur, un domaine où l'autre était autrefois un acteur majeur. L'autre a dépassé la durée de vie des racks et est maintenant un choix populaire pour les appareils.

Mais tout le monde ne s'est pas éloigné de Java du côté serveur des applications Web, le territoire que Go attaque, ronge la base de Java. Et le changement n'est pas un très grand saut, car les deux sont similaires à bien des égards. Les deux adorent rendre hommage à C, sinon en dessous, du moins en surface où de nombreux développeurs passent leur vie à se débattre avec la syntaxe. Ils sont à la fois simples et impératifs avec suffisamment de similitudes structurelles pour qu'il ne soit pas difficile de convertir du code entre les deux. (Le projet TardisGo, par exemple, est un outil qui transformera Go en Java, C # ou JavaScript.)

Considérez ceci comme une correspondance en cage qui oppose deux cousins ​​de différents côtés des pistes de programmation en compétition pour votre prochaine pile d'applications.

La longue histoire de Java apporte des effets de réseau qui aident tout le monde

Java existe depuis 1995, attirant chaque année plus de part d'esprit. Tout, des minuscules processeurs intégrés aux puces de serveur massives, exécute Java rapidement et efficacement grâce à sa machine virtuelle agile juste à temps. Android est devenu une aubaine pour Java, en tant que plate-forme la plus populaire dans le monde mobile de loin. C'est pourquoi Java reste le meilleur dans les classements tels que l'indice Tiobe et PyPL. Cette large adoption signifie qu'il y a beaucoup de code à réutiliser, et une grande partie est open source pour vous simplifier la vie. Vous serez debout sur les épaules de géants lorsque vous commencerez à assembler les bazillions de lignes de code Java disponible gratuitement.

La courte histoire de Go le rend instantanément pertinent

Bien sûr, c'est cool de récupérer du code Java gratuit à partir du Web. Mais attendez, il est écrit pour Java 1.3, et votre patron veut que vous utilisiez Java 1.8. Ne vous inquiétez pas, vous pouvez probablement le faire fonctionner à nouveau avec un peu de réécriture. Déplaçons cette date limite encore ... et encore. L'ancien code peut sembler être un cadeau, mais ce n'est pas toujours un slam dunk, et parfois c'est plus de problèmes qu'il n'en vaut la peine.

La courte histoire de Go, en revanche, signifie qu'elle est écrite pour les normes Web actuelles. Il ne reste plus rien du temps où les applets allaient dominer le monde. Il n'y a pas d'idées oubliées depuis longtemps comme Java Beans ou J2EE comme des nuisances tentantes. C'est tout simplement nouveau et conçu pour la manière dont les gens créent le Web aujourd'hui.

Java vous permet d'exploiter d'autres langues

La JVM est la base de dizaines de langages intéressants qui dépendent de Java au moment de l'exécution. Chacun peut être facilement lié à votre code, vous permettant d'écrire une partie dans Kotlin, une autre dans Scala, et peut-être le coller avec Clojure. Si vous souhaitez utiliser des langages tels que Python, JavaScript ou Ruby, les trois peuvent s'exécuter directement dans Java Land à l'aide d'émulateurs qui sont souvent le premier choix. Java vous donne la liberté de laisser chaque sous-équipe et sous-projet choisir la bonne langue pour le travail tout en s'exécutant dans la même JVM. Vous n'avez pas besoin de l'utiliser, mais l'opportunité est toujours là.

Go favorise l'harmonie

Oui, vous pouvez créer une application ultra-intelligente qui mêle le meilleur du nouveau et de la mode, en choisissant le meilleur langage pour chaque partie de votre magnifique opus magnum sur la JVM. Vous pouvez même mélanger des anciens comme Rexx et Common Lisp pour honorer leur place dans l'histoire de l'informatique des années 70. Bonne chance pour trouver quelqu'un avec les mêmes goûts et talents qui maintiendra cette Tour de Babel. Mis à part le mélange dans quelques bibliothèques bien conçues, ce n'est pas toujours un bon plan d'émuler Rube Goldberg lors de la conception d'un bon code. Parfois, c'est opportun et nécessaire, mais cela ne veut pas dire que c'est un bon plan. L'harmonie et la cohérence facilitent la vie de tous. Le monde Go offre cela.

La JVM de Java est légère et puissante

Les fichiers de classe Java sont souvent mesurés en centaines d'octets. Les fichiers JAR qui les relient ne font généralement que quelques mégaoctets. Le code Java lui-même est petit car la machine virtuelle détient tellement de puissance pour la gestion de la mémoire et la sécurité. Si vous prévoyez de déplacer beaucoup de code, il est logique de laisser la fonctionnalité dans un outil d'exécution commun. La centralisation présente d’autres avantages. Si un problème de sécurité apparaît dans les niveaux les plus bas de Java, il n'est pas nécessaire de recompiler et de relier tout votre code. De nombreux problèmes sont résolus en mettant à niveau la JVM seule.

Go crée le package complet

La JVM est merveilleuse jusqu'à ce que vous trouviez que vous avez la mauvaise version installée. Si vous souhaitez exécuter un JAR contenant Java 1.8, mais que vous ne disposez que de la version 1.6 de la JVM, vous n'irez nulle part tant que vous ne l'avez pas trouvée. Le compilateur Go produit des binaires prêts à être exécutés. Oui, ils sont un peu gros, mais c'est parce que Go ajoute tout le code supplémentaire dans le binaire pour vous. Tout est là dans un seul et même package.

Java rend les threads extrêmement simples

Faire exécuter indépendamment différentes parties d'un programme n'est pas une tâche facile. Java a séduit les premiers fans car son modèle pour les threads était assez simple à comprendre tout en étant assez puissant pour être utile. La JVM fait un bon travail de mappage des threads vers différents cœurs de la machine. Ce n'est pas facile à faire, mais c'est à cause de la complexité du problème, pas de celui de Java. Les utilisateurs de Go peuvent adorer leurs goroutines et leurs canaux, mais ils ajoutent une autre couche de complexité noueuse à un désordre déjà noueux. Vous vous surprendrez à vous demander s'il s'agit d'un fil vert ou d'un fil OS. Ensuite, vous vous interrogerez sur la complexité des canaux de synchronisation. Java est plus simple.

Go allège la charge de thread, intelligemment

Les threads de Java et les primitives de synchronisation peuvent faire le travail, mais à un coût élevé. La création et la destruction de threads sont si laborieuses et gourmandes en mémoire que les programmeurs Java les recyclent toujours avec des pools de threads. Java a perdu de la traction sur le serveur car chaque appel sur le site Web a besoin de son propre thread. Go a des objets plus légers et plus flexibles appelés goroutines qui sont liés à des files d'attente de synchronisation intelligentes appelées canaux. Alors que la plupart des serveurs semblent dépasser 1000 ou peut-être 10000 threads Java, les gens rapportent régulièrement exécuter des centaines de milliers de goroutines sur le même matériel.

Le modèle de Go est plus sophistiqué et moderne car il est plus jeune. Le domaine a beaucoup appris sur la fourniture d'algorithmes multiprocesseurs sophistiqués, et vous pourriez aussi bien en profiter.

Les outils Java ont fait leurs preuves

La maturité de Java signifie que vous disposez de nombreuses options intéressantes pour les outils: Eclipse, IntelliJ, etc. Il existe des outils de construction sophistiqués comme Ant et Maven, et les principaux référentiels sont optimisés pour gérer le code Java. Il existe également des analyses de méta-code pour tout, de l'application des règles de code à la recherche de conditions de concurrence. Ils peuvent ne pas fonctionner avec votre version du code, mais ils le font souvent. C'est pourquoi Java est un tel poids lourd.

Les outils Go sont modernes et nouveaux

Go a été conçu pour le monde multithread moderne, et les outils de code sont optimisés pour les défis d'aujourd'hui. Il y a un détecteur de condition de course intégré au débogueur et à l'exécution, il est donc beaucoup plus simple de traiter des problèmes désagréables. Le code source peut être audité par golint et un analyseur statique appelé «go vet» qui a un certain nombre d'heuristiques pour attraper du code Go mauvais ou même mal écrit. Tous ces éléments et bien d'autres sont optimisés pour que votre code continue de fonctionner rapidement dans une machine multicœur.

Java a les constructions que vous voulez

Au fil des années, la communauté Java a souhaité de nombreuses fonctionnalités; parfois, ils ont été accordés. Des fermetures, des génériques, des lambdas et plus ont été ajoutés. S'il y a une nouvelle idée dans les langages de programmation, il y a de fortes chances que quelqu'un l'ait introduite dans le monde Java. Ce n'est peut-être pas idéal, mais les options sont là. Vous pouvez écrire le code brillant que votre cerveau imagine grâce à l'évolution continue de Java.

Aller évite la confusion de construction

La liberté d'utiliser des dizaines de structures de codage intelligentes sonne bien jusqu'à ce que tout le monde dans l'équipe commence à le faire. Ensuite, lire le code de quelqu'un d'autre devient plus difficile car il utilise la fonctionnalité intelligente A tandis que votre cerveau est acclimaté à la fonctionnalité intelligente B. La confusion combinatoire se développe avec chaque développeur qui ajoute sa construction préférée dans le mélange.

Go, en revanche, a été conçu pour être simple. Il a été explicitement construit pour qu'un bon programmeur puisse apprendre le Go en quelques heures. Il n'y a pas des dizaines d'idées intelligentes qui remplissent des centaines de pages de documentation. Cela peut être limitant lors de l'écriture de code, mais c'est relaxant lors de la lecture du code des autres membres de l'équipe. Tout le monde utilise les mêmes expressions idiomatiques car tout le monde utilise les mêmes fonctionnalités de base. Ce n'est pas simplement une expérience de consolidation d'équipe, comme Outward Bound. C'est une question d'efficacité.

Java est mature

L'âge apporte sagesse, maturité et stabilité - toutes les raisons de choisir une base de code large et bien conçue, profonde de plus de deux décennies. Les enfants d'aujourd'hui continuent à apprendre Java au début de leur parcours avec l'informatique, et la plate-forme la plus dominante, Android, est construite dessus. À moins qu'il n'y ait une bonne raison de changer, vous devriez vous en tenir aux meilleurs.

Go est une table rase

Parfois, il est préférable de laisser le passé derrière soi. Après tout, progresser signifie souvent repartir à zéro. Go vous offre la possibilité de travailler avec un outil propre, net et moderne, optimisé pour ce que nous faisons aujourd'hui. Il vous permet de profiter de la simplicité et de la liberté de laisser le passé derrière vous.

Et tout simplement parce que Google a commencé Go pour apporter une certaine simplicité au codage pour leurs fermes de serveurs sans fin, cela ne signifie pas qu'il ne peut pas le dépasser. Certains l'utilisent déjà pour exécuter des drones, des robots et d'autres appareils. Les smartphones peuvent-ils être loin derrière?

Articles Liés

  • Appuyez sur la puissance de la langue Go de Google
  • Les meilleurs IDE et éditeurs de langage Go
  • Bilan: les quatre grands IDE Java comparés
  • Angular vs React: une bataille épique pour partager l'esprit des développeurs
  • Java vs Node.js: une bataille épique pour partager l'esprit des développeurs
  • PHP vs Node.js: une bataille épique pour le partage de l'esprit des développeurs
  • Python vs R: la bataille pour le partage de l'esprit des data scientist
  • 21 tendances de programmation à chaud et 21 à froid
  • 9 mensonges que les programmeurs se disent
  • Astuces de carrière: ce qu'il faut faire et ne pas faire pour les développeurs