Et c’est reparti pour un article sur le vibe coding de la nouvelle version de l’App Rage !
Dans notre épisode précédent, j’avais enfin réussi à faire programmer à Claude AI une interface à peu près potable pour le jeu de cartes intégré à l’App, et j’étais donc en train de le déboguer. Hé bien après des semaines de déboggage (mais comment il s’écrit, ce mot, à la fin ?!), le jeu est fonctionnel ! Je ne vois plus de bugs pour le moment, et je vais enfin m’attaquer à l’optimisation de l’interface… et ensuite à la mise à jour de cette application avec de nouvelles fonctionnalités (dont je vous parlerai dans un autre article).
Mais ça n’a pas été sans mal.
Pour vous citer quelques exemples :
J’ai demandé à Claude AI un truc simple : tu mélanges 18 cartes et tu les répartis dans 3 tas de six cartes. Alors, il a mélangé les 18 cartes, et il en a distribué 6 dans un premier tas, puis il a mélangé les 18 cartes et il en a distribué 6 dans le deuxième. Même chose pour le troisième. Mais comme évidemment, je ne l’avais pas vu venir, j’ai commencé à tester le jeu, et je me suis retrouvé avec des cartes en double. Du coup, comme je commence malgré tout à le connaître, j’ai compris immédiatement (cette fois…) comment il avait raisonné, et je lui ai écrit un truc du genre « Alors non, tu mélanges les 18 cartes une fois, et ensuite tu distribues le résultat dans les trois tas. Et tu ne distribues pas 6 des 18 cartes dans chaque tas. Une fois que le premier tas de 6 cartes est constitué, tu distribues LE RESTE dans le deuxième, et après, heu… pour le troisième… heu… bon allez, je vais me coucher, et on reprend demain. » Bon, j’affabule un peu à propos de ma réponse, mais le problème s’est réellement posé.
Evidemment, comme les deux joueurs doivent commencer à égalité, le code du joueur 1 doit être similaire à celui du joueur 2. Dans un tel cas, l’idéal, c’est de créer un framework (un cadre applicatif commun) auquel les parties communes du code du joueur 1 et du joueur 2 pourront faire appel. L’idée, c’est d’avoir le moins de lignes de code redondantes possible et de pouvoir corriger les erreurs une seule fois au lieu de deux. Donc je le lui ai demandé, il m’a créé un framework, et comme j’ai l’habitude de travailler avec Claude, je lui ai demandé après coup s’il pouvait analyser le code pour vérifier si le framework avait bien été implémenté. Il a commencé à chercher, puis s’est arrêté en cours de route (sans raison, puisque j’avais assez de jetons). Je l’ai relancé, il s’est arrêté de nouveau, je lui ai demandé pourquoi, et il m’a répondu qu’il n’avait pas assez de mémoire pour la recherche. Je me suis dit, « OK, il sait qu’il s’est planté, et il essaie de jouer la montre » ce qui n’est pas forcément vrai, mais bon, c’est ce que je me suis dit. Donc, j’ai changé de stratégie, j’ai testé le jeu, j’ai repéré un bug, je lui ai demandé de le corriger et d’en profiter pour vérifier s’il ne trouvait pas de trace de l’ancien code avant la création du framework. Et là, il a vérifié et m’a confirmé que le code de l’un des joueurs utilisait bien le framework, mais pas celui de l’autre. Donc, après avoir résolu le bug, il m’a dit que le jeu était fonctionnel et que j’avais le choix entre le laisser comme ça ou modifier le code de l’autre joueur pour qu’il utilise lui aussi ce fameux framework… « Ben non, on va pas laisser le code comme ça… On le met à jour pour que les deux joueurs utilisent le framework. Et profites-en aussi pour vérifier encore s’il n’a aucune trace de l’ancien code, au fait, tant que tu y es… Juste au cas où… »
Au fur et à mesure, on y est arrivé.
On est parti d’une application que j’avais programmée à l’origine en Objective-C, et au lieu d’une simple mise à jour du code original en Swift (bon j’écris « simple », mais c’est un peu compliqué quand même), je me suis retrouvé à faire le retro-ingeneering de ma propre application parce qu’en vibe coding, c’était pratiquement la seule option…
Bref, le vibe-coding, ça revient un peu à monter des escaliers interminables, voir enfin le bout de votre périple, vous faire casser la gueule avant de l’atteindre, dégringoler une bonne partie des escaliers, vous relever et remonter jusqu’à ce que vous arriviez au sommet (je crois qu’on a écrit sur cette base de nombreuses scènes de Saint Seiya et John Wick). Du coup, quand on commence un projet, c’est littéralement impossible de prévoir quand on va le terminer. Trop de variables comme on dit chez les programmeurs.
La suite au prochain numéro.
Pour conclure en changeant de sujet, mes livres ne sont toujours pas de retour sur Amazon, et restent donc complètement censurés à cause d’un crime abominable que le support technique de Kindle ne peut pas me révéler parce que c’est un secret. Tiens, ben ça me fait penser qu’il faut que je leur envoie une petite relance pour les emmerder un peu.
Allez, je vous laisse avec trois de mes livres qui ne sont pas Amazon-Approved. Pas la peine d’essayer de les acheter sur Amazon, ils se sont faits virer par la Police des Livres. Juste par souci d’exhaustivité, j’ai ajouté Hitman 18, avec la première apparition de Bueno Excellente, un personnage de l’équipe de super-héros Section 8 qui combat le crime avec le pouvoir de la sodomie. J’aurais bien aimé savoir ce que l’IA d’Amazon pense de ce personnage qui n’est pas présenté comme un héros, mais dont on peut quand même supposer par défaut qu’il en a le titre. Je n’en aurai pas l’occasion, déjà parce que le support technique de KDP ne me le dira pas, mais surtout parce que les comics édités par DC n’ont probablement pas été inclus aux paramètres de leur IA.
Et j’en profite pour ajouter ceci : « En tant que Partenaire Amazon, je réalise un bénéfice sur les achats remplissant les conditions requises ». Donc si vous avez envie d’acheter Hitman 18, mais que vous n’avez pas envie que je sois rémunéré en tant que Partenaire Amazon suite à votre achat, n’hésitez pas à vous connecter directement à Amazon et faire une recherche pour vous le procurer. C’est à cette adresse : https://www.amazon.fr



