Trois grands mensonges sur JavaScript

Bonjour, Habr! Je vous présente ma traduction de l'article " Les trois grands mensonges sur JavaScript " de Richard Kenneth. Cet article a été écrit en mai 2016, mais sa pertinence, à mon avis, n'a pas disparu. Je suis un programmeur débutant, donc des erreurs de "compréhension" sont possibles. Alors ...

Trois grands mensonges sur JavaScript


Il existe deux types de mensonges: le mensonge que nous disons aux autres et le mensonge que nous nous disons pour le justifier
Il y a trois gros mensonges que les fans de JavaScript me répètent encore et encore.

Mensonges # 1


JavaScript est le langage de programmation le plus mal compris au monde.
Les gens ne savent pas comment l'utiliser correctement et, par conséquent, ils sont constamment confrontés à toutes sortes de problèmes. Et c'est un mensonge, car en JavaScript il n'y a rien d'incompréhensible.

Il s'agit d'un langage de programmation impératif / procédural ordinaire avec une petite quantité de fonctionnalités de programmation (FP) et une fonction controversée «orientée objet» appelée prototypes d'objet. Et qu'est-ce qui est si spécial à ce sujet?

Fondamentalement, tous les problèmes qui se posent lors de l'utilisation de JavaScript ne sont que la faute des personnes qui l'utilisent: ils sont ignorants, ils sont paresseux, ils sont habitués à la programmation en Java ou en Python. Que ne savent-ils pas? Programmation fonctionnelle?

Pourquoi, alors, les gens ne se trompent-ils pas lorsqu'ils utilisent d'autres langages FP, tels que C #, Clojure, Dart, Elm, Erlang, F #, Julia, Haskell, Scala et Scheme ? La programmation fonctionnelle est un paradigme assez bien compris dans l'industrie informatique. Qu'est-ce qui rend JavaScript si particulièrement problématique à cet égard?

Peut-être que les gens ne connaissent pas les prototypes d'objets. Dans ce cas, lisez «Quels ne sont pas les prototypes d'objets JavaScript» . Bien entendu, les prototypes ne conviennent pas au développement de logiciels. Ce n'est pas un niveau d'abstraction de programmation particulièrement élevé. Les prototypes sont principalement des tables de hachage distinguées, un niveau assez bas et c'est ce que j'appelle des "blocs de construction" pour une vraie programmation orientée objet (POO basé sur les classes). Les gens peuvent ne pas comprendre comment utiliser des prototypes d'objets, mais pourquoi avez-vous besoin d'apprendre à "poser des briques"? Cela ne vaut pas votre effort.

Oui, je comprends. Les prototypes sont très flexibles. Ils ne possèdent pas tous les «rituels» sur lesquels repose le classique AKI. En ce sens, ils sont amusants à utiliser. Mais ils n'évoluent pas bien pour les grandes applications, et donc les gens retournent en classe. Si les prototypes étaient un truc aussi utile, vous le verriez adapté partout, car les prototypes peuvent être modélisés dans des langages basés sur des classes, tout comme les classes peuvent être modélisées dans des langages basés sur des prototypes. Et c'est quelque chose que les programmeurs JavaScript ne peuvent pas comprendre.

Mensonges # 2


La programmation asynchrone est une force clé de JavaScript. Eh bien, commençons par comprendre pourquoi la programmation asynchrone existe même en JavaScript .

Pour développer une interface utilisateur graphique (GUI), la boucle d'événement est - de rigueur (la chose habituelle) , que ce soit dans Windows , ou X Window , ou Cocoa d'OS X , ou un navigateur Web. Tous gèrent les événements d'entrée utilisateur de manière asynchrone. Est-ce à dire que la programmation asynchrone est aussi une puissance de C ++ ou Objective-C ? Des boucles d'événements (avec des bibliothèques asynchrones) ont également été utilisées en Python et Perl et Tcl . Alors, je suppose qu'ils ont tous le pouvoir de la programmation asynchrone? (Je ris quand les gens utilisent le mot inexistant « asynchronicité » ( asynchrone est un adjectif qui décrit des objets ou des événements qui ne sont pas coordonnés dans le temps ).

JavaScript utilise également une boucle d'événements et un traitement asynchrone pour prendre en charge l'interface utilisateur du navigateur Web. Cela fait-il de lui une excellente langue?

Et maintenant, ce modèle de calcul a rendu Node.js très populaire côté serveur, où il est utilisé pour le développement non GUI, c'est-à-dire pour une simultanéité haute performance. Le nœud est évidemment utile pour de nombreuses applications, mais il est peu probable qu'il envahisse le monde de la concurrence. Les événements récents montrent les limites de Node.js. Et oui, cela devrait convaincre tout le monde d'utiliser uniquement JavaScript.
Le cycle des événements a été décrit comme «le parallélisme des pauvres.
Les partisans de Node aiment montrer les mêmes exemples de grandes entreprises (PayPal, Netflix, Walmart, Uber, etc.) encore et encore. Que pour chaque exemple Node.js peut être comparé dans la réponse? - des centaines d'exemples Java ? Java a fait ses preuves d'innombrables fois pour le développement d'entreprise. C'est pourquoi c'est une norme de l'industrie. Node.js n'a pas encore fait ses preuves. Nous ne savons pas vraiment combien de sociétés ont essayé d'utiliser Node.js et l'ont finalement abandonné. Nous n'avons aucune idée du taux de réussite réel des projets Node.js. Pour les entreprises, opter pour Node.js reste un risque.
Je prédis avec confiance que Go remplacera Node à l'avenir dès qu'il développera son écosystème de frameworks et de packages. Sa trajectoire est indéniable.
Des langues comme Go et Erlang / Elixir peuvent facilement surpasser Node dans la plupart des scénarios de concurrence. Même le modèle de boucle événement / asynchrone n'est pas viable à long terme. Nous devrions être intéressés à utiliser de vrais langages de programmation parallèles si notre objectif est une performance maximale. Pourquoi faire des compromis avec JavaScript .

Mensonges # 3


JavaScript est le langage de programmation le plus populaire au monde.

En est-il vraiment ainsi? Il existe une énorme différence entre une langue largement utilisée par défaut et une langue largement utilisée.
N'oubliez pas que dans tout autre domaine que celui d'Internet, les développeurs ne sont pas les otages d'une seule langue. Nous ignorons ce fait à nos risques et périls.

JavaScript est la seule langue native d'un navigateur Web, c'est donc le moyen le plus direct d'écrire une application de navigateur. La plupart des développeurs, cependant, méprisent ce langage et s'ils avaient vraiment un meilleur choix, ils le feraient. Vous pouvez le vérifier vous-même si vous recherchez sur Internet (forums, réseaux sociaux, sites Web, etc.) les opinions des gens sur JavaScript . Il existe de nombreuses listes longues de WAT et WTF sur JavaScript que vous ne trouverez pour aucun autre langage que PHP . Ce que nous savons avec certitude, c'est que le Web est très populaire, pas JavaScript .

La plupart des principaux indices de classement des langages n'indiquent pas que JavaScript est le langage de programmation le plus populaire. Pas même la deuxième, la troisième ou la quatrième position. Selon l' IEEE Spectrum (American Journal) - il s'agit de la 8e place, PYPL # 5 , TIOBE # 7 , CodeEval # 6 . Redmonk (une société d'analyse) utilise des statistiques Github , qui montrent un nombre très élevé pour JavaScript , précisément parce que les applications Web écrites dans n'importe quelle langue doivent avoir au moins du JavaScript pour fonctionner dans le navigateur; il n'y a pas d'options. Par conséquent, Redmonk n'est pas en mesure de donner une évaluation objective des anomalies JavaScript ; sinon, le langage le plus populaire est Java .

Les sondages utilisateur, par exemple, provenant de StackOverflow, contiennent également un biais similaire dans la sélection. Comment pouvons-nous dire que JavaScript est un langage populaire lorsque nous n'avons pas d'autre choix que de l'utiliser seul? (Heureusement, des traducteurs sont à notre disposition).

Nous devons nous en souvenir pour d'autres domaines (par exemple, les serveurs réseau, les jeux et les graphiques, les mobiles, les ordinateurs de bureau, etc.). Il existe une grande variété dans le choix du langage de programmation. Les applications Web sont extrêmement uniques. (Au moins jusqu'à ce que la sortie de WebAssembly ait finalement lieu.)

Vrai


Soyons très clairs: JavaScript n'est pas un bon langage de programmation pour le développement de logiciels . JavaScript a été conçu pour être un langage de script léger et frais pour un navigateur Web. En tant que tel, il a été conçu pour être flexible et extrêmement indulgent, avec une frappe faible. Il n'a même pas le bon type entier ou le bon type de tableau. Quelle langue est-ce!?

Faible typage, c'est le talon d'Achille du langage de programmation avec lequel le logiciel est développé. Bien que cela rend très facile l'écriture de scripts simples et rapides pour un navigateur Web, cela fonctionne également contre vous lorsque vous écrivez de grandes applications qui nécessitent sécurité et fiabilité. C'est pourquoi la plupart des langues principales sont généralement fortement typées (à ne pas confondre avec les langues statiquement typées). Et c'est très, très important!

Une typification faible et la contrainte arbitraire qui en résulte démontrent un manque total de discipline linguistique. Cela explique la plupart de la liste des WAT et WTF.

généré par JavaScript. (De plus, l'auteur fournit des liens vers des ressources en ligne, où une liste de verrues JavaScript est fournie).

Source: https://habr.com/ru/post/fr445170/


All Articles