Le langage de programmation le plus mal compris au monde est devenu le langage de programmation le plus populaire au monde

Jean Sammet a écrit Computer Languages: History and Fundamentals en 1969. Il s’agissait d’une enquête sur 120 langages de programmation, dont certains très détaillés. Le livre de Sammet faisait la chronique de langages conçus avant la révolution de la programmation structurée et le développement ultérieur de l’orientation objet. La couverture du livre comportait une image de la tour de Babel. La plupart des briques de la structure de la tour portent les noms de langages de programmation.

Ceci, bien sûr, fait référence à Genèse [11: 1-9], dans laquelle un excellent talent en ingénierie a été appliqué à la tâche de construire une ville et une tour permettant d’unifier le monde.

Mais l’Éternel descendit pour voir la ville et la tour que les fils de l’homme avaient bâties. Et l’Eternel dit: “En effet, le peuple ne fait qu’un et tous parlent une seule langue. C’est ce qu’ils commencent à faire. maintenant, rien de ce qu’ils proposent de faire ne leur sera caché. Venez, laissez-nous descendre et confondez leur langue, afin qu’ils ne se comprennent pas mutuellement. »Et l’Éternel les dispersa de là-bas à la face de toute la terre et ils cessèrent de bâtir la ville. C’est pourquoi son nom s’appelle Babel, car c’est là que l’Éternel a confondu le langage de toute la terre. et de là l’Eternel les dispersa sur toute la surface de la terre.

Parfois, cela est lu comme un avertissement contre l’hubris. Parfois, ceci est lu comme une histoire juste expliquant pourquoi les gens parlent tant de langues: Le Seigneur créa le Problème d’I18N pour empêcher l’humanité d’atteindre son potentiel. Mais je pense que son interprétation la plus fidèle est une métaphore de la conception de langage de programmation. Le principal problème de la programmation est la gestion de la complexité. Si un langage ne nous aide pas à gérer des systèmes très complexes face aux exigences changeantes, il en résulte une confusion et un échec.

Pourquoi y a-t-il tant de langages de programmation? Au-delà de l’ensemble Sammet, de nombreux nouveaux dialectes et langues ont été développés au cours des 40 dernières années. Nous programmons à un niveau élevé depuis très longtemps. Ne devrions-nous pas avoir convergé sur la bonne façon de le faire maintenant? La conception et l’adoption d’un langage unique et parfait permettraient d’obtenir des gains d’efficacité évidents. Nous pourrions concentrer nos ressources plus efficacement sur la formation et le développement d’outils. Pourquoi n’avons-nous pas fait cela?

Nous avons essayé. Il y a eu plusieurs tentatives pour construire des langages universels massifs. Ils ont tous échoué. Au fur et à mesure que le design d’un langage grandit et augmente son applicabilité, il devient de plus en plus complexe. Les concepteurs qui rendent leur langage trop complexe brouilleront la langue, dit le Seigneur.

Nous voyons donc un grand nombre de langues plus spécialisées. Un langage spécialisé sera très efficace pour certaines tâches. Et ça suffit. Pour les personnes qui doivent accomplir ces tâches, avoir le bon langage peut être une bonne aubaine.

Un langage de programmation bricole un modèle de calcul avec une sorte de syntaxe expressive. La plupart des langues auront un ensemble de valeurs utiles telles que des nombres et des textes (qui, étrangement, des chaînes d’appel), et des opérations qui muent et synthétisent des valeurs et une forme de variation ou de répétition, ainsi qu’un moyen d’encapsuler les opérations en idiomes plus pratiques . Les variations possibles sont infinies, tout comme les variations possibles dans la préparation d’un bon repas ou d’une œuvre musicale. L’art de la conception linguistique consiste à savoir ce qu’il faut laisser de côté. Les caractéristiques d’une bonne langue fonctionnent ensemble harmonieusement. Un bon langage nous aide à mieux comprendre un problème et à trouver la meilleure expression de sa solution.

Un bon langage est composé d’un ensemble limité de fonctionnalités. Mais il y a peu d’accord sur les fonctionnalités qui conviennent le mieux. Les programmeurs peuvent se disputer sans fin sur les fonctionnalités et sur la question de savoir si elles améliorent une langue plutôt qu’une autre. Cela ne signifie pas que les fonctionnalités importent peu. Ils comptent beaucoup. Nous ne comprenons pas encore à quel point ils comptent.

Le design linguistique a plus à voir avec la mode qu’avec la technologie. Il peut sembler étrange que la mode soit un facteur important dans le plus nerd des arts, mais c’est vrai. Un langage dont la syntaxe est radicalement différente, par exemple, ne peut espérer être adopté à grande échelle, quel que soit le brio de sa conception. Cela tend à limiter le rythme d’évolution des langues.

Comme la musique et la nourriture, un langage de programmation peut être un produit de son temps. Le problème profond de la conception linguistique n’est pas technologique, mais psychologique. Un langage de programmation devrait nous doter de structures nous permettant de raisonner plus efficacement.

Les langages de programmation sont comme des chats. Il est plus facile de trouver un nouveau chat que de réparer un vieux chat. La plupart des langues qui ont réussi sont finalement remplacées par des parvenues. Les langues remodelées correspondent rarement à la gloire de l’original. Fortran était autrefois le roi des langues. Il a été révisé à plusieurs reprises au fil des ans, mais les dialectes modernisés ont fait l’expérience d’une fraction du prestige de Fortran IV. De même, Pascal était un langage de programmation structuré populaire, mais aucun des dialectes orientés objet n’avait jamais approché la gloire de Pascal. Au lieu de cela, les langues ont tendance à être remplacées.

Les langues spécialisées sont amusantes à créer, ce qui explique en partie pourquoi elles sont si nombreuses. Si une langue ne devient pas trop grande, elle peut être gérée par un seul concepteur. La plupart des langues peuvent être identifiées avec un seul concepteur. Pascal: Wirth. C: Ritchie. C ++: Stroustrup. Java: Gosling. C #: Hejlsberg. Rebol: Sassenrath. Python: van Rossum. PHP: Lerdorf. Perl: mur. Ruby: Matsumoto. Lua: Ierusalimschy. E: Miller. JavaScript: Eich.

La plupart des langues meurent dans l’obscurité. Seuls quelques-uns sont capables de créer une suite au-delà d’un projet ou d’une entreprise. Et seul un très petit nombre de langues devient important.

Une langue devient importante de deux manières. Le premier est une source ou un terrain d’essai pour des idées importantes. Cela inclut des langues comme Smalltalk et Scheme. Ces langues ne sont pas largement utilisées, mais sont généralement reconnues comme brillantes, mais démodées. Ils ont une influence puissante sur les concepteurs de langage.

La deuxième façon dont une langue devient importante est de devenir populaire.

Un programmeur doit prendre en compte de nombreux éléments lors de la sélection d’un langage de programme, sauf si ce programmeur écrit pour des navigateurs Web où le seul choix est actuellement JavaScript.

JavaScript est un langage étonnant, au pire sens du terme. Sa nature étonnante a conduit à une très mauvaise réputation. JavaScript est également associé à The DOM, une API épouvantable. Il y a beaucoup de confusion quant à l’endroit où JavaScript se termine et où commence le DOM. Il y a beaucoup de discussions sur l’amélioration de JavaScript, mais cela en soi ne contribuerait guère à améliorer la vie des développeurs Web. Le langage est surchargé de fonctionnalités, y compris de nombreuses fonctionnalités qui interagissent mal ou qui ont été mal conçues. C’est un langage qui a, comme dirait l’empereur Joseph, trop de notes.

Comment un langage présentant des lacunes aussi évidentes est-il devenu le langage de programmation unique du Web? Brendan Eich a convaincu son patron aux cheveux pointus chez Netscape que le navigateur Navigator devrait avoir son propre langage de script et que seul un nouveau langage suffirait, un nouveau langage conçu et implémenté avec une grande rapidité, et qu’aucun langage existant ne devrait être pris en compte pour cela. rôle. L’équipe Internet Explorer de Microsoft souhaitant conquérir la part de marché de Netscape, elle a donc soigneusement procédé au reverse engineering de la langue de Netscape, d’énormes verrues poilues, etc. Les autres fabricants de navigateurs ont suivi l’exemple de Microsoft. Il n’existe pas de norme indiquant qu’un navigateur Web doit implémenter JavaScript. JavaScript est le seul langage implémenté dans tous les navigateurs Web populaires. Il n’y a pas eu d’examen attentif de la langue ou de son domaine problématique. Il n’y a pas eu d’examen de sa pertinence ni de la solidité de sa conception. Il a été giflé à Netscape, puis copié ailleurs. Compte tenu du processus qui a créé JavaScript et en a fait un standard de facto, nous méritons quelque chose de bien pire.

Mais malgré les étonnantes lacunes de JavaScript, au fond de lui, il a obtenu quelque chose de très juste. Lorsque vous élevez le bazar, il existe un langage de programmation puissant et expressif. Ce langage est bien utilisé dans de nombreuses bibliothèques Ajax pour gérer et étendre le DOM, produisant ainsi une plate-forme d’applications pour applications interactives livrées sous forme de pages Web. Ajax est devenu populaire parce que JavaScript fonctionne. Cela fonctionne étonnamment bien.

JavaScript était le langage de programmation le plus mal compris du monde. Ses défauts évidents, son modèle de programmation démodé, son positionnement incorrect lors de son introduction et son nom ridicule l’ont fait rejeter comme indigne par la plupart des programmeurs avertis. Mais Ajax a donné à JavaScript une seconde chance.

Parce que JavaScript est la langue du navigateur Web, et que le navigateur Web est devenu le système dominant de diffusion d’applications, et que JavaScript n’est pas si mauvais, JavaScript est devenu le langage de programmation le plus populaire au monde. Sa popularité augmente. Il est maintenant intégré dans d’autres applications et contextes. JavaScript est devenu important.