2 juin 2026
Cet exercice a pour objectif de vous montrer comment entrer dans du code existant et le modifier, avec ou sans IA générative.
Il vous propose d’enrichir un mini-interpréteur de langage
Logo fourni dans Logo.zip (à
exploiter selon la procédure Construire
un projet C++ avec cmake), contenant 24 fichiers sources
(hors fichiers CMakeLists.txt) représentant un millier de
lignes de code.
Une fois que vous avez tout généré, si vous lancez l’exécution de
logo.exe , le terminal vous affiche :
logo file delay
file: Path of the logo program to run
delay: Delay to allow the user to see how the turtle moves [s]
Sortie de C:\temp\Logo\out\build\x64-Debug\logo\logo.exe (processus 16132). Code : 1.Dit autrement, ce programme nécessite deux arguments sur la ligne de commande :
La section suivante explique comment spécifier ces deux arguments.
Nous souhaitons que logo.exe interprète le programme
prog0.logo avec un délai d’une seconde.
launch.vs.json
contenant :{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "logo.exe (logo\\logo.exe)",
"name": "logo.exe (logo\\logo.exe)"
}
]
}{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "logo.exe (logo\\logo.exe)",
"name": "logo prog0.logo",
"args": ["res/prog0.logo", 1]
}
]
}logo.exe (logo\logo.exe)
: Un menu déroulant s’affiche.logo prog0.logo et cliquez sur la flèche
verte.logo, spécifiez
res/prog0.logo 1 dans le champ “Program arguments”
launch.json s’ouvre.launch.json."name", remplacez la valeur
"(Windows) Launch" par la valeur
"logo prog0.logo" (ce changement n’est pas obligatoire,
mais est plus propre)."program", mettez la valeur
"${workspaceFolder}/build/src/main/logo.exe""args", mettez la valeur
["res/prog0.logo", "1"]"cwd", remplacez
"${fileDirname}" par ``launch.jsonLogo, puis dans son sous-dossier
build. Cherchez le sous-dossier où se trouve
logo.exe et adaptez les champs "program" et
"cwd" du fichier launch.json.logo file delay). Dans votre
sous-dossier build, cherchez où se trouve le sous-dossier
res. Modifiez le champ "args" pour qu’il
contienne le bon chemin vers res à partir de l’endroit où
se trouve logo.exe (par exemple,
"../res/prog0.logo").
Ce mini-interpréteur logo accepte la définition de procédures (pour
le vérifier, exécutez logo sur prog1.logo en
mettant le délai à 0 au lieu de 1 si vous
voulez que le dessin se fasse plus vite).
Nous souhaitons modifier ce mini-interpréteur logo pour faire les deux évolutions suivantes :
REPETE
(cf. res/prog2.logo).SVG
(Pour information, comme il y a du code mal écrit, cela suppose que vous
restructuriez le code).Une première manière de mettre en place ces évolutions est manuelle. Elle est citée ici pour voir en quoi elle consiste et n’est à faire que par les étudiant·es qui, pour une raison ou une autre (cf., par exemple, les arguments contre les IA génératives en section suivante), ne souhaitent pas utiliser une IA générative.
Commencez par analyser manuellement ce code :
Désormais, vous devriez être mieux en mesure de coder (manuellement) les évolutions attendues.
Les IA génératives actuelles offrent plusieurs cas d’usage dans le cadre d’un développement informatique :
La suite de ce TP étudie certains de ces cas d’usage.
Michel Simatic, co-auteur de ce sujet de TP, est farouchement contre les IA génératives pour des raisons :
Toutefois, en tant qu’enseignant-chercheur, M. Simatic se doit de préparer ses étudiant·es au milieu professionnel où ils vont intervenir dès la fin de leurs études. Or, le milieu professionnel informatique investit à fond dans l’utilisation des IA génératives. Il lui faut sensibiliser ses étudiant·es à l’utilisation de ces outils, surtout dans le contexte d’un cours en lien avec l’informatique.
NB : En entreprise, il est essentiel de vous renseigner sur la politique appliquée concernant l’utilisation des IAs génératives, notamment parce que les IAg posent des questions de confidentialité. Pour illustrer ce besoin de se renseigner, voici une anecdote : un·e de vos collègues était en stage de fin d’études en entreprise et Michel Simatic était son conseiller de stage. Ce·tte collègue avait envoyé son rapport mensuel d’avancement de stage dans un GoogleDoc. M. Simatic lui avait alors demandé de vérifier auprès de l’entreprise si elle était d’accord quant à l’utilisation d’un GoogleDoc. Pour des raisons de confidentialité, l’entreprise avait répondu que le traitement de texte à utiliser pour écrire ces rapports devait être un outil local (par exemple LibreOffice).
Idéalement, nous aurions souhaité que vous utilisiez :
De ce fait, nous vous proposons d’utiliser un outil en ligne, sachant que :
Aussi nous vous proposons de vous inscrire à ChatGPT (si ce n’est pas déjà fait ;-) ) et, pour bénéficier d’une expérience optimale (qui nécessite environ 1 Go : ne le faites pas si vous n’avez pas la place), d’utiliser en local, sur votre machine, son outil Codex (outil téléchargeable en environnement macOS et Windows ; pour Linux, utilisez son extension Jetbrains ou VSCode). NB :
Logo/src/main, puis tapez la commande
cat *.h *.cpp > synthese.cppLogo\src\main, puis tapez les commandes
cat *.h > synthese.cpp et
cat *.cpp >> synthese.cppsynthese.cpp dans ChatGPT.Logo.Tapez le prompt :
Je suis étudiant en deuxième année d'école d'ingénieur. Explique-moi les grandes lignes de ce code pour que je puisse le maintenir.
Analysez la réponse (Pour information, voici la réponse obtenue durant une session ChatGPT et une session Codex): Vous aide-t-elle à comprendre le code ?
Tapez le prompt :
Génère un diagramme de classe UML (format plantuml) de ce code.
Exploitez le plantuml obtenu pour obtenir un diagramme
de classe (Pour ce faire, suivez la méthode utilisée en CSC4102 ; autre
piste : copiez-collez les instructions UML dans ce PlantUML Web Server) Analysez ce
diagramme (Pour information, voici la réponse obtenue durant une session
ChatGPT, donc le
diagramme de
classe, et une session Codex, donc le diagramme de classe):
Vous aide-t-il à comprendre le code ?
REPETE (cf. res/prog2.logo)”Si vous n’avez que ChatGPT (donc pas Codex),
commencez par lui remonter le fichier res/prog2.logo
Tapez le prompt :
Décris-moi les étapes pour que ce programme accepte le mot-clé REPETE (comme dans prog2.logo)
Analysez la réponse (Pour information, voici la réponse obtenue durant une session ChatGPT et une session Codex): Vous aide-t-elle à comprendre le code ?
Même si vous utilisez Codex, jetez un œil la “Solution simple (recommandée pour un projet étudiant)” dans la réponse ChatGPT. Qu’en pensez-vous ?
L’étape suivante n’est faisable que si vous utilisez Codex : tapez le prompt :
Effectue ces étapes sur le code.
Lors des essais de Michel Simatic, Codex a commencé par afficher :
Je vais intégrer repete directement dans le modèle actuel : une nouvelle instruction qui possède un sous-programme, et une petite extension du parsing pour arrêter un bloc sur ]. Ensuite je construirai pour vérifier que l’exemple prog2.logo passe au moins la compilation.
Je vais maintenant ajouter les fichiers Repeat, brancher le mot-clé dans le parseur, et faire en sorte que Program sache construire un bloc qui se termine par ].
Il a ensuite indiqué qu’il allait ajouter des lignes à repete.h
Puis, il est resté bloqué un long moment (8 minutes et 50 secondes)
avant de produire cet
affichage (qui a supprimé les affichages ci-dessus) : Codex
a compilé les fichiers modifiés, puis chargé et exécuté pas à pas le
fichier prog2.logo pour vérifier que l’affichage graphique
simulé était OK.
NB : Les dernières lignes de cet affichage expliquent (alors que Michel Simatic était en environnement Windows) :
La construction CMake complète bloque dans l’environnement MSVC avant notre code, car le compilateur ne trouve pas des en-têtes standards comme
chrono,cassert,optional. Donc le changement est validé localement côté code, mais pas via le build SFML complet dans cet environnement.” Pourtant, j’arrive à générer et à exécuter.
Or, avec ces modifications, le programme se compile et s’exécute correctement en environnement Windows (vérifiez si vous êtes sous Windows). Michel Simatic n’a pas investigué plus avant ce souci.
SVG”A vous de jouer !
Voici la réponse obtenue au prompt
Décris-moi les étapes pour que ce programme génère le graphique dans un fichier au format SVG
durant une session ChatGPT et une
session Codex
Codex prend 1 minutes et 14 secondes pour répondre au prompt
effectue ces étapes sur le code et produit cet affichage.
Tapez le prompt :
Quels refactoring suggères-tu pour que le code soit mieux structuré ?
Analysez la réponse (Pour information, voici la réponse obtenue durant une session ChatGPT et une session Codex ; notez que les réponses de ChatGPT et Codex diffèrent vu que Codex analyse du code qu’il a fait évoluer): Qu’en pensez-vous ?
Cette étape n’est faisable qu’avec Codex : tapez le prompt :
Génère le fichier .md qui facilitera ton travail ultérieurement sur ce projet.
Analysez la réponse (Pour information, voici la réponse obtenue durant une session Codex) : Qu’en pensez-vous ?
Étudiez :
AGENTS.md
qui est un README pour agents. Pour information, dans le cadre de ses
tests, Michel Simatic a effectué les prompts suivants :
Genere un squelette de fichier agents.md pour que je t'indique comment générer sous WindowsAjoute dans AGENTS.md des instructions concernant Linux (Ubuntu 2024.04, compilateur g++ version 14.3.0, cmake version 4.3.3, générateur ninja version 1.11.1)Dans Agents.md, explique qu'il faut d'abord lancer la commande Powershell ``& 'C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1'``. On a alors accès au compilateur CL version 19.44.35227 pour x86, cmake version 3.29.2, ninja version 1.12.0README.md à la racine du
projet.Par ailleurs, voici des exemples de prompts utiles (Merci à LeChat pour ces indications) :
| Objectif | Prompt |
|---|---|
| Comprendre un code | “Explique-moi ce que fait ce code, ligne par ligne, en français simple. Identifie les dépendances externes et les points d’amélioration possibles.” |
| Générer des tests | “Écris des tests unitaires pour cette fonction en utilisant pytest. Couvre les cas normaux et les edge cases (ex : liste vide, valeurs nulles).” |
| Refactoring | “Propose une version plus modulaire de ce code, en séparant les responsabilités en plusieurs fonctions. Utilise des noms de variables clairs et ajoute des docstrings.” |
| Migration de dépendances | “Ce code utilise la bibliothèque requests en Python. Remplace-la par httpx en gardant la même fonctionnalité. Montre les différences entre les deux versions.” |
| Optimisation | “Optimise cette fonction pour réduire sa complexité temporelle (Big O). Explique les changements apportés.” |
Et puis, trois sites pertinents selon LeChat
Dernière réflexion fondamentale : Ce TP n’a pas du tout abordé l’enjeu (économique et technique) du nombre de tokens que vous consommez au niveau de l’IAg. Or, c’est un point central dans le cadre d’un projet réel d’au moins plusieurs dizaines de milliers de lignes de code. Loïc Joly pourra peut-être vous donner oralement quelques éléments sur ce sujet.
La vidéo “La Fabrique à Idiots” de Micode explique (à partir de 22’38”) :
Le développement, ce n’est pas comme la direction d’orchestre. C’est plutôt comme la cuisine. Dans un grand restaurant, le chef étoilé est toujours entouré d’une équipe de cuisiniers très hiérarchisée qu’on appelle une brigade. Tout en bas de la hiérarchie, il y a le commis de cuisine qui en fait ne cuisine pas : Il épluche les patates ou nettoie le plan de travail. Au dessus, il y a le chef de partie, qui ressemble un peu plus à l’idée qu’on se fait de cuisiner. Il maîtrise la cuisson des aliments, dresse les plats et dirige ses commis d’une main de fer. par contre, il est spécialisé, par exemple dans les sauces ou les viandes. Vient ensuite le sous-chef ou second de cuisine : Lui, c’est le bras droit du chef étoilé. Il corrige les assaisonnements, coordonne les différents chefs de partie, et il s’occupe de la gestion des stocks. Dans ce contexte très codifié, tout cuisinier qui espère devenir un grand chef étoilé, doit commencer sa carrière en bas de l’échelle : d’abord commis, puis chef de partie, et ainsi de suite.
Et bien, les outils de développement IA comme Cursor, Copilot et autres ClaudeCode, ils sont un peu comme des commis et des chefs de partie, allez. Ils ont des vraies compétences. Mais, plus la tâche est complexe, plus il faut quelqu’un pour les encadrer. On peut dire que coder une page Web, c’est comme éplucher les patates ; produire un site e-commerce de quelques pages avec un panier et un bouton d’achat, ben c’est comme préparer une viande à la bonne cuisson avec la p’tite sauce qui va bien ; et développer une appli qui doit gérer des millions d’utilisateurs en même temps, ça revient à diriger une brigade de quatre-vingt-dix personnes pendant le coup de feu. Et ça, pour l’instant, l’IA en est très loin. Et tant mieux. Mais quand Antoine [NDLR : un freelance à qui avait été confié le développement d’un site Web] a dû développer l’outil IA que je [NDLR : Micode, l’auteur d ela vidéo] lui avais demandé, il s’est retrouvé à encadrer une brigade de cuisiniers IA sans être préalablement passer par tous les grades.
Là où un développeur senior, c’est comme le chef étoilé : Il est passé par tous les postes de la brigade. Et si vous lui mettez un flingue sur la tempe, il peut émincer les oignons à toute vitesse, c’est-à-dire pisser du code. Et si l’IA lui livre un code catastrophique, il va le voir, il va le corriger. C’est cette polyvalence et cette vision à grande échelle qui manque au junior et qui permet au senior de se lâcher sur du code généré par IA. Les dév senior finalement, ils ont respecté le cycle d’apprentissage théorie, pratique, méta-cognition. Et c’est parce que leurs connaissances sont profondément ancrées que l’IA démultiplie leurs compétences au lieu de les atrophier.
Mais du coup, comment on fait pour que les juniors maîtrisent les fondamentaux du code, que les collégiens apprennent leurs tables des éléments, et que les lycéens arrêtent de sous-traiter leurs dissert de philo à ChatGPT ? Et bien, on combat le feu par le feu. Puisque l’IA est omniprésente, autant faire d’elle votre tuteur particulier.”
C’est pourquoi nous vous proposons de considérer ces outils d’IAg comme des tuteurs/partenaires de création de votre micro-projet.
Par ailleurs, soyez vigilant·e face à l’effet Dunning-Kruger (cf. figure suivante) :