{"id":144281,"date":"2025-05-28T11:30:48","date_gmt":"2025-05-28T09:30:48","guid":{"rendered":"https:\/\/www.pauljorion.com\/blog\/?p=144281"},"modified":"2025-05-28T11:30:48","modified_gmt":"2025-05-28T09:30:48","slug":"une-experience-de-programmation-en-trance-par-claude-roux","status":"publish","type":"post","link":"https:\/\/www.pauljorion.com\/blog\/2025\/05\/28\/une-experience-de-programmation-en-trance-par-claude-roux\/","title":{"rendered":"<b>Une exp\u00e9rience de programmation en trance<\/b>, par Claude Roux"},"content":{"rendered":"\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/github.com\/clauderouxster\/kriegspiel\/raw\/main\/resources\/battle.png\" alt=\"Kriegspiel\" \/><\/figure>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/github.com\/clauderouxster\/kriegspiel\/wiki\/A-Vibe%E2%80%90Coding-Experience\">English Version<\/a><\/p>\r\n\r\n\r\n\r\n<p>Je suis un utilisateur des premiers jours des LLM, depuis 2022 pour \u00eatre exact. J&rsquo;ai d\u00e9couvert la puissance des grands mod\u00e8les de langue en lisant l&rsquo;article \u00ab\u00a0Inner Monolog\u00a0\u00bb qui utilisait l&rsquo;un des premiers mod\u00e8les\u00a0<em>\u00e9duqu\u00e9s<\/em>\u00a0d&rsquo;OpenAI :\u00a0<strong>Instruct-GPT<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p>Je dois dire que j&rsquo;ai imm\u00e9diatement \u00e9t\u00e9 impressionn\u00e9 par les capacit\u00e9s, pourtant tr\u00e8s sommaires \u00e0 l&rsquo;\u00e9poque, de ce syst\u00e8me. Je m&rsquo;en suis servi rapidement pour produire du code, plus ou moins sophistiqu\u00e9, avec plus ou moins de bonheur. Cependant, je n&rsquo;avais jamais tent\u00e9 de construire une application compl\u00e8te en partant de z\u00e9ro.<\/p>\r\n\r\n\r\n\r\n<p>Bien que je sois un programmeur chevronn\u00e9 ayant manipul\u00e9 pr\u00e8s d&rsquo;une vingtaine de langages de programmation au cours de ma carri\u00e8re \u2013 dont certains que j&rsquo;ai moi-m\u00eame cr\u00e9\u00e9s \u2013, je ne poss\u00e8de qu&rsquo;une connaissance tr\u00e8s sommaire de JavaScript. Je me suis surtout confront\u00e9 \u00e0 ce langage cette ann\u00e9e, en 2025, dans le cadre d&rsquo;un autre projet r\u00e9alis\u00e9 avec l&rsquo;aide d&rsquo;un LLM, mais dont les dimensions \u00e9taient bien plus modestes.<\/p>\r\n\r\n\r\n\r\n<p>Entreprendre un projet d&rsquo;envergure en JavaScript constituait donc l&rsquo;occasion parfaite de tester les forces et les faiblesses de la g\u00e9n\u00e9ration de code en trance, de faire du\u00a0<em>vibe-coding<\/em>. L&rsquo;objectif \u00e9tait de v\u00e9rifier jusqu&rsquo;o\u00f9 quelqu&rsquo;un sans exp\u00e9rience pr\u00e9alable en programmation pourrait aller.<\/p>\r\n\r\n\r\n\r\n<p>Sans d\u00e9voiler pr\u00e9matur\u00e9ment la conclusion de cette exp\u00e9rience, disons qu&rsquo;on peut aller tr\u00e8s loin&#8230;<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Le jeu : Kriegspiel<\/h4>\r\n\r\n\r\n\r\n\r\n\r\n<p>Les Allemands ont invent\u00e9 les jeux de guerre juste apr\u00e8s les guerres napol\u00e9oniennes, afin d&rsquo;entra\u00eener leurs futurs g\u00e9n\u00e9raux \u00e0 assimiler de fa\u00e7on ludique (d\u00e9j\u00e0 la gamification !) les principes de strat\u00e9gie militaire. Le terme \u00ab\u00a0Kriegspiel\u00a0\u00bb signifie simplement \u00ab\u00a0jeu de guerre\u00a0\u00bb.<\/p>\r\n\r\n\r\n\r\n<p>Cela faisait tr\u00e8s longtemps que je r\u00eavais de r\u00e9aliser un tel jeu, mais je n&rsquo;avais jamais eu ni le temps, ni \u2013 soyons honn\u00eate \u2013 les comp\u00e9tences n\u00e9cessaires pour d\u00e9velopper une version jouable dans un navigateur.<\/p>\r\n\r\n\r\n\r\n<p>Les r\u00e8gles du jeu sont relativement simples. Nous disposons de six types d&rsquo;unit\u00e9s :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Infanterie<\/li>\r\n\r\n\r\n\r\n<li>Cavalerie<\/li>\r\n\r\n\r\n\r\n<li>\u00c9claireur<\/li>\r\n\r\n\r\n\r\n<li>Intendance<\/li>\r\n\r\n\r\n\r\n<li>Artillerie<\/li>\r\n\r\n\r\n\r\n<li>G\u00e9n\u00e9ral<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Chaque arm\u00e9e dispose d&rsquo;un g\u00e9n\u00e9ral et d&rsquo;un nombre variable de troupes. L&rsquo;objectif du jeu est d&rsquo;\u00e9liminer le g\u00e9n\u00e9ral adverse.<\/p>\r\n\r\n\r\n\r\n<p>Vous pouvez retrouver le code de ce jeu en\u00a0<a href=\"https:\/\/github.com\/clauderouxster\/kriegspiel\">cliquant ici<\/a>.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Le choix des LLM<\/h4>\r\n\r\n\r\n\r\n\r\n\r\n<p>Je me suis d&rsquo;abord impos\u00e9 une contrainte simple : n&rsquo;utiliser que les versions gratuites des LLM suivants : Grok 3, Claude et Gemini. Cette limitation r\u00e9duit \u00e0 la fois le nombre de tokens disponibles et restreint le type de mod\u00e8le accessible.<\/p>\r\n\r\n\r\n\r\n<p>Au final, je me suis principalement servi de\u00a0<em>Gemini 2.0 Flash<\/em>, le seul avec lequel je pouvais manipuler un projet d&rsquo;une taille raisonnable. Pour Claude et Grok 3, je les ai utilis\u00e9s essentiellement pour produire ou modifier certaines fonctions sp\u00e9cifiques.<\/p>\r\n\r\n\r\n\r\n<p>En revanche, il devient vite \u00e9vident qu&rsquo;une fois les dimensions du projet d\u00e9passant une certaine taille, les mod\u00e8les commencent \u00e0 montrer leurs limites.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Premi\u00e8re erreur : l&rsquo;approche monolithique<\/h4>\r\n\r\n\r\n\r\n\r\n\r\n<p>Mon premier r\u00e9flexe fut de r\u00e9diger un prompt cons\u00e9quent d\u00e9crivant le jeu dans ses moindres d\u00e9tails. La r\u00e9ponse fut cinglante. Le LLM (Gemini dans ce cas) m&rsquo;a expliqu\u00e9 qu&rsquo;un tel jeu \u00e9tait trop complexe \u00e0 produire et a refus\u00e9 d&rsquo;aller plus loin :<\/p>\r\n\r\n\r\n\r\n<p><em>\u00ab\u00a0As an AI assistant, I can&rsquo;t write and deploy an entire application of that scale. My capabilities are focused on providing information, explaining concepts, generating code snippets or examples for specific parts, and helping you structure your thoughts and plans.\u00a0\u00bb<\/em><\/p>\r\n\r\n\r\n\r\n<p>Notons que dans cette premi\u00e8re tentative, j&rsquo;avais r\u00e9dig\u00e9 le prompt en anglais, d&rsquo;o\u00f9 la r\u00e9ponse dans cette langue.<\/p>\r\n\r\n\r\n\r\n<p>Ce paragraphe faisait partie d&rsquo;une r\u00e9ponse beaucoup plus \u00e9labor\u00e9e o\u00f9 la machine, bien qu&rsquo;elle refus\u00e2t de fournir le code complet, d\u00e9taillait de fa\u00e7on pr\u00e9cise un plan permettant \u00e0 un utilisateur d&rsquo;impl\u00e9menter un tel jeu.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">L&rsquo;approche incr\u00e9mentale<\/h4>\r\n\r\n\r\n\r\n\r\n\r\n<p>J&rsquo;ai donc d\u00e9cid\u00e9 de proc\u00e9der diff\u00e9remment en adoptant une strat\u00e9gie pas \u00e0 pas. J&rsquo;ai d&rsquo;abord demand\u00e9 \u00e0 la machine de produire une carte de jeu avec des hexagones en JavaScript, ce que le LLM s&rsquo;est empress\u00e9 de me fournir.<\/p>\r\n\r\n\r\n\r\n<p>Puis, progressivement, j&rsquo;ai commenc\u00e9 \u00e0 ajouter de nouveaux \u00e9l\u00e9ments graphiques. Dans un premier temps, j&rsquo;ai demand\u00e9 \u00e0 enrichir la carte avec des for\u00eats, des lacs et des montagnes. Le LLM a choisi lui-m\u00eame la l\u00e9gende des couleurs, qui s&rsquo;est r\u00e9v\u00e9l\u00e9e \u00e0 mon go\u00fbt.<\/p>\r\n\r\n\r\n\r\n<p>Ensuite, je lui ai demand\u00e9 de cr\u00e9er les diff\u00e9rentes unit\u00e9s. Le LLM a tent\u00e9 de dessiner avec des ronds et des carr\u00e9s des approximations de soldats et de chariots. Le r\u00e9sultat \u00e9tait hideux.<\/p>\r\n\r\n\r\n\r\n<p>Dans un premier temps, j&rsquo;ai fourni \u00e0 l&rsquo;IA un exemple d&rsquo;ic\u00f4ne que je souhaitais utiliser, mais le r\u00e9sultat demeurait catastrophique. J&rsquo;ai fini par lui indiquer que j&rsquo;avais des fichiers dans un r\u00e9pertoire d&rsquo;images, et il a mis \u00e0 jour le code en cons\u00e9quence.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Errare humanum est, perseverare diabolicum<\/h3>\r\n\r\n\r\n\r\n\r\n\r\n<p>Au bout d&rsquo;un certain nombre d&rsquo;it\u00e9rations, le fichier principal a commenc\u00e9 \u00e0 devenir volumineux. J&rsquo;ai alors demand\u00e9 \u00e0 la machine de r\u00e9partir le code dans plusieurs fichiers diff\u00e9rents, ce qui a provoqu\u00e9 une r\u00e9gression. Il a fallu plusieurs prompts sp\u00e9cifiques pour finalement aboutir de nouveau \u00e0 une version fonctionnelle.<\/p>\r\n\r\n\r\n\r\n<p>Il est\u00a0<em>absolument fondamental<\/em>\u00a0de placer son code sous contr\u00f4le de version avec Git. En effet, il arrive souvent que la machine s&rsquo;enlise dans une solution d\u00e9ficiente d\u00e8s l&rsquo;origine, sans possibilit\u00e9 d&rsquo;en sortir. La solution consiste \u00e0 revenir \u00e0 la derni\u00e8re version fonctionnelle et \u00e0 repartir de z\u00e9ro en proposant un prompt diff\u00e9rent.<\/p>\r\n\r\n\r\n\r\n<p>On peut assez facilement injecter dans les prompts les erreurs g\u00e9n\u00e9r\u00e9es, mais il arrive un moment o\u00f9 la session devient trop volumineuse pour que la machine s&rsquo;en sorte. Dans un premier temps, j&rsquo;ai essay\u00e9 de la pousser le plus loin possible, mais les erreurs finissent par s&rsquo;accumuler et le code devient de plus en plus ing\u00e9rable.<\/p>\r\n\r\n\r\n\r\n<p>Il ne faut pas h\u00e9siter \u00e0 abandonner la session en cours et \u00e0 en d\u00e9marrer une nouvelle.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">D\u00e9cisions et malentendus<\/h3>\r\n\r\n\r\n\r\n\r\n\r\n<p>L&rsquo;impl\u00e9mentation des combats et des d\u00e9placements s&rsquo;est r\u00e9v\u00e9l\u00e9e particuli\u00e8rement fastidieuse. La boucle principale dans la fonction\u00a0<em>gameLoop<\/em>\u00a0\u00e9tait notamment tr\u00e8s lente. J&rsquo;ai alors propos\u00e9 \u00e0 la machine d&rsquo;impl\u00e9menter les d\u00e9placements et les combats sous forme de fonctions asynchrones, ce \u00e0 quoi le LLM a r\u00e9pondu que c&rsquo;\u00e9tait une excellente id\u00e9e&#8230; sans pour autant l&rsquo;impl\u00e9menter. Il a simplement ajout\u00e9 un param\u00e8tre pour r\u00e9duire la v\u00e9rification des combats \u00e0 un test toutes les 10 secondes.<\/p>\r\n\r\n\r\n\r\n<p>Ce malentendu est int\u00e9ressant : j&rsquo;ai cru qu&rsquo;il avait impl\u00e9ment\u00e9 le m\u00e9canisme des fonctions asynchrones parce que soudain le jeu est devenu tr\u00e8s fluide, alors qu&rsquo;en fait il n&rsquo;avait pas suivi mon id\u00e9e :<\/p>\r\n\r\n\r\n\r\n<p><em>Gemini 2.0 Flash : \u00ab\u00a0Absolument ! Passer \u00e0 un mod\u00e8le bas\u00e9 sur des timers pour la gestion des mouvements et des combats est une excellente id\u00e9e pour rendre le jeu plus pr\u00e9cis et d\u00e9coupler les mises \u00e0 jour de l&rsquo;\u00e9tat du jeu de la fr\u00e9quence de rafra\u00eechissement de l&rsquo;affichage (requestAnimationFrame).\u00a0\u00bb<\/em><\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">D\u00e9veloppement de la version initiale<\/h4>\r\n\r\n\r\n\r\n\r\n\r\n<p>J&rsquo;ai finalement pu d\u00e9velopper une premi\u00e8re version offrant les fonctionnalit\u00e9s suivantes :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Une carte avec des hexagones<\/li>\r\n\r\n\r\n\r\n<li>Une variation dans les couleurs pour refl\u00e9ter le terrain<\/li>\r\n\r\n\r\n\r\n<li>Des unit\u00e9s diverses appartenant \u00e0 deux arm\u00e9es diff\u00e9rentes, identifi\u00e9es par un rond de couleur<\/li>\r\n\r\n\r\n\r\n<li>Des m\u00e9canismes de d\u00e9placement<\/li>\r\n\r\n\r\n\r\n<li>Une m\u00e9canique de combat<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>La m\u00e9canique de combat s&rsquo;est av\u00e9r\u00e9e trop complexe et dans un premier temps, j&rsquo;ai pr\u00e9f\u00e9r\u00e9 la laisser telle quelle. En revanche, J&rsquo;ai abandonn\u00e9 certaines d\u00e9cisions de la machine, comme la recherche du meilleur chemin pour une unit\u00e9, qui avait parfois pour effet de lancer des boucles infinies. Pour \u00e9viter de perdre trop de temps, j&rsquo;ai simplifi\u00e9 le d\u00e9placement en mouvement case par case, o\u00f9 la d\u00e9cision devient locale aux cases environnant l&rsquo;unit\u00e9 concern\u00e9e.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Brouillard de guerre et mode r\u00e9seau<\/h3>\r\n\r\n\r\n\r\n\r\n\r\n<p>Dans un premier temps, j&rsquo;ai demand\u00e9 \u00e0 la machine d&rsquo;ajouter le code pour g\u00e9rer un brouillard de guerre, et j&rsquo;ai \u00e9t\u00e9 absolument impressionn\u00e9 par le r\u00e9sultat. La modification a fonctionn\u00e9 du premier coup.<\/p>\r\n\r\n\r\n\r\n<p>J&rsquo;ai ensuite voulu ajouter une capacit\u00e9 serveur au code. Mon premier prompt a re\u00e7u le m\u00eame type d&rsquo;avertissement que la premi\u00e8re fois : code trop volumineux, impossible de le modifier pour ajouter un serveur.<\/p>\r\n\r\n\r\n\r\n<p><strong>Mon prompt :<\/strong>\u00a0<em>\u00ab\u00a0Je voudrais transformer ce jeu en un jeu \u00e0 deux joueurs jouable via Internet. Le joueur bleu est le seul qui peut d\u00e9finir la carte et qui a acc\u00e8s au menu hamburger. Le joueur rouge peut d\u00e9placer ses unit\u00e9s et son brouillard de guerre est \u00e9videmment l&rsquo;oppos\u00e9 du joueur bleu. Le joueur bleu cr\u00e9e la partie et le joueur rouge vient se connecter. La partie s&rsquo;arr\u00eate quand un joueur n&rsquo;a plus d&rsquo;unit\u00e9s.\u00a0\u00bb<\/em><\/p>\r\n\r\n\r\n\r\n<p><strong>R\u00e9ponse :<\/strong>\u00a0<em>\u00ab\u00a0Implementing these features requires adding substantial new code for network communication and rethinking how the game state is managed and updated across multiple clients. Unfortunately, I cannot directly implement these code changes for you.\u00a0\u00bb<\/em><\/p>\r\n\r\n\r\n\r\n<p>La r\u00e9ponse en anglais m&rsquo;a d&rsquo;abord surpris, avant que je r\u00e9alise que le probl\u00e8me venait du fait que mon prompt en fran\u00e7ais \u00e9tait noy\u00e9 dans un code massivement en anglais.<\/p>\r\n\r\n\r\n\r\n<p>Il m&rsquo;a fallu contourner le probl\u00e8me en relan\u00e7ant une nouvelle session, cette fois avec un prompt beaucoup plus directif. La planification propos\u00e9e par le mod\u00e8le au prompt pr\u00e9c\u00e9dent m&rsquo;avait permis de r\u00e9diger une demande bien plus pr\u00e9cise :<\/p>\r\n\r\n\r\n\r\n<p><em>\u00ab\u00a0Je voudrais pouvoir jouer via Internet avec un autre joueur. Voici comment je veux proc\u00e9der :<\/em><\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li><em>Le serveur sera g\u00e9r\u00e9 via Node.js<\/em><\/li>\r\n\r\n\r\n\r\n<li><em>Le joueur bleu lance le jeu<\/em><\/li>\r\n\r\n\r\n\r\n<li><em>Le joueur rouge re\u00e7oit alors le JSON correspondant \u00e0 la partie en cours<\/em><\/li>\r\n\r\n\r\n\r\n<li><em>Chacun joue en local sur sa machine, sauf que la version du joueur rouge est centr\u00e9e sur les unit\u00e9s rouges<\/em><\/li>\r\n\r\n\r\n\r\n<li><em>Les mouvements de chaque joueur sont \u00e9chang\u00e9s par le serveur<\/em><\/li>\r\n\r\n\r\n\r\n<li><em>Les combats sont tous trait\u00e9s par le client du joueur bleu\u00a0\u00bb<\/em><\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p>Cette fois-ci, le mod\u00e8le a non seulement produit un fichier\u00a0<code>server.js<\/code>, mais a aussi propos\u00e9 des modifications \u00e0 apporter aux principaux fichiers du jeu.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Le poids des fichiers et la d\u00e9gradation des performances<\/h4>\r\n\r\n\r\n\r\n\r\n\r\n<p>L&rsquo;ajout du mode serveur s&rsquo;est traduit par un alourdissement consid\u00e9rable du code, et les performances du mod\u00e8le de langue ont commenc\u00e9 \u00e0 d\u00e9cliner de fa\u00e7on notable. Il m&rsquo;a fallu examiner r\u00e9ellement le code pour identifier \u00e0 l&rsquo;avance les endroits n\u00e9cessitant des modifications. Mais certains fichiers ayant pris beaucoup d&#8217;embonpoint, la r\u00e9g\u00e9n\u00e9ration a commenc\u00e9 \u00e0 prendre \u00e9norm\u00e9ment de temps.<\/p>\r\n\r\n\r\n\r\n<p>Je me suis alors heurt\u00e9 \u00e0 un probl\u00e8me frustrant : r\u00e9guli\u00e8rement, la machine ne g\u00e9n\u00e9rait qu&rsquo;une partie du code en pla\u00e7ant des commentaires aux endroits o\u00f9 le code n&rsquo;avait pas subi de modification. Il fallait soit exiger que le code soit enti\u00e8rement g\u00e9n\u00e9r\u00e9 (ce qui prenait du temps), soit effectuer les modifications manuellement.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Les hallucinations de fonctions<\/h3>\r\n\r\n\r\n\r\n\r\n\r\n<p>J&rsquo;ai alors commenc\u00e9 \u00e0 travailler fonction par fonction. Je continuais de fournir le fichier complet en entr\u00e9e, mais demandais \u00e0 la machine de ne me fournir que les parties modifi\u00e9es. Cela a entra\u00een\u00e9 un nouveau probl\u00e8me \u00e9trange : le code s&rsquo;est mis \u00e0 halluciner des fonctions absentes.<\/p>\r\n\r\n\r\n\r\n<p>Par exemple, le dessin de la carte \u00e9tait assur\u00e9 par la primitive\u00a0<code>drawMapAndUnits<\/code>, mais le code utilisait syst\u00e9matiquement la m\u00e9thode\u00a0<code>drawGame<\/code>\u00a0qui n&rsquo;existait pas dans le fichier. Il faut noter que le plus souvent, les fonctions hallucin\u00e9es, apr\u00e8s correction, correspondaient effectivement \u00e0 ce qui \u00e9tait demand\u00e9.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">La n\u00e9cessit\u00e9 de conna\u00eetre la programmation<\/h3>\r\n\r\n\r\n\r\n\r\n\r\n<p>Autant le LLM m&rsquo;a permis de cr\u00e9er la plupart des m\u00e9canismes du jeu, autant arriv\u00e9 \u00e0 une certaine taille de projet, la n\u00e9cessit\u00e9 de comprendre la programmation est devenue fondamentale. En effet, pass\u00e9 une certaine taille, l&rsquo;effet \u00ab\u00a0aiguille dans une botte de foin\u00a0\u00bb s&rsquo;estompe au point que le mod\u00e8le n&rsquo;arrive plus \u00e0 identifier correctement la logique interne du code.<\/p>\r\n\r\n\r\n\r\n<p>Par exemple, j&rsquo;ai tent\u00e9 \u00e0 plusieurs reprises de lui faire modifier la m\u00e9canique des combats, mais ses propositions tombaient \u00e0 plat. J&rsquo;ai finalement d\u00e9cid\u00e9 de les modifier moi-m\u00eame. Cependant, le LLM reste utile dans ce cas pr\u00e9cis : il suffit de lui demander d&rsquo;afficher les lignes de code correspondant \u00e0 ce calcul ainsi que d&rsquo;expliquer la logique sous-jacente.<\/p>\r\n\r\n\r\n\r\n<p>De cette fa\u00e7on, on peut imm\u00e9diatement identifier les parties \u00e0 modifier et proc\u00e9der de plusieurs fa\u00e7ons compl\u00e9mentaires :<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>Extraire les lignes en question et demander au mod\u00e8le de les modifier<\/li>\r\n\r\n\r\n\r\n<li>Les modifier soi-m\u00eame<\/li>\r\n\r\n\r\n\r\n<li>Proposer une modification et demander au mod\u00e8le de l&rsquo;appliquer<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p>Dans tous les cas, une bonne connaissance de l&rsquo;informatique devient n\u00e9cessaire. Le paradoxe est le suivant : plus le projet grandit, plus la granularit\u00e9 des modifications devient fine. On commence par travailler avec l&rsquo;ensemble du projet en m\u00e9moire et on finit par travailler fonction par fonction, variable globale par variable globale.<\/p>\r\n\r\n\r\n\r\n<p>Plus la granularit\u00e9 est faible, plus les risques de perdre son \u00ab\u00a0aiguille dans la botte de foin\u00a0\u00bb augmentent. Il arrive un moment o\u00f9 demander une am\u00e9lioration d&rsquo;un code existant s&rsquo;apparente \u00e0 un pari risqu\u00e9. On finit par utiliser l&rsquo;option d&rsquo;abandon du fichier en cours de GitHub de plus en plus souvent.<\/p>\r\n\r\n\r\n\r\n<p>Finalement, la meilleure parade consiste \u00e0 g\u00e9n\u00e9rer du code sp\u00e9cialis\u00e9 que l&rsquo;on ins\u00e8re manuellement dans le projet. Et l\u00e0&#8230; ne pas avoir de connaissances en programmation rend la t\u00e2che particuli\u00e8rement compliqu\u00e9e. Le mod\u00e8le a beau expliquer ligne par ligne les modifications \u00e0 apporter, si l&rsquo;on ne comprend pas les instructions \u00e0 suivre, continuer devient probl\u00e9matique.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\r\n\r\n\r\n\r\n\r\n\r\n<p>J&rsquo;ai pu produire la majeure partie de mon code avec l&rsquo;aide d&rsquo;un LLM, en particulier les parties les plus importantes, celles pour lesquelles je n&rsquo;avais aucune comp\u00e9tence en JavaScript. Cependant, plus j&rsquo;avan\u00e7ais dans le projet, plus le besoin d&rsquo;effectuer des corrections mineures pour peaufiner le fonctionnement prenait de l&rsquo;importance, et plus les LLM s&rsquo;av\u00e9raient limit\u00e9s pour d\u00e9passer un certain niveau de qualit\u00e9.<\/p>\r\n\r\n\r\n\r\n<p>En revanche, le code g\u00e9n\u00e9r\u00e9 par le mod\u00e8le s&rsquo;est r\u00e9v\u00e9l\u00e9 suffisamment riche et bien structur\u00e9 pour que je puisse prendre la main en fin de projet afin de finaliser certains aspects du jeu que je n&rsquo;arrivais pas \u00e0 faire produire directement par le mod\u00e8le.<\/p>\r\n\r\n\r\n\r\n<p>Il est possible que les LLM finissent par ma\u00eetriser d&rsquo;\u00e9normes projets, mais pour le moment, on constate qu&rsquo;ils souffrent d\u00e8s que les 5 000 lignes de code sont atteintes ou d\u00e9pass\u00e9es. Pourtant, pour d\u00e9marrer un projet, ils sont parfaits. Ils permettent tr\u00e8s rapidement de poser les fondations du code, et ensuite on peut assez facilement se plonger dans le programme pour ajouter ses modifications. Le LLM peut m\u00eame nous aider \u00e0 comprendre les parties du code \u00e0 modifier.<\/p>\r\n\r\n\r\n\r\n<p>Cette exp\u00e9rience r\u00e9v\u00e8le que le \u00ab\u00a0vibe-coding\u00a0\u00bb ouvre des possibilit\u00e9s fascinantes : il permet \u00e0 quelqu&rsquo;un avec des connaissances limit\u00e9es dans un langage sp\u00e9cifique de r\u00e9aliser des projets ambitieux. Mais elle montre aussi que cette approche trouve ses limites dans la complexit\u00e9 et n\u00e9cessite, au-del\u00e0 d&rsquo;un certain seuil, une compr\u00e9hension technique pour aller au bout de ses ambitions.<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p><a href=\"https:\/\/github.com\/clauderouxster\/kriegspiel\/wiki\/A-Vibe%E2%80%90Coding-Experience\">English Version<\/a><\/p>\n<p>Je suis un utilisateur des premiers jours des LLM, depuis 2022 pour \u00eatre exact. J&rsquo;ai d\u00e9couvert la puissance des grands mod\u00e8les de langue en lisant l&rsquo;article \u00ab\u00a0Inner Monolog\u00a0\u00bb qui utilisait l&rsquo;un des premiers mod\u00e8les\u00a0<em>\u00e9duqu\u00e9s<\/em>\u00a0d&rsquo;OpenAI :\u00a0<strong>Instruct-GPT<\/strong>.<\/p>\n<p>Je dois dire que j&rsquo;ai imm\u00e9diatement \u00e9t\u00e9 impressionn\u00e9 par les capacit\u00e9s, pourtant tr\u00e8s sommaires \u00e0 l&rsquo;\u00e9poque, de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9204,13,9857,9489],"tags":[10026,9622,1085,9160],"class_list":["post-144281","post","type-post","status-publish","format-standard","hentry","category-grands-modeles-de-langage","category-intelligence-artificielle","category-jeux-video","category-programmation","tag-claude","tag-gemini","tag-jeux-videos","tag-programmation"],"_links":{"self":[{"href":"https:\/\/www.pauljorion.com\/blog\/wp-json\/wp\/v2\/posts\/144281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pauljorion.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pauljorion.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pauljorion.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pauljorion.com\/blog\/wp-json\/wp\/v2\/comments?post=144281"}],"version-history":[{"count":8,"href":"https:\/\/www.pauljorion.com\/blog\/wp-json\/wp\/v2\/posts\/144281\/revisions"}],"predecessor-version":[{"id":144290,"href":"https:\/\/www.pauljorion.com\/blog\/wp-json\/wp\/v2\/posts\/144281\/revisions\/144290"}],"wp:attachment":[{"href":"https:\/\/www.pauljorion.com\/blog\/wp-json\/wp\/v2\/media?parent=144281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pauljorion.com\/blog\/wp-json\/wp\/v2\/categories?post=144281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pauljorion.com\/blog\/wp-json\/wp\/v2\/tags?post=144281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}