Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Motivation: L’ingĂ©nieur face au dĂ©veloppement des IAs gĂ©nĂ©ratives¶

Il y a quelques mois, les IAs gĂ©nĂ©ratives offraient Ă  peine plus qu’une autocomplĂ©tion basĂ©e sur l’analyse formelle du code. Aujourd’hui, elles semblent capables de dĂ©velopper des applications complĂštes. On s’attend Ă  ce que ces capacitĂ©s se dĂ©veloppent encore exponentiellement.

Face Ă  cette croissance, je me pose des questions Ă  la fois comme ingĂ©nieur et comme CTO de comment intĂ©grer ces outils dans notre quotidien. Il s’agit tout d’expĂ©rimenter, pour limiter la part de fantasme dans les discussions, pour apprĂ©cier en direct l’interaction avec ces outils. Faute de temps, il s’agit d’une expĂ©rimentation partielle dont je n’espĂšre pas tirer une conclusion dĂ©finitive ou scientifiquement rigoureuse, mais j’espĂšre tirer une tendance.

Expérience 1: Script Python et algorithmie¶

L’idĂ©e est d’utiliser l’IA pour rĂ©pondre Ă  une question de dĂ©nombrement: calculer la probabilitĂ© de bombes (carrĂ© ou suite de carte de mĂȘme couleur) dans le jeu de Tichu. Pour cela, j’ai utilisĂ© Antigravity et Gemini 3 Flash

Mon prompt était le suivant:

create a python script managed by UV that computes the probability of a given card combination. The cards are numbered from 2 to 10, J, D, K, A and there are 4 colours: Spades, Hearts, Diamonds and clover, with 4 jokers. A bomb is combination with 4 cards of the same value (e.g. 3 of hearts, 3 of diamond, 3 of spades, 3 of clover) or 5 or move consecutive cards of the same colour. Given that all cards are dealt randomly, what is the probability of the number of bombs in the game ?

L’outil a gĂ©nĂ©rĂ© un plan:

  1. Initialize project with uv

  2. Define the deck and card values

  3. Implement bomb detection logic: Quad detection then Straight flush detection

  4. Implement Monte Carlo simulation

  5. Verify results and format output

L’exĂ©cution du plan a donnĂ© un code fonctionnel et un tableau de probabilitĂ© de bombes dans le jeu de Tichu. La lecture du code Ă©tait claire, sauf pour la partie sur les bombes de suite de cartes oĂč la logique Ă©tait un peu obscure. J’ai donc demandĂ© Ă  l’IA de vĂ©rifier cette partie.

A ma grande surprise, l’IA n’a pas fourni d’explication sur le code mais a dĂ©clarĂ© avoir dĂ©tectĂ© une erreur de logique: le fait que son code comptait comme plusieurs bombes des bombes qui partagaient les mĂȘmes cartes et le fait qu’une suite de 10+ cartes Ă©tait considĂ©rĂ©e comme une bombe alors qu’elle pouvait constituer plusieurs bombes.

Le code corrigĂ© Ă©tait encore plus obscur, avec notamment une fonction rĂ©cursive pour trouver les ensembles disjoints. Que faire alors pour s’assurer du fonctionnement ? J’ai demandĂ© d’ajouter des tests.

AprĂšs une passe de refactoring pour utiliser pytest au lieu de unittest, il s’est avĂ©rĂ© que les tests Ă©taient incorrects. J’ai prĂ©fĂ©rĂ© manuellement les corriger pour m’assurer de la cohĂ©rence. En revanche, je n’ai pas investiguĂ© l’implĂ©mentation de la logique de comptage de bombes.

J’ai lancĂ© un nouveau planning pour ajouter le calcul dans le cas du jeu Ă  6.

Add an option to the script to evaluate a 6 player deck. We add for each value 2 cards. Suits are alternated so that we add hearts and clovers for even cards (2, 4, 6, 8, 10, D, A) and diamonds and spades for odd cards (3, 5, 7, 9, J, K)

A nouveau, surprise, l’IA m’a demandĂ© de clarifier le nombre de cartes donnĂ©es aux joueurs. En effet, ayant oubliĂ© de lui prĂ©ciser qu’on ajoutait 2 jokers, on se retrouvait soit Ă  donner un nombre inĂ©gal de cartes entre les joueurs soit Ă  devoir laisser des cartes non-distribuĂ©es.

Une fois l’information donnĂ©e, la gĂ©nĂ©ration du code s’est passĂ©e sans encombre. J’ai rajoutĂ© Ă  la main les tests pour tester l’absence de couleurs rĂ©pĂ©tĂ©es dans les bombes de 4 cartes.

Leçons:

  1. Les capacitĂ©s de rĂ©flexion et de gĂ©nĂ©ration m’ont agrĂ©ablement surpris. L’IA a Ă©tĂ© capable de relever des cas limites non triviaux (bien que pas forcĂ©ment compliquĂ©s).

  2. IntĂ©grer l’écriture de tests dans le plan initial et bien relire les tests.

  3. Le code généré peut devenir vite complexe et donc difficile à adapter par un humain.

Un tel code a clairement sa place en tant que prototype, mais c’est plus tangeant pour un code en production Ă  maintenir et Ă  faire Ă©voluer. En effet, pour faire Ă©voluer un tel code, on serait soit contraints de recourir Ă  l’IA soit de dĂ©penser un effort consĂ©quent pour comprendre l’implĂ©mentation. Dans les deux cas, une sĂ©rie de test sur le domaine de validitĂ© des entrĂ©es semble de mise alors que lors d’une Ă©criture manuelle, cette rĂ©flexion est souvent intĂ©grĂ©e dans l’implĂ©mentation (bien que souvent implicite).

Expérience 2: Application web¶

Cette fois, je m’intĂ©resse Ă  la crĂ©ation d’un application web par l’IA. Remarque prĂ©liminaire: je n’ai pas de connaissance en dĂ©veloppement web (Ă  part quelques notions).

Aprùs plusieurs essais d’outils, je me suis à nouveau rabattu sur Antigravity:

  1. Zed n’arrivait plus à se lancer aprùs l’installation de l’extension Mistral.

  2. VS Code avec le plugin Continue.dev semblait produire des plans intĂ©ressants mais le mode d’exĂ©cution n’était peut-ĂȘtre pas bien compatible avec Devstral.

  3. Mistral Vibe CLI Ă©tait trop lent, rien que pour initialiser un projet. Cela dit, c’était peut-ĂȘtre dĂ» au faible dĂ©bit de ma connexion au moment des tests.

Mon objectif Ă©tait de crĂ©er une application permettant de noter des scores de Tichu. Mon premier prompt dĂ©crivait les diffĂ©rentes vues que j’imaginais de l’application (page de score par parties, leaderoard, etc.). L’IA a proposĂ© un plan d’application sur lequel je l’ai lancĂ©e sans trop rĂ©flĂ©chir.

Le rĂ©sultat Ă©tait Ă©tonnamment bon: L’application Ă©tait relativement fonctionnelle. Mais lorsque j’ai souhaitĂ© faire des changements qui me semblaient relativements mineurs comme ne pas afficher le leaderboard sur la page d’accueil, l’IA a eu du mal Ă  faire les modifications sans casser l’application (le debug visuel du rendu du navigateur, bien qu’impressionnant reste assez lent).

L’approche qui a fonctionnĂ© aprĂšs plusieurs essais similaires a Ă©tĂ©:

  1. De spécifier les contraintes (comme les rÚgles du jeu) dans un fichier plutÎt que dans le prompt. Cela permettait notamment de ne pas avoir à le réécrire à chaque fois.

  2. De planifier une architecture d’application et de demander Ă  l’IA de l’implĂ©menter au fur et Ă  mesure: en commençant par exemple par le backend avant de passer au frontend. Sur le frontend, je me suis appuyĂ© sur les explications de l’IA pour essayer de palier mon manque de connaissance avant de lancer une implĂ©mentation.

L’IA a faillit se perdre Ă  un moment, une modification qui me semblait simple a dĂ©clenchĂ© l’ajout d’un endpoint. Peut-ĂȘtre que passer Ă  un modĂšle plus performant aurait pu accĂ©lĂ©rer la reprise en main.

Au final, faute de temps, l’application est Ă  80% finie. Il manque quelques fonctionnalitĂ©s et je n’aurai aucune confiance Ă  la dĂ©ployer en l’état.

Je tire de cette expĂ©rience le sentiment que les pratiques d’ingĂ©nierie logicielle sont essentielles pour que l’IA puisse ĂȘtre utile. Il reste (aujourd’hui) un fort besoin de cadrage et de supervision humaine.

Bilan: Productivité et souveraineté¶

A suivre ...

Un large merci Ă  Logic Inc. pour leur article Codex is a Slytherin, Claude is a Hufflepuff qui m’a poussĂ© Ă  Ă©crire ce billet.