Code sans conscience n'est que ruine de l'âme
Et des programmes. Les développeurs creusent-ils leur tombe avec leurs claviers ?
En deux mots
Contexte
Le vibe coding et les assistants IA excitent tout le monde. Peut-on enfin se passer des devs, ou au moins des langages de programmation ?
On s'en fout ?
On pourrait. Le no-code est un serpent de mer, vous avez autre chose à faire que vous prendre la tête sur cette mode.
À mon avis
Une prudence minimale conseillerait de ne pas totalement ignorer le sujet, de réfléchir douze secondes maximum, et de conclure qu'il faut totalement rejeter ces outils diaboliques.
Présentation
Les développeurs ont à leur disposition de nouveaux outils. Copilot de Github et Microsoft, Cursor, Windsurf ou bien encore les inévitables Claude Code d'Anthropic et ChatGPT d'OpenAI aident les développeurs à écrire du code. On peut distinger deux cas d'utilisation majeurs : prolonger du code existant avec une forme d'autocomplétion ou écrire du code à partir d'un contexte et de directives fournies par l'humain. Lorsque le développeur fait totalement confiance à l'agent et accepte ses suggestions sans les vérifier, on entre dans une forme de programmation automatique qu'Andrej Karpathy (ex-Tesla, ex-OpenAI) a appelé vibe coding.
Le vibe coding est un processus d'écriture basé sur un dialogue entre un humain et une IA ; l'humain guide et l'IA applique. Read That F*cking Code!
Si on écoute la meute des commentateurs, des patrons de start-up et des cadres d'entreprises, le grand-remplacement est en cours. Les développeurs vont disparaitre, remplacés par des agents intelligents qui écriront les programmes à leur place. Ces gens, souvent bien éloignés du terrain, ignorent que le développement informatique ne se résume pas à écrire du code.
Coté cuisine
L'ère ChatGPT a débuté fin 2022. Les programmes sont maintenant des agents ou des assistants, voire des modèles. Les mots ont changé mais la réalité est la même.
Comme la très grande majorité des outils de génération, les programmes d'aide à la programmation font appel aux techniques d'apprentissage statistique, notamment les réseaux de neurones (deep learning) et les grands modèles de langage (LLM) proposés par OpenAI et Anthropic. Force est de constater qu'une économie entière s'est construite sur le paradigme de l'optimisation d'une fonction de coût un peu obscure. La programmation assistée ou automatique, ainsi que la programmation en langage naturel, s'inscrivent dans cette filiation technique.
Il faut applaudir le tour de force technique réalisé par ces équipes d'ingénieurs, car ces agents engendrent un code qui fonctionne souvent. C'est remarquable, car le langage naturel n'est notoirement pas adapté à la programmation pour une foule de raison : ambiguité, imprécision, dépendance contextuelle. Edsger Dijkstra avait abordé le sujet dans son papier de 1978, On the foolishness of "natural language programming".
Mais en informatique, souvent n'est pas suffisant.
Loin de là.
Serpents de mer
L'informatique a une histoire passionnante.
L'idée de se passer de l'utilisation d'un langage de programmation pour écrire des programmes complexes est un serpent de mer en informatique – comme la programmation graphique. COBOL a été imaginé en 1959 pour démocratiser la programmation et assouplir le langage de programmation, avec le succès qu'on lui connait.
Rappelons aussi que nos programmes sont déjà écrits par des programmes. Depuis le milieu des années 1950, les ingénieurs ont inventé des langages de haut niveau pour ne pas écrire en assembleur ou en langage machine. Les compilateurs transforment le code source en code object adapté au processeur.
Enfin, à en croire certains commentateurs et tête d'affiches de la tech qui ne panent rien à la technique, il faudrait maintenant sacrifier au dieu agentic AI. Encore un machin fumeux qui recycle des idées bien connues. Le concept d'agent autonome n'a pas été inventé cette année. Sans remonter jusqu'au Society of Minds de Minsky (1986), on peut mentionner le Artificial Life Route to Artificial Intelligence: Building Embodied, Situated Agents de Steels et Brooks (1995).
Il y a un contexte.
Un jeu d'écriture
Les programmes doivent être écrits pour que les gens les lisent, et seulement accessoirement pour que les machines les exécutent Abelson et Sussman (1985)
Un développeur ne doit pas juste écrire du code fonctionnellement correct, hors cas limites, comme le prototypage ou le code à usage unique. Ce code doit pouvoir être compris, relu, maintenu et modifié. Un développeur lit plus souvent qu'il n'écrit ; une grande partie de notre activité consiste à maintenir et faire évoluer du code existant. Il y a donc une notion de qualité de code. C'est un sujet majeur de notre métier. Un code de mauvaise qualité sera inefficace et gâchera des cycles processeurs, il s'appuyera sur une architecture logicielle moisie donc peu évolutive, ou il créera une dette technique difficile à effacer. C'est un art.
Vers un consensus ?
Le but de ces agents est de réduire le temps consacré par les développeurs aux tâches répétitives, peu intéressantes et chronophages. Il ne s'agit pas de créer une application pour quelqu'un qui ne sera pas en mesure de la comprendre, et encore moins de la maintenir. Tant que les demandes restent dans des cas bien maîtrisés, donc des langages et des fonctionnalités bien représentés dans les bases de codes auxquelles les agents ont accès, il peut faire sens de les utiliser. Le code ainsi engendré sera aussi fiable que le code écrit par un débutant très rapide et expert en copier-coller. Il convient donc de faire particulèrement gaffe avant de pousser ça en production.
C'est le talon d'Achille du vide coding. Idéal pour les maquettes, mais catastrophique pour la production. Engagez un développeur une fois que le concept est prouvé. À quoi sert le vide coding si je dois quand même payer un développeur pour les corrections ? Reddit
Les développeurs ne vont pas disparaître ; nous avons encore une utilité, ne serait-ce que pour corriger les erreurs produite par les agents et restructurer les programmes qui n'auront jamais été réellement pensés. Les professionnels expérimentés peuvent déléguer des tâches basiques et bien cadrées, à condition de relire le code engendré. Les lecteurs courageux pourront lire cette suite de papiers The death of the junior developer, Revenge et Brute squad.
Avec chaussant des lunettes roses, on peut conclure que les agents servent d'amplificateur d'expertise, même s'ils ne remplacent en aucun cas l'expérience réelle.
Generation generation
Les débutants, eux, sont en concurrence directe avec ces agents. Ils engendrent souvent du meilleur code et bien plus rapidement. La question de l'apprentissage de la programmation et des interactions avec les processeurs via ces agents doit être posée. Entrer dans le monde de l'informatique en utilisant les assistants et le vibe coding est, à nos yeux, une sombre ineptie. Donne-t-on une calculatrice aux élèves de CP ? Il faut bien enlever les brassards si on veut apprendre à nager. Ce n’est pas en se déplaçant en taxi qu’on apprend à conduire. Les analogies ne manquent pas.
Nous souhaitons bien du plaisir à cette génération génération. Vous ne vous facilitez pas la vie en utilisant ces outils. Qu'ils soient poussés par votre hiérarchie, qui y voit une source d'économie à court terme, devrait vous inquiéter. À long terme, le calcul est évidemment idiot.
S'il y a quelque chose à retenir des 70 dernières années, c'est qu'il ne faut jamais être en concurrence avec un programme.
Gatekeeping + survie
Nous sommes des développeurs expérimentés. L'adoption ou le rejet des assistants était d'abord un sujet, culturel, voire esthétique. Avec le temps, il est devenu un sujet de survie professionnelle.
Écrire du code ne se réduit pas à taper sur un clavier. Écrire un programme, c'est structurer sa pensée, penser les algorithmes, construire une architecture, concevoir les différentes fonctions, gérer les interfaces et les entrées-sorties, écrire le code, écrire les tests, assembler le tout … Refactoriser un programme ne consiste pas à appuyer sur le bouton "refactoriser". Si la valeur ajoutée du développeur est d'appuyer sur un bouton, le système trouvera rapidement un moyen de se passer rapidement de lui.
La déraisonnable efficacité de l'apprentissage automatique, et des grands modèles de langage en particulier, a démontré que la machine savait ingurgiter des masses de données, en extraire une forme de savoir et le réutiliser souvent avec succès. L'expert aujourd'hui est-il celui dont le savoir n'a pas encore été capté ? Dès lors, avoir recours à ces outils, c'est fournir à ces BigTechs des données d'exploitation en conditions réelles et ainsi contribuer à améliorer les performances des prochains modèles. Difficile d'y voir autre chose qu'un suicide professionnel.
Asservissement
Il faut relire No Silver Bullet, essence and accidents of software engineering de Fred Brooks.
Le vibe coding et les assistants ne sont pas des technologies automagiques. Ils font des erreurs en permanence et n'ont pas de vision d'ensemble.
Plus sournoisement, les noms de ces outils (Copilot et Cursor par exemple) semblent indiquer que le développeur a le dernier mot, alors qu’il ne fait qu’exécuter des ordres ou que se focaliser sur des points d’attention donnés par l’assistant. Autrement dit, ces outils mettent des œillères. Ils déléguent la partie intéressante du boulot à un assistant et transforment ainsi le développeur en simple vérificateur. En résulte une perte de compétences techniques humaines, pourtant nécessaires.
Ce outils de nouveaux moyens d'asservissement de l'homme à la machine, et donc à ceux qui controlent ces machines. Pas sûr que la dialectique du maître et de l’esclave fonctionne ici.
Magie noire
En France, les développeurs sont sous-considérés. On peut étendre ce manque de reconnaissance à l'ensemble de l'informatique, vue au mieux comme une sorte de magie noire majoritairement réservée aux hommes dans leur trentaine. Au pire, comme un truc d'asociaux restés bloqués à l'adolescence. C'est triste.
La programmation informatique est un art pour plusieurs raisons : elle se base sur des connaissances issues de notre expérience du monde, elle demande des compétences et de l'ingéniosité, et surtout elle produit des objets esthétiques. Un programmeur qui se voit inconsciemment comme un artiste appréciera ce qu'il fait et le fera mieux. Donald Knuth 1974, pdf
La programmation est un art. Créer des logiciels, les faire évoluer ou les corriger est une activité intellectuelle complexe. C'est une aventure humaine, avec ses moments de gloire et ses drames. Il parait bien improbable que cette activité puisse être remplacée par des programmes de génération qui, jusqu'à preuve du contraire, n'entravent rien à qu'ils génèrent.
Après l'écume
D'un point de vue technique, on peut être raisonnablement optimiste.
Quand l'écume du moment aura disparu, les LLM permettront peut-être de créer de nouveaux langages de programmation, plus proche du langage naturel et ses imprécisions. On pourrait aussi imaginer que le petit monde de la conception logicielle serve de bac à sable, ou de démonstrateur, à de nouvelles théories qui permettraient d'attaquer l'intégration du sens dans les approches d'apprentissage automatique. Comprendre la structure du code et l'intention du développeur est peut-etre plus simple que la compréhension du sens général.
Nous ne sommes toujours pas des machines. Nos textes sont pensés et écrits par des humains. Aucun texte n’est généré. Tout soutien sera le bienvenu.