JAVA est sous-estimé criminellement

Le point de vue d'un étudiant en informatique ignorant



image




Vous avez probablement lu le titre de cet article et vous vous êtes dit: «Qu'est-ce que ce type fume? Java est partout! " Vous avez raison, Java domine toujours l'industrie et alimente certaines des plus grandes applications critiques au monde. Mais la diffusion de Java n'est pas ce dont je parle, je parle du battage médiatique qui l'entoure. Je passe beaucoup de temps avec des programmeurs inexpérimentés. Qu'est-ce que les programmeurs inexpérimentés aiment faire? Soyez anxieux et trop confiant sur les outils comme les langages de programmation. Aucun des étudiants CS que je rencontre n'admire Java, et je pense qu'il ne devrait pas en être ainsi.



Les jeunes développeurs naïfs (moi y compris) tombent souvent dans le piège de la fétichisation de nouveaux langages et outils au détriment de la performance et de la raison. Avant de travailler chez Halp (maintenant propriété de $ TEAM), j'avais une relation presque amoureuse avec TypeScript côté serveur. Je pensais que l'écosystème node.js était la chose la plus cool: j'ai adoré l'idée de code transpilé, de débogage en temps réel, d'une énorme bibliothèque de paquets et même de systèmes de construction étranges et fragmentés. Quand je l'ai utilisé en développement et que j'ai parlé avec des ingénieurs plus expérimentés, la magie a rapidement disparu.



J'avais un attachement irrationnel à l'écosystème JS parce que c'était une nouveauté brûlante; c'était du battage médiatique. La réalité n'a pas été à la hauteur de mes attentes. Aujourd'hui, j'apprécie les choses merveilleuses que j'attends de JavaScript en acquérant de l'expérience avec Java. Je me sens triché que le battage médiatique ne m'a pas conduit à Java plus tôt. Java est amusant à écrire, productif et jouit d'une réputation injuste de dinosaure parmi les nouveaux développeurs.



L'ergonomie est ce qui fait de Java un excellent langage de programmation



Cela ne doit pas être sous-estimé: Java est juste un plaisir à écrire. Cela est largement dû à la compétence que JetBrains met dans IntelliJ IDEA. Tout est rempli automatiquement, le passage à la définition est rapide, l'utilisation de find fonctionne bien et la refactorisation est facile. Cependant, où Java brille vraiment, c'est dans l'expérience des développeurs avec des bibliothèques tierces.



Dépendance à la charge de travail lourde et tendances du secteur



Mon expérience est limitée, mais j'ai l'impression que le vent s'est déplacé vers la libéralisation des dépendances extérieures. Pas inventé Ici n'est plus à la mode, Pas inventé Il y a à la mode . En particulier, les développeurs JavaScript sont plus susceptibles d'inclure des bibliothèques tierces, même pour des opérations triviales telles que le remplissage du nombre à gauche . Je ne pense pas que l'attachement actuel aux dépendances tierces soit particulièrement nocif, mais les modifications d'API en amont pourraient nuire aux bases de code JS / Python non typées.



Lorsque vous utilisez des bibliothèques tierces en Java, vous savez toujours exactement quels types vous devez transmettre à une méthode. Plus important encore, une mauvaise utilisation de la fonction entraînera des lignes ondulées rouges dans votre éditeur. Étant donné que les bibliothèques sont largement utilisées, je pense que plus de gens devraient être enthousiastes à propos de Java.



La numérotation nominale permet de gagner du temps



Dynamique / implicite / faible / tout typage présente un certain nombre d'inconvénients. Lorsqu'une dépendance modifie la méthode API et que votre application se bloque au moment de l'exécution plutôt qu'au moment de la construction, c'est un problème. Lorsqu'un développeur doit revenir à l'implémentation d'une méthode pour déterminer quels types passer, c'est une perte de temps. Les indices de type TypeScript et Python abordent ce problème légèrement, mais n'ont pas la possibilité de vérifier les types passés au moment de l'exécution sans code supplémentaire.



La protection de type est ma fonctionnalité TypeScript la moins préférée. Fondamentalement, il s'agit d'un typage implicite que vous devez implémenter vous-même et être sûr qu'il est correctement implémenté. À mon avis, c'est le pire des deux mondes. Considérer ce qui suit:



interface Dog {
    bark: () => void;
}

/* The developer has to manually implement
a heuristic check for interface adherence!
When they update the interface, they have
to update the type guards too! */
function isDog(pet: object): pet is Dog {
  return (pet as Dog).bark !== undefined;
}
const dog: any = {bark: () => console.log('woof')};

if (isDog(dog)) {
    // TS now knows that objects within this if statement are always type Dog
    // This is because the type guard isDog narrowed down the type to Dog
    dog.bark();
}
      
      





Il y a quelque chose dans la déclaration de type AND de la nécessité d'écrire une logique de validation pour le type spécifié qui m'inquiète vraiment. Le code ci-dessus semble que quelqu'un utilisait le mauvais outil.



Contrairement aux définitions TypeScript, les systèmes de types nominaux de Java soulagent le cerveau du programmeur en cristallisant les définitions de type et en garantissant la protection de type par défaut.



Suppression de la responsabilité d'optimisation



Les développeurs Java peuvent en toute confiance faire confiance à la JVM pour créer les meilleures applications. Qu'ils implémentent une application multi-thread ou stockent une grande quantité de données sur le tas, ils peuvent être sûrs de ne pas se faire tirer dessus par la gestion de la mémoire ou les courses de données. C'est avant tout un avantage par rapport au C ++, qui contient de nombreux footguns.



Cela fait partie de l'expérience ergonomique Java. Lorsqu'un développeur a moins à se soucier des détails techniques, il peut se concentrer davantage sur le problème actuel.



Le Saint Graal de la productivité



De combien de langues vous souvenez-vous qui remplissent les conditions suivantes?



  1. Gestionnaire de package qualité et système de construction (Maven)
  2. Jeu nominal
  3. Grande communauté
  4. Optimisation automatique


Je pense que le seul outil approprié est Java, mais faites-moi savoir s'il y en a d'autres!



edit: Comme Jwosty l'a souligné , le rival de Java Microsoft C # a toutes ces caractéristiques et plus / de nouvelles fonctionnalités de langage. Je n'ai jamais utilisé C # en dehors du moteur de jeu Unity, mais je vais l'apprendre.



Absence surprenante du cursus universitaire



J'étudie actuellement à l'Université du Colorado à Boulder; c'est une excellente école, mais pas exactement connue pour CS. Cependant, la plupart de nos programmes d’informatique au lycée sont volés sans vergogne à la CMU ou à Stanford. Au cours de mes études à CU, j'ai utilisé les langages de programmation suivants:



  1. C++. : , , . . , , .
  2. Python Julia. , .
  3. Scala. Principles of Programming Languages, . Scala JVM Java, , Java.
  4. Langages Web (HTML / CSS / JS). Ils n'ont été utilisés que dans un seul cours, Techniques et outils de développement logiciel, sur les tendances de l'industrie.


Je termine ce semestre et Java n'est pas apparu une seule fois; Je considère que c'est dommage.



Conclusion



Il n'y a pas de véritable moyen de créer des applications, mais je pense que Java ne reçoit pas l'attention qu'il mérite, en particulier parmi les startups et la communauté de programmation novice. Les langages non typés sont des outils utiles, mais je ne pense pas qu'ils devraient être le choix par défaut pour créer de grandes applications. Si vous êtes un développeur complet et que vous n'avez jamais beaucoup utilisé Java, je pense que vous serez agréablement surpris si vous l'essayez sur votre prochain projet.



Java et la JVM étaient à la mode dans les années 90 et au début des années 2000, mais je ne pense pas qu'ils devraient jamais disparaître! L'expérience de développement que j'ai acquise avec IntelliJ et Java est admirable.



Je suis curieux de savoir pourquoi Java a perdu du tout le battage médiatique. L'histoire culturelle des programmeurs est mal documentée, et si vous avez une compréhension, veuillez m'envoyer un e-mail ou laisser un commentaire (sur reddit / Hacker News ).



All Articles