Introduction — l’illusion de la spécification en anglais
- Texte inspiré par l’idée que « une spécification suffisamment détaillée, c’est du code ». Une spécification en anglais semble intuitivement précise, mais dès qu’on essaie de l’implémenter, son ambiguïté apparaît
- « Tout est vague tant qu’on n’a pas essayé de le rendre précis » — Bertrand Russell
- Comme l’écriture, la programmation est une activité itérative qui s’affûte au fur et à mesure qu’on la pratique (cet essai aussi est passé par d’innombrables brouillons)
Vibe coding — pourquoi ça marche, et pourquoi c’est dangereux
- Comme l’IA convertit de mieux en mieux et de plus en plus vite l’anglais en code exécutable, il devient possible de produire du code à partir d’un simple « ressenti » au niveau de l’anglais
- On réagit au résultat produit par l’IA — « déplace le bouton là-bas, rends-le plus bleu » — dans un processus qui devient progressivement plus précis
- L’expression « vibe coding » est parfaite pour cette raison : on conserve un vibe au niveau du langage naturel, tandis que le résultat de l’IA aiguise la pensée
- Problème central : le vibe donne l’illusion d’une abstraction précise. Quand les fonctionnalités se multiplient ou que l’échelle augmente, l’abstraction fuit, et des bugs imprévus peuvent ruiner une journée entière
Cas concret — l’app de vibe coding de Dan Shipper
- L’application d’éditeur de texte créée par Dan Shipper en vibe coding devient virale → les serveurs tombent
- Cause : la « collaboration en temps réel (live collaboration) » semble intuitivement simple, alors qu’en pratique c’est un cauchemar de complexité
- Nous avons tous utilisé Google Docs ou Notion, donc « collaboration en temps réel » donne l’impression d’être une notion précisément spécifiée. Il est pourtant extrêmement difficile de comprendre à l’avance pourquoi ce n’est pas le cas
- L’auteur lui-même a vécu, il y a 10 ans, le cauchemar d’une complexité imprévue en construisant un éditeur collaboratif. Qu’est-ce qui était difficile ? Il ne s’en souvient même plus ! C’est une partie du problème : la complexité est ennuyeuse, on n’a pas envie d’y penser, et il est difficile de se rappeler les détails et les edge cases
- Exemple : le flowchart classique de Slack pour décider s’il faut envoyer une notification — ce niveau de complexité se cache derrière une formulation aussi simple que « envoyer une notification »
Abstraction — le seul outil pour traiter la complexité
- Limite fondamentale du cerveau humain : il ne peut traiter que 7±2 éléments à la fois
- Le seul moyen d’en traiter plus de 7 : compresser plusieurs éléments en un seul. Comme on peut répéter ce processus récursivement à l’infini, l’humain peut gérer une complexité infinie. Cette étape de compression, c’est précisément l’abstraction
- « Le but de l’abstraction n’est pas d’être vague, mais de créer un nouveau niveau sémantique dans lequel on peut être absolument précis » — Dijkstra
- Exemple de Sophie Alpert, qui a refactoré le célèbre flowchart de notifications de Slack en une forme beaucoup plus simple grâce à une abstraction intelligente
- Ce qu’il y a de meilleur dans la programmation : créer des abstractions toujours meilleures pour dompter la complexité, comme ReactJS ou TailwindCSS l’ont fait chacun dans leur domaine
- Si un éditeur de texte collaboratif est fondamentalement complexe, cela signifie simplement qu’il faut continuer à chercher de meilleures abstractions
AGI — le bon code ne disparaîtra pas pour autant
- Si l’on se projette à 1 an, 2 ans, 5 ans, 10 ans ou 100 ans : l’IA deviendra toujours meilleure, plus rapide et moins chère, jusqu’au moment où l’intelligence machine deviendra indiscernable de l’intelligence humaine (AGI)
- Un monde avec l’AGI peut ressembler à un monde du vibe. Si l’on pouvait disposer de 100 génies du niveau de Kapasi pour 1 000 $/mois, pourquoi se soucier de détails pénibles ?
- « C’est vraiment une idée absurde. » Ce genre de pensée n’existe qu’avant l’arrivée de la technologie, quand elle reste à l’état abstrait
- Si l’on avait accès à un tel niveau d’intelligence, 0 % des gens l’utiliseraient pour produire davantage de slop. Évidemment que non
- La confusion vient du fait qu’on pense à tort que le code ne sert qu’à produire du logiciel. Le code lui-même est aussi un artefact essentiel. Bien écrit, il peut être de la poésie
- « Personne ne parle de “vibe writing”, non ? » — personne ne croit que ChatGPT remplacera les grands romanciers ou journalistes. Pour le code, c’est pareil, mais on se laisse tromper par le caractère « magique » du code exécutable
- L’IA produit du code médiocre (de moins en moins). Nous le savons tous. Si nous l’utilisons, c’est malgré ce mauvais code, pas à cause de lui
- Citation de Simon Willison : « l’IA devrait nous aider à produire un meilleur code »
- La première chose à faire à l’arrivée de l’AGI : résoudre les problèmes d’abstraction les plus difficiles, créer de meilleures abstractions pour mieux comprendre et dompter la complexité
- Dire que le besoin de bon code disparaîtra à mesure que l’IA devient plus intelligente ? C’est exactement comme dire qu’on va utiliser ChatGPT pour produire encore plus de slop
- Cas concret : Opus 4.6 a résolu d’un seul coup un problème non résolu dans la création par Val Town de son framework React full-stack (vtrr). Une démo d’application full-stack mono-fichier en 50 lignes en est le résultat
Conclusion — le code ne fait que commencer
- On dirait que 99 % de la société est d’accord avec l’idée que « le code est mort ». Hier encore, j’ai entendu le podcasteur Sam Harris affirmer avec assurance que « tout le monde s’accorde à dire que le code est mort, plus personne n’a besoin d’apprendre à coder »
- « C’est triste. C’est comme dire “le storytelling est mort” après l’invention de l’imprimerie. Bande d’idiots, le code ne fait que commencer. L’IA sera une bénédiction immense pour la programmation. »
- Citations de clôture :
- « Il ne faut pas considérer comme un fardeau l’obligation d’utiliser des symboles formels, mais comme un privilège le fait de pouvoir le faire. Grâce à cela, les étudiants peuvent désormais accomplir ce que seuls des génies pouvaient faire autrefois » — Dijkstra
- « Le fait de pouvoir utiliser sa langue maternelle “naturellement” signifie seulement qu’on peut facilement produire des phrases dont l’absurdité n’est pas évidente » — Dijkstra, « On the foolishness of natural language programming »
- « Il existe deux façons de concevoir un logiciel : l’une consiste à le rendre si simple qu’il n’a manifestement aucun défaut, l’autre à le rendre si complexe qu’il n’a manifestement aucun défaut » — Tony Hoare
- « La quantité de sens compressée dans un petit espace par les symboles algébriques facilite le raisonnement que nous menons grâce à eux » — Charles Babbage
Aucun commentaire pour le moment.