La semaine passĂ©e, je me suis dit qu’il fallait absolument que je passe du temps Ă apprendre Ă mieux utiliser les outils d’intelligence artificielle que j’ai Ă ma disposition. Les articles du style de celui de Matt Shumer “Something Big Is Happening” traduisent bien mon impression actuelle: les outils d’IA deviennent monstrueusement puissants et nous allons subir un changement complet dans notre maniĂšre de travailler qu’on le veuille ou non. C’est vrai partout, et en particulier Ă l’universitĂ©. Il semble donc indispensable de s’y prĂ©parer.
Je me rends compte que, progressivement, toutes mes tĂąches quotidiennes sont pour la plupart faisables par une IA. Et quand elles ne le sont pas, c’est surtout parce que je n’arrive juste pas Ă piloter correctement l’IA pour obtenir ce que je veux. Dans ce contexte, je dois absolument apprendre Ă utiliser mieux l’IA. J’utilise trĂšs souvent ChatGPT et je commence Ă bien me dĂ©brouiller (du moins, beaucoup mieux qu’avant). Je connais diffĂ©rentes astuces pour obtenir de meilleures rĂ©ponses. J’ai créé des GPTs pour effectuer diffĂ©rentes tĂąches rĂ©pĂ©titives (amĂ©liorer un texte, corriger un rapport, reviewer un travail, rĂ©sumer un article, etc). J’utilise les “projets” pour travailler sur des tĂąches qui possĂšdent des sous-tĂąches. J’ai configurĂ© finement le ton et le contenu des rĂ©ponses que je souhaite obtenir, …
A cĂŽtĂ© de ChatGPT, j’utilise Ă©galement Copilot dans le VSCode pour gĂ©nĂ©rer du code sous mon curseur. Copilot me suggĂšre des choses et je les accepte ou je les refuse. C’est trĂšs impressionnant parce que depuis quelques temps, il s’amuse mĂȘme Ă aller un peu au delĂ de mon curseur, anticipant mon prochain mouvement de souris. DĂ©jĂ via cette interaction basique avec Copilot, c’est extrĂȘmement troublant comme il arrive Ă comprendre ce qui se passe dans ma tĂȘte, et tout ça automatiquement… Suis-je si prĂ©visible que ça?
Mais Copilot est bien plus qu’un simple outil de suggestion de code: il y a Ă©galement le “Chat” qui permet de discuter sur les fichiers ouverts et obtenir des suggestions de modifications. Depuis peu, ce chat s’est amĂ©liorĂ© et est devenu “agentique” (je traduis librement ici le terme agentic AI). Qu’est ce que ça change? Et bien cela veut dire que Copilot peut parcourir tout le projet ouvert et surtout modifier le code lui-mĂȘme pour proposer des modifications. Mieux: il peut lancer des commandes dans le terminal (powershell sous windows, bash sous linux) et, compiler le projet tout seul pour tester le rĂ©sultat obtenu! C’est assez incroyable.
J’ai donc dĂ©cidĂ© de faire un petit test sur un petit code que je maĂźtrise. Il s’agit d’un tout vieux projet de mon cours de “Dynamique des Constructions MĂ©canique” en “1Ăšre tech” de mes Ă©tudes d’ingĂ©nieur.
Le projet en question
C’est un des premiers projets que j’ai eu pendant mes Ă©tudes. Il s’agissait de simuler un mĂ©canisme “3 barres” et l’optimiser par la suite. Pour la partie “optimisation”, j’avais dĂ©lĂ©guĂ© Ă l’Ă©poque le codage de la matrice des dĂ©rivĂ©es Ă ma co-Ă©quipiĂšre de l’Ă©poque et elle n’avait pas rĂ©ussi Ă avoir quelque chose qui fonctionne. Donc difficile de coder un algo d’optimisation avec un bug… Ca ne marchait juste pas du tout. Pour me sortir de lĂ sans trouver le bug des dĂ©rivĂ©es, je me suis amusĂ© Ă coder un affichage graphique sur mon PC de l’Ă©poque (mon premier PC, tournant sous DOS et Ă©quipĂ© du Borland C++!). L’idĂ©e Ă©tait donc d’avoir une interface graphique, faire “tourner” le mĂ©canisme Ă l’Ă©cran et faire varier les paramĂštres manuellement pour avoir une meilleure trajectoire. Sans surprise, cette dĂ©marche un peu trop expĂ©rimentale n’a sĂ©duit le correcteur et on a obtenu un 14/20…

Extrait du rapport en question (on est en 1994!)
Mais bon, revenons Ă ce petit programme Ă©crit en Borland C++ qui affiche un mĂ©canisme tournant. Quand j’ai appris Ă utiliser git, j’ai mis tous les programmes dans un bon gros repository (j’ai appris que ça s’appelait un “monorepo”) pour les avoir sous la main et pouvoir m’en inspirer quand je code un nouveau projet. Ca m’a permis Ă©galement d’amĂ©liorer certains programmes, vĂ©rifier qu’ils compilent et marchent toujours au cours du temps. Dans le cas de ce petit projet, je l’ai pris pour base de mon apprentissage de la bibliothĂšque Qt. Il y a 8 ans, j’ai donc remplacĂ© manuellement (sans IA) l’utilisation des routines graphiques du Borland C++ (BGI) par Qt.
Ca a donné ceci:

C’est Ă dire un programme “interactif” dans un widget Qt oĂč le mĂ©canisme est en mouvement continu et les paramĂštres du mĂ©canisme sont modifiables Ă la souris via des sliders Qt. L’affichage s’adapte en temps rĂ©el.
Amélioration avec Copilot
L’idĂ©e de mon travail de la semaine passĂ©e Ă©tait de fournir ce code Ă Copilot et de lui demander diffĂ©rentes modifications, sans toucher au code moi mĂȘme. Je ne ferais que regarder ce que Copilot fait et accepter des modifications.
Le rĂ©sultat “m’a trouĂ© l… heu… m’a Ă©tonnĂ©” comme aurait dit ma belle-soeur đ.
Ne sachant pas trop comment parler Ă Copilot de maniĂšre efficace, j’ai demandĂ© Ă ChatGPT de le faire Ă ma place. Les difficultĂ©s que je voyais Ă©taient:
- Le projet est perdu dans un gros “monorepo” parmi du code qui n’a rien Ă voir. Comment faire pour que Copilot ne se perde pas dans l’arborescence de fichiers?
- Le projet contient la vielle version Borland que j’ai gardĂ©e dans l’espoir de la recompiler un jour dans un Ă©mulateur. Il y a Ă©galement des scripts Matlab utiles au travail de l’Ă©poque qui traĂźnent parmi les sources. Comment restreindre Copilot dans son envie de tout lire? (sachant que l’utilisation de Copilot n’est pas illimitĂ©e, chaque demande “complexe” demande plus ou moins de Premium Requests qui se traduisent en CrĂ©dits dĂ©bitĂ©s d’un compte de 300/mois)
- Comment Ă©viter qu’il propose tout et n’importe quoi?
- Comment travailler en pratique? Une seule conversation pour toutes les modifs ou plusieurs conversations (1 par tĂąche)? Mais alors dans ce second cas, comment conserver la mĂ©moire qu’Ă Copilot sur le code et Ă©viter qu’il re-scanne toutes les sources au prix de nombreuses Premium Requests inutiles?
- …
ChatGPT a rĂ©pondu Ă toutes ces questions. Le principe est d’ouvrir uniquement le sous-dossier qui contient les sources dans Visual Studio Code et de travailler avec un ou plusieurs fichiers du type AI_CONTEXT.md qui rĂ©sument l’Ă©tat des sources et les connaissances qu’acquiert Copilot pendant son travail. Il faut donc crĂ©er ce fichier et le modifier constamment pour qu’il reflĂšte au mieux l’Ă©tat du repository et l’historique des modifs. Quand on dĂ©marre une tĂąche, on lui demande de lire ce fichier pour le mettre dans le bain… A la fin, on lui demande de le mettre Ă jour pour son futur-lui dans une autre conversation. C’est simple, mais il fallait y penser.
J’ai donc demandĂ© Ă ChatGPT de me donner une sĂ©rie d’amĂ©liorations possible du code. Il m’a fourni une liste impressionnante de tĂąches qui pourraient ĂȘtre rĂ©alisĂ©es. J’ai donc commencĂ© Ă superviser un dialogue entre ChatGPT et Copilot pour:
- transformer l’application en “vraie” application Qt (une QApplication au lieu d’un simple widget),
- ajouter un menu et une barre de statut,
- ajouter un chargement/sauvegarde des paramĂštres au format JSON,
- ajouter la possibilitĂ© de drag&drop un fichier de paramĂštres JSON dans la fenĂȘtre pour le charger,
- optimiser le code (ne recalculer la trajectoire que lorsque c’est nĂ©cessaire et pas Ă toutes les frames),
- extraire tous les nombres magiques liés aux paramÚtres graphiques dans une structure et en faire des vrais paramÚtres (couleurs, épaisseur de trait, traille de police),
- ajouter une fenĂȘtre de configuration de ces paramĂštres,
- amĂ©liorer les “sliders” pour rĂ©gler les paramĂštres du mĂ©canisme dans l’interface graphique,
- rendre la fenĂȘtre redimensionnable,
- ajouter une grille de visualisation,
- ajouter un zoom/pan Ă la souris,
- ajouter un start/stop et la possibilitĂ© de faire du “frame par frame” avec les flĂšches du clavier,
- faire un réglage de la vitesse du mécanisme,
- ajouter une traduction de l’interface et un choix de langue anglais/français,
- améliorer le systÚme de build,
- ajouter des tests et une exécution de ceux-ci par CTest.
Tout ça en quelques heures! Ca m’a vraiment bluffĂ©.
Une des Ă©tapes les plus impressionnantes selon moi est l’extraction des nombres magiques. Elle nĂ©cessite de comprendre Ă quoi correspondent chaque constante pour d’une part la rĂ©utiliser au bon endroit si nĂ©cessaire et d’autre part nommer correctement la nouvelle variable. Pour ça, il faut vraiment comprendre le code et ce qu’il fait.
J’ai aussi Ă©tĂ© impressionnĂ© par la partie “tests”. Copilot a d’abord compris les Ă©quations du mĂ©canisme et les as reproduites dans un script powershell. Il a ensuite Ă©valuĂ© la configuration du mĂ©canisme dans diffĂ©rentes configurations et a sauvĂ© les positions des charniĂšres dans un fichier CSV qui est relu par le programme de test. On comprends vite que Copilot a une vision trĂšs claire de ce que fait le code.
Un autre test: le code PiC de mon cours
Comme je l’ai Ă©crit dans ce billet “PiC les dĂ©buts” et ce billet “emscripten”, je suis en train de coder un petit simulateur “Particle in Cell” parallĂšlement Ă mes Ă©tudiants. Le but premier Ă©tait de me familiariser avec la mĂ©thode numĂ©rique pour les aider. J’ai Ă©galement utilisĂ© cette occasion pour jouer avec PixelGameEngine, Dear ImGui et Emscripten.
Il Ă©tait temps de voir Ă quel point Copilot peut rĂ©aliser mon travail et me faire avancer dans ce projet. J’ai donc fait la mĂȘme chose qu’avec le code prĂ©cĂ©dent: ChatGPT allait m’aider Ă piloter Copilot en mode “agent”. Ce code est un peu plus gros, plus complexe et il est divisĂ© en plusieurs bibliothĂšques dont deux ne sont que des copies des fichiers sources de PixelGameEngine et ImGui.
J’ai tout d’abord essayĂ© de gĂ©nĂ©rer un fichier AI_CONTEXT.md mais ChatGPT m’a finalement suggĂ©rĂ© de scinder ce fichier en plusieurs parties. En faisant des recherches dans l’aide de Copilot, j’ai vu qu’il Ă©tait possible configurer Copilot au travers de fichiers du style copilot-instructions.md dans un rĂ©pertoire .github/ dans les sources (mĂȘme si celui-ci est finalement hĂ©bergĂ© par GitLab). J’ai donc créé une sĂ©rie de fichiers contenant diffĂ©rentes instructions et dĂ©crivant l’architecture du code. Le but premier est de ne pas se rĂ©pĂ©ter, mais aussi que Copilot ne relise pas trop souvent la totalitĂ© des fichiers pour comprendre le contexte ou ce qui se serait passĂ© dans une autre conversation avec l’agent.
Et voici donc mes commits, ou plutĂŽt ceux de Copilot:

A la fin, c’est mĂȘme lui qui Ă©crit le message et se charge de faire le git push!
Mon idĂ©e Ă©tait de voir si Copilot Ă©tait capable d’ajouter une rĂ©solution par gradient conjuguĂ© pour le solveur de Poisson. Je savais que cette mĂ©thode Ă©tait plus performante que celles que j’avais implĂ©mentĂ©es (Jacobi et Red-Black / Gauss-Seidel).
Il m’a en fait tout d’abord corrigĂ© 2 bugs. Le premier Ă©tait un simple memory leak pas trĂšs important en fin de programme et le second Ă©tait un vrai bug dans le calcul de mon gradient de pression. Les index Ă©taient mal choisis et mon gradient mal calculĂ©. Au dĂ©part, je n’y ai pas cru, mais il avait raison. C’est fou!
J’ai fait faire quelques opĂ©rations de refactoring avant de demander l’implĂ©mentation du gradient conjuguĂ©. C’est finalement le dĂ©placement d’une fonction du fichier d’entĂȘte vers le fichier .cpp qui a Ă©tĂ© la tĂąche la plus laborieuse pour lui, alors qu’elle aurait pu ĂȘtre faire facilement Ă la main. Copilot a eu beaucoup de mal Ă juste copier/coller un (gros) bloc de code d’un fichier Ă l’autre et d’adapter l’indentation. En fait, il ne s’en sortait pas et il lui manquait des accolades. AprĂšs quelques tentatives de recompilation et d’analyse d’erreurs, il y est tout de mĂȘme arrivĂ© tout seul mais ça m’a un peu Ă©tonnĂ©, vu ses performances pour faire d’autres tĂąches que je trouve beaucoup plus subtiles.
C’Ă©tait d’ailleurs le cas pour l’ajout du nouveau solveur linĂ©aire: il a extrait l’opĂ©rateur linĂ©aire de la mĂ©thode dans une fonction dĂ©diĂ©e avec un premier prompt ; il a ensuite implĂ©mentĂ© le solveur correctement du premier coup! Pour le vĂ©rifier, il a ajoutĂ© le calcul du rĂ©sidu. Enfin, il a ajoutĂ© un prĂ©conditionneur diagonal et il a interfacĂ© le nouveau solveur dans l’interface graphique ImGUI.

Copilot en train d’exĂ©cuter des tĂąches de sa liste “Todo” créée par lui-mĂȘme pour arriver Ă son but.
J’ai arrĂȘtĂ© lĂ pour pouvoir “digĂ©rer” un peu ce que je venais de vivre et prendre le temps d’Ă©crire ce billet. Cette expĂ©rience est vraiment incroyable, mĂȘme si j’ai cru comprendre que Copilot n’est pas l’agent le plus puissant Ă l’heure actuelle. Certains de mes contacts ne jurent que par Claude Code. D’autres utilisent Codex, dont j’ai une licence pro via mon abonnement ChatGPT… Il y a vraiment trop de choses Ă tester!
Pour le code PiC, j’aimerais faire une passe de nettoyage manuel avant de continuer, ne serait-ce que pour assimiler le nouveau code qui a Ă©tĂ© gĂ©nĂ©rĂ©.
La suite au prochain numéro!
