
Wie wir gesehen haben, ist TypeScript nichts weiter als eine JavaScript-Erweiterung, die ein statisches Typsystem sowie Klassen und einige andere Features aus der näheren ECMAScript-Zukunft mit sich bringt. Das Release von TS kann man zum Anlass nehmen, um eine ganze Reihe von Fragen aufzuwerfen. Braucht man sowas? Wird sich das durchsetzen? Und warum macht sich Microsoft die Mühe? Die Beantwortung dieser Fragen ist natürlich zu einem gewissen Grad Kaffeesatzleserei, aber ich glaube ich habe eine halbwegs originelle Idee zu dem Ganzen. Also an die Arbeit!
Ist Typescript überhaupt ernst zu nehmen?
Die wichtigste Frage vorweg: hat Typescript überhaupt die Chance, jemals etwas anderes zu werden als ein Dart-artiges Ghetto? Aus zwei Gründen möchte ich das nicht ausschließen:
- Der Einsatz von TypeScript steht vor keiner großen Hürde
- Ich vermute, dass es eine echte Nachfrage nach den Features von TS gibt
Der erste Punkt ist ziemlich offensichtlich. Während Dart das Ziel hat, irgendwann eine eigene Laufzeitumgebung in jedem Browser zu haben (was nie passieren wird) und bis dahin JavaScript als Krücke benutzt, ist bei TypeScript das Endziel JavaScript selbst. Der Vergleich hinkt also ziemlich. Wie wir gesehen haben, produziert der TS-Compiler schönes normales JS, das in jedem Browser läuft und das man so ähnlich auch von Hand schreiben würde. Die Idee, mit TypeScript ein Programm zu schreiben, ist also erst mal nicht wesentlich verrückter, als das gleiche mit CoffeeScript zu machen. Und das ist immerhin die elftpopulärste Sprache auf Github. Dem Einsatz steht also an sich nichts im Wege.
Das mit der Nachfrage ist etwas komplizierter. Zwar bin ich selbst schon der Meinung, dass man als Webentwickler diesen ganzen Typsystem-Krams und auch einige ES6-Features nicht wirklich braucht, aber ich weiß auch, dass es da draußen sehr sehr viele Entwickler gibt, die das ganz anders sehen.
Webentwickler sind vom Mars, C#-Entwickler von der Venus
Als ich vor zwei Jahren angefangen habe, den HTML5-Erklärbären zu spielen, durfte ich vor allem Webentwicklern und -Designern die Wunder von HTML5 erklären. Mittlerweile habe ich vor allem das Vergnügen mit „normalen“ Softwareentwicklern, die ganzen Tag lang Java oder C# schreiben … und die stammen aus einem ganz anderen Universum als der durchschnittliche JS-Ninja.
Das Arbeitsgerät des typischen (Frontend-) Webentwicklers ist ein Texteditor, wahlweise nerdig (Vim, Ecmacs) oder etwas stylisher (Sublime Text, TextMate) aber eben ein Texteditor. Außerhalb von Frontend-Kreisen wird so etwas als vielleicht zum Schreiben von Einkaufszetteln geeignet angesehen, aber zum Programmieren nimmt man doch bitte eine richtig dicke IDE mit integriertem Debugger und toller Autovervollständigung und Refactoring-Tools und und und. Ein Frontend-Nerd erwartet von seinen Zielplattformen (Browsern) gar nicht erst, dass sie sich einheitlich oder überhaupt berechenbar verhalten und jongliert entsprechend mit einen ganzen Reihe von Workarounds, Polyfill-Scripten oder speziellen Techniken wie Progressive Enhancement oder Responsive Design. Ist man das nicht gewohnt, bekommt man sehr schnell den Eindruck, es herrsche einfach nur absolutes Chaos, verglichen mit z.B. der heilen Silverlight-Welt, in der alles (Sprache, API, IDE, Dokumentation) aus einer Hand kommt und entsprechend aufeinander abgestimmt ist. Während der Frontend-Entwickler so etwas wie $()
für eine komplett ausreichende API hält, fragen sich andere, wie sie denn von diesem Ding eine Klasse ableiten können. Und zu guter letzt sind außerhalb der Webentwickler-Welt viele Dinge rund um Softwareentwicklung quasi-standardisiert. Man arbeitet objektorientiert (d.h. mit Klassen) in entweder Java, C# oder etwas, das den beiden eher ähnlich ist. Jedenfalls arbeitet man nicht mit so einem komischen Scheme-Abkömmling wie JavaScript oder so einem komplett eigenen Dingens wie CSS.
Es besteht einfach ein gewisser kultureller Unterschied. Und TypeScript ist, würde ich behaupten, Microsofts Versuch, dem Otto Normalsoftwareentwickler das Thema Webentwicklung bekömmlicher zu gestalten, den kulturellen Graben etwas überbrückbarer zu machen. Irgend etwas in der Richtung musste man bei Microsoft machen, denn bisher geriet die Kommunikation zum Thema HTML5 (und damit Webentwicklung) äußerst unglücklich.
Die Kommunikation Microsofts zu HTML5 und TypeScript
Wie wir ja alle wissen ist HTML5 das nächste große Ding. Das erzählen jedenfalls alle und auch Mircosoft hat fleißig an der Hypemaschine mitgekurbelt. So erklärte man 2011 HTML5 und JavaScript zu „first class citizens“ von Windows 8, kündigte für die Zukunft einen pluginfreien IE an und überhaupt sei HTML5 ja das nächste große Ding. Das alles mag ja soweit auch stimmen, was allerdings als Botschaft bei vielen Entwicklern angekommen ist, ist: bald gibt es auf Windows nur noch HTML5
. Das wird so extrem sicher nicht der Fall sein, aber das ist eben das, was viele verstanden haben. Ich weiß das, weil die, die das so verstehen (oder deren Chefs es so verstehen) am Ende bei mir am Telefon oder im HTML5-Seminar auftauchen.
Diese Entwickler sehen sich dann, wenn sie zum ersten Mal so richtig mit Frontend-Entwicklung in Kontakt kommen, einem ganzen Haufen von Unglaublichkeiten ausgesetzt:
- Nichts funktioniert in allen Browsern (und schon gar nicht HTML5)
- Es gibt keine Tools und keine (mit der Realität in näherer Verbindung stehende) Dokumentation von „offizieller Seite“. Nicht mal eine definitive „offizielle Seite“ gibt es!
- Die einzige zur Verfügung stehende Programmiersprache ist ein verbuggter Scheme-Abkömmling
- Essentials wie Modulsysteme oder eine brauchbare DOM-API müssen mit komischen Open-Source-Libraries hingewürgt werden
Wenn man glaubte, in die goldene Zukunft aufzubrechen und sich stattdessen erst mal mit diesen Problemen konfrontiert sieht, fragt man sich natürlich, ob man da nicht gewaltig verschaukelt wurde. Damit kann man vielleicht einen News-Ticker scripten, aber eine richtige Webapp bauen, das kann doch gar nicht funktionieren! Natürlich kann das funktionieren und wenn es der Zeitplan hergibt, demonstriere ich das auch immer mit Erfolg, doch die Gelegenheit bietet sich eben nicht immer. Und dann gibt es Ärger. Und ich schätze mal, dass Microsoft selbst noch sehr häufiger Ärger abbekommt als ich.
Der Unmut entsteht nicht, weil die Web-Plattform/HTML5 zu nicht taugt, sondern weil der Problemkomplex Web-Frontend ein eigenes Universum darstellt – und wenn man darauf nicht vorbereitet ist, wird es eben schwer. Diese „Vorbereitung“ könnte einerseits natürlich darin bestehen, althergebrachte Vorstellungen und Herangehensweisen über Bord zu werfen und viel neues zu lernen … oder wenn der Berg nicht zum Propheten kommt, kommt eben der Prophet zum Berg. Heißt in diesem Fall: statisches Typsystem, Klassen und Module kommen nach JavaScript.
TypeScript wird von MS als „application scale“ betitelt, weil es „application scale“ für viele Entwickler einfach vorstellbarer macht. Braucht man als alteingesessener JavaScript-Ninja diese Vorstellbarmachung nicht mehr, braucht man TypeScript auch nicht.
Braucht man das Typsystem von Typescript? Braucht man die ES6-Features?
Nein, aber wie wir gesehen haben, geht es auch nicht darum. Ziel ist vielmehr, allen Entwicklern, die nicht auf der Web-Ecke kommen, einen gemütlicheren Zugang zur Webentwicklung zu verschaffen. TypeScript ist ein recht eleganter Weg, auf eigene Faust Dinge wie Klassen und ein statisches Typsystem umzusetzten und trotzdem ein Endprodukt zu schaffen (kompliliertes JavaScript) das sich wunderbar in die offene Web-Plattform einfügt.
Im Detail kann man natürlich darüber streiten, ob die Features von TS jetzt wirklich alle total überflüssig sind. Je nachdem wie man drauf ist, sind Klassen und native Module auch JS-Ninjas schon ganz wünschenswert oder total überflüssig. Vermutlich würden aber trotzdem die wenigsten freiwillig mit einem Entwickler zusammenarbeiten, der ohne seinen Babysitter-Compiler seine Datentypen nicht unter Kontrolle bringt. Das alles unterstelle ich jetzt einfach mal – wiedersprecht mir in den Kommentaren wenn ihr es anders seht.
Aber wenn jemand glaubt, Klassen, statische Typen und eine IDE wären eine total absolut unverhandelbare Grundvoraussetzung um vernünftig („application scale“) zu entwickeln, dann ist TypeScript sicher etwas, das ihm ein besseres Gefühl gibt. Und genau das scheint mir das Ziel zu sein, eine angenehmere Umgebung für Besucher aus dem anderen Universum.
Fazit
So wie ich das sehe, soll TypeScript alle jenen das Leben erleichtern die aus anderen Universen in den Webfrontend-Bereich vordringen. Dass hier unterstützende Maßnahmen durchaus gefordert sind, kann ich bestätigen und daher kann ich mir auch gut vorstellen, dass TypeScript eine rege Nutzerschaft finden wird. Ob nun eine eigene Extra-Programmiersprache die bestmögliche Hilfestellung ist, würde ich mal offen lassen. Theoretisch könnte eine Inflation an Projekten wie TypeScript die JavaScript-Welt fragmentieren und vielleicht wäre das ungut. Und an sich könnte man selbst als kulturgeschockter Entwickler schauen, wie denn der Rest der Welt mit der Webplattform klarkommt, statt es sich im vertrauteren TypeScript gemütlich zu machen. Könnte!
Ich persönlich habe jedenfalls nicht das Gefühl, TypeScript zu brauchen. Aber da es ja auch nicht für mich gemacht ist und nicht meine Probleme zu lösen versucht, passt das schon.
Kommentare (15)
Manuel ¶
10. Oktober 2012, 12:41 Uhr
TypeScript ist ein Werkzeug das für alle JavaScript-Anwendungen jenseits der paartausend Zeilen Code sinnvoll ist bzw. werden kann. Statische Typsysteme und der ganze andere "Enterprisy-Kram" nehmen bei kleinen Sachen den Spaß aus der Sache, aber jedes größere Code-System profitiert von der Überprüfung beim Compilieren und alledem was dazugehört. Dabei geht es meiner Meinung auch nicht um "Babysitter-Compiler" vs. richtiger Programmierer, sondern um das richtige Werkzeug für das jeweilige Projekt.
Selbstverständlich kann man mit dynamischen Typsystem - Sprachen große Softwareprojekte schaukeln, aber irgendwoher muss ja die schlussendliche Betriebssicherheit kommen. Entweder man bastelt sich viele Unit-Tests für triviale Probleme (und ist freier bei der Benutzung der Sprache) oder man überlässt dem Compiler ein Teil der Arbeit und typisiert seine Variablen. Ein guter Kompromiss zwischen Lesbarkeit und Typsicherheit ist dabei auf jeden Fall die Typinferenz, die man ja auch bei HotShot-Sprachen wie Scala findet - du kannst Typen angeben, musst aber nicht, aber in den Fuß schießen wird trotzdem verhindert. Ich weiß auch nicht, ob der Universumsvergleich ganz der richtige ist, sondern eher die Größenordnung der Softwarelösung der springende Punkt ist. Nicht JS-Webentwickler vs. C#/Java-Entwickler, sondern (vereinfacht gesprochen) 100 Zeilen Code vs. 100.000.
Sobald es für Eclipse etc. Unterstützung für TypeScript gibt und Integrationen mit den klassischen Frameworks erscheinen, könnte ich mir gut vorstellen, dass TypeScript Fuß fassen könnte. Beispielsweise als eine Alternative zu GWT.
Peter Kröner ¶
10. Oktober 2012, 13:01 Uhr
Ein schlauer Mann hat mal gesagt (auch wenn Twitter den Beitrag in seinem Archiv versenkt hat):
Warum nicht so?
Außerdem:
Die kleineren Code-Systeme nicht?
Meine zahlreichen (trivialen) Unit-Tests für JS failen, wenn sie failen, nicht wegen Typumwandlungen sondern weil ich irgendwas anderes verbockt habe. Warum?
Joah, genau das sagt ja MS auch. Nur meine Padawane gehen halt nach dem Webdev-Workshop meist d'accord damit, dass die Kleine-Apps-Lösung auch ein Ansatz ist, der für Dickschiffe funktionieren kann.
Tim Baumann ¶
10. Oktober 2012, 13:16 Uhr
Meine Meinung zu Typsystemen war lange Zeit auch, dass statische Typen den Code unnötig repetitiv machen und generell eher überflüssig sind. Dann lernte ich die Programmiersprache Haskell kennen. Bei Haskell muss man Typen nicht unnötig wiederholen, weil der Compiler so schlau ist zu merken, dass wenn
a
undb
vom Typ[Int]
(Integer-Liste) sind, dass dann auch das Ergebnis der Konkatenation der Listen,a ++ b
, von diesem Typ sein muss (Typinferenz). Zusammen mit der funktionalen Natur von Haskell führt das Typsystem dazu, dass wenn mein Code fehlerfrei kompiliert meist auch fehlerfrei läuft.Beim Programmieren kann ich meine Daten-Typen ohne Probleme im Kopf behalten. Aber jeder, der schonmal das Vergnügen hatte, fremden oder seinen eigenen Code nach Monaten nochmal zu Gesicht zu kriegen, wird die Erfahrung gemacht haben, dass man sich kaum noch an die Einzelheiten der Implementierung erinnern kann.
Auch bei einer größeren Code-Basis kann das Im-Kopf-Behalten schwierig werden. Doch da kann einem ja der Compiler helfen. Wenn man dringend eine Änderung an einem Modul machen muss, weist einen Compiler freundlicherweise darauf hin, welche Module sonst noch geändert werden müssen. Hier kann man natürlich einwenden, dass man dafür Tests schreiben sollte. Um Tests kommt man natürlich auch in Haskell nicht herum, aber man muss wenigstens keine Zeit aufwenden, um Trivial-Tests zu schreiben.
Ein guter Entwickler kennt seine geistigen Grenzen und nutzt deswegen Tools und Sprachen, die ihm ermöglichen, größere und komplexere Anwendungen zu schreiben. Ich finde darum Microsofts Ansatz gut, auch wenn ich persönlich Haskell-ähnliche funktionale Sprachen wie Elm und Fay TypeScript vorziehe.
Peter Kröner ¶
10. Oktober 2012, 13:41 Uhr
... oder man lässt es halt bleiben, wie erwähnter schlauer Mann es einst gesagt hat. Dann müsste man nicht Tools um Tools um Tools auf ein selbstgeschaffenes Problem werfen.
Tim Baumann ¶
10. Oktober 2012, 18:44 Uhr
Im Grunde entspricht das der Idee der Modularisierung. Das hat leider einen Haken: Nicht immer ist eine Aufteilung einfach, weil die Module auf komplexe Art zusammenarbeiten müssen. Noch schwieriger wird das Problem, wenn nicht von Modulen sondern wie im Zitat von apps die Rede ist. Wie man Webapplikationen wie beispielsweise Google Docs als ein Set aus Unterapplikationen, that talk to each other, schreiben soll, ist mir jedenfalls nicht klar.
Jens Grochtdreis ¶
10. Oktober 2012, 20:37 Uhr
Ich schätze, Du hast mit Deinen Vermutungen den Nagel auf den Kopf getroffen. Das Grundproblem ist, dass es immernoch Backend-Entwickler gibt, die Frontend-Code schreiben müssen. Ich glaube nicht, dass die meisten das wollen. Sie müssen halt. Es würde sicherlich der Qualität des Endproduktes und der Zufriedenheit aller Beteiligten sehr hilfreich sein, wenn sie das nicht mehr müssten. Frontendentwicklung ist viel komplizierter, als alle glauben.
Struppi ¶
11. Oktober 2012, 09:34 Uhr
Sehr schöne Beschreibung des Unterschieds zwischen den verschiedenen Programmierlevel.
Ich denke damit hast du auf jeden Fall den Punkt getroffen, warum JS (und andere Webtechniken) z.T. noch immer eine schlechte Reputation haben und warum (echte? :-) )Programmierer sich manchmal schwer damit tun.
Ein Punkt, der meiner Meinung auch eine Rolle spielt, ist auch das Gefälle des - ich nenn es mal - Ansehens der Berufsgruppen.
Ein "echter Progammier" verdient i.d.R. von vorneherein das doppelte, wie jemand der Webanwendungen entwickelt und überhaupt überwiegen die Anehmlichkeiten. Während im Webbereich vieles nicht Ernst genommen wird und man oft mit ein paar Eurofuffzig abgespeist wird, kann ein Programmierer einen fünfstelligen Betrag nennen, ohne rot zu werden.
Das führt zu der von dir beschriebenen "Einfachheit" der Werkzeuge oder wie es in den Kommentaren genannt wird, zum Unterschied von 1000 oder 10.000 Zeilen Code.
Tatsächlich ist dies aber schon länger nicht mehr ganz so einseitig. Längst gibt es gut bezahlte "Webworker". Sogar echte Javascript Programmierer, die eine IDE benutzen.
Insofern glaube ich schon, dass du damit recht hast was du sagst. Aber ob TpyeScript wirklich der grosse Wurf ist, bleibt die Frage. Andrea Giammarchi beantwortet diese etwas negativer.
P.S. Die Funktionalität deiner Kommentarfunktion ist Prima!
Beat ¶
12. Oktober 2012, 07:51 Uhr
Vielen Dank für den interessanten und sehr gut geschriebenen Einblick in die Welt der echten Programmierer, die HTML5-Kurse besuchen. Ich wusste nicht, dass es davon eine so grosse Menge gibt. Könnte also durchaus ein guter Nährboden für den Erfolg von TypeScript sein. Oder auch für CoffeeScript, das diese Nische ja schon länger besetzt.
Kannst du nicht noch etwas mehr darüber berichten? Ich bin gerade in schadenfreudiger Stimmung.
Peter Kröner ¶
17. Oktober 2012, 15:11 Uhr
Klar, Google Docs kann man so nur schwer bauen. Aber alles andere ist easy. Und Docs ist ja nicht gerade der Regelfall. Insofern kommt das Faustregel schon hin.
Da ist nicht viel zu erzählen. Padawane schalten ab, Auftraggeber versuchen die Zeche zu prellen. Ich hab von einem anderen Trainer gehört, da ist die Microsoft-Brigade einfach am ersten Tag eine dreitägigen Trainings abgereist, weil sie sich vorkamen wie im falschen Film.
Don ¶
24. Oktober 2012, 20:37 Uhr
hmm? Ich vermiss teilweise auch mal eine art Framework(MVC mässiges) für JS oder ähnliches (ich bin so einer vom Frontend) komme teilweise durcheinander, da ich mit jQuery angefangen hab und nun eigentlich JS lerne und mich frage, wozu ich eigentlich eine Klasse erstellen soll, wenn jQuery für das meiste reicht...? ..ich weiss, ich sollte so eine Frage nicht stellen, doch meistens habe ich eine JS-Datei, bei der dann fast seriell das script von oben nach unten abgearbeitet wird. Teilweise bin ich zu faul, die einzelne Teilarbeiten in Funktionen zu packen oder sonst wie via Objekte mit zu "modualisieren"?
Ob das wartbar ist? Ob sich das ich(oder ein Anderer) noch nach 2-3-4 Jahren nochmal anschauen kann?..vergiss es :)
Wenn bald dann nun ähnlich komplexe Geschichten wie sie mit Flash/Actionscript vor ein paar Jahren bereits gemacht wurden, also komplexe Spielchen mit mehreren Leveln usw. realisert werden sollen (werden sie wohl schon, doch ich erfahr das meist über ein paar Ecken) dann wird man über ein robustes Klassen/Packages whatever- Programmierparadigma nicht hinwegkommen. So reicht JS für mich momentan grad dazu, ein bisschen zu animieren (Ball hin und her) oder via AJAX Daten anzuzeigen oder auf User-Input zu reagieren.
Also ich will sagen, es hat für mich doch noch eher den "Script"- Character denn den einer "Programmiersprache"? Oder?
Peter Kröner ¶
24. Oktober 2012, 20:46 Uhr
Hier gibt es 18+ MVC-Frameworks.
Das kann gut sein. Wenn du nur Webseiten baust, brauchst du sicher nicht viel mehr als jQuery. Aber für komplexe Apps, brauchst du (so sagt jedenfalls Microsoft) mehr.
Stefan Baumgartner ¶
30. November 2012, 13:15 Uhr
Top-Reason für TypeScript: Man hat im VS eine schöne Autovervollständigung, und dank den Header-Files auch für jQuery und Co, was ich mir auf meiner Plattform immer noch gern wünschen würde.
Da hört's auch schon für mich auf, der "echte" Programmierer in mir freut sich natürlich über die ganzen Strukturmöglichkeiten, aber dem Webdev ist es zuviel Drumherum und Schmonzes, als dass ich es für meine Projekte jetzt einsetzen würde.
Sebastian Oberbuchner ¶
5. April 2014, 19:28 Uhr
Also ich finde das Ganze auf den ersten Blick super. Ich habe früher viel Flash/Flex gemacht und es erinnert mich an den Sprung von AS2 nach AS3 (wobei das natürlich keine Erweiterung war, sondern eine Weiterentwicklung). Wenn man sich mit diesem Prinzip der Kapselung angefreundet hat, möchte man den Komfort nicht mehr missen. Ich wäre sogar bei kleineren Anwendungen dankbar für die Möglichkeiten.
Das ist Standardisierung. TypeScript bringt JS quasi auf einen Nenner mit Sprachen wie Java oder C# und eine Entwicklung in diese Richtung ist doch eigentlich überfällig?
Peter Kröner ¶
5. April 2014, 19:30 Uhr
Wieso überfällig? Ich hatte bisher nicht den Eindruck, dass die Entwicklung Richtung C#/Java unbedingt das ist, auf das nennenswerte Massen warten.
Sebastian Oberbuchner ¶
6. April 2014, 09:43 Uhr
Ich glaube auch nicht, dass js-Programmierer auf die Entwicklung gewartet haben. Aber vielleicht aus dem Grund, weil sie es nicht anders kennen.
Ich denke nur, es ist prinzipiell gut, wenn Sprachen sich in dieselbe Richtung bewegen. Wenn die Struktur gleich ist, dann kann man sich austauschen und sogar code einer anderen Sprache auf Anhieb (mehr oder weniger) nachvollziehen. Oder auch eigenen code, den man vielleicht nach Jahren wieder ausgräbt.
Mir hat z.B. meine AS3-Erfahrung sehr geholfen beim ersten Kontakt mit C#.