CRE146 JavaScript

Geschichte, Struktur, Eigenschaften und die Zukunft der wichtigsten Programmiersprache des Webs

Episode image forCRE146 JavaScript

JavaScript begleitet das Web zwar schon fast seit Anbeginn wurde aber als eigenständige Technologie nur am Rande wahrgenommen. In den letzten Jahren hat sich das langsam geändert und jetzt entwickelt sich in der JavaScript-Szene ein neues Selbstbewusstsein, gestützt durch die Entwicklung neuer Sprach-Implentierungen und FrameWorks und einem generell gewachsenen Bedarf an flexiblen webbasierten Lösungen orientiert. Im Gespräch mit Tim Pritlove erläutert der JavaScript-Entwickler Malte Ubl, wie sich JavaScript entwickelt hat, welche Eigenschaften JavaScript ausmachen und was die besondere Eignung für das Web ausmacht.

Themen: Warum JavaScript JavaScript heißt; JScript; Ähnlichkeiten und Unterschiede von JavaScript und ActionScript; das Erstarken der JavaScript-Szene; JavaScript Runtimes und JIT Compiler; Server-side JavaScript und asynchrones I/O; Eigenschaften von Prototypen-basierten Programmiersprachen; Webanwendungsentwicklung mit JavaScript auf dem Client und Server; Ladezeitenoptimierung; JavaScript Frameworks für Anwendungsentwicklung; Entwicklungswerkzeuge und Bücher über JavaScript; lokale JavaScript-Communities.

avatar
Tim Pritlove
avatar
Malte Ubl
Shownotes

Links:

49 Gedanken zu „CRE146 JavaScript

  1. Pingback: boeckmania webdesign & digital art // #boeckmania @ QNet

  2. Download 20 kB/s, das kanns‘ doch nicht sein..

    Ich kann ja verstehen dass Tim wissen will, wie oft eine Sendung heruntergeladen wird. Das lässt sich doch aber auch erreichen, indem man ein offizielles .torrent auf der Website anbietet und das dann zählt. Bandbreite für’s (legale) seeden ist in der CR/CRE Hörergemeinde bestimmt genug vorhanden, ich selbst könnte ein paar TB über einen 1 GBit/s Uplink anbieten.

    HTTP Downloads von einem Server sind einfach nicht mehr zeitgemäß und skalieren nicht – im Gegensatz dazu BitTorrent: je populärer ein Torrent, desto schneller kommt man dran.

  3. Megaa… Ultra… Uber TIM

    Da haut der Tim einen Podcast nach dem anderen raus. Ich hoffe das du auch noch Zeit für deine Family findest.

    Ansonsten weitermachen und was ich noch wissen wollte, wird es nicht langsam wieder Zeit für eine neue Bahncard? :) Eine Spende von mir hättest du sicher.

  4. Ui, das kommt ja unverhofft gerade recht. Dann mal warten. Das mit der Geschwindigkeit finde ich echt kein Problem, auch wenn sich ständig Leute darüber beschweren. 20kB/s? Die Leute von heute kennen nicht die Geschwindigkeiten von damals.

  5. seit wann ist heruntergeladenes torrent file gleich (erfolgreich) heruntergeladenem podcast?

    ausserdem, wie zeitnah brauchst du den podcast wirklich?

  6. Alle, die JavaScript in Ihre C-Anwendungen einbetten wollen, sollten sich mal mein Programm ‚jsapigen‘ ansehen. Es ist ein Code-Generator, welcher die Bindings zwischen Binary und JavaScript-Umgebung erstellt. Statt 50 Zeilen Binding-Code in C schreibt man dann nur noch eine Zeile in einer IDL. Das Programm läuft auf allen üblichen Plattformen.

    http://jsapigen.sourceforge.net/

    MfG
    Thomas

    PS: Danke Tim für die tollen Sendungen. CRE ist echt Gold wert.

  7. Super, eine JavaScript-Sendung habe ich mir schon länger insgeheim gewünscht!

    Da JQuery Dokument-Manipulation so einfach macht, sollten sich dann nicht die Browserhersteller mal zusammensetzen und einfach JQuery als den Standard definieren, in alle Browser einbauen und DOM entfernen oder wenigstens deprecaten? Das wäre ein weiterer insgeheimer Wunsch von mir.

    Schade auch, dass viele Leute JavaScript nur von 90er-Jahre-Ressourcen wie SelfHTML lernen/kennen, die auf die eigentlich zentralen Sprachelemente, welche JavaScript überhaupt erst ausmachen (Prototypal Inheritance, Objekt-Literale/JSON und First-Class-Functions/Closures), gar nicht eingehen und auch noch DOM lehren. Dementsprechend viel schlechtes JavaScript gibt es da draußen in der Welt. Douglas Crockford hat wirklich wichtige Arbeit damit geleistet JavaScript neu zu entdecken und seine Erkenntnisse zu verbreiten.

    Lustig fand ich den Ausspruch „die breite Klasse der Programmierer-Mittelschicht mitnehmen“. Eine erste Reaktion auf JavaScript von Entwicklern, die bisher nur Java und Co. kennen ist häufig „Wo ist denn hier das ‚class‘-Keyword?“. Es ist tatsächlich wichtig zu verstehen, dass JavaScript nicht auf die klassische Klassen-Objektorientierung festgenagelt ist, sondern diese nur eine Option von vielen ist mit JavaScript konkret Objektorientierung zu betreiben, da Prototypen-OO ein Superset der Klassen-OO ist, wie in der Sendung auch gesagt.

    Wenn es nicht ums Web geht favorisiere ich aber Lua. Das ist recht ähnlich zu JavaScript (prototypbasiert, dynamisch, funktional, schlank, schnell, embeddable, ohne Standardlibrary-Vorgabe), nur ohne „Bad Parts“ und mit schönerer Syntax (nicht C-basiert).

  8. Übrigens gewinnt JavaScript auch bei klassischen Desktop-Anwendungen zunehmend Bedeutung (zumindest unter den Unix/Linux-Desktops wie GNOME und KDE).

    Beispielsweise lassen sich mit Seed [1] ganz normale, vollwertige Gnome/GTK-Anwendungen in JavaScript entwickeln, ganz ohne Browser. Seed benutzt die GLib als Standard-Library (für Dateizugriff etc.) und GObjectIntrospection um GObjects automatisch zu JavaScript-Objekten zu binden. So wird beispielsweise der GNOME-3-Desktop („Gnome Shell“) in JavaScript mit Clutter (auch eine GObject-Library [2]) entwickelt.

    Auch unter KDE werden viele Plasmoids mit JavaScript/QtScript entwickelt.

    [1] http://live.gnome.org/Seed
    [2] http://www.clutter-project.org

  9. Vielen Dank für den Torrent. War in 2 min auf meine Platte. Ich hoffe die Verteilungsprobleme der CRE Podcasts sind bald gelöst, damit ich den Feed wieder abonnieren kann ohne einen Hals zu bekommen bei „ETA 6h“.

  10. Danke für den Podcast. Ich bin schon mächtig gespannt.

    Was Desktop-Apps angeht: Ich würde mir mal XUL ansehen. Also die Basis von Firefox, Thunderbird & Co.. Das ist im Prinzip auch alles Javascript. Zumindest habe ich das am Barcamp letztes Wochenende so gelernt. 8-)

  11. Toller Podcast!
    Mich hätte allerdings eure Meinung zu der „gängigen Praxis“ interessiert, JavaScript per default erst mal zu blocken (NoScript). Seht ihr es nicht auch als echtes Risiko auf jeder Pups-Seite JavaScripts zu haben?

  12. Ersteinmal Danke für diese tollen Podcasts,

    an die Bittorrentliebhaber von oben, wenn Ihr das ganze schon als
    Torrent anbietet ist ja alles schön und gut aber warum benennt ihr
    die Files denn immer um die passen dann gar nicht mehr so schön
    in die sauber sortierte Sammlung, das ist etwas nervig. Lasst sie
    doch so wie sie sind…

  13. @Tommy: das sind die Paranoiker mit Aluhut. JavaScript ist ja nur dann gefährlich, wenn die Engine eine Sicherheitslücke hat, was aber genauso für HTML gilt.

  14. Ich finde ja diesen Google Code Talk zu JavaScript SEHR interessant (hoff ich verwechsle den Link nicht): http://www.youtube.com/watch?v=hQVTIJBZook

    Da wird auch gesagt, dass man „new“ eher nicht verwenden soll, sondern lieber den JSON artigen Weg nehmen sollte. Hab vergessen warum aber es gab da ein dummes Problem dabei. Auch gibts einen Google Talk zu der Zukunft von JavaScript, der sehr interessant war. Hab ich jetzt aber den Link grade nicht parat. Jedenfalls gilt für den verlinkten Talk Anschaupflicht (ist nicht nur inhaltlich interessant sondern auch gut gehalten).

  15. Aja der, der den Google Talk über JavaScript hält (mein Post mit dem Link wartet noch auf Moderation) ist Doug Crockford (der JSON Erfinder) und kA ob das noch gesagt werden wird aber eval() sollte man NICHT verwenden! Viel zu gefährlich! Dafür gibts in JavaScript geschriebene JSON Parser und ich denk in Zukunft wird die XHR API der Browser eben nicht nur XML oder Plain Text, sondern auch JSON zurückliefern können (also dann parsts der Browser).

  16. Toller Java Podcast, super interessant und ein Thema das auch echt mal dran war. Schade finde ich, dass hier immer wieder über die Downloadgeschwindigkeit gemosert wird. Scheint für einige das wichtigste zu sein, wie schnell sie den Podcast laden. Ich dachte es zählt eher der Inhalt, und der ist wahrlich super und beachtenswert

  17. Aja, es kam ja auch die Frage auf wo JavaScript außerhalb des Browsers verwendet wird: In KDE kann man mittlerweile sehr viele Dinge mit JavaScript skripten. Z.B. kann man Plasma Widgets (sowas ähnl. wie OS X Dashboard Widgets) in JavaScript (und anderen Sprachen) schreiben und Programme wie Kate oder Amarok kann man mit JavaScript erweitern. Zumal dafür Qt verwendet wird kommt da auch Webkit zum Einsatz und in Zukunft eben auch das JITende JavaScript Core.

  18. Diese Folge finde ich nicht so gelungen. Der Gast kam leider nicht sehr eloquent rüber. Die zahlreichen ‚ähms‘ waren schon störend, aber richtig schlimm waren die extremen Pausen in seinen Antworten/Sätzen.

    Um die Kritik besser einordnen zu können: bei CRE139 Medienkompetenz gab es in den Kommentaren auch einige Beschwerden wegen äh’s – fand ich dort aber subjektiv überhaupt nicht schlimm.

    Von der Struktur war es etwas Schade, das auf die Erklärung der Sprache an sich erst nach gefühlten 2h Stunden eingegangen wurde, nachdem über zig Engines/Frameworks gesprochen wurde.

    Auch die Erklärung von dem Objekt-Modell war etwas knapp/kryptisch.

  19. @Gerg: Hast du selbst schon mal einen Podcast gemacht? Sprachlich das gut zu machen, ist wirklich schwierig und muss eigentlich richtig gelernt werden. Und da war Malte sicherlich nicht brilliant aber auch nicht schlecht.
    Die Kritik an der Struktur der Sendung kann ich nachvollziehen. Trotzdem der kleineren Mängel fande ich Sendung insgesamt sehr gelungen. Besonders note.js sollte vertieft werden.

  20. Javascript war für mich eines der interessantesten Themen im CRE, hat mir sehr gut gefallen! Auch den Bezug zu Flash fand ich sehr informativ und hilfreich.

  21. Zum Thema JavaScript-IDE: Ich habe kürzlich entdeckt, dass NetBeans äußerst brauch ist! Beste Auto-Completion mit Anzeige der API-Dokumentation bisher, zumindest für jQuery, andere Frameworks habe ich noch nicht getestet.

  22. Malte ist sicher ein Held (schließlich hat er ja schon 10 Jahre Web-Entwicklung in MVC.Frameworks gemacht, deshalb fand er ja Rails so unspannend, was er da wohl 1998 benutzt hat… ;o)), aber er kann sein Wissen mitunter nicht richtig rüberbringen. Einige Erklärungen zu den Objekten und Prototypen zerfaserten, weil Tim ständig nachfragen musste, derartig, dass der rote Faden abhanden kam.

  23. Vielen Dank für den Hammer Podcast! Habe mich sehr amüsiert auch wenn ich mal anderer Meinung war.

    @Edo Z: MVC basierte Web-Entwicklung ist in der Tat Ende der 90iger aufgekommen, als die ganzen Smalltalker da hin migriert sind.

  24. Eine sehr gelungene und spannende Sendung!

    Allerdings noch noch ein Hinweis: Da JavaScript ja wirklich in allen Browsern verfügbar ist, gibt es mitunter starke Bemühungen, Cross-Compiler für JavaScript zur Verfügung zu stellen. Zum Beispiel GWT (das Framework mit dem GMail gemacht worden ist) wäre erwähnenswert. Die Meinung von Malte zu sowas hätte mich echt interessiert!

    Zitat aus dem JavaPosse: „JavaScript is the assembly language of the Browser.“

  25. Mmm…finde JavaScript cool (kenn’s nicht, aber das Konzept gefällt mir sehr gut). Könnte man mal nicht auch einen Podcast über andere, evtl. underhypte Programmiersprachen machen (Tcl)? Deren Konzepte etc.

  26. Hallo!
    Ich hab dann auch gleich mal ne Frage ;-)
    Was ist denn heute so die aktuelleste JavaScript-Version und wo finde ich ne API- und ne Sprachreferenz/definition(BNF) dafür? Ich blick bei den vielen verschiedenen Versionen nicht mehr durch !

  27. Da ich selbst nochmal was bestimmtes Nachhören wollte, hat es sich ergeben, dass ich ein grobes Inhaltsverzeichnis dieser Folge erstellt habe, welches ich natürlich niemandem vorenthalten möchte! Kein Anspruch auf Richtigkeit oder Vollständigkeit! (Hoffe die Formatierung passt bei diesem Formular) :-)

    00:04:50 Herkunft des Namens „JavaScript“, hat nix mit Java zu tun
    => Fehler: Eindruck JavaScript sei „kleiner Bruder“ von Java
    00:06:40 Microsoft-Version: JScript, Browser-Wars
    00:09:00 Standardisierung durch ECMA => ECMAScript
    00:11:30 Mozilla am experimentierfreudigsten => mehr Features als andere,
    die lieber einen Speedwar machen
    00:12:20 API zum Browser: DOM Unterschiede zu Flash ActionScript
    00:15:30 Das Absehbare Ende von Flash / ActionScript
    00:17:45 IE6 ist out, wie auch Flash
    00:18:30 JSConf (jährliche JavaScript-Konferenz)
    00:20:40 CRE125: CouchDB
    00:21:40 die erste JavaScript-Implementierung Spidermonkey, Tracemonkey
    (tracing JIT-Compiler) (JIT=Just In Time)
    00:24:00 Performance-Vergleich Tracemonkey Spidermonkey, hoher Aufwand
    JavaScript schneller zu machen, Vergleich Geschwindigkeit JavaScript,
    Java, C, Pywhon, Perl, …
    00:25:50 Adobe und deren Position zu JavaScript (haben Tracemonkey gespendet),
    Adobe nun unter Druck da Flash verschwindet, könnten aber relativ
    einfach auf JavaScript umsteigen indem sie swf nach JavaScript & HTML
    kompilieren
    00:28:10 weitere JavaScript-Implementierungen: apple (SquirrelFish) und
    google (V8) sind im Speedwar
    00:30:42 Unterschiede, Feature-Implementierungs-Policies: mozilla probiert
    viel aus, apple baut nur standardisierte Sachen ein, google baut
    nur Sachen ein die apple eingebaut hat
    00:32:40 ECMA arbeitet sehr langsam => andere deFacto-Standards müssen
    aufgenommen werden damit man weiterkommt
    00:33:35 Rhino, Server Side JavaScript
    00:37:20 node.js
    00:43:00 URL-Shortener, weiter node.js: läuft zwar stabil, aber API ist nicht
    fixiert sondern ändert sich sehr häufig
    00:47:35 narwhal und seine Implementierungen (Rhino, V8, …); blocking
    00:48:18 Überblick Benutzung JavaScript auf Clientseite; wie sieht es auf
    ServerSeite aus, wo man doch auch etwas mehr braucht? Was fehlt noch?
    00:51:25 AMQP (Advances Message Queuing Protocol)
    00:53:05 Programmiersprachen zur Realisierung von Webanwendungen: Ruby on Rails,
    vergleichbare Ansätze in JavaScript? Einschränkungen von Rails im
    Vergleich zu event-basierten Ansätzen wie node.js
    00:56:55 die JavaScript-Revolution durch AJAX (XMLHttp-Request und warum es
    eigentlich Http-Request heißen sollte)
    00:59:45 das Box-Model vom IE6
    01:00:45 prototype.js und wie sie die DOM-API repariert (vereinheitlicht)
    haben
    01:04:30 welche Fehler prototype.js gemacht hat und was man daraus gelernt hat
    01:06:20 JavaScript im Detail: Unterschied zu den meisten anderen: Objektmodell
    mit Prototypen (Vergleich mit Klassenmodell)
    01:09:38 Grundlagen (Urschleim): Objekte, Funktionen, Arrays
    01:12:50 JavaScript im Kern eine funktionale Programmiersprache, Funktionen
    sind vollwetige Objekte, Objekterzeugung mit Funktionen, das
    Prototype-Property um Speicher zu sparen, Prototype-Inheritance-Chain,
    Vererbung
    01:17:42 Beispiel für Objekt-Hierarchie-Modell: Hund
    01:20:00 klassenmodell-mässig programmieren in JavaScript (möglich, muss man
    halt selber bauen oder ein entsprechendes Framework nutzen)
    01:21:25 historische Gründe für das leichtgewichtige, prototypische, abstrakte
    Programmiermodell in JavaScript
    01:22:00 andere prototypen-basierte Programmiersprachen
    01:23:00 ActionScript auch so, nur ActionScript 3 ist nun klassenbasiert
    01:23:44 was gibt es noch ausser Dynamik, Funktionalität, Prototypen sonst noch?
    Scoping, „Namespace-Simulation“, Closures (anonyme Funktionen)
    01:27:20 Zusammenfassung: dynamisch (=> Performanceprobleme), funktional,
    CRE84: LISP, CRE31: Programmiersprachen und Dylan (closures),
    JavasScript sowohl leichtgewichtig als auch flexibel
    01:29:35 Joose JavaScript Meta-Object System: Klassen mit Namen,
    Instanzvariablen, Methoden; Vererbung, Traits (Mix-In + Interface),
    aspektorientierte Programmierung, eigene Meta-Klassen (z.B. für
    Mehrfach-Vererbung oder für Custom-Events)
    01:33:27 JavaScript-Frameworks & Programmiermodelle: Zusammenfassung: von
    (X)HttpRequest zu Ajax, JavaScript, JSON als Datenformat (lässt
    sich mit eval auswerten, da vollwertiges JavaScript-Literal), besser
    geeignet für Objekt-Abbildung von Programmen als XML
    01:37:07 „kulturelle Auswirkungen“ von Ajax: Client wurde neu entdeckt
    01:39:30 wie ging es weiter nach prototype.js? Welche Lehren wurden gezogen?
    JQuery (DOM-Manipulation), DOM-Operationen sind eine Art
    Mengenoperationen in CSS-Syntax, Dojo Toolkit
    01:45:00 YUI (Yahoo User Interface Library)
    01:46:50 weitere Frameworks: SproutCore (für single page applications),
    Cappuccino & Objective-J
    01:50:10 wohin geht der Weg: Webanwendungen die sich klassisch als indizier-
    und googlebare Seiten darstellen vs. vollständige Anwendung im Web?
    Je nachdem macht beides Sinn
    01:51:21 GWT (Google Web Toolkit)
    01:51:50 wo geht die Reise hin mit JavaScript? Im mobilen Bereich: Palm-WebOS,
    Android, Chrome OS, alles ist Web-Anwendung, Phone GAP
    01:55:35 Zukunft auf dem Desktop? Google vorne weg, Anwendungsentwicklung im
    Browser, Rails
    01:57:30 klassische Fragen & Bedenken von Programmierern im Bezug auf JavaScript
    schlechter Ruf, dynamische vs. statische Typisierung, Objektmodell
    01:59:45 JavaScript: Write-Only-Programmiersprache (noch schlimmer als Perl)
    wegen der vielen verschiedenen, zueinenader inkompatiblen Frameworks
    Ruby dagegen hohen Re-Use-Value, Versuch CommonJS (wie CommonLisp),
    kein Repo wie CPAN verfügbar (JSAN setzt sich nicht durch)
    02:04:10 es gibt keinen „benevolent dictator“ der die Richtung vorgibt
    => es muss sich in der Community herausbilden, verschiedene Ansätze
    02:06:28 JavaScript Ladezeiten-Optimierung im Browser
    02:09:40 Werkzeuge & Ressourcen: Texteditoren, Google Closure Compiler
    & Type Annotations (helfen dem Compiler bei der Optimierung, vgl.
    tracing JIT), Firebug, Profiling Tools (zur Performance-Optimierung)
    02:14:15 Was ist für den Einstieg ins Thema alles geeignet?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.