Douglas Crockford: Javascript le plus incompris des Langages au Monde

Douglas Crockford Architecte à Yahoo! et Inventeur de JSON a écrit en 2001 la fameuse Diatribe à l'égard de Javascript:

"Javascript: The World's Most Misunderstood Programming Language"

La traduction en français est désormais disponible depuis la Homepage de Douglas Crockford en cliquant sur "French", qui fait un lien vers cette page.

En guise de préambule à la traduction, il reproche au Marketing de Netscape autour de Javascript d'avoir été désastreux à l'encontre de ce language, qui sous un nom trompeur faisait apparenter javascript à java alors que javascript est en fait plus proche de Lisp philosophiquement parlant avec une orientation Programmation Fonctionnelle. Depuis, l'engouement autour de Javascript ne s'est plus démenti grâce à l'arrivée d'Ajax popularisé par Google Map et l'émergence de puissants frameworks tels que Prototype et JQuery (nous aurons l'occasion de les aborder dans le futur). Sans compter qu'avec l'arrivée des architectures massivement distribuées (utilisées par exemple pour l'algorithme Map Reduce du moteur de recherche de Google) la Programmation Fonctionnelle a également le vent en poupe avec de nouveaux languages (tels que F# sur .NET, Clojure ou Scala sur JVM)



Douglas Crockford: Javascript le plus incompris des Languages au Monde

JavaScript, aka Mocha, aka LiveScript, aka JScript, aka ECMAScript, est l'un des plus langages de programmation les plus populaires. Pratiquement tous les ordinateurs dans le monde ont au moins un interpréteur JavaScript d'installé en utilisation active. La popularité de JavaScript est entièrement due à son rôle en tant que langage de script de la World Wide Web.

Malgré sa popularité, peu de gens save que JavaScript est un joli langage dynamique de programmation orienté objet généraliste. Comment cela peut-il être resté secret? Pourquoi ce langage est-il si mal compris?

Le Nom

Le préfixe Java suggère que JavaScript est en quelque sorte relié à Java, que c'est un sous-ensemble ou un language moins capable que Java. Il semble que le nom a été volontairement choisi pour créer la confusion et de la confusion vient le malentendu. JavaScript n'est pas du Java interprété. Java est interprété Java. JavaScript est un langage différent.

JavaScript a une similitude syntaxique avec Java, tout comme Java avec le C. Mais il n'est pas plus un sous-ensemble de Java que Java n'est un sous-ensemble de C. Il vaut mieux que Java dans les applications pour lesquelles Java (aka Oak) était originellement destinées.

JavaScript n'a pas été développé chez Sun Microsystems, la maison de Java. JavaScript a été développé chez Netscape. Il a été à l'origine appelé LiveScript, mais ce nom n'était pas suffisamment confus.

Le suffixe -Script suggère que ce n'est pas un vrai langage de programmation, qu'un langage de script est inférieur à un langage de programmation. Mais c'est vraiment une question de spécialisation. Par rapport au C, JavaScript troque la performance pour le pouvoir expressif et le dynamisme.

Lisp dans sous les Vêtements du C

La syntaxe JavaScript de type C, y compris les accolades et les lourdes déclarations, le fait apparaître comme un langage procédural ordinaire. Ceci est trompeur car JavaScript a plus en commun avec les langages fonctionnels comme Lisp ou Scheme qu'avec C ou Java. Il a des tableaux plutôt que des listes et des objets au lieu de listes de propriétés. Les fonctions y sont citoyens de première classe. Il a des closures. Vous avez des focntions lambdas sans avoir à surcharger avec toutes les parenthèses.

Casting de Type

Javascript a été conçu pour fonctionner sur Netscape Navigator. Son succès l'a amené à devenir un standard pour pratiquement tous les navigateurs. Il en a résulté le casting de type. Javascript est le George Reeves des Langages de Programmation. Javascript s'adapte bien à une large classe d'applications non-web.

Cible Mouvante

Les premières versions de Javascript était vraiment passables. Il leur manquait la gestion des exceptions, les fonctions inline et l'héritage. Dans sa forme présente, c'est maintenant un langage de programmation orienté objet complet. Mais beaucoup d'opinions sur le language sont basées sur sa forme immature.

Le comité de l'ECMA qui a le contrôle sur le langage est en train de développer une extension, même bien intentionné, qui risque d'aggraver les plus gros problèmes du langage: il y a déjà trop de versions. Cela crée de la confusion.

Erreurs de Conception

Aucun langage de programmation n'est parfait. Javascript a son lot d'erreurs de conception, comme la surcharge de l'opérateur + qui signifie à la fois addition et concaténation avec coercition de type, et les instructions générant des erreurs sont à éviter. Les mots réservés sont trop stricts. L'insertion du point-virgule fut une énorme erreur, ainsi que la notation des expressions régulières litérales. Ces erreurs ont conduit à des erreurs de programmation et à remettre en question la conception du langage dans son entièreté. Heureusement, nombre de ces problèmes peuvent être contrés avec un bon programme lint.

La conception du langage dans son ensemble est plutôt sain. Etonnamment, le comité ECMAScript ne semble pas interessé à corriger ces problèmes, peut-être sont-ils plus interessés à en créer d'autres.

Implémentation Négligée

Les implémentations antérieures de Javascript étaient très buggées. Cela a déteint négativement sur le langage. En plus de cela, ces implémentations étaient incluses dans des navigateurs horriblement buggés.

Mauvais Ouvrage

Presque tous les ouvrages concernant Javascript sont vraiment affreux. Ils contiennent des erreurs, des exemples pauvres, et promotionnent de mauvaises pratiques. Des caractéristiques importantes du langage sont expliqués pauvrement ou complètement laissées de côté. J'ai revu des dizaines de livres Javascript, et je ne peux en recommander qu'un seul: Javascript: Le Guide Définitif (5ème Edition) de David Flanagan. (Message aux auteurs: si vous en avez écrit un bon, merci de m'en envoyer une copie pour revue).

Un standard en dessous du standard

La spécification officielle du langage est publié par ECMA. La spécification est extrêmement de pauvre qualité. Elle est difficile à lire et très difficile à comprendre. Cela a été une contribution au problème des Mauvais Livres parce que les auteurs étaient incapables de comprendre ce document standard pour améliorer leur propre compréhension du langage. ECMA et le comité TC39 devraient être profondément honteux.

Hobbystes

La plupart des gens qui codent en Javascript ne sont pas des programmeurs. Ils manquent de formation et de discipline pour écrire des bons programmes. Javascript a tellement de pouvoir expressif qu'ils peuvent toujours arriver à faire des choses utiles avec. Cela a donné la réputation à Javascript d'être strictement pour les amateurs, qu'il n'est pas approprié pour de la programmation professionnelle. Ce n'est simplement pas le cas.

Orienté Objet

Javascript est-il Orienté Objet? Il a des objets qui peuvent contenir des données et des méthodes qui agissent sur ces données. Les Objets peuvent contenir d'autres objets. Il n'a pas de classes mais il a des constructeurs qui font ce que font les classes, y compris en se comportant comme conteneurs pour les variables et méthodes de classe. Il n'a pas d'héritage orinté-objet, mais il a un héritage orienté prototype.

ILes deux manières principales de construire des systèmes d'objet sont l'héritage (est-un) et l'aggrégation (a-un). Javascript a les deux, mais sa nature dynamique lui permet d'exceller dans l'aggrégation.

Certains pensent que Javascript n'est pas vraiment orienté objet parce qu'il ne fournit pas l'encapsulation des données. C'est à dire, les objets ne peuvent pas avoir des variables et de méthodes privées: tous les membres sont publiques.

Mais ils s'avère que les objets Javascript peuvent avoir des variables et des méthodes privés. (Cliquer ici pour voir comment). Bien sûr, peu le comprenne car Javascript est le plus incompris des langages de programmation au monde.

Certains arguent que Javascript n'est pas vraiment orienté objet car il ne fournit pas l'héritage. Mais il s'avère que Javascript fournit non seulement l'héritage classique, mais aussi d'autres patterns de réutilisation de code.

Leave a Reply


XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Get Adobe Flash playerPlugin by wpburn.com wordpress themes