Hallo Habr! Ich präsentiere Ihnen meine Übersetzung des Artikels
" Die drei großen Lügen über JavaScript " von Richard Kenneth. Dieser Artikel wurde im Mai 2016 verfasst, aber seine Relevanz ist meiner Meinung nach nicht verschwunden. Ich bin ein Anfänger Programmierer, daher sind Fehler in Bezug auf "Verständnis" möglich. Also ...
Drei große Lügen über JavaScript
Es gibt zwei Arten von Lügen: die Lüge, die wir anderen erzählen, und die Lüge, die wir uns selbst sagen, um sie zu rechtfertigen
Es gibt drei große Lügen, die mir JavaScript-Fans immer wieder erzählen.
Lügen # 1
JavaScript ist die am meisten missverstandene Programmiersprache der Welt.Die Leute wissen nicht, wie man es richtig benutzt, und deshalb geraten sie ständig in alle möglichen Probleme. Und das ist eine Lüge, denn in
JavaScript gibt es nichts Unverständliches.
Dies ist eine gewöhnliche imperative / prozedurale Programmiersprache mit einer geringen Menge an Programmierfunktionalität (FP) und einer kontroversen „objektorientierten“ Funktion, die als Objektprototypen bezeichnet wird. Und was ist das Besondere daran?
Grundsätzlich sind alle Probleme, die bei der Verwendung von JavaScript auftreten, nur die Schuld der Benutzer: Sie sind unwissend, faul und an die Programmierung in Java oder Python gewöhnt. Was wissen sie nicht? Funktionale Programmierung?
Warum irren sich die Leute dann nicht, wenn sie andere FP-Sprachen wie
C #, Clojure, Dart, Ulme, Erlang, F #, Julia, Haskell, Scala und Schema verwenden ? Funktionale Programmierung ist ein ziemlich gut verstandenes Paradigma in der IT-Branche. Was macht JavaScript in dieser Hinsicht so besonders problematisch?
Vielleicht kennen sich die Leute nicht mit Prototypen von Objekten aus. Lesen Sie in diesem Fall
"Was JavaScript-Objektprototypen nicht sind". Prototypen sind natürlich nicht für die Softwareentwicklung geeignet. Sie sind kein besonders hohes Maß an Programmierabstraktion. Prototypen sind meistens ausgezeichnete Hash-Tabellen, ziemlich niedrig und dies ist das, was ich als "Bausteine" für echte objektorientierte Programmierung (klassenbasierte OOP) bezeichne. Die Leute verstehen vielleicht nicht, wie man Prototypen von Objekten verwendet, aber warum müssen Sie lernen, wie man „Steine legt“? Das ist Ihre Mühe nicht wert.
Ja, ich verstehe. Prototypen sind sehr flexibel. Sie besitzen nicht alle „Rituale“, auf denen das klassische AKI steht. In diesem Sinne macht es Spaß, sie zu benutzen. Sie lassen sich jedoch nicht gut für große Anwendungen skalieren, weshalb die Benutzer wieder in den Unterricht zurückkehren. Wenn Prototypen eine so nützliche Technik wären, würden Sie sie überall angepasst sehen, da Prototypen in klassenbasierten Sprachen modelliert werden können, genauso wie Klassen in prototypbasierten Sprachen modelliert werden können. Und das können
JavaScript- Programmierer nicht herausfinden.
Lügen # 2
Asynchrone Programmierung ist eine wesentliche Stärke von JavaScript. Lassen Sie uns zunächst verstehen, warum es in
JavaScript überhaupt asynchrone Programmierung gibt.
Für die Entwicklung einer grafischen Benutzeroberfläche (GUI) ist die Ereignisschleife -
de rigueur (das Übliche) , ob in
Windows ,
X Window ,
OS Coco Cocoa oder einem Webbrowser. Alle behandeln Benutzereingabeereignisse asynchron. Bedeutet dies, dass asynchrone Programmierung auch eine Leistung von
C ++ oder
Objective-C ist ? Ereignisschleifen (mit asynchronen Bibliotheken) wurden auch in
Python, Perl und
Tcl verwendet . Dann haben sie wohl alle die Macht der asynchronen Programmierung? (Ich lache, wenn Leute das nicht existierende Wort „
Asynchronität “ verwenden (
asynchron ist ein Adjektiv, das Objekte oder Ereignisse beschreibt, die nicht zeitlich koordiniert sind ).
JavaScript verwendet außerdem eine Ereignisschleife und eine asynchrone Verarbeitung, um die Benutzeroberfläche des Webbrowsers zu unterstützen. Macht ihn das zu einer großartigen Sprache?
Und jetzt hat dieses Rechenmodell
Node.js auf der Serverseite sehr beliebt gemacht, wo es für die Entwicklung ohne GUI verwendet wird, d. H. für Hochleistungs-Parallelität.
Der Knoten ist offensichtlich für viele Anwendungen nützlich, aber es ist unwahrscheinlich, dass er die Welt der Parallelität übernimmt. Aktuelle Ereignisse zeigen die Einschränkungen von
Node.js. Und ja, dies sollte alle davon überzeugen, nur JavaScript zu verwenden.
Der Zyklus der Ereignisse wurde als „Parallelität der Armen“ beschrieben.
Unterstützer von
Node zeigen immer wieder dieselben Beispiele für große Unternehmen (PayPal, Netflix, Walmart, Uber usw.). Was kann für jedes
Node.js- Beispiel in der Antwort verglichen werden? - Hunderte von
Java- Beispielen?
Java hat sich unzählige Male für die Unternehmensentwicklung bewährt. Deshalb ist es ein Industriestandard.
Node.js hat sich noch nicht bewährt. Wir wissen nicht genau, wie viele Unternehmen versucht haben,
Node.js zu verwenden, und haben es schließlich aufgegeben. Wir haben keine Ahnung, wie hoch die tatsächliche Erfolgsquote von
Node.js Projekten ist. Für Unternehmen ist die Entscheidung für
Node.js immer noch ein Risiko.
Ich gehe zuversichtlich davon aus, dass Go Node in Zukunft ersetzen wird, sobald es sein Ökosystem aus Frameworks und Paketen erweitert. Ihre Flugbahn ist unbestreitbar.
Sprachen wie
Go und
Erlang / Elixir können
Node in den meisten Parallelitätsszenarien leicht übertreffen. Selbst das Ereignis- / Asynchronschleifenmodell ist auf lange Sicht nicht nachhaltig. Wir sollten daran interessiert sein, echte parallele Programmiersprachen zu verwenden, wenn unser Ziel maximale Leistung ist. Warum mit
JavaScript Kompromisse
eingehen?Lügen # 3
JavaScript ist die beliebteste Programmiersprache der Welt.Ist das wirklich so? Es gibt einen großen
Unterschied zwischen einer Sprache, die standardmäßig weit verbreitet ist, und einer Sprache, die weit verbreitet ist.
Denken Sie daran, dass Entwickler in keinem anderen Bereich außer dem Internet Geiseln einer Sprache sind. Wir ignorieren diese Tatsache auf eigenes Risiko.
JavaScript ist die einzige Muttersprache für einen Webbrowser. Dies ist daher die direkteste Methode zum Schreiben einer Browseranwendung. Die meisten Entwickler verachten diese Sprache jedoch und wenn sie wirklich eine bessere Wahl hätten, würden sie es schaffen. Sie können dies selbst überprüfen, wenn Sie im Internet (Foren, soziale Netzwerke, Websites usw.) nach Meinungen von Personen zu
JavaScript suchen. Es gibt viele lange Listen von
WATs und
WTFs zu
JavaScript , die Sie für keine andere Sprache als
PHP finden .
Was wir sicher wissen, ist, dass das Web sehr beliebt ist, nicht JavaScript .
Die meisten wichtigen Sprachranking-Indizes geben nicht an, dass
JavaScript die beliebteste Programmiersprache ist. Nicht einmal die zweite, dritte oder vierte Position. Laut
IEEE Spectrum (American Journal) ist dies
Platz 8 ,
PYPL 5 ,
TIOBE 7 ,
CodeEval 6 .
Redmonk (ein
Analyseunternehmen ) verwendet
Github- Statistiken, die eine sehr hohe Anzahl für
JavaScript anzeigen , gerade weil Webanwendungen, die in einer beliebigen Sprache geschrieben sind, mindestens
JavaScript benötigen , um im Browser zu funktionieren. Es gibt keine Optionen. Daher kann
Redmonk keine objektive Bewertung von
JavaScript- Anomalien
abgeben . Ansonsten ist
Java die beliebteste Sprache.
Benutzerumfragen, beispielsweise von StackOverflow, enthalten ebenfalls eine ähnliche Verzerrung in der Auswahl. Wie können wir sagen, dass
JavaScript eine beliebte Sprache ist, wenn wir keine andere Wahl haben, als sie alleine zu verwenden? (Zum Glück stehen uns Übersetzer zur Verfügung).
Wir sollten uns daran erinnern, dass dies für andere Bereiche gilt (z. B. Netzwerkserver, Spiele und Grafiken, Mobilgeräte, Desktops usw.). Die Auswahl einer Programmiersprache ist sehr unterschiedlich. Webanwendungen sind äußerst einzigartig. (Zumindest bis die Veröffentlichung von WebAssembly endlich erfolgt.)
Stimmt
Lassen Sie mich ganz klar sein:
JavaScript ist keine gute Programmiersprache für die Softwareentwicklung .
JavaScript wurde als leichte, frische Skriptsprache für einen Webbrowser entwickelt. Als solches wurde es flexibel und äußerst verzeihend gemacht, mit schwacher Eingabe. Es hat nicht einmal den richtigen Integer-Typ oder den richtigen Array-Typ. Welche Sprache ist das?
Schwache Eingabe, dies ist die Achillesferse der Programmiersprache, mit der Software entwickelt wird. Dies macht das Schreiben schneller, einfacher Skripte für einen Webbrowser zwar sehr einfach, funktioniert jedoch auch gegen Sie, wenn Sie große Anwendungen schreiben, die Sicherheit und Zuverlässigkeit erfordern. Aus diesem Grund sind die meisten Hauptsprachen normalerweise stark typisiert (nicht zu verwechseln mit statisch typisierten). Und es ist sehr, sehr wichtig!
Eine schwache Typisierung und der daraus resultierende willkürliche Zwang zeigen einen völligen Mangel an sprachlicher Disziplin. Dies erklärt den größten Teil der Liste der
WATs und
WTFs.generiert von JavaScript. (Außerdem stellt der Autor Links zu Online-Ressourcen bereit, in denen eine Liste von
JavaScript- Warzen bereitgestellt wird.)