Softwareentwicklung
Was JavaScript von TypeScript unterscheidet
Florian Maier beschäftigt sich mit vielen Themen rund um Technologie und Management. Daneben betätigt er sich auch in sozialen Netzen.
Foto: k-mookpan - shutterstock.com
Das Internet läuft im Grunde auf Basis von JavaScript, HTML und CSS. Unglücklicherweise eignet sich JavaScript jedoch nicht für die Entwicklung umfangreicher Anwendungen. An dieser Stelle kommt TypeScript ins Spiel: die Coding-Sprache ist mit JavaScript kompatibel und ermöglicht auch die Entwicklung sehr umfangreicher Applikationen.
Wir haben die wesentlichen Fakten zu JavaScript und TypeScript zusammengefasst und sagen Ihnen, wo die Unterschiede liegen.
Was ist JavaScript?
JavaScript wurde als Programmiersprache für den altehrwürdigen Netscape Navigator geboren. Brendan Eich erstellte 1995 den Prototypen für die Programmiersprache - in einem Zeitraum von zehn Tagen. Wie Eich 2008 im Interview mit den US-Kollegen von Infoworld preisgab, hieß JavaScript zunächst "Mocha", dann "LiveScript" und wurde schließlich im Dezember 1995 nach einer LIzenzierungsvereinbarung zwischen Netscape und Sun Microsystems JavaScript getauft. Die Nomenklatur-Ähnlichkeiten zwischen Java und JavaScript haben in der Vergangenheit bereits vielfach zu Missverständnissen und Verwechslungen geführt, obwohl es zwischen Java und JavaScript eklatante Unterschiede gibt. JavaScript hat sich über die Jahre erheblich weiterentwickelt und wird inzwischen von allen modernen Webbrowsern unterstützt.
Auf die Einführung von JavaScript für den Netscape Navigator folgte relativ zügig eine Variante für Netscape Enterprise Server und Microsoft IIS. Circa 13 Jahre später stellte Ryan Dahl schließlich mit Node.js eine quelloffene, plattformübergreifende Laufzeitumgebung für JavaScript vor, die unabhängig von Browser- oder Server-Variante funktioniert.
Coding mit JavaScript
JavaScript ist eine Programmiersprache mit vielen Paradigmen: Sie nutzt geschwungene Klammern und Strichpunkte - ähnlich wie die C-Sprachenfamilie. Sie weist eine schwache, dynamische Typisierung auf und wird entweder interpretiert oder just-in-time kompiliert. Ganz allgemein ist JavaScript Single-Thread-fähig - es gibt allerdings eine Web Workers API, die Multithreading ermöglicht. Darüber hinaus gibt es 'events', 'asynchronous function calls' und 'callbacks'.
JavaScript unterstützt objektorientierte Softwareentwicklung mit Prototypen - im Gegensatz zu der bei C++, Java und C# verwendeten 'class syntax'. Allerdings ist diese seit 2015 mit dem Release von JavaScript ES6 ebenfalls an Bord. Außerdem unterstützt JavaScript auch die funktionale Programmierung - inklusive 'closures', 'recursion' und 'lambdas' (anonyme Funktionen).
Vor JavaScript ES6 gab es keine Tail-Call-Optimierung - inzwischen ist das bei Aktivierung des 'strict modes' ('use strict') möglich. Die Implementierung ist je nach Browser unterschiedlich. Der 'strict mode' verändert dabei die Semantik von JavaScript und sorgt dafür, dass manche 'silent errors' zu 'throw errors' werden.
Das JavaScript-Ökosystem
Es gibt zahlreiche JavaScript APIs - einige werden von Browsern bereitgestellt, bei anderen handelt es sich um Third-Party-Schnittstellen. Dabei gibt es unterschiedliche APIs für Clients, Server, Desktops und solche, die mehrere verschiedene Umgebungen unterstützen. Zu den Browser-Schnittstellen von JavaScript gehören:
APIs von Drittanbietern sind im Überfluss vorhanden, von Interfaces bis hin zu kompletten Applikationen wie Google Maps. Bei anderen handelt es sich um Utilities, etwa um die Softwareentwicklung mit JavaScript, HTML5 und CSS einfacher zu gestalten (jQuery). Auch Applikations-Frameworks für spezielle Zwecke stehen zur Verfügung: Express ermöglicht beispielsweise die Entwicklung von Web- und Mobile-Applikations-Servern in Node.js.
Es gibt eine Vielzahl weiterer JavaScript-Module - insgesamt über 300.000 verschiedene. Um der schieren Zahl Herr werden zu können, empfiehlt sich der Einsatz eines 'package managers' wie npm (Standard für Node.js). Eine Alternative dazu stellt beispielsweise das von Facebook entwickelte yarn dar. Weitere Tools in ähnlichem Stil sind unter anderem Bower, Ender oder jspm.
Webpack hingegen bündelt JavaScript-Module zu statischen Browser Assets und Browserify erlaubt Softwareentwicklern Module im Node.js-Stil zu schreiben, die für die Nutzung im Browser kompiliert werden. Grunt hingegen ist ein File-orientierter JavaScript 'task runner' - ebenso wie gulp (das auch ein 'streaming build system' ist).
Um dafür zu sorgen, dass der JavaScript Code ohne Kompilierung zuverlässig läuft, kommen 'linter' zum Einsatz. Dieser Begriff gründet auf dem Lint Tool der C-Programmiersprachen - einst ein Standard-Werkzeug für Unix. Zu den JavaScript-'lintern' gehören:
Diese lassen sich mit Hilfe eines 'task runners' oder einer IDE bei Änderungen am Programmcode automatisieren.
'Transpiler' kommen zum Einsatz, um andere Programmiersprachen wie CoffeeScript oder TypeScript in JavaScript zu übersetzen - oder auch, um modernen JavaScript Code (beispielsweise ES2015) zu simplifizieren, so dass er in (fast) jedem Browser läuft. Der gängigste Transpiler für modernes JavaScript ist Babel.
- Produkt- & Projektmanager
Ganz generell schätzen es Entwickler nicht so besonders, wenn ihnen jemand erklären will, wie sie ihren Job zu machen haben. Weil Produkt- und Projektmanager aber oft Entwickler-Teams leiten, passiert genau das. Das kann zu Unstimmigkeiten führen. <br /><br /> Dazu hat auch David Fox von devRant eine Meinung: "Letztendlich ist es in den meisten Fällen so, dass Produkt- und Projektmanager in irgendeiner Art und Weise die 'Besitzer' von Projekten und Prozessen sind, ohne dabei die täglichen Herausforderungen und Probleme der Softwareentwickler zu kennen." - Chefs
Genau wie die Produkt- und Projektmanager sind auch Development oder Engineering Manager dafür zuständig, Teams von Entwicklern zu führen und sicherzustellen, dass Projekte rechtzeitig und unter Budget fertiggestellt werden. <br /><br /> "In einigen Unternehmen können Situationen entstehen, in denen der Chef gleichzeitig Mitglied des Entwicklerteams ist. Insbesondere wenn der Chef vorher selbst Entwickler war und nach einer Beförderung zum Chef wird, ist Konfliktpotenzial gegeben", merkt Fox an. - Recruiter
Softwareentwickler müssen gar nicht selbst aktiv nach einem Job suchen, um von Recruitern und Headhuntern belästigt zu werden - dem Fachkräftemangel sei Dank. Es dürfte sehr schwer sein, einen Developer zu finden, der noch nicht in die Fänge der Recruiter geraten ist. <br /><br /> David Fox sieht insbesondere die Hartnäckigkeit der Recruiter als Problem: "Sie rufen an, sie e-mailen und sie lassen Dich einfach nicht in Ruhe - selbst dann, wenn Du gar keinen Job suchst. Und selbst wenn man eine Anstellung sucht, neigen viele Recruiter dazu, irrelevante Jobangebote zu machen oder Stellen zu empfehlen, deren Profil überhaupt nicht passt - etwa einen Job am anderen Ende des Landes, obwohl man gar nicht bereit ist, umzuziehen." - Dokumentation
Gibt es keine Dokumentation, beschweren sich die Softwareentwickler. Wenn es zuviel ist, beschweren sie sich und wenn sie die Dokumentation selbst erledigen müssen, auch. Sogar über die Art und Weise, wie andere Leute die Dokumentationsaufgabe bewältigen, beschweren sich die Entwickler. <br /><br /> An dieser Stelle seien sich auch endlich einmal alle Entwickler einig, wie Fox betont: "Softwareentwickler wollen eine ausführliche, gut geschriebene und akkurate Dokumentation - aber selber machen wollen sie es nicht." - Meetings
Meetings sind nicht nur für alle anderen ein Problem, sondern auch für Softwareentwickler. Insbesondere dann, wenn es sich um völlig unnötige, zeitraubende und stinklangweilige Zusammenkünfte handelt. Wie Fox erzählt, sind inzwischen auch Devotionalien mit der Aufschrift 'I survived another meeting that should have been an email' erhältlich. - Coworking Spaces
Mit dem Aufstieg der Agilität sind flache Hierarchien, Collaboration und Teamwork zum Alltag in Unternehmen geworden - insbesondere für Software-Development-Teams. Gerade die können ihre Arbeit in einem Großraumbüro aber meist nur schwer oder gar nicht bewältigen - sagen zumindest die Zahlen von devRant. <br /><br /> David Fox erklärt: "Es gibt einfach zuviel Ablenkung: die Kollegen unterhalten sich, Meetings werden verpasst, Telefonanrufe überhört. Es gibt auch eine Vielzahl an Beschwerden über den Kaffee im Büro und andere Annehmlichkeiten - oder eben das Gegenteil davon." - Kollegen
Selbsterklärend: Jeder hat wohl einen Kollegen oder eine Kollegin, den beziehungsweise die er ganz besonders schätzt. Nicht. <br /><br /> Im Fall der Softwareentwickler ist die Abneigung gegenüber Kollegen meist entweder in der mangelnden Qualität ihrer Arbeit oder einem völlig aus dem Leim gegangenen Ego begründet, gibt David Fox preis. - Vorstellungsgespräche
Wenn ein Softwareentwickler auf Jobsuche ist und zum Bewerbungsgespräch geladen wird, gibt es danach meist auch etwas zu meckern: <br /><br /> "Dumme Fragen oder die Lösung von völlig praxisfernen Aufgaben im Bewerbungsgespräch stoßen den Developern ebenso sauer auf, wie ein Gesprächspartner, der überhaupt nicht weiß, was ein Entwickler eigentlich genau macht", so Fox. - Fehler & Bugs
Softwareentwickler haben tagein, tagaus mit Fehlern und Bugs zu tun. Deswegen glaubt devRant-Gründer Fox, dass Entwickler in dieser Sache anders ticken: <br /><br /> "Die meisten anderen Probleme erfahren keine positive Auflösung, aber Bugs und Fehler sind behebbar und das fühlt sich gut an." - Quality Assurance
Die Quality Assurance (QA) - oder Qualitätssicherung - ist ein kritischer Teil der Softwareentwicklung. Dennoch bemängeln Softwareentwickler an QA-Experten häufig dieselben Dinge wie an Produkt- und Projektmanagern, so Fox. <br /><br /> "Die Qualitätssicherung bekommt das Produkt oder Projekt in die Hände, wenn die Entwickler es abgeschlossen haben. Deswegen verstehen sie oft nicht, welche Hürden und Workarounds die Entwickler im Entstehungsprozess bewältigen mussten. Offensichtlich kommt es auch regelmäßig vor, dass QA-Leute die Entwickler bitten, Bereiche nochmals zu überarbeiten, die sie auch selbst bewältigen könnten."
Was ist TypeScript?
TypeScript stellt eine typisierte Überkategorie von JavaScript dar, die sich in 'plain' JavaScript kompilieren lässt. Der quelloffene TypeScript Compiler lässt sich als Node.js-Paket installieren. Folgende Entwicklungsumgebungen unterstützen TypeScript:
Visual Studio 2017
Visual Studio 2019
Visual Studio 2022
WebStorm
Sublime Text
Atom
Eclipse
Emacs
Vim
TypeScript fügt optionale Typen, Klassen und Module zu JavaScript hinzu und unterstützt Tools für JavaScript-Applikationen mit einer Vielzahl an Code-Zeilen. Browser, Host oder Betriebssystem spielen dabei keine Rolle. Softwareentwickler haben durch den Einsatz von 'types' die Möglichkeit, hochproduktive Entwicklungs-Tools und -Methoden wie 'static checking' oder 'code refactoring' bei der Entwicklung von JavaScript-Applikationen zum Einsatz zu bringen.
Diese 'types' sind optional, können aber mit wenigen Anmerkungen einen großen Unterschied machen, wenn es um 'static verification' des Programmcodes geht. Darüber hinaus können mit 'types' auch Interfaces zwischen Softwarekomponenten definiert und Einblicke in das Verhalten existierender JavaScript-Bibliotheken gewonnen werden. Um möglichst robuste Softwarekomponenten zu erzeugen, unterstützt TypeScript die neuesten JavaScript Features.
Softwareentwicklung mit TypeScript
TypeScript akzeptiert JavaScript, bietet aber zusätzliche Möglichkeiten: 'type annotations' und 'type checking' hinsichtlich der Kompilierungs-Zeit, -Klassen und -Modulen. Das ist äußerst nützlich, wenn die Software möglichst zuverlässig laufen soll. Einfaches JavaScript erzeugt Fehler nur in der Laufzeit - und auch nur dann, wenn ein fehlerbehafteter Pfad erreicht wird. Das Tutorial "TypeScript in 5 minutes" klärt über die Benefits auf, während "Migrating from JavaScript" einen detaillierten Einblick gewährt, wie sich ein existierendes JavaScript-Projekt upgraden lässt.
Weitere, interessante und aufschlussreiche Einblicke in die Arbeit mit TypeScript gibt der langjährige Microsoft-Entwickler Anders Hejlsberg:
Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.com.