IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Pourquoi Go est un langage idéal pour le génie logiciel assisté par l'IA

Le , par google

115PARTAGES

5  0 
Depuis quelque temps déjà, le génie logiciel connaît une mutation profonde et fondamentale : alors qu’auparavant nous écrivions la plupart des lignes de code à la main, nous demandons désormais à des assistants et agents de codage basés sur l’IA de générer pour nous de vastes pans de code. Mais l’IA a besoin d’être supervisée ; c’est donc à nous, les humains, qu’il revient de lire le code généré, de le peaufiner et de vérifier qu’il fait bien ce que nous attendons de lui. Et comme l’IA n’a qu’une vision limitée du contexte global dans lequel le code qu’elle génère doit fonctionner, c’est à nous qu’il revient de définir l’architecture du système, de concevoir les limites entre les services et de garantir la sécurité et la fiabilité globales de nos environnements de production.

Dans ce paradigme, les aspects les plus importants de nos outils de développement évoluent également.

De l’écriture à la révision

Historiquement, les développeurs évaluaient la productivité d’un langage de programmation principalement en fonction de sa facilité d’écriture. Mais lorsqu’un agent de codage est capable de générer des centaines de lignes de code syntaxiquement valide en quelques secondes, la vitesse à laquelle un humain peut écrire du code n’a plus beaucoup d’importance. Ce qui compte désormais, c’est de réviser, de vérifier et de maintenir ce code une fois qu’il est écrit.

En d’autres termes, l’IA est de plus en plus votre coéquipier — un peu anticonformiste, certes, mais un coéquipier tout de même. Ce qui importe le plus, c’est la manière dont nous travaillons ensemble en équipe.

Go est au service de l’ingénierie logicielle

C’est d’ailleurs les réflexions autour du développement en équipe qui ont conduit Rob Pike, Robert Griesemer et Ken Thompson à créer le langage de programmation Go chez Google il y a plus de vingt ans. Alors que d’autres langages ajoutaient rapidement des fonctionnalités et cherchaient à multiplier les façons d’exprimer la logique d’un programme, Go s’est concentré sur une vision plus large : la conception d’un langage au service de l’ingénierie logicielle.

L’ingénierie logicielle n’est pas la même chose que la programmation. Alors que la programmation consiste à résoudre un problème en écrivant du code puis en l’exécutant, l’ingénierie logicielle est l’acte de collaborer avec d’autres pour concevoir et mettre en œuvre un système durable qui évolue au fil du temps. La programmation fait partie de l’ingénierie logicielle, mais ce n’est qu’une partie.

La conception d’un langage au service de l’ingénierie logicielle nécessite non seulement un langage, mais aussi une plateforme de bout en bout dotée d’outils couvrant l’ensemble du cycle de vie du développement logiciel. Elle exige une simplicité bien définie afin que l’ensemble des équipes puissent structurer, formater et tester leur code de la même manière. Elle exige de solides garanties de compatibilité afin que le code que vous écrivez aujourd’hui fonctionne non seulement encore dans dix ans, mais reste également un bon code dans dix ans. Elle exige un écosystème solide, doté d’un système global de gestion des dépendances capable d’évoluer au rythme de vos équipes. Et elle exige que tout cela s’accompagne de considérations et d’outils de sécurité judicieux et robustes, intégrés à tous les niveaux.

Ensemble, ces éléments constituent le fondement d’un travail d’équipe évolutif et durable, nous permettant de construire des systèmes qui restent maintenables de nombreuses années après le départ de leur auteur d’origine. À l’heure où l’IA fait partie intégrante de l’équipe, ce fondement est plus important que jamais.

Go est une plateforme

L’une des caractéristiques qui distingue le plus Go est qu’il ne s’agit pas seulement d’un langage, mais d’une plateforme. Dès le départ, Go s’accompagne d’une chaîne d’outils robuste et complète, couvrant l’ensemble du cycle de vie du développement logiciel. Prête à l’emploi, la plateforme Go fournit un formateur intégré, un framework de test, une gestion des dépendances et des outils de sécurité avancés — tous accessibles directement depuis la chaîne d’outils standard. Cette plateforme, combinée à une bibliothèque standard complète qui élimine le recours à des frameworks externes complexes, offre un niveau de cohérence de base inégalé.


Ces fonctionnalités et outils ont été initialement conçus pour donner plus d’autonomie aux humains, mais il s’avère que l’IA et les humains ont des besoins étonnamment similaires. Lorsqu’on demande à un agent IA de refactoriser du code de manière itérative sans validation externe, ses performances peuvent rapidement se dégrader — tout comme celles d’un humain effectuant une refactorisation manuellement. Un premier passage peut être correct à 95 %, mais les passages successifs aggravent le taux d’erreur et polluent la fenêtre de contexte, ce qui réduit la précision tout en augmentant les coûts en tokens. Or, avec Go, les modèles d’IA peuvent tirer parti de la chaîne d’outils de bout en bout de la plateforme pour traiter le code Go plus rapidement, à moindre coût et de manière plus fiable, produisant ainsi un code de meilleure qualité, plus sûr et plus correct.

Cette boîte à outils intégrée présente un deuxième avantage, moins évident : la cohérence à l’échelle de l’écosystème. Comme la grande majorité des développeurs Go utilise les mêmes outils de base, l’ensemble de la communauté évolue de manière uniforme, adoptant sans heurts les principales améliorations du langage à la fois dans les environnements d’exécution, les IDE et les écosystèmes de paquets. Cette approche unifiée est renforcée par la bibliothèque standard de Go, qui renforce encore la cohérence entre les projets en réduisant la variance dans la logique des programmes et en favorisant des idiomes répétitifs et prévisibles que les développeurs et l’IA peuvent comprendre plus rapidement. Cette uniformité structurelle aide non seulement les équipes humaines à maintenir de vastes bases de code, mais elle génère également des données d’entraînement plus propres et plus standardisées pour les grands modèles de langage (LLM).

Go est lisible

Une autre caractéristique distinctive de Go est qu’il privilégie la lisibilité à l’écriture. Rob, Robert et Ken ont constaté que les développeurs passent bien plus de temps à lire du code existant qu’à l’écrire. Dans un monde exclusivement humain, cette philosophie de conception se traduit par une culture qui privilégie la simplicité à l’ingéniosité et rejette explicitement la « magie syntaxique » que d’autres langages mettent en avant. Les « Gophers » (utilisateurs de Go) disent souvent qu’ils adorent ne jamais pouvoir deviner qui, dans leur équipe, a écrit un morceau de code particulier : tout se ressemble.

À l’ère du développement piloté par l’IA, cette philosophie axée sur la lecture se transforme en un multiplicateur de force. Alors que les développeurs individuels auraient historiquement privilégié la concision syntaxique, le typage implicite et les raccourcis astucieux qui accélèrent le prototypage, l’ergonomie des agents — et la boucle de vérification humaine correspondante — exigent exactement le contraire : prévisibilité, explicité et structure rigide. Avec l’IA, le goulot d’étranglement limitant le cycle de vie du développement logiciel se déplace entièrement de la génération vers la vérification. Si un langage offre une douzaine de façons différentes d’exprimer la même logique, un modèle d’IA générera inévitablement un méli-mélo syntaxique fragmenté et stylisé au hasard. Pour le relecteur humain, la vérification de ce code devient un exercice épuisant consistant à déchiffrer l’intention.

Go résout ce problème grâce à une cohérence sans faille. En imposant un format unique et normalisé via l’outil intégré gofmt et en proposant une conception de langage qui limite intentionnellement les abstractions complexes, Go garantit que tout le code — qu’il soit écrit par un ingénieur senior, un contributeur junior ou un LLM — se présente de la même manière. Lorsque la syntaxe est entièrement prévisible, un développeur humain peut repérer plus rapidement un appel d’API erroné, une faille logique ou une vulnérabilité de sécurité. De plus, comme cette normalisation s’étend à l’écosystème open source de Go, les modèles sont entraînés sur des données normalisées, ce qui leur permet de générer plus efficacement un code Go correct et idiomatique en moins d’essais.

En fin de compte, un langage clair pour les humains est intrinsèquement clair pour les modèles d’IA. Alors que l’IA continue d’accélérer le volume de code que nous produisons, l’engagement de Go en faveur de la lisibilité garantit que nous pouvons faire évoluer nos systèmes sans perdre notre capacité à les comprendre, à les vérifier et à les maintenir en toute sécurité.

Go est fiable

Mais la lisibilité et la productivité des développeurs ne constituent que la moitié du chemin. Un langage peut être aussi lisible et productif que l’on veuille, mais si l’application qui en résulte est fragile, peu sûre ou imprévisible sous charge, elle n’a pas sa place en production.

En Go, la première ligne de défense est le système de typage statique de Go, qui sert de filet de sécurité automatisé pour le code agentique. Les grands modèles de langage (LLM) ont souvent du mal à gérer les limites structurelles et la cohérence des types entre les fichiers, ce qui conduit à des propriétés « hallucinées » et à des bogues silencieux qui se manifestent progressivement. Dans les langages à typage dynamique comme Python, ces « hallucinations » échappent souvent aux vérifications syntaxiques de base et ne provoquent le plantage du système qu’au moment de l’exécution, sous des charges de travail spécifiques en production. En Go, le compilateur rejette immédiatement ces erreurs. Si un agent IA tente d’utiliser une méthode inexistante, de passer un type incorrect ou de laisser une variable non initialisée, le code ne se compilera tout simplement pas. Associé à la vitesse de compilation caractéristique de Go — des ordres de grandeur plus rapide que Java, C#, Rust et d’autres langages compilés de niveau production —, l’agent peut affiner et corriger de manière itérative ses propres erreurs de syntaxe et de type dans une boucle d’autocorrection hautement efficace, fournissant ainsi un code syntaxiquement correct avant même qu’un collègue humain ne l’examine.

Au-delà du compilateur, la philosophie « tout compris » de Go résout un risque de sécurité critique inhérent au code généré par l’IA : la chaîne d’approvisionnement logicielle. Lorsqu’on leur demande d’implémenter une fonctionnalité, les grands modèles de langage (LLM) s’appuient sur leurs données d’entraînement, ce qui les conduit souvent à suggérer des dépendances tierces obsolètes, non maintenues, voire malveillantes. La bibliothèque standard complète de Go incite naturellement les modèles d’IA à utiliser des paquets optimisés, sécurisés et officiellement maintenus, plutôt que de faire appel à des dépendances externes. Cela réduit considérablement la surface d’exposition aux vulnérabilités de la chaîne d’approvisionnement et permet de conserver une base de code allégée et facile à maintenir.


Lorsque des dépendances externes sont nécessaires, l’infrastructure de la plateforme Go garantit leur intégrité. Les sommes de contrôle et les copies mises en cache de chaque module jamais importé dans un programme Go sont enregistrées dans la base de données de sommes de contrôle et le miroir de modules de Go, ce qui empêche les attaques de type « homme du milieu » et élimine le risque de disparition ou de modification silencieuse des dépendances. De plus, la base de données des vulnérabilités de Go et son outil intégré de scan des vulnérabilités, govulncheck, recensent les vulnérabilités connues au sein de ces dépendances et signalent le code qui fait appel à des symboles vulnérables. Cela fournit un retour d’information pertinent et facile à exploiter, que les relecteurs humains comme l’IA peuvent utiliser pour corriger les vulnérabilités avec précision.


Enfin, le framework de test intégré à Go et ses outils natifs de tests de fuzz offrent un environnement de test standardisé et rigoureux pour une validation continue. Plutôt que de s’appuyer sur un ensemble disparate d’outils et de frameworks de test externes, les développeurs Go — et leurs collègues de l’IA — peuvent utiliser la chaîne d’outils native pour écrire et exécuter des tests robustes. En exécutant des tests de fuzz pour mettre au jour des bogues cachés dans les cas limites, l’IA peut renforcer de manière itérative sa propre logique face à des entrées aléatoires et imprévisibles. Il en résulte un cycle de vie de développement logiciel hautement fiable, dans lequel le code est minutieusement renforcé avant d’être mis en production.

Go est facile à maintenir

Si un code lisible vous permet d’atteindre la production et qu’un code fiable vous y maintient aujourd’hui, la véritable mesure d’un système logiciel réside dans sa maintenabilité dès le deuxième jour et au-delà. Les bases de code sont des systèmes vivants ; elles se dégradent naturellement, accumulent de la dette technique et doivent constamment s’adapter à l’évolution des exigences. Lorsque les développeurs humains étaient les seuls auteurs des logiciels, cette charge de maintenance constituait une partie prévisible de vos coûts opérationnels. Mais lorsque des agents IA autonomes peuvent générer des centaines de pull requests et refactoriser des services entiers sur un coup de tête, le rythme d’évolution de la base de code et le risque de dérive architecturale s’accélèrent considérablement.

La réponse principale de Go à cette accélération réside dans sa célèbre promesse de compatibilité. En Go, la compatibilité n’est pas seulement une question de commodité, c’est une exigence critique en matière de sécurité et d’exploitation. Grâce à cette promesse de compatibilité, le code écrit il y a quinze ans pour Go 1.0 se compilera et s’exécutera sans modification sur la dernière chaîne d’outils Go. De plus, comme Go s’engage à ne jamais rompre la compatibilité ascendante (il n’y aura jamais de Go 2.0 !), le code Go ne cessera jamais de fonctionner. Au contraire, à mesure que le compilateur et le runtime Go s’améliorent, votre code s’améliore lui aussi, sans qu’aucune modification ne soit nécessaire : il suffit de mettre à jour, de recompiler et de profiter des avantages.

Cette durabilité à long terme est encore renforcée lorsqu’elle est associée à la portabilité opérationnelle de Go. Go se compile directement en un binaire unique et statique, sans aucune dépendance système. Alors que les agents IA autonomes jouent de plus en plus le rôle d’administrateurs système — en lançant des microservices, en exécutant des scripts et en interagissant avec leur environnement via des interfaces en ligne de commande —, cette conception autonome devient plus importante que jamais. Et comme le compilateur Go permet la compilation croisée entre différents systèmes d’exploitation et architectures système, ces agents IA peuvent facilement générer des binaires pour toutes les cibles possibles, selon les besoins, sans recourir à des systèmes de compilation complexes.


Pour lutter contre la dérive architecturale, Go fournit des outils intégrés et déterministes conçus pour refactoriser et moderniser les bases de code — ainsi que l’ensemble de l’écosystème Go — à grande échelle. Cela inclut le serveur de langage officiel de Go, gopls, ainsi que go fix, récemment remanié, qui intègre désormais le concept de « modernisateurs ». Les modernisateurs garantissent l’uniformité de votre code en mettant à jour de manière déterministe les anciens modèles de code pour les aligner sur les dernières conventions et fonctionnalités du langage. À grande échelle, cela fait évoluer non seulement votre code, mais aussi l’ensemble de l’écosystème Go, en préservant l’uniformité entre les bibliothèques, les projets open source et les autres bases de code tierces. De plus, comme ces outils sont standardisés et directement intégrés à la plateforme Go, les agents IA peuvent les exploiter pour restructurer les paquets en toute sécurité, gérer les dépendances et résorber la dette technique sans altérer la base de code.

Enfin, Go garantit que cette maintenabilité s’étend directement à l’environnement de production grâce à des outils intégrés d’observabilité et d’optimisation des performances. Le runtime Go intègre d’emblée des fonctionnalités de profilage et de traçage d’exécution, offrant aux développeurs une visibilité approfondie sur le comportement des applications sous charge. Le compilateur prend également en charge nativement l’optimisation guidée par les profils, qui utilise des profils de production réels pour compiler des binaires hautement optimisés en fonction de l’utilisation en production. Associé à un pipeline de déploiement orchestré par l’IA, cela crée un cycle d’optimisation en boucle fermée très sophistiqué : les données de production peuvent être automatiquement réinjectées dans le compilateur pour reconstruire et optimiser le système.

Conclusion

Alors que les développeurs écrivent moins de code, il peut sembler contre-intuitif que leur choix de langage de programmation soit en réalité plus important que jamais. Pourtant, lorsque la génération de code est confiée à l’IA, le principal goulot d’étranglement de l’ingénierie logicielle passe entièrement de la vitesse d’écriture à la rigueur de la révision, de la vérification et de la maintenance. Les langages qui, historiquement, privilégiaient le prototypage souple et les raccourcis implicites astucieux peinent désormais à rester stables sous le poids d’une production fragmentée et autonome. Go, en revanche, a été conçu dès le départ pour relever les défis d’une collaboration à grande échelle et à long terme. Sa clarté axée sur la lisibilité, son aptitude à la production et sa cohérence à l’échelle de la plateforme fournissent les garde-fous déterministes indispensables pour absorber la production à grande vitesse d’un coéquipier IA sans sacrifier la fiabilité, la maintenabilité ou l’intégrité du système.

En fin de compte, l’IA est votre tout nouveau coéquipier : un contributeur hyperproductif qui a besoin de garde-fous solides pour réussir. Lorsque vous développez en Go, vous ne vous contentez pas d’écrire du code ; vous mettez en place une plateforme robuste et autocorrectrice où les humains et l’IA peuvent travailler ensemble en toute sécurité et itérer sur des systèmes de production.

Pour commencer

Prêt à l'essayer ? Pour commencer :

1.Téléchargez la dernière version de Go en suivant les instructions d'installation disponibles sur go.dev.
2.Si vous utilisez un IDE basé sur Visual Studio Code, comme Antigravity, veillez à installer l'extension officielle Go pour VS Code.
3.Demandez à votre agent d’utiliser la chaîne d’outils Go, soit explicitement, soit via une compétence préchargée, comme celles proposées dans ce dépôt communautaire très populaire.
4.Demandez à votre agent de vous créer une nouvelle application en Go !

Source : Why Go is an Ideal Language for AI-Assisted Software Engineering

Auteur :

- Cameron Balahan, Group Product Manager Go
- Richard Seroter, Chief Evangelist Google Cloud

Et vous ?

Quel est votre avis sur le sujet ?

Voir aussi :

La version 1.27 de Go, le langage de programmation développé par Google, est disponible, avec des méthodes génériques, JSON v2, et une allocation de mémoire plus rapide

Créer des jeux avec Go : 3 mois sans LLM contre 3 jours avec LLM ! par Mariano Gappa

Le langage Go souffle ses 15 bougies et atteint sa position la plus haute sur l'indice Tiobe. Google annonce que le nombre d'utilisateurs de Go a plus que triplé au cours des cinq dernières années
Vous avez lu gratuitement 3 749 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !