Le développement de l’IA est-il en train de signer la fin des développeurs de logiciels ?

Sachant que le développement logiciel n’est autre que la création de segments de code répétitifs, les rapides avancées de l’intelligence artificielle ont de quoi faire réfléchir les ingénieurs logiciels.

En 2011, Marc Andreessen écrivait un article intitulé « Why software is eating the world ». Aujourd’hui, c’est l’intelligence artificielle (IA) qui dévore le logiciel. Plus récemment, le PDG de Google, Sundar Pichai, entrevoyait même la possibilité pour les logiciels de « s’écrire tout seuls, de manière automatique ». Sachant que le développement logiciel n’est autre que la création de segments de code répétitifs, les rapides avancées de l’IA ont de quoi faire réfléchir les ingénieurs logiciels.

Jusqu’à maintenant, le développement logiciel traditionnel se résumait à coder en dur une série de règles : si X se produit, alors Y doit être exécuté. En d’autres termes, c’est l’homme qui indiquait à la machine ce qu’elle devait faire, ligne par ligne. C’est ce que l’on appelle le logiciel 1.0.

Avec le logiciel 2.0 et les progrès réalisés en matière de deep learning, il est désormais possible de créer un réseau neuronal qui apprend à déterminer quelles instructions ou règles utiliser pour obtenir le résultat souhaité. Nombreux sont ceux qui considèrent, tels qu’Andrej Karpathy, directeur de l’IA chez Tesla, que nous n’écrirons donc plus réellement de code à terme. Nous nous contenterons de collecter des données et de les injecter dans des systèmes de machine learning. Suivant ce scénario, le rôle de l’ingénieur logiciel s’apparentera à un « conservateur » ou « catalyseur » de données.

Dès lors, une grande partie des programmeurs de demain n’auront plus besoin de tenir à jour des référentiels complexes de logiciels, d’écrire des programmes compliqués ni d’analyser leur temps d’exécution. Ils n’auront plus qu’à alimenter les réseaux neuronaux en collectant, triant, et analysant des données.

Vers une redéfinition du rôle du développeur

Cependant, l’ingénierie logicielle telle que nous la connaissons a encore de beaux jours devant elle.  Une nouvelle fonction qu’on appelle « ingénieur logiciel 2.0 » ou « data scientist 2.0 » est en train d’émerger. Cette évolution technologique vise à aider - plutôt que remplacer - les spécialistes logiciels 1.0 de bien des façons. Aujourd’hui, notre téléphone vérifie automatiquement l’orthographe et suggère le mot suivant. Le processus d’écriture de code suit le même fonctionnement : un outil similaire met alors en évidence les erreurs potentielles.

Pendant des années, nous avons fait appel à des assistants automatisés pour réusiner le code et accélérer l’écriture de code standard. Nous assistons aujourd’hui à l’émergence d’assistants pilotés par l’IA dans des environnements plus complexes de développement logiciel. On peut très bien imaginer un assistant d’IA beaucoup plus avancé qui, à l’avenir, jouera un rôle plus important. Lorsque les développeurs rédigeront du code, la machine déterminera le type de fonction qu’ils écriront et complétera le reste du code en respectant leur style, via une analyse prédictive très qualitative. En d’autres termes, la machine écrira le reste du code. Il ne restera plus aux développeurs qu’à l’approuver.

Autre champ d’application possible pour l’assistant d’IA : le développement piloté par les tests, plus connu sous le nom de « Test Driven Development ». Un être humain écrira les tests, tandis que la machine partenaire procédera à des millions d’itérations afin de trouver l’élément de code nécessaire à l’aboutissement de ces tests. Au lieu d’exécuter eux-mêmes ces deux tâches (l’écriture des tests et leur validation), les développeurs pourront confier la seconde tâche à la machine. Ils consacreront ainsi moins de temps au code d’implémentation qu’à l’analyse et à la résolution des problèmes métiers. De plus en plus utilisée pour l’écriture de code, cette pratique devrait logiquement évoluer avec l’usage de plus en plus prégnant de l'IA.

Le logiciel 2.0 sera également capable de guider le développement piloté par les tests et de suggérer aux développeurs le prochain test à exécuter, en justifiant ses choix. Imaginons que l’équipe marketing leur demande de concevoir une nouvelle fonctionnalité. S’il est possible de formuler ces attentes dans un langage compréhensible par la machine celle-ci pourra les aider à choisir les tests requis et suggérer les étapes suivantes.

Un remplacement de l’homme par la machine ?

Dans le meilleur des cas, le taux d’exactitude des intelligences artificielles dépassera à peine les 90%. Il restera néanmoins au moins 1% d’échecs, ce qui représente toujours un certain degré d’imprévisibilité. En d’autres termes, il sera toujours nécessaire de vérifier que le code écrit fonctionne bien comme escompté. Il s’agit peut-être là d’un nouveau rôle pour les ingénieurs logiciels : contrôler le code et aider le système d’apprentissage automatique à se rapprocher d’un taux d’exactitude de 100%.

La question subsidiaire est de savoir quels aspects de la programmation logicielle transférer vers le framework 2.0 d’apprentissage profond et lesquels conserver dans le framework 1.0 traditionnel. Aujourd’hui, il est clair que ces réseaux neuronaux sur lesquels repose le de deep learning fonctionnent parfaitement dans des environnements supervisés dès lors que des données d’apprentissage contenant de bons et de mauvais exemples leur sont fournies pour qu’ils apprennent à produire des résultats appropriés. Google, par exemple, utilise le deep learning dans toute sa gamme de produits. Les performances de ces systèmes dépendent toutefois de la qualité des données d’apprentissage. L’amélioration des performances d’un modèle implique bien souvent l’amélioration du code et de l’environnement de déploiement sous-jacents, ainsi que celle des données d’apprentissage. Certains systèmes de machine learning deviennent si performants qu’ils détectent même les erreurs d’origine humaine.

Le logiciel 2.0 semble alors jouer le rôle de nouveau partenaire pour aider les développeurs dans leurs fonctions. A terme, nous devrions voir émerger un environnement collaboratif plus performant qui permettra d’itérer plus rapidement et efficacement. Les réseaux neuronaux doivent être conçus pour une utilisation conjointe avec d’autres solutions. Certains aspects du développement logiciel fonctionnent très bien avec l’apprentissage en deep learning, d’autres non. Un nouveau monde se dessine alors et se pose la question du rôle du développeur dans cet environnement mouvant. Une chose est certaine : il n’est pas voué à disparaître mais doit sans aucun doute revoir l’étendue de sa fonction qui ne se limite désormais plus à l’écriture de code. Au-delà de ça, il doit dès lors devenir un véritable expert technique.