10 Gründe JavaScript zu hassen – oder zu lieben
AllgemeinOb man es nun liebt oder eher nicht: JavaScript hat seit seinen bescheidenen Anfängen in der Dev-Abteilung von Netscape eine beeindruckende Entwicklung hingelegt.Ursonate | Flickr Vor knapp 30 Jahren wurde in den Untiefen der Entwicklerbüros von Netscape das Projekt JavaScript geboren (das zunächst Mocha und LiveScript hieß). Die Erwartungen waren im Jahr 1995 nicht allzu hoch: Netscape schwebte vor, Webseiten mit zusätzlicher Logik auszustatten – etwa, um Formularelemente einbinden zu können. Das damalige World Wide Web war bis zu diesem Zeitpunkt vor allem eine Textwüste – ein Bild einzubinden ein Task für Profis. Drei Jahrzehnte später ist JavaScript das Tool der Wahl, um Software an Endbenutzer auszuliefern. Und Webseiten haben sich inzwischen zu Applikationen weiterentwickelt, die mehr Bilder als Text – und noch weit mehr Softwarelogik beinhalten. Im Laufe der Zeit hat natürlich auch JavaScript Fortschritte gemacht: Es ist schneller, schlanker, performanter – aber auch deutlich komplexer geworden. Das wissen einige Entwickler sehr zu schätzen, andere hingegen weniger. Mit diesem Artikel feiern wir 30 Jahre JavaScript(-Hassliebe). 1. Isomorpher Code 😍: Früher wurde Code für den Browser in JavaScript geschrieben. Der Code auf dem Server war hingegen eine Mischung aus Java, PHP, ColdFusion, SQL, C und mehreren anderen Optionen. Dann kam Node.js – und ermöglichte es, ein und denselben Code im Browser und auf allen verschiedenen Services- und Microservices-Schichten auszuführen. Das kommt wahrscheinlich seltener vor als gemeinhin angenommen. Es kann jedoch aus Anforderungsperspektive sehr nützlich sein, Funktionalität zwischen Server und Browser hin- und her „schieben“ zu können. 😡: Dass derselbe Code überall ausgeführt werden kann, sorgt aber nicht automatisch dafür, dass alles ganz einfach ist. Zwar können Entwickler in der Theorie für Frontend, Backend und Client den gleichen Code schreiben. In der Praxis erschweren allerdings zahlreiche Unterschiede zwischen Frameworks und APIs, sich isomorphen Code zunutze zu machen. Deswegen müssen sich Developer auch weiterhin spezialisieren. 2. Syntax 😍: Die Syntax von C hat sich in der Dev-Welt weitgehend durchgesetzt. Geschweifte Klammern zu nutzen, um Codeblöcke voneinander abzugrenzen und Semikolons am Zeilenende zu setzen, sind nur zwei Beispiele. Auch JavaScript hat diesen praktischen Ansatz übernommen, der es Entwicklern leicht macht, zwischen Sprachen wie C, C++, Java, JavaScript, Swift, Go und diversen anderen zu wechseln. Natürlich gibt es weiterhin diverse Unterschiede, aber einheitliche Grundlagen erleichtern Neueinstiege erheblich. 😡: Dass es jedoch auch fingerschonender und ganz ohne geschweifte Klammern und Semikolons geht, demonstriert Python – heute die größte Konkurrenz für JavaScript. Das sorgt für einfacheren und aufgeräumten Code (auch wenn Python-Programmierer im Regelfall nicht unerheblich viel Zeit damit verbringen, nicht sichtbare Leerzeichen zu zählen). 3. Closures 😍: Closures sind clevere Mechanismen, um mit dem Umfang von Variablen zu jonglieren. Sie ermöglichen es, kompakten Code zu schreiben, der sich leicht teilen lässt. Dabei übernimmt JavaScript die Aufgabe, Verweise auf die Daten zu sortieren und zu erhalten. Deshalb verlässt sich heute das Gros modernen, asynchronen Codes auf Closures. 😡: Leider sind Closures aber auch komplex und mitunter sehr verwirrend. Kommt es dabei zu Schwierigkeiten, können Fehler entstehen, die nicht mehr zu debuggen sind. So sind etwa viele Memory Leaks darauf zurückzuführen, dass Closures die Bereinigung großer Datenobjekte verhindern. 4. Frameworks 😍: Es gibt Dutzende große und Hunderte kleinere JavaScript-Frameworks. Mit funktionsreichen Optionen können die Entwickler von Webanwendungen viel Zeit einsparen. Zu diesen Optionen gehören zum Beispiel (um nur einige zu nennen): Angular, React, Vue, Svelte, Node.js, Deno, Nest, oder Bun. 😡: Zugegebenermaßen ist „die Qual der Wahl“ eher ein First-World-Problem – dennoch ist das für viele Entwickler, die mit einem Projekt loslegen wollen, eine echte Herausforderung. Denn viele Devs scheinen in diesem Bereich vor allem ihre eigenen Ansätze erarbeiten zu wollen. Kreativität ist zwar grundsätzlich zu begrüßen – aber nicht, wenn sie zur Entscheidungslähmung führt. Noch schlimmer wird es, wenn eine Organisation mehr als eine Framework-Option unterstützt. Das kann am Ende dazu führen, dass wichtige Services nicht mehr weiterentwickelt werden können, weil keine Kompetenz für das betreffende Framework (mehr) vorhanden ist. 5. Ökosystem 😍: Die ECMAScript-Kommittees sorgen kontinuierlich dafür, dass neue Funktionen und Syntax-Erweiterungen Einzug halten, die für prägnanteren Code sorgen. So wie etwa der Spread- (…) oder der Pipeline-Operator (=>). Das gewährleistet auch, dass JavaScript mit modernen Nutzungsweisen und State-of-the-Art-Datenstrukturen Schritt halten kann. 😡: Das kann auf der anderen Seite auch zu Frust führen: Ist diese Kombination von Satzzeichen ein Tippfehler? Oder handelt es sich um eine neue Funktion? Auf jeden Entwickler, der mit einem schicken neuen Operator überglücklich ist, kommt ein anderer, der genervt den KI-Assistenten aufruft, um zu verstehen, was da eigentlich im Code vor sich geht. 6. Code, der im Browser läuft 😍: Einst mussten Menschen Software installieren und dazu Dateien kopieren und lokal Code ausführen. Heute wird der Großteil unserer Software „installiert“, indem wir Webseiten öffnen. Das ist in erster Linie der explosionsartigen Entwicklung von Webapplikationen zu verdanken: Bild- oder Videobearbeitung war früher nur auf Betriebssystemebene möglich – und denkbar. Heute können solche Tasks dank optimierter Just-in-Time-Kompilierung reibungslos per Browser erledigt werden. 😡: Das Innenleben moderner Browser ist so komplex, dass es in erster Linie für Verwirrung sorgt. Dazu kommen potenzielle Fragen wie: Erlahmt mein Rechner gerade wegen dem neu geöffneten Browsertab? Oder sind die anderen 22 schuld? Schürfen Kriminelle eventuell heimlich Kryptowährungen? Oder ist es noch schlimmer? 7. Dynamic Typing 😍: Sowohl neue als auch erfahrene Entwickler schätzen die Flexibilität, die Variablen bieten, die den Datentyp selbstständig tracken. Wer eine starke Typisierung bevorzugt, kann schließlich auf TypeScript ausweichen. Alle anderen lehnen sich zurück, deklarieren eine Variable und lassen das Backend die Type-Details managen. 😡: Leider bringt die dynamische Typisierung auch eine Menge seltsamer Regeln mit sich, die nicht immer Sinn ergeben. Zum Beispiel ist das Plus-Symbol (+) überladen, was in Grenzfällen zu rätselhaften Ergebnissen führen kann. Standardgleichungen wie zwei Ganzzahlen zu addieren, sind nicht das Problem – wohl aber (zum Beispiel), Objekte zu Strings hinzuzufügen. Das kann imposante Resultate zur Folge haben, die je nach Version und Compiler variieren. 8. Type Conversion 😍: Angenommen, Sie möchten einen String, der eine Ganzzahl enthält, mit einer anderen vergleichen. Als JavaScript-Entwickler schreiben Sie das einfach in der Form if x > y, fügen ein paar weitere Zeilen hinzu und der Rest erledigt sich im Hintergrund von selbst. Manuell zu konvertieren, bleibt anderen vorbehalten, die auf streng typisierte Sprachen setzen. 😡: Typkonvertierung ist nur so lange ein tolles Feature, bis es zu Problemen kommt. Zum Beispiel wäre der Ausdruck „02“ > „1“ bei JavaScript false, da der Vergleich lexikografisch erfolgt – die Werte werden als Strings verglichen. „02“ > 1 ist hingegen true, weil JavaScript „02“ in eine Integer umwandelt. Dass das im Hintergrund geschieht (um nicht zu stören), macht die Sache nicht besser. 9. Clevere Hacks 😍: JavaScript ist wie bereits erwähnt ein Abkömmling von C und macht es entsprechend einfach, simplen und effektiven Code zu schreiben. Etwa durch das eben besprochene Type-Conversion-Feature. Und if-then-else-Statements bestehen nicht nur auf boolesche Werte: Sie können auch Entscheidungen unter Einbeziehung von Ganzzahlen, Strings oder Objekten treffen. 😡: Obwohl boolesche Ausdrücke zu den einfacheren Formen der Datenverarbeitung gehören sollten, können sie seltsame Formen annehmen – und zwingen Programmierer dazu, sich Dinge für die merkwürdigsten Nischenfälle einzuprägen. Beispielsweise treffen if-Anweisungen auch dann Entscheidungen, wenn die Variable nicht als boolesch true oder false ausgewertet wird. Die verschiedenen Ganzzahlen, Zeichenketten, Arrays und Objekte haben unterschiedliche Werte, was Verwirrung stiften kann. Man kann nur versuchen, sich die Regeln zu merken – und darauf hoffen, dass sie sich mit der nächsten Version nicht komplett ändern. 10. Transpiler 😍: Es gibt Hunderte von Transpiler-Tools für JavaScript, die fast jede Sprache konvertieren können. Einige sind nur Erweiterungen oder Variationen von JavaScript (wie CoffeeScript oder TypeScript), andere konvertieren völlig unterschiedliche Sprachen vollständig – zum Beispiel Python, Java, C# oder SQL und viele mehr. Das verhilft zum Beispiel auch etwas angestaubten Sprachen wie Lisp oder Cobol zu neuem, reibungslosem Leben in modernen, Just-in-Time-Infrastrukturen. 😡: Ist das jetzt JavaScript? Oder doch ECMAScript? Gehört das Trademark immer noch Oracle? Gibt’s eine Verbindung zu Java? Die Nomenklatur von JavaScript wirft diverse Fragen auf – die Antworten sind nicht immer so klar. Oder einfach zu finden. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!
10 Gründe JavaScript zu hassen – oder zu lieben Ob man es nun liebt oder eher nicht: JavaScript hat seit seinen bescheidenen Anfängen in der Dev-Abteilung von Netscape eine beeindruckende Entwicklung hingelegt.Ursonate | Flickr
Vor knapp 30 Jahren wurde in den Untiefen der Entwicklerbüros von Netscape das Projekt JavaScript geboren (das zunächst Mocha und LiveScript hieß). Die Erwartungen waren im Jahr 1995 nicht allzu hoch: Netscape schwebte vor, Webseiten mit zusätzlicher Logik auszustatten – etwa, um Formularelemente einbinden zu können. Das damalige World Wide Web war bis zu diesem Zeitpunkt vor allem eine Textwüste – ein Bild einzubinden ein Task für Profis.
Drei Jahrzehnte später ist JavaScript das Tool der Wahl, um Software an Endbenutzer auszuliefern. Und Webseiten haben sich inzwischen zu Applikationen weiterentwickelt, die mehr Bilder als Text – und noch weit mehr Softwarelogik beinhalten. Im Laufe der Zeit hat natürlich auch JavaScript Fortschritte gemacht: Es ist schneller, schlanker, performanter – aber auch deutlich komplexer geworden. Das wissen einige Entwickler sehr zu schätzen, andere hingegen weniger.
Mit diesem Artikel feiern wir 30 Jahre JavaScript(-Hassliebe).
1. Isomorpher Code
😍: Früher wurde Code für den Browser in JavaScript geschrieben. Der Code auf dem Server war hingegen eine Mischung aus Java, PHP, ColdFusion, SQL, C und mehreren anderen Optionen. Dann kam Node.js – und ermöglichte es, ein und denselben Code im Browser und auf allen verschiedenen Services- und Microservices-Schichten auszuführen. Das kommt wahrscheinlich seltener vor als gemeinhin angenommen. Es kann jedoch aus Anforderungsperspektive sehr nützlich sein, Funktionalität zwischen Server und Browser hin- und her „schieben“ zu können.
😡: Dass derselbe Code überall ausgeführt werden kann, sorgt aber nicht automatisch dafür, dass alles ganz einfach ist. Zwar können Entwickler in der Theorie für Frontend, Backend und Client den gleichen Code schreiben. In der Praxis erschweren allerdings zahlreiche Unterschiede zwischen Frameworks und APIs, sich isomorphen Code zunutze zu machen. Deswegen müssen sich Developer auch weiterhin spezialisieren.
2. Syntax
😍: Die Syntax von C hat sich in der Dev-Welt weitgehend durchgesetzt. Geschweifte Klammern zu nutzen, um Codeblöcke voneinander abzugrenzen und Semikolons am Zeilenende zu setzen, sind nur zwei Beispiele. Auch JavaScript hat diesen praktischen Ansatz übernommen, der es Entwicklern leicht macht, zwischen Sprachen wie C, C++, Java, JavaScript, Swift, Go und diversen anderen zu wechseln. Natürlich gibt es weiterhin diverse Unterschiede, aber einheitliche Grundlagen erleichtern Neueinstiege erheblich.
😡: Dass es jedoch auch fingerschonender und ganz ohne geschweifte Klammern und Semikolons geht, demonstriert Python – heute die größte Konkurrenz für JavaScript. Das sorgt für einfacheren und aufgeräumten Code (auch wenn Python-Programmierer im Regelfall nicht unerheblich viel Zeit damit verbringen, nicht sichtbare Leerzeichen zu zählen).
3. Closures
😍: Closures sind clevere Mechanismen, um mit dem Umfang von Variablen zu jonglieren. Sie ermöglichen es, kompakten Code zu schreiben, der sich leicht teilen lässt. Dabei übernimmt JavaScript die Aufgabe, Verweise auf die Daten zu sortieren und zu erhalten. Deshalb verlässt sich heute das Gros modernen, asynchronen Codes auf Closures.
😡: Leider sind Closures aber auch komplex und mitunter sehr verwirrend. Kommt es dabei zu Schwierigkeiten, können Fehler entstehen, die nicht mehr zu debuggen sind. So sind etwa viele Memory Leaks darauf zurückzuführen, dass Closures die Bereinigung großer Datenobjekte verhindern.
4. Frameworks
😍: Es gibt Dutzende große und Hunderte kleinere JavaScript-Frameworks. Mit funktionsreichen Optionen können die Entwickler von Webanwendungen viel Zeit einsparen. Zu diesen Optionen gehören zum Beispiel (um nur einige zu nennen):
Angular,
React,
Vue,
Svelte,
Node.js,
Deno,
Nest, oder
Bun.
😡: Zugegebenermaßen ist „die Qual der Wahl“ eher ein First-World-Problem – dennoch ist das für viele Entwickler, die mit einem Projekt loslegen wollen, eine echte Herausforderung. Denn viele Devs scheinen in diesem Bereich vor allem ihre eigenen Ansätze erarbeiten zu wollen. Kreativität ist zwar grundsätzlich zu begrüßen – aber nicht, wenn sie zur Entscheidungslähmung führt. Noch schlimmer wird es, wenn eine Organisation mehr als eine Framework-Option unterstützt. Das kann am Ende dazu führen, dass wichtige Services nicht mehr weiterentwickelt werden können, weil keine Kompetenz für das betreffende Framework (mehr) vorhanden ist.
5. Ökosystem
😍: Die ECMAScript-Kommittees sorgen kontinuierlich dafür, dass neue Funktionen und Syntax-Erweiterungen Einzug halten, die für prägnanteren Code sorgen. So wie etwa der Spread- (…) oder der Pipeline-Operator (=>). Das gewährleistet auch, dass JavaScript mit modernen Nutzungsweisen und State-of-the-Art-Datenstrukturen Schritt halten kann.
😡: Das kann auf der anderen Seite auch zu Frust führen: Ist diese Kombination von Satzzeichen ein Tippfehler? Oder handelt es sich um eine neue Funktion? Auf jeden Entwickler, der mit einem schicken neuen Operator überglücklich ist, kommt ein anderer, der genervt den KI-Assistenten aufruft, um zu verstehen, was da eigentlich im Code vor sich geht.
6. Code, der im Browser läuft
😍: Einst mussten Menschen Software installieren und dazu Dateien kopieren und lokal Code ausführen. Heute wird der Großteil unserer Software „installiert“, indem wir Webseiten öffnen. Das ist in erster Linie der explosionsartigen Entwicklung von Webapplikationen zu verdanken: Bild- oder Videobearbeitung war früher nur auf Betriebssystemebene möglich – und denkbar. Heute können solche Tasks dank optimierter Just-in-Time-Kompilierung reibungslos per Browser erledigt werden.
😡: Das Innenleben moderner Browser ist so komplex, dass es in erster Linie für Verwirrung sorgt. Dazu kommen potenzielle Fragen wie:
Erlahmt mein Rechner gerade wegen dem neu geöffneten Browsertab?
Oder sind die anderen 22 schuld?
Schürfen Kriminelle eventuell heimlich Kryptowährungen?
Oder ist es noch schlimmer?
7. Dynamic Typing
😍: Sowohl neue als auch erfahrene Entwickler schätzen die Flexibilität, die Variablen bieten, die den Datentyp selbstständig tracken. Wer eine starke Typisierung bevorzugt, kann schließlich auf TypeScript ausweichen. Alle anderen lehnen sich zurück, deklarieren eine Variable und lassen das Backend die Type-Details managen.
😡: Leider bringt die dynamische Typisierung auch eine Menge seltsamer Regeln mit sich, die nicht immer Sinn ergeben. Zum Beispiel ist das Plus-Symbol (+) überladen, was in Grenzfällen zu rätselhaften Ergebnissen führen kann. Standardgleichungen wie zwei Ganzzahlen zu addieren, sind nicht das Problem – wohl aber (zum Beispiel), Objekte zu Strings hinzuzufügen. Das kann imposante Resultate zur Folge haben, die je nach Version und Compiler variieren.
8. Type Conversion
😍: Angenommen, Sie möchten einen String, der eine Ganzzahl enthält, mit einer anderen vergleichen. Als JavaScript-Entwickler schreiben Sie das einfach in der Form if x > y, fügen ein paar weitere Zeilen hinzu und der Rest erledigt sich im Hintergrund von selbst. Manuell zu konvertieren, bleibt anderen vorbehalten, die auf streng typisierte Sprachen setzen.
😡: Typkonvertierung ist nur so lange ein tolles Feature, bis es zu Problemen kommt. Zum Beispiel wäre der Ausdruck „02“ > „1“ bei JavaScript false, da der Vergleich lexikografisch erfolgt – die Werte werden als Strings verglichen. „02“ > 1 ist hingegen true, weil JavaScript „02“ in eine Integer umwandelt. Dass das im Hintergrund geschieht (um nicht zu stören), macht die Sache nicht besser.
9. Clevere Hacks
😍: JavaScript ist wie bereits erwähnt ein Abkömmling von C und macht es entsprechend einfach, simplen und effektiven Code zu schreiben. Etwa durch das eben besprochene Type-Conversion-Feature. Und if-then-else-Statements bestehen nicht nur auf boolesche Werte: Sie können auch Entscheidungen unter Einbeziehung von Ganzzahlen, Strings oder Objekten treffen.
😡: Obwohl boolesche Ausdrücke zu den einfacheren Formen der Datenverarbeitung gehören sollten, können sie seltsame Formen annehmen – und zwingen Programmierer dazu, sich Dinge für die merkwürdigsten Nischenfälle einzuprägen. Beispielsweise treffen if-Anweisungen auch dann Entscheidungen, wenn die Variable nicht als boolesch true oder false ausgewertet wird. Die verschiedenen Ganzzahlen, Zeichenketten, Arrays und Objekte haben unterschiedliche Werte, was Verwirrung stiften kann. Man kann nur versuchen, sich die Regeln zu merken – und darauf hoffen, dass sie sich mit der nächsten Version nicht komplett ändern.
10. Transpiler
😍: Es gibt Hunderte von Transpiler-Tools für JavaScript, die fast jede Sprache konvertieren können. Einige sind nur Erweiterungen oder Variationen von JavaScript (wie CoffeeScript oder TypeScript), andere konvertieren völlig unterschiedliche Sprachen vollständig – zum Beispiel Python, Java, C# oder SQL und viele mehr. Das verhilft zum Beispiel auch etwas angestaubten Sprachen wie Lisp oder Cobol zu neuem, reibungslosem Leben in modernen, Just-in-Time-Infrastrukturen.
😡: Ist das jetzt JavaScript? Oder doch ECMAScript? Gehört das Trademark immer noch Oracle? Gibt’s eine Verbindung zu Java? Die Nomenklatur von JavaScript wirft diverse Fragen auf – die Antworten sind nicht immer so klar. Oder einfach zu finden. (fm)
Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!
10 Gründe JavaScript zu hassen – oder zu lieben Weiterlesen »