TechLa banalité du mois

TypeScript numéro 1 sur GitHub : lettre d'amour aux types, qui parlent enfin aux machines

Le typage explose pile au moment où le code est de plus en plus écrit par des IA. Coïncidence ? J'ai une théorie, et elle tient dans une signature de fonction.

Chers types,

On ne s'est pas toujours bien entendus, vous et nous. Pendant des années, on vous a trouvés collants. Verbeux. Un peu donneurs de leçons, avec vos soulignés rouges au moindre écart. Des générations de développeurs vous ont fui pour des langages plus décontractés, où une variable pouvait être un nombre le matin et une chaîne de caractères l'après-midi, sans que personne ne s'en offusque.

Et pourtant, vous voilà au sommet. TypeScript serait passé devant Python et JavaScript dans les classements de GitHub. On pourrait y voir votre revanche tardive. Moi, je crois que c'est une histoire plus belle que ça. Laissez-moi vous la raconter.

Avant, vous parliez aux humains

Pendant quinze ans, votre argument s'adressait à nous : attraper les bugs tôt, documenter nos intentions, survivre à la reprise d'un projet six mois plus tard, quand plus personne ne se souvient de ce que fait handleStuff2().

C'était un bon argument. Il n'a jamais convaincu tout le monde, parce que vous nous faisiez payer tout de suite (le temps d'annoter) pour un bénéfice lointain. Et « lointain », dans un sprint de deux semaines, ça veut dire « jamais ».

Maintenant, vous parlez aux machines

Ce qui a changé, c'est qui lit le code. De plus en plus souvent, c'est un outil qui propose la suite à partir du contexte. Et dans ce contexte, une signature de type, c'est la phrase la plus dense qui existe.

Mettez-vous à sa place. Sans vous, il n'a que des noms de variables et des commentaires. Deux sources qui mentent régulièrement (on a tous un commentaire « temporaire » qui vient de souffler sa troisième bougie). Avec vous, il a une contrainte qu'on peut vérifier, et surtout un typechecker qui dit non immédiatement.

Voilà votre superpouvoir secret : vous êtes devenus un oracle gratuit qui dit non. Exactement ce dont une boucle de génération a besoin pour converger, au lieu de tourner en rond en inventant des propriétés qui n'existent pas.

Du coup, on va vous écrire autrement

Si ma théorie tient, il ne faut plus vous écrire « juste assez ». Il faut vous écrire précis :

  • des types nominaux plutôt que des string et des number qui se baladent tout nus ;
  • des états impossibles qu'on ne peut tout simplement pas écrire ;
  • des unions discriminées plutôt que quatre booléens qui se marchent sur les pieds.

Chaque contrainte en plus, c'est une erreur que la machine ne pourra plus commettre. Et petit bonus romantique : c'est souvent l'outil lui-même qui vous écrit. Vous coûtez bien moins cher qu'avant.

Soyons honnêtes, vous avez vos limites

Vous dites la forme, pas l'intention. (a: number, b: number) => number ne fait pas la différence entre une addition et une soustraction. Les règles métier, les effets de bord, l'ordre dans lequel on appelle les choses : tout ça reste hors de votre portée.

Vous n'êtes donc pas devenus une spécification complète. Vous êtes devenus la partie de la spécification qui se vérifie toute seule. Et dans un monde où le code s'écrit de plus en plus vite, c'est peut-être la partie la plus précieuse de toutes.

Avec toute mon affection (et mes excuses pour tous ces any),

Un développeur réconcilié.