- En 2019, la plupart des ingénieurs logiciels avaient du mal à imaginer comment le machine learning pourrait les aider dans leur travail
- Mais en 2024, l’enthousiasme est largement partagé quant à la manière dont l’IA aide à écrire du code
- De nombreux ingénieurs ont essayé l’autocomplétion basée sur le ML, que ce soit dans des outils internes à l’entreprise ou dans des produits commerciaux
- Cet article présente les dernières améliorations fondées sur l’IA dans le contexte de l’évolution continue des outils internes de développement logiciel de Google
- Il évoque également les changements supplémentaires attendus au cours des cinq prochaines années
- Il propose aussi une méthodologie pour construire des produits d’IA qui apportent de la valeur au développement logiciel professionnel
- Cette équipe est responsable des environnements de développement logiciel où les ingénieurs de Google passent l’essentiel de leur temps, comme les IDE, la revue de code et la recherche de code
- Cela montre que ces améliorations peuvent avoir un impact direct sur la productivité et la satisfaction des développeurs
Défis
- L’évolution rapide des technologies d’IA rend difficile la prédiction des idées à explorer en priorité, ce qui constitue un défi permanent dans ce domaine
- Il existe souvent un écart important entre une démo techniquement réalisable et une mise en produit réussie
- L’approche de déploiement des idées en produit suit trois principes directeurs :
- Établir les priorités selon la faisabilité technique et l’impact : travailler sur des idées dont la faisabilité technique est déjà démontrée et qui devraient avoir un fort impact mesurable sur le workflow des ingénieurs
- Apprendre rapidement pour améliorer l’UX et la qualité des modèles : se concentrer sur des itérations rapides et sur l’extraction des enseignements acquis, tout en préservant la productivité et le bien-être des développeurs. L’expérience utilisateur est aussi importante que la qualité du modèle
- Mesurer les effets : puisque l’objectif est d’améliorer les indicateurs de productivité et de satisfaction, il faut les surveiller de manière approfondie
Appliquer les LLM au développement logiciel
- Avec l’émergence de l’architecture Transformer, l’équipe a commencé à explorer comment appliquer les LLM au développement logiciel
- La complétion de code inline basée sur les LLM est l’application de l’IA au développement logiciel la plus populaire
- Utiliser le code lui-même comme données d’entraînement est une application naturelle de la technologie des LLM
- L’UX paraît naturelle aux développeurs, car l’autocomplétion au niveau du mot est depuis longtemps une fonction centrale des IDE
- Il est possible d’obtenir une mesure approximative de l’impact, comme la proportion de nouveaux caractères écrits par l’IA
- Pour ces raisons, il est logique que cette application des LLM ait été déployée en premier
- Un précédent article de blog expliquait comment améliorer l’expérience utilisateur grâce à la complétion de code et comment en mesurer l’impact
- Depuis, la croissance rapide s’est poursuivie, de façon comparable à ce qu’on observe dans d’autres environnements d’entreprise
- Le taux d’adoption chez les ingénieurs logiciels est de 37 %, et l’outil aide à compléter 50 % des caractères du code
- Les principales améliorations sont venues à la fois des modèles et de l’UX
- Ce cycle est essentiel pour apprendre à partir des comportements réels plutôt que de formules synthétiques
- Les fonctionnalités fondées sur l’IA des outils de développement (par ex. les IDE) sont améliorées à partir de données historiques issues de divers outils et de données d’usage capturant les préférences et besoins des utilisateurs
- La proportion de code générée avec assistance IA continue d’augmenter
- Elle est définie comme le nombre de caractères acceptés à partir de suggestions fondées sur l’IA divisé par la somme des caractères saisis manuellement et des caractères acceptés à partir de suggestions fondées sur l’IA
- Point notable : les caractères issus de copier-coller ne sont pas inclus dans le dénominateur
- Google utilise d’immenses logs de haute qualité, patiemment constitués au fil du temps, sur les activités internes d’ingénierie logicielle
- Ces données permettent de représenter des éditions de code détaillées, les résultats de build, les modifications effectuées pour corriger des problèmes de build, les opérations de copier-coller de code, la modification du code collé, la revue de code, les éditions réalisées pour répondre aux remarques des reviewers et la soumission de changements dans le dépôt
- Les données d’entraînement forment un corpus de code aligné et annoté par tâche, à la fois en entrée et en sortie
- Le déploiement important suivant a été la résolution des commentaires de revue de code (aujourd’hui, plus de 8 % sont traités avec une assistance fondée sur l’IA) ainsi que l’adaptation automatique du code collé au contexte environnant (ce qui représente actuellement environ 2 % du code dans l’IDE)
- D’autres déploiements incluent la possibilité d’indiquer en langage naturel à l’IDE d’effectuer des modifications de code, ainsi que la prédiction de correctifs pour les échecs de build
- D’autres applications sont également possibles, comme la prédiction de conseils de lisibilité du code suivant des schémas similaires
- Ensemble, ces applications déployées ont rencontré un fort succès d’usage chez Google et ont eu un impact mesurable sur la productivité dans un environnement industriel réel
Enseignements tirés
- Jusqu’à présent, ce travail a permis d’apprendre plusieurs choses :
- L’impact le plus élevé est atteint avec une UX qui s’intègre naturellement dans le workflow des utilisateurs. Dans tous les exemples ci-dessus, une suggestion est présentée à l’utilisateur, qui passe à l’étape suivante de son workflow en un seul appui ou clic. Les expérimentations qui exigeaient que l’utilisateur se souvienne de déclencher lui-même la fonctionnalité n’ont pas réussi à passer à l’échelle
- Grâce aux suggestions fondées sur l’IA, on observe que les auteurs de code deviennent de plus en plus des reviewers. Il est important de trouver l’équilibre entre le coût de revue et la valeur ajoutée. En général, ce compromis est géré à travers des objectifs de taux d’acceptation
- Les métriques offline ne sont souvent qu’un proxy approximatif de la valeur utilisateur, donc des itérations rapides via des expériences A/B online sont essentielles. Le fait d’exposer les fonctionnalités fondées sur l’IA dans les outils internes offre un grand avantage : cela permet de lancer et d’itérer facilement, de mesurer les données d’usage et de demander directement aux utilisateurs leur ressenti via la recherche UX
- Les données de haute qualité issues des activités des ingénieurs Google à travers l’ensemble des outils logiciels, y compris leurs interactions avec ces fonctionnalités, sont essentielles à la qualité des modèles
- En s’appuyant sur les améliorations de l’UX et des modèles pour éliminer les goulots d’étranglement intermédiaires, il est important d’optimiser la conversion entre l’opportunité (principalement l’activité utilisateur, visible en haut du funnel ci-dessous) et l’impact (l’assistance IA effectivement appliquée, en bas du funnel)
Et ensuite ?
- Encouragée par les succès obtenus jusqu’ici, l’équipe se concentre sur la combinaison des derniers modèles de base (la série Gemini) avec les données développeurs (une partie de DIDACT mentionnée plus haut) afin d’alimenter les applications existantes et nouvelles de ML appliquées à l’ingénierie logicielle chez Google
- À l’échelle de l’industrie, la complétion de code fondée sur le ML a apporté une aide importante aux développeurs logiciels
- Il reste encore des possibilités d’améliorer la génération de code, mais les bénéfices de l’étape suivante devraient venir de l’assistance ML dans des activités plus larges de l’ingénierie logicielle, comme les tests, la compréhension du code et la maintenance
- Ce dernier point suscite un intérêt particulièrement fort dans les environnements d’entreprise
- Ces opportunités nourrissent les travaux en cours de l’équipe
- L’article met en avant deux tendances visibles dans l’industrie :
- L’interaction humain-machine se déplace vers le langage naturel comme modalité générale, avec une transition vers l’usage du langage comme interface pour les tâches d’ingénierie logicielle et comme porte d’entrée aux besoins d’information des développeurs logiciels intégrée à l’IDE
- L’automatisation à grande échelle de tâches via le ML, du diagnostic d’un problème jusqu’à l’application d’un correctif, commence à montrer des preuves de faisabilité initiale
- Ces possibilités sont portées par les innovations dans les agents et l’usage d’outils, qui permettent de construire des systèmes utilisant un ou plusieurs LLM comme composants pour accomplir des tâches plus vastes
- Pour prolonger les succès ci-dessus vers ces fonctionnalités de nouvelle génération, la communauté des praticiens et chercheurs travaillant sur ce sujet pourrait tirer profit de benchmarks communs capables d’aider le domaine à se tourner vers des tâches d’ingénierie pratiques
- Jusqu’ici, les benchmarks se sont principalement concentrés sur la génération de code (par ex. HumanEval)
- Mais dans les environnements d’entreprise, des benchmarks portant sur des tâches plus larges comme la migration de code et le debugging en production pourraient être particulièrement précieux
- Des benchmarks pour la correction de bugs (par ex. SWEBench) et des prototypes ciblant ces benchmarks (par ex. Cognition AI) ont été publiés
- L’article encourage la communauté à se rassembler pour proposer davantage de benchmarks couvrant un éventail plus large de tâches d’ingénierie logicielle
L’avis de GN⁺
- Évolution rapide de l’IA : les technologies d’IA progressent rapidement, ce qui rend essentiel d’apprendre et d’appliquer en continu les techniques les plus récentes.
- UX et qualité des modèles : l’expérience utilisateur et la qualité des modèles sont des facteurs déterminants dans le succès des outils d’IA.
- Importance des données : des données de haute qualité influencent fortement les performances des modèles d’IA.
- Possibilités futures : l’IA pourrait jouer un rôle encore plus important dans les différents aspects de l’ingénierie logicielle.
- Tendances du secteur : les interfaces en langage naturel et l’automatisation de tâches à grande échelle devraient orienter l’avenir du développement logiciel.
1 commentaires
Commentaire Hacker News
Quand l’IA est bien utilisée, elle joue deux rôles : 1) faire gagner du temps aux développeurs et réduire leur charge cognitive grâce à des modifications non controversées ; 2) rendre l’utilisateur plus intelligent et mieux informé grâce à ses suggestions. Par exemple, il arrive que l’autocomplétion de code fonctionne bien.
Il y a une affirmation intéressante selon laquelle les outils d’IA « échouent à passer à l’échelle » lorsque l’utilisateur doit lui-même déclencher la fonctionnalité. Réflexion en cours sur la manière dont l’IA pourrait, dans l’IDE, proposer utilement des idées au niveau de la conception et des concepts.
On observe qu’avec les suggestions générées par l’IA, l’auteur du code devient de plus en plus un relecteur. Il est important de trouver un équilibre entre le coût de revue et la valeur ajoutée.
J’ai trouvé utile d’utiliser GPT-4 pour générer en quelques minutes des interfaces React et Python, puis de relire le code pour comprendre comment elles fonctionnent.
En raison de la RAM limitée des humains, il faut externaliser les idées sur un support. Les suggestions de l’IA aident à accélérer davantage les premières étapes.
On ne peut pas nier que les LLM (grands modèles de langage) sont utiles pour la programmation. Le principal défi est une UX adaptée pour rendre cela plus fluide. J’ai essayé l’autocomplétion, mais comme la plupart des suggestions étaient mauvaises, je l’ai désactivée.
J’ai trouvé plus utile d’utiliser l’application de bureau ChatGPT pour poser des questions sur le code. En revanche, devoir réexpliquer les détails à chaque fois est fastidieux.
La tendance à voir la part de code écrite avec l’aide de l’IA monter jusqu’à 50 % est intéressante.
L’IA explique comment effectuer la tâche demandée, mais elle ne dit pas que c’est une mauvaise idée. La qualité du code généré par le ML dépend des données d’entraînement.
Je me demande combien de temps il faudra avant que l’IA remplace complètement les ingénieurs logiciels de Google.
L’objectif ultime de l’IA est d’exploiter les systèmes, de déboguer les applications, de gérer les data stores et d’écrire le code des applications à partir des retours utilisateurs et de la description des besoins.
Expérimenter avec les outils d’IA est une bonne chose, mais le fait que d’autres copient aveuglément peut avoir des effets négatifs. Il est difficile d’identifier le principal argument de vente du code écrit avec des LLM.