La « fin de programmation » ressemblera beaucoup à la programmation

Jan 03 2023
Communications de l'ACM a un nouvel article intitulé "La fin de la programmation" par Matt Welsh. Il postule que les programmes traditionnels "seront remplacés par des systèmes d'IA formés plutôt que programmés" (souligné dans l'original).

Communications de l'ACM a un nouvel article intitulé "La fin de la programmation" par Matt Welsh. Il postule que les programmes traditionnels "seront remplacés par des systèmes d'IA formés plutôt que programmés " (souligné dans l'original). Welsh est "le PDG et co-fondateur de Fixie.ai, une startup récemment fondée développant des capacités d'IA pour soutenir les équipes de développement de logiciels".

Je suis généralement sceptique quant à ces revendications générales. Plus que tout, je pense que lorsque les gens imaginent intégrer l'IA (et en particulier les LLM) dans le développement de logiciels (ou tout autre processus), ils ont tendance à être trop optimistes. Mais je veux me concentrer sur quelque chose en particulier ici. Welsh dit "[nous] nous dirigeons rapidement vers un monde où les éléments fondamentaux du calcul sont des agents capricieux, mystérieux et adaptatifs".

Je pense que c'est le résultat le moins probable. Si vous deviez décrire les caractéristiques qui éloignent les utilisateurs des produits, le comportement système « capricieux et mystérieux » figurerait en haut de cette liste (nous l'appelons généralement « bogué »). Surtout parce que dans ce monde, les gens derrière le produit diraient probablement: «Ah, désolé, l'IA a fait ça. Nous verrons si nous pouvons lui expliquer ce qui doit être corrigé et peut-être qu'il sera corrigé si nous lui demandons la bonne chose ».

En général, beaucoup de prises d'IA que je vois affirment que l'IA sera capable d'assumer l'entière responsabilité d'une tâche donnée pour une personne, et supposent implicitement que la responsabilité de la personne pour la tâche va juste en quelque sorte… s'évaporer ? Par exemple, si l'IA s'est trompée, ce n'est pas ta faute ? Mais si vous n'avez aucun moyen réel de vous assurer que la tâche est correctement effectuée, ils trouveront probablement quelqu'un d'autre pour accomplir cette tâche après plusieurs échecs.

Donc, dans un monde où le logiciel doit encore faire ce qui lui est demandé, imaginons à quoi cela ressemblerait si nous n'avions plus besoin de développeurs de logiciels humains. Un humain agit en tant que chef de produit, dictant ses besoins commerciaux à une IA, qui construit ensuite un logiciel. Supposons que le logiciel résultant soit en grande partie fonctionnel (c'est-à-dire exempt de bogues de bas niveau) - je pense que c'est loin, et il y a beaucoup à dire sur ce à quoi il ressemblera jusque-là, mais c'est un problème séparé discussion.

Si vous avez travaillé en tant que développeur de logiciels, vous savez que les exigences métier se présentent souvent sous la forme d'idées vagues, mal définies, voire contradictoires, écrites dans un langage ambigu. La principale question à propos de ce développement de logiciel uniquement basé sur l'IA est la suivante : comment créera-t-il un logiciel qui implémentera ce que le chef de produit souhaite que le logiciel fasse ?

Je pense qu'il y a deux orientations générales, qui ne s'excluent pas mutuellement.

La première est que l'IA doit interroger le chef de produit sur chaque choix individuel et ambiguïté. Il doit le faire car il est suffisamment bon pour connaître les choix et l'ambiguïté, mais pas assez pour deviner systématiquement la bonne réponse. Ce va-et-vient commencera en langage clair et prendra beaucoup de temps au chef de produit. Au fil du temps, les concepteurs de l'IA commenceront à proposer des raccourcis permettant aux exigences d'entrée de signifier des choses spécifiques lorsqu'elles sont formulées d'une certaine manière, afin que le chef de produit puisse clarifier son choix dès le départ. Nous avons donc une méthode pour exprimer le comportement du système avec des garanties formelles. Autrement dit, nous avons inventé un nouveau langage de programmation. À ce stade, le chef de produit est désormais un développeur de logiciels.

L'autre est que l'IA est assez bonne pour deviner correctement la bonne réponse aux choix et à l'ambiguïté des exigences et assez bonne pour savoir quand elle n'a pas confiance qu'elle peut deviner correctement. Pour ce faire, il faut une énorme quantité de connaissances culturelles humaines et probablement un haut degré de connaissance de la personne spécifique agissant en tant que chef de produit. L'IA se charge de traduire les exigences métier en exigences formelles de comportement du système, ainsi que de les mettre en œuvre. À ce stade, l'IA est maintenant un développeur de logiciels.

Vous pourriez dire que la seconde est la même que la vision de Welsh de « la fin de la programmation », car vous travaillez toujours sans langage formel. Je dis que c'est différent, parce que ce n'est pas plus « capricieux et mystérieux » que ne le sont les développeurs de logiciels (ceux avec qui vous aimez travailler) — c'est fiable et cohérent.

Je pense que la deuxième direction, l'IA en tant que développeur de logiciels, est assez éloignée, en particulier parce que le contexte culturel et la conscience de soi sont des choses difficiles. Je doute que vous ayez besoin d'AGI pour l'obtenir, mais il semble que ce serait une bonne partie du chemin. Donc, si vous êtes optimiste sur AGI, vous pouvez espérer que nous l'obtiendrons le plus tôt possible.

J'aimerais voir la première direction prise explicitement. L'un de mes problèmes avec GitHub Copilot (et les systèmes similaires) est que vous possédez toujours le code résultant, et il ne fournit aucun moyen de gagner la confiance qu'il vous a donné une implémentation correcte, bien que vous possédiez l'exactitude du code qu'il génère (cela mérite également son propre article, je pense). J'aimerais qu'il identifie des modèles communs et les formalise, de sorte que les développeurs puissent utiliser un raccourci pour exprimer cette logique compliquée et avoir confiance qu'ils obtiennent ce qu'ils attendent. Peut-être que cela peut être fait avec le système existant, ou peut-être s'agit-il d'un tout nouveau langage de programmation orienté Copilot.

Je pense que ma principale conclusion ici est que, lorsque vous examinez les revendications, l'IA va automatiser certains processus, recherchez quelle est la complexité inhérente et vraiment difficile de ce processus, et si le processus réussirait si un grand degré de (nouveau) l'incertitude a été injectée dans cette complexité. Pour le développement de logiciels, je pense que la réponse est non. Cela ne signifie pas que l'IA ne réussira pas, cela signifie simplement que nous devons approfondir nos recherches pour affiner ce que et comment (et quand) l'automatisation y jouera un rôle.