Dès les débuts de la chaîne de montage, l’automatisation a divisé l’opinion. Régulièrement, on entend que l’automatisation va, au mieux, permettre une requalification de la main d’œuvre manuelle en l’extrayant des tâches les plus subalternes et répétitives. Dans les scénarios les plus noirs, l’automatisation détruit tout bonnement des emplois, devenant ainsi une menace pour les connaissances et l’expérience d’une partie du personnel. Les études étayant cette vision catastrophe sont légion : l’Institut Sapiens a ainsi estimé à 2,1 millions le nombre d’emplois qui seraient détruits par l’automatisation.

Historiquement, l’automatisation est allée de pair avec le développement des technologies qui la permettent mais aussi la création de nouvelles méthodes de travail. Aujourd’hui, les applications pratiques de l’intelligence artificielle devenant chaque jour plus concrètes, l’automatisation aura probablement un impact sur un plus large éventail d’emplois – transformant jusqu’au rôle des développeurs qui la créent.

Le modèle actuel de développement logiciel (que l’on peut appeler Software 1.0) consiste en la création de segments de code souvent répétés sous la forme d’une série de règles : si X se produit alors Y doit être exécuté. Le « Software 2.0″, tel que décrit par Andrej Karpathy, directeur de l’intelligence artificielle chez Tesla, sera basé sur un réseau neuronal qui apprend quelles instructions ou règles sont nécessaires pour un certain résultat.

Plus besoin alors pour les programmeurs “d’écrire » les logiciels : ils se contentent désormais d’alimenter en données les systèmes de machine learning. Cependant, le besoin de génie logiciel ne disparaîtra pas de sitôt. Le changement de dynamique entre les développeurs et les machines sur lesquelles ils travaillent renforcera les capacités des praticiens.

Automatisation, itération et implémentation

Un bon logiciel ne peut être codé que si le développeur adopte d’une approche itérative et axée sur les tests. Avec le logiciel AI 2.0, un humain peut coder les tests pendant que la machine recherche une implémentation appropriée, itérant des millions de fois pour trouver le bon morceau de code pour résoudre ces tests. Au lieu de faire les deux tâches (c’est-à-dire écrire les tests et ensuite les réaliser), le développeur élabore le test tandis que la machine s’occupe de le mettre en œuvre. Libérant ainsi le développeur de la tâche de la rédaction du code d’implémentation, son travail peut se recentrer sur l’identification et à la compréhension de nouveaux domaines dans lesquels les problèmes métier peuvent être résolus de manière innovante grâce au logiciel.

In fine, le logiciel 2.0 pourrait même aider à guider le développement piloté par les tests et suggérer le prochain test à exécuter, en fournissant des justifications en cours de route. Imaginez les gens du marketing aller voir l’équipe de développement et dire qu’ils veulent telle ou telle fonctionnalité. S’ils peuvent exprimer ce qu’ils veulent d’une manière que la machine puisse le comprendre, la machine pourrait les aider à choisir les tests nécessaires et suggérer les étapes suivantes.

L’intelligence artificielle ne remplacera pas les développeurs de logiciels

Cette éventualité soulève la question ultime : les machines vont-elles tout simplement remplacer les ingénieurs en logiciel ? Il est plus probable que les machines ne soient capables d’écrire le bon code que 90 % du temps. Cela signifie qu’il y aura toujours besoin d’une surveillance humain, augmentant ainsi le travail de la machine de son expérience pour surveiller le code généré.

Aujourd’hui, il est clair que les réseaux neuronaux de deep learning sont efficaces dans des environnements d’apprentissage supervisés : si on leur fournit des données comportant de bons et de mauvais exemples, ils peuvent apprendre ce qu’il faut produire correctement. Mais la qualité de ces systèmes dépend des données reçues. Par conséquent, l’amélioration de la performance d’un modèle implique souvent l’amélioration du code sous-jacent et de l’environnement de déploiement, ainsi que l’amélioration des données. Les réseaux neuronaux sont donc loin d’être une solution miracle.

Combler l’écart entre les attentes et la réalité

Cela fait maintenant plusieurs années que l’utilisation d’aides automatiques à la rédaction de code standard est monnaie courante. La suite logique est celle de l’émergence d’assistants d’intelligence artificielle pour le développement de logiciels plus complexes. Lors de l’écriture du code, la machine pourra déterminer le type de fonction et remplir le reste en fonction du style, en utilisant de l’analyse prédictive. Essentiellement, la machine écrira le reste du code, qui sera ensuite soumis à la vérification du développeur.

Loin de réduire le champ d’action des développeurs, l’intelligence artificielle va leur ouvrir de nouvelles possibilités. On imagine sans peine qu’une intelligence artificielle puisse un jour corriger des erreurs d’écriture de code, comme un smartphone propose de vérifier et de corriger automatiquement des messages. En se projetant un peu, on peut même aller jusqu’à penser que la machine devienne un jour un membre essentiel d’une équipe de programmation.

Travailler avec l’IA

La méthode du pair programming illustre toutes les manières qu’il y a de résoudre un problème lorsqu’on le traite avec quelqu’un autre. Le développement logiciel devient alors un processus de collaboration constant, où chacun apporte à l’autre son expérience et son point de vue, et donc une façon différente de voir et de résoudre un problème. Le software 2.0 promet ainsi une nouvelle forme de partenariat avec le développeur. L’émergence d’un environnement encore plus collaboratif et dynamique ne peut que donner lieu à plus de solutions, plus efficaces. Et qui pourrait s’en plaindre ?

 

_____________
Alexandre Vasseur est Senior Manager, Platform Architecture, South EMEA, Pivotal