JavaScript continuera-t-il à régner sur le Web ?

JavaScript domine le Web à un point où il est devenu son langage d'assemblage. Mais qu’en est-il de son avenir ? Restera-t-il le langage incontesté du Web ? Continuera-t-il sur son chemin pour régner sur tous les logiciels ?

Quand nous pensons au développement Web, nous pensons aux balises HTML, aux feuilles de style CSS et surtout au langage de programmation JavaScript. Ce dernier domine le Web à un point où il est devenu son langage d'assemblage. 93,1% des sites Web à travers le monde sont écrits en JavaScript et sa popularité ne cesse de croître parmi les développeurs. Année après année, nous voyons de nouveaux livres, de nouveaux didacticiels, de nouvelles offres d’emploi, de nouveaux adeptes, de nouvelles bibliothèques, de nouveaux sites et de nouveaux codes.

Mais qu’en est-il de son avenir ? Restera-t-il le langage incontesté du Web ? Continuera-t-il sur son chemin pour régner sur tous les logiciels ? Poser ces questions peut sembler absurde puisque les réponses paraissent évidentes. Mais, avant d’y répondre, analysons les signaux derrière les initiatives autour de JavaScript et de son écosystème, en commençant par les plus récentes.

JavaScript, côté client Web

Cette année, en février 2016, Google a fait une annonce importante sur le Web. Pour que les éditeurs des sites mobiles bénéficient de sa nouvelle technologie AMP (Accelerated Mobile Pages), ils devront diminuer voire totalement éliminer JavaScript de leurs codes. Pour Google, le signal était clair : JavaScript manque de performances pour le Web mobile.

L'année dernière, en juin 2015, Google, Apple, Microsoft et Mozilla se sont associés pour lancer WebAssembly, une sorte de bytecode avec comme objectif principal de remplacer à terme JavaScript. Les concepteurs derrière Chrome, Safari, Edge et Firefox expérimentent déjà la génération de ce bytecode à partir des langages C et C++. Rappelons que jusqu'à présent, ces langages ont été principalement utilisés pour la programmation système. Une fois ces expériences terminées et si le bytecode devient une norme, d'autres langages traditionnels comme Java et C# suivront probablement le chemin pour devenir des langages du Web. JavaScript ne serait plus le seul maître.

Mais ces deux initiatives ne sont pas nouvelles. D’autres sont apparues avant. En effet, depuis sa genèse en mai 1995, nous avons commencé à voir des dialectes parmi lesquels les plus populaires ont été CoffeeScript, conçu en 2009 par un ex designer graphique du New York Times, et TypeScript, conçu en 2012 par une équipe d’ingénieurs de Microsoft. En plus de ces dialectes, nous avons aussi commencé à voir une liste croissante de transpilateurs, sortes de traducteurs qui permettent à quiconque de développer dans un langage traditionnel et de générer du code JavaScript pouvant s’exécuter dans les navigateurs.

A ce jour, nous avons plus de 200 dialectes et de transpilateurs. Certains vous proposent d’écrire en C, C++ ou Java, d’autres en Python, Ruby ou Erlang mais l’écosystème de JavaScript ne se limite pas à ces dialects et à ces transpilateurs. Il est aussi composé d’une liste de 27 “frameworks” dont les plus célèbres sont jQuery, Bootstrap, Backbone.js et AngularJS. Et la liste de ces extensions s’étend de plus en plus. Pour s’en rendre compte, il suffit de consulter régulièrement la plate-forme GitHub, devenue la plus grande place de marché du logiciel libre.

A première vue, cette richesse parait comme une force du langage JavaScript et de son écosystème évolutif. Mais, si nous analysons les raisons derrière le développement de tous ces dialectes, de tous ces transpilateurs et de tous ces “frameworks”, nous trouvons deux limitations majeures : la syntaxe et les performances du langage initial.

Pour certains concepteurs, en particulier ceux habitués aux langages de programmation comme Python, Ruby et Haskell, JavaScript a été mal pensé et trop vite conçu. Pour d'autres, en particulier ceux habitués aux langages de programmation comme C, C++ et Java, JavaScript était lent pour devenir un langage de production. Pour tous, le langage devait être amélioré, et ce fut le point de départ de cette prolifération sur le Web.

Il est rassurant d'avoir une grande communauté autour d'un langage de programmation, mais il est préférable d'avoir une vision de développement bien définie plutôt qu'une prolifération qui va dans toutes les directions et sans stratégie. JavaScript a trop de dialectes, trop de transpilateurs et trop de “frameworks” qui ont été d'abord un avantage, mais qui sont maintenant devenus un problème pour le futur du langage. Initialement conçus pour étendre ses fonctionnalités ou corriger certaines de ses lacunes, ils proposent des solutions parfois incompatibles. Le choix d’un dialecte, d’un transpilateur ou d’un “framework” est devenu un pari parce que vous ne savez pas si la technologie que vous avez choisie va être maintenue à long terme ou délaissée à court terme pour une nouvelle technologie plus à la mode. Certes, le logiciel libre vous propose la gratuité mais il ne vous garantit pas la continuité. Sur GitHub, vous pouvez trouver des logiciels avancés d’une excellente qualité mais aussi des librairies expérimentales, souvent incomplètes.

Pour rester le langage de référence du Web, JavaScript a besoin d'un dialecte à la fois convivial et performant, et avec une haute qualité pour permettre la production de sites de grande échelle. TypeScript pourrait être ce dialecte. Il est soutenu par Microsoft et a été récemment adopté par Google pour son framework AngularJS 2.0. De plus, il adhère aux spécifications du standard ECMAScript qui régit les évolutions du langage JavaScript.

JavaScript, au-delà du client Web

Si nous quittons le côté client et analysons la présence de JavaScript du côté serveur, la situation est beaucoup plus claire. Les serveurs Web sont le domaine de PHP et d’ASP.NET qui équipent respectivement 81,9% et 15,7% des sites Web au niveau mondial. Grâce à sa version NodeJS côté serveur, JavaScript est présent mais avec uniquement 0,2% des sites Web, très loin derrière PHP et ASP.NET. Si la situation doit changer, un nouvel entrant pourrait être le langage Go que Google a mis au point en 2009 pour remplacer les langages C, C++ et Java dans ses serveurs à haute performance.

Lorsque nous descendons plus bas vers la couche applicative, nous trouvons principalement Java, C#, C++ et C. Ce sont les langages qui régissent les systèmes internes des entreprises commerciales, des administrations publiques et des organisations non commerciales : ERP, CRM, RH, e-Business, BI et toutes les applications transactionnelles. Il n'y a aucune raison rationnelle pour voir JavaScript ou NodeJS devenir un langage de premier ordre au niveau application, pour des raisons de manque de performances et de support des fonctions système. Et s'il y a un nouveau langage qui trouverait une place dans cette couche, il pourrait être Go, car il est beaucoup plus proche des langages C et C++ au niveau performances et est beaucoup plus adapté aux gros systèmes et aux grands réseaux que nécessite la couche applicative.

Quand nous allons encore plus loin jusqu'à la couche de données, nous entrons dans le monde de l'analyse des données et de l'apprentissage automatique régi par des langages issus des mathématiques et des statistiques, tels que R, Matlab, Octave, et Python. Des aficionados de JavaScript essaient de développer des extensions de calcul scientifique pour entrer dans cette couche, mais JavaScript n’a pas l’analyse de données et l'apprentissage automatique dans son ADN. Le seul nouvel entrant ici pourrait être le langage Julia que le MIT a conçu en 2009 pour remplacer R, Matlab, Octave et Python. 

Manquant de performances, ces derniers sont utilisés principalement dans les phases de développement de prototypes qui, une fois stabilisés, doivent être recodés en Fortran, C ou C++ avant leur mise en production.

Julia pourrait transformer la manière avec laquelle les équipes de R&D divisent actuellement le travail, entre les “data scientists” qui conçoivent les prototypes d'une part, et les informaticiens qui transforment ces prototypes en des systèmes de production d'autre part. Avec Julia, il n'y aurait plus besoin de cette division du travail.

JavaScript à l'ère du mobile et du "cloud"

Alors que le client Web est de plus en plus mobile et que le serveur Web est de plus en plus dans le “cloud”, le paysage des langages de programmation pour adapter ce nouveau modèle de calcul est en train de changer. Cela donne l'occasion à de nouveaux langages de proposer des alternatives aux langages établis.

Go pourrait devenir une alternative à Java, actuellement le standard de fait pour développer des applications sur Android. De la même manière, Swift, le langage qu’Apple a conçu en 2014, pourrait remplacer Objective-C comme langage de programmation pour iOS.

Que Java ou Objective-C continuent à gouverner le Web mobile ou qu’ils donnent une place à Go et à Swift, une chose est sûre : JavaScript ne sera pas le seul langage qui règnera sur le Web mobile, en particulier depuis le lancement de Google AMP.

Néanmoins, JavaScript ne disparaîtra pas du jour au lendemain. L'histoire est une démonstration que les langages de programmation, soit évoluent à l’instar de C++ et Java, soit stagnent ou déclinent comme Cobol et Pascal. L'utilisation de JavaScript a considérablement changé au fil des ans et avec le langage lui-même via les spécifications ECMAScript, aujourd’hui dans sa version 6.

Voyons ce que l'avenir proche nous montrera. Le monde des langages de programmation est dynamique. Chaque nouvelle génération technologique vient avec de nouveaux langages ou de nouveaux usages. Qui aurait pensé que le mobile et le “cloud” mettraient un super-ordinateur dans nos poches ? Ceci est arrivé grâce à une chaîne de générations de langages de programmation aussi fantastiques les uns que les autres. JavaScript est l'un d'entre eux, mais pas le dernier. La chaîne de nouveaux langages continuera de nous apporter de nouveaux et de nous surprendre…

Liens vers les sources des données (en langue anglaise) :