Logo

Michel SIMATIC, Loïc JOLY et Philipp SCHLEHUBER-CAISSIER

2 juin 2026

1 Introduction

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 :

  1. le nom du programme logo à interpréter.
  2. le délai (exprimé en secondes) pour permettre à l’utilisateur de voir la tortue se déplacer.

La section suivante explique comment spécifier ces deux arguments.

2 Lancement d’un programme nécessitant 2 arguments en ligne de commande

Nous souhaitons que logo.exe interprète le programme prog0.logo avec un délai d’une seconde.

2.1 Visual Studio

{
  "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]
    }
  ]
}

2.2 CLion

2.3 VSCode

Icône “Run and Debug (Ctrl + Shift + D)”
Flèche verte dans la fenêtre “Run and Debug”

3 Synthèse du travail à faire durant ce TP

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 :

  1. Il accepte le mot-clé REPETE (cf. res/prog2.logo).
  2. Il génère le graphique dans un fichier au format SVG (Pour information, comme il y a du code mal écrit, cela suppose que vous restructuriez le code).

4 Première manière de faire (à lire par tous·tes et à mettre en œuvre par les étudiant·es qui ne veulent pas utiliser d’IA générative, les autres passant à la section suivante après lecture de cette section) : Analyse manuelle du code avant codage manuel des évolutions

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 :

  1. faites un diagramme UML des classes de ce mini-interpréteur ;
  2. exécutez le programme en pas-à-pas avec le debugger pour mieux comprendre son fonctionnement.

Désormais, vous devriez être mieux en mesure de coder (manuellement) les évolutions attendues.

5 Deuxième manière de faire (demandée aux étudiant·es OK avec l’utilisation d’une IA générative) : Utilisation d’outils d’IA générative

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.

5.1 Remarques préliminaires

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).

5.2 Installation de l’outil d’IA générative utilisé durant ce TP

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 :

  1. Dans l’écran de lancement de Codex, une fois que vous vous serez connecté·e avec votre licence ChatGPT /
  2. L’outil devrait aussi vous proposer d’utiliser *GPT-5.5” : Acceptez.
  3. L’outil vous demande aussi si vous “autoriser le bac à sable” : Acceptez.

5.3 Cas d’usage “Comprendre et documenter un code Legacy”

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 ?

5.4 Cas d’usage “Ajout de fonctionnalités”

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.

5.4.2 Fonctionnalité “Générer le graphique dans un fichier au format SVG

A vous de jouer !

Cliquez si vous voulez accéder aux résultats des essais de Michel Simatic.

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.

5.5 Cas d’usage “Refactoring et optimisation”

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 ?

5.6 Faciliter la vie de Codex pour une maintenance ultérieure de ce code

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 ?

5.7 Pour aller plus loin

Étudiez :

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.

5.8 Tour de table (avec les étudiant·es ayant utilisé une IA générative) : “Quel cas d’usage vous semble le plus utile pour votre micro-projet JIN4/CC4526?”

Cliquez si vous avez besoin d’éléments pour amorcer le tour de table.

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) :

Schéma satirique couramment utilisé pour illustrer l’effet Dunning-Kruger (Il s’agit cependant d’une façon erronée de représenter les données de l’expérience originale)