La naissance et la mort de JavaScript (2014)
(destroyallsoftware.com)- Parcourt l’histoire de JavaScript et de la programmation de 1995 à 2035 sous la forme d’une conférence de SF, comique et sérieuse
- Le périmètre s’étend au-delà de JavaScript jusqu’à l’histoire de la programmation dans son ensemble
- Adopte un point de vue neutre, sans se ranger pour ou contre JavaScript
- Aborde honnêtement les défauts du langage, tout en évaluant très positivement son impact final sur l’industrie
- Le message central est que, malgré ses défauts, JavaScript a laissé un impact très positif sur l’industrie de la programmation
Aperçu de la conférence
- Suit l’histoire de JavaScript et de la programmation dans son ensemble de 1995 à 2035
- La conférence mêle SF, comédie et exposé entièrement sérieux
- Ce n’est ni une conférence en faveur de JavaScript ni une conférence contre lui, et elle ne se résume pas à une position partisane
- Les défauts de JavaScript sont abordés avec franchise, mais son impact final sur l’industrie est évalué de manière très positive
1 commentaires
Réactions sur Hacker News
Il avait bien prédit avec précision qu’une catastrophe planétaire arriverait entre 2020 et 2025, il s’est juste trompé sur sa nature, et c’est ça qui est bien (?)
Très JavaScript, en somme
Étonnant que personne n’ait encore mentionné qu’il nous a laissé ce chef-d’œuvre
Si vous ne l’avez pas vu, je recommande d’arrêter ce que vous faites et de le regarder. Cinq des meilleures minutes de votre journée garanties
https://www.destroyallsoftware.com/talks/wat
Boundaries est la vidéo la plus éclairante que j’aie vue sur l’architecture logicielle, et je repense encore à ses leçons quand je conçois des applications complexes
C’est aussi une très bonne introduction pour apprendre à penser comme un programmeur fonctionnel quand on est habitué à une logique impérative avec de l’état dispersé partout
https://www.destroyallsoftware.com/talks/boundaries
Après avoir appelé
Array(16), il dit qu’il y a 16 séparateurs, alors qu’en réalité il n’y en a que 15, ce qui gâche un peu la blague sur BatmanIl utilise aussi
{}+[], explique qu’il ajoute un objet à une liste, puis se moque du fait que le résultat diffère de[]+{}qui donne[object Object], mais en réalité, si on écrit({}+[]), on obtient aussi[object Object]Je laisse comme énigme la raison pour laquelle
{}+[]donne autre chose. Indice :Gurer vf ab bowrpg gurer.JavaScript est effectivement devenu une cible de compilation ; dans la vidéo de l’époque c’était asm.js, mais aujourd’hui il y a WebAssembly
Quand on voit que c’est réellement implémenté et que ça tourne à des performances proches du natif, on peut dire que la prédiction était assez juste
J’utilise surtout TypeScript, et avec Electron, les technologies web ont été empaquetées en applications desktop, ce qui a aussi fait entrer la syntaxe du web dans les programmes classiques
On dit souvent qu’Electron est lourd et pas terrible, mais c’est aussi le moyen le plus rapide de supporter Mac, Windows et Linux d’un coup
La “mort” dont il est question ici, c’est le moment où on n’écrit plus JavaScript directement, mais où il devient une couche de base présente partout, et à mon avis c’est bien ce qui s’est passé
Je trouve que la vitesse de développement y est plutôt bonne
En revanche, je ne sais pas vraiment comment ses performances se comparent à Electron ou aux applications natives
Pour une petite équipe, il vaut largement mieux viser la mise en production effective que l’optimisation des performances
Par définition, un compilateur traduit du code lisible par des humains en langage machine
L’avantage de JavaScript, c’est que Google l’a poussé dans ses retranchements avec V8, puis NodeJS en a fait un environnement backend attractif ; du coup, comme le PDF, il est partout, et ce qu’on écrit peut tourner partout
S’il a gardé l’avantage sur WebAssembly jusqu’à présent, c’est grâce à cette polyvalence ; WebAssembly n’est pas aussi largement déployé que JavaScript
Aujourd’hui, JavaScript est pratiquement devenu synonyme de TypeScript, et ça a été un bond immense. Le héros caché ici, à mon avis, c’était Angular 2
Angular a choisi TypeScript dès le départ tout en fournissant aussi une version en JavaScript natif, mais honnêtement cette version était presque inutilisable et s’est fait fortement critiquer à l’époque
Fait intéressant, le dernier refuge à ne pas proposer TypeScript comme option par défaut, c’est React, mais vu que des projets majeurs comme NextJS reposent par défaut sur TypeScript, ReactJS finira lui aussi par céder
Ce n’est pas la première fois que l’innovation apparaît d’abord dans d’autres projets avant que ReactJS ne suive, et ici aussi je pense qu’Angular est en avance
On se trompe rarement gravement en choisissant JavaScript et Python
Les gens écrivent encore directement d’énormes quantités de JS, et WebAssembly n’a toujours pas pris le contrôle de l’environnement d’exécution standard des applications web
On peut trouver des entreprises qui construisent des choses sur WebAssembly, mais il ne faut pas confondre cela avec le grand basculement dont parlait Gary
Cela ne s’est absolument pas produit
Pas besoin de lancer plusieurs navigateurs web pour ça
Tous les quelques années, on invente un meilleur JavaScript, puis on le transpile vers JavaScript
Il n’y a rien d’intrinsèquement mauvais à compiler vers JavaScript, et les langages de haut niveau peuvent implémenter beaucoup de garanties que le JavaScript pur n’offre pas directement
Presque toutes les garanties des langages que nous utilisons aujourd’hui peuvent être brisées en assembleur brut
Le problème, c’est que l’évolution de Wasm n’a pas été aussi rapide que ce qui était prédit ici
Comme il n’y a pas de manipulation du DOM, il faut toujours utiliser JS comme code de glue, ou alors abandonner complètement HTML et CSS et tout rendre sur un canvas, comme Flutter ou certaines GUI en Rust
Mais ce serait dommage de perdre l’ensemble des fonctionnalités du web
L’API du DOM a été conçue en partant du principe qu’on y accéderait depuis JS, et la conception de JS ainsi que certaines de ses caractéristiques “particulières” viennent en partie du fait qu’il a été pensé pour être utilisé avec le DOM
On peut le déboguer à la volée, le donner à un LLM, et comme il n’y a pas de wrappers, c’est beaucoup plus simple à manipuler, expérimenter et utiliser
En 2014, j’ai vu Gary Bernhardt présenter ce talk en direct à la Canadian Undergraduate Software Engineering Conference (CUSEC)
PNaCl venait de sortir l’année précédente, et Google l’utilisait dans Chrome et ChromeOS pour cross-compiler, exécuter et sandboxer des clients OpenSSH et RDP, tandis que Mozilla/Firefox proposait asm.js en réponse
À l’époque, ça m’avait juste fait rire, mais en le revoyant aujourd’hui, c’est surprenant de constater qu’une bonne partie de ces idées a survécu
Le lightning talk Wat de Gary Bernhardt a toujours été l’une de mes présentations préférées
Il n’a que deux ans d’avance sur la présentation mentionnée dans le titre de cet article
[1]: https://www.destroyallsoftware.com/talks/wat
Presque tout s’est passé comme prévu
Il ne reste plus qu’à attendre un autre système d’exploitation entièrement fondé sur les technologies du navigateur, ou un WASM OS
webOS et Firefox OS avaient au moins 20 ans d’avance sur leur temps
WASM ne confirme pas cette thèse, il la réfute
Cette thèse dit qu’un code source compatible JavaScript deviendra la base du futur, et que, même si le JavaScript ordinaire est une base médiocre, des moteurs JavaScript extrêmement optimisés pour interpréter efficacement des sous-ensembles compatibles pourront devenir la plateforme généraliste de demain
WASM rejette fondamentalement cette idée en créant une nouvelle base, incompatible avec JavaScript, conçue pour servir de cible de bas niveau
Dire que WASM confirme cette thèse est presque aussi étrange que d’affirmer qu’un futur où tout le monde aurait un interpréteur Rust dans son navigateur la confirmerait
Si on pousse ce raisonnement, on ne dit plus que les navigateurs web exécuteront du code sous une forme ou une autre, quel que soit le langage, et c’est déjà le cas aujourd’hui
La vidéo traite clairement de possibilités « surprenantes », et il n’est pas raisonnable de prétendre qu’elle correspond littéralement à tous les futurs possibles, même les plus ordinaires
Je pose la question par pure curiosité
Et les captures d’écran de webOS que j’ai vues m’ont donné envie de le voir revenir, pas seulement sur les smart TV, mais ailleurs aussi
Nous avons déjà dépassé la moitié du calendrier de Bernhardt pour 2035
JavaScript n’est pas encore mort, mais il semble clairement être en train de rédiger son propre éloge funèbre dans WebAssembly
À moins d’une guerre nucléaire mondiale, je parierais que JS survivra à la plupart des humains
Comme PHP, ça ne mourra jamais
JavaScript est le meilleur langage de programmation de tous les temps