Cela ne vous a sans doute pas échappé : l'année dernière les développeurs ont été très surpris par les suggestions de CoPilot de GitHub. Basé sur la technologie utilisant Codex, descendant du moteur d'intelligence artificielle GPT-3 développé par OpenAI, cet outil suggère du code en temps réel aux développeurs. Faut-il aller jusqu'à prédire que le développement logiciel pourrait être automatisable dans le futur ? Certains veulent y croire.
Il est indéniable que l’intelligence artificielle a fait de nombreux progrès au cours des dernières décennies. Alors qu'il y a encore dix ou quinze ans, cette technologie appartenait principalement au domaine de la recherche et les applications industrielles étaient peu nombreuses, elle est désormais omniprésente. De nos jours, l’intelligence artificielle est embarquée dans de nombreux produits. Des recommandations d’articles à lire sur votre fil d’information facebook, de la conduite automatique pour votre voiture ou encore de la reconnaissance faciale qui facilite les paiements sur votre iPhone: c’est désormais devenu un composant primaire dans l'implémentation de certains produits.
Certains (comme Andrej Karpathy, directeur du département d’intelligence artificielle chez Tesla) pensent que l’intelligence artificielle va supplanter les méthodes actuelle de développement logiciel et démarrer le mouvement « Software 2.0 » ou le contrôle du logiciel sera géré par différent modèles (réseaux de neurones, arbres de décisions, etc). Cependant, la réalité est encore loin de ces prédictions.
Tout n’est pas automatisable … maintenant
Il y a de nombreuses façons de construire un modèle d’intelligence artificielle performant et celles-ci dépendent de la qualité et de la quantité des données utilisées pour construire ce modèle. Alors qu’il est très accessible de construire un modèle probabiliste qui fonctionne la plupart du temps (et ou il est acceptable d’avoir quelques faux-positifs ou faux-négatifs), il est très difficile de construire un modèle qui doit produire un résultat correct tout le temps. C’est exactement pour cette raison que le système de pilotage automatique promis par Tesla au cours de la décennie passée n’est toujours pas disponible aujourd’hui (et ne le sera pas pour encore quelques années).
Pour le développement logiciel, le problème est similaire: il est extrêmement difficile de pouvoir automatiser la tâche du développement logiciel compte tenu de la complexité de la tâche. Il est simple de suggérer du code (comme votre traitement de texte suggère de compléter vos phrases), il est bien plus difficile d’automatiser la production de code. La raison principale est simple: le développement logiciel va bien au-delà du code et couvre de nombreux aspects: architecture, choix technologiques, déploiement, contraintes de sécurité, etc.
Les assistants de code utilisent l’intelligence artificielle disponible depuis quelques années (comme tabnine) et offrent déjà une aide au développeur en suggérant du code. Ces technologies, qui reposent sur plusieurs modèles d’intelligence artificielle, proposent des éléments de code en temps-réel mais ne permettent aucunement d’automatiser le développement logiciel complètement (et sont très loin de parvenir à ce but). GitHub CoPilot, quant à lui, suggère plus de code : là où les produits existant suggèrent une ligne de code, CoPilot suggère un bloc de code (e.g. une fonction, méthode ou classe). Plus simplement, CoPilot suggère plus de code que ses concurrents. Est-ce pour autant qu’il remplace les développeurs?
Vers un remplacement des développeurs?
Certes, les technologies qui reposent sur l’intelligence artificielle aident les développeurs à écrire du code plus rapidement mais c’est aussi sans compter tous les problèmes qu’ils peuvent introduire. Une récente étude suggère que 40% du code proposé par GitHub CoPilot contient des vulnérabilités et pourrait alors exposer les développeurs l’utilisant à produire du code vulnérable. D’autres problèmes ont été soulevés, spécifiquement les problèmes légaux ou les développeurs travaillant dans des entreprises (et écrivant du code propriétaire) pourraient alors introduire du code suggéré par GitHub CoPilot publié sous licence open-source.
Ce que GitHub CoPilot et ses concurrents apportent, c’est une meilleure aide au développeur et des suggestions qui vont au-delà de la simple ligne de code. Mais l’assistant n’aide nullement dans la définition d’une architecture logicielle, dans la création de tests ou même le déploiement d’une application. Ces métiers sont encore spécifiques, peu automatisables et requièrent des compétences très précises. Et avant même de pouvoir les automatiser, de nouvelles technologies doivent voir le jour (comme la spécification d’architecture logicielle, la formalisation des spécifications et des besoins métiers dans une forme autre que le langage naturel).
Si l’intelligence artificielle aide bel et bien à améliorer la productivité des développeurs, elle est encore loin de les remplacer complètement. Et pour longtemps.