IA générative : allons-nous vraiment vers la fin des développeurs ?

Le boom de l'IA générative laisse craindre la disparition de nombreux métiers. Les développeurs sont-ils vraiment concernés ? La réponse tient en un mot : oui.

Le domaine du développement informatique n’échappe pas aux remous générés par la récente mise à disposition des Large Language Model sous la forme d’applications telles que ChatGPT. La question se pose de savoir si cette activité de développeur informatique, qui semblait protégée des aléas du marché du travail, va disparaître. 

La réponse tient en un mot : oui. Mais pas de la manière dont on l’imagine, et pas dans l’immédiat.

Tout d’abord, comme souvent lorsqu’émerge une nouvelle technologie, l’utilisation projetée n’est pas la plus pertinente. Dans le cas de la mise au point d’applications, l’intérêt de l’IA n’est pas de générer du code, mais d’être piloté directement pour réaliser une tâche et en transmettre le résultat à travers l’interface la plus adaptée : image, texte, parole, graphique… 

Pour ce qui est du délai de mise à disposition d’une telle IA, difficile à dire mais il s’écoulera probablement une décennie avant de disposer d’un tel outil.

Maitriser la grammaire des machines, l’expertise des développeurs

Il n'empêche qu’en l'état, tout comme  les créateurs de contenus, les avocats, les auteurs et sûrement de nombreuses autres professions centrées autour de la maîtrise de la langue, les développeurs sont aussi concernés par cette révolution. L’expertise des développeurs consiste justement en la maîtrise du langage des machines. Leur art consiste en la traduction de processus et de concepts mathématiques sous la forme d’instructions intelligibles par la machine.

Ces langages ont beaucoup évolué depuis l’origine de l’informatique. De l’assembleur avec son vocabulaire réduit et sa grammaire inexistante à des langages de plus haut niveau. Ces langages plus complexes permettent une plus grande expressivité et offrent, comme en littérature, assez d’expressivité pour que chaque programmeur développe son propre style.

Formellement les langages de programmation sont donc similaires aux langages naturels. Les technologies des LLMs leur sont donc applicables, avec en sus le bénéfice du cadre plus rigide de ces langages, basées sur des grammaires plus strictes. Parallèlement à cette gémellité, les programmes partagent avec la production d’écrit leur abondance sur internet. Le réseau regorge de codes sources, écrits dans de nombreux langages de programmation, et en majorité accessibles librement.

Les conditions sont donc réunies pour construire des modèles génératifs permettant la génération de code. 

Il est déjà possible de demander à ces modèles, sans avoir de connaissance en programmation, sous la simple forme de langage naturel de générer du code informatique pour réaliser tel ou tel calcul, ou encore pour construire la page d’un site web.

Les résultats sont assez édifiants, même si plus la demande est complexe, plus il est nécessaire de contrôler la validité du code. Par exemple, générer le code pour des cas d’écoles comme la fonction fibonacci est simple ; générer le code permettant de reproduire les travaux de la dernière médaille Fields est une autre paire de manches.

Tout processus n’est donc pas actuellement générable automatiquement. Il faut à minima décomposer le code en brique élémentaire.

Les développeurs restent une brique indispensable de l'entreprise

Ce qui amène à un autre point qui est de la responsabilité du développeur : l’organisation et l’architecture du code. C’est un point critique du génie logiciel, qui conditionne non seulement la qualité et la performance du code mais aussi et surtout son évolutivité et sa maintenabilité. Comme le faisait remarquer Yann Le Cun récemment, les LLMs ne sont pas encore pilotable, et il n’est pas possible de leur imposer de construire un code en rapport avec une architecture donnée.

L’aspect performance n’est pas non plus pris en compte, les LLMs préférant la génération de code lisible, la performance en temps de calcul se faisant généralement au détriment de la lisibilité. Là encore, l’absence de pilotage ne permet pas d’orienter l’écriture du code pour respecter une limite en RAM ou imposer l’utilisation de GPU.

Jusqu’à présent seule la génération de code a été abordée, mais l’essentiel du travail d’un développeur consiste à gérer le code existant. Cela suppose de se construire une représentation mentale de toute l’application, ce qui ne fait pas partie des capacités d’une IA générative.

Enfin, comme pour le code écrit par un développeur, il est crucial de procéder à une phase de test. Et comme pour les développeurs, il est préférable de faire réaliser les tests par une autre personne. Dans le cas d’une IA, il faut donc prévoir une indépendance entre celle générant le code et celle qui pourrait assurer la validation. Cette question de la validation amène d'ailleurs naturellement au rôle qui pourrait être celui du développeur. Dans cette phase de transition où il n’existe pas d'IA généraliste qui soit capable de se substituer à n'importe quelle application, le rôle du développeur sera probablement de définir les tests auxquels devra répondre l'application. De manière plus générale, il s'agira d'être en mesure de transmettre à l'IA des spécifications et de s'assurer de leur respect.

Finalement, le rôle des développeurs a toujours été de se faire comprendre par les machines. Au tout début à l'aide de langages très frustres tel que l'assembleur, puis à l'aide de langages de plus en plus évolués. 

L'avènement des IA génératives ne change pas fondamentalement la donne. Il s'agit au final toujours d'une question de langage, et c’est justement le travail des développeurs : parler aux machines pour les faire réaliser une tâche.