Me baladant sur Reddit pour avoir ma source de dopamine quotidienne, je suis tombé sur un post supposant que ChatGPT, notre leader a tous, allait nous remplacer, pauvres développeurs que nous sommes. Quel est le point faible de cette intelligence, plus artificielle qu’intelligente?
Soyez rassuré, l’I.A. n’a pas encore tout a fait gagné. En effet: elle ne répond qu’à nos questions. Chance pour nous, nos questions sont souvent bêtes. Voyons ensemble ce qu’est le problème XY, et en quoi ChatGPT y est vulnérable.
Sommaire
L’art de poser des questions intelligentes
Supposons le scénario suivant: vous êtes administrateur de site web et travaillez avec des fichiers d’images: PNG, JPG, BMP, GIF, ICO…
Afin de réaliser des statistiques sur les différents formats utilisés, vous créez un script, suivant cet algorithme:
- On récupère les noms complets de nos fichiers (a.png, b.jpg, c.png) ;
- On prends les 3 derniers caractères de chaque nom (png, jpg, png) ;
- On dénombre la présence de chaque extension ({ png: 2, jpg: 1 }) ;
- On affiche le résultat. (Nous avons 2 png, 1 jpg)
Trou de mémoire, vous avez oublié comment récupérer les 3 derniers caractères d’un fichier. C’est le drame. Vite, dirigez-vous sur ChatGPT et demandez à sa seigneurie comment faire.
const str = "votre_chaine";
const lastThreeChars = str.slice(-3);
console.log(lastThreeChars);
Et vous voilà parti. Cette fois le code coule à flot. Vous ne vous en rendez pas encore compte, mais le piège s’est refermé. Vous êtes victime du Problème XY. Regardons votre script.
// On récupère les noms complets de nos fichiers (a.png, b.jpg, c.png, ...)
const files: string[] = getImageFiles();
// On prends les 3 derniers caractères de chaque nom (png, jpg, png, ...)
const extensions = files.map(filename => filename.slice(0, -3));
// On dénombre la présence de chaque extension ({ png: 2, jpg: 1, ... })
const result = countExtensions(extensions);
// On affiche le résultat (Nous avons 2 png, 1 jpg, ...)
printResult(result);
Et son résultat:
- 8 png ;
- 4 jpg ;
- 7 bmp ;
- 4 peg ;
- 5 ico.
Si a première vu ce résultat semble correct, vous remarquez quelque chose d’anormal: vous avez 4 fichiers peg. Peg? Ce mot vous dit quelque chose. Pourtant, ça ne devrait pas être là!
Vous réalisez le désastre: ces fichiers peg sont en réalité les 3 derniers caractères de l’extension « jpeg », une autre dénomination du jpg. Catastrophe! Dans la précipitation, vous avez oublié que les extensions ne font pas forcément 3 lettres. Le problème XY se moque bien de vous. Essuyez vos larmes, nous allons apprendre à déjouer ses tours.
Mais alors c’est quoi le Problème XY?
Le Problème XY, c’est poser une question sur notre solution tentée (Y), plutôt que sur le problème originel rencontré (X). On peut perdre beaucoup de temps, car les personnes qui nous aident vont se concentrer sur notre solution, parfois mauvaise, plutôt que sur le problème de base, auquel la réponse a peut-être été trouvée.
Étudions notre cas; remontons le temps et trouvons avec précision le moment où nous avons eu affaire au problème XY. Voici comment s’est déroulée la scène:
- Nous avons eu l’idée d’écrire un script pour avoir des statistiques sur nos fichiers d’image ;
- Nous avons rédigé ce script et fait un mauvais choix algorithmique (récupérer les 3 derniers caractères) ;
- Nous avons demandé à ChatGPT comment récupérer les 3 derniers caractères d’un fichier ;
- Nous avons joué notre script et réalisé le souci.
On pourrait croire que le problème XY se trouve lors de notre mauvais choix algorithmique: ce serait faux. En regardant de plus près, on se rend compte que le réel souci est notre manière de poser la question à ChatGPT. Nous avons demandé comment appliquer notre solution, plutôt que demander comment répondre au problème originel (obtenir l’extension d’un fichier).
Comment s’en prémunir ?
Maintenant que nous savons ce que c’est, comment pouvons-nous éviter ce problème XY? Les outils d’intelligence artificielle comme ChatGPT n’ont souvent pas moyen de détecter qu’on ne pose pas la bonne question. Déjà, pour un humain, c’est pas toujours facile.
Il faut simplement prendre du recul. Lorsque l’on pose une question, on va simplement ajouter du contexte (je souhaite faire X). Souvent, cela suffit à une intelligence artificielle.
Lorsque l’on s’adresse à d’autres personnes, cependant, on va également écrire la solution qu’on désire mettre en place (j’ai tenté Y). Si elle n’a pas fonctionné, on peut expliquer la raison de son échec.
En appliquant tout ceci, déjà ça fait moins quémandeur, parce qu’on a proposé une solution. En plus, notre problème est parfaitement clair et accessible, et si on se trompe de voie, on peut tout de suite être corrigé. Souvenez-vous: si vous aviez raison depuis le début, vous ne seriez pas en train de demander de l’aide.
Voilà comment peut se tourner la scène, en étant conscient de ce problème.
function getFileExtension(filename: string): string {
const parts = filename.split('.');
return parts.length > 1 ? parts.pop() || '' : '';
}
Ce précieux conseil vous aidera à en obtenir davantage de l’intelligence artificielle, et à avoir des discussions bien plus productives avec vos collègues. Alors on applique: contexte, solutions, détails.
Est-ce réellement un problème ?
Cela étant, on peut se demander si ce problème en est réellement un. Il faut savoir prendre suffisamment de recul: qu’est-ce qui nous a amené à choisir la solution Y, dans un premier temps? Des contraintes légitimes peuvent exister. Une image connue illustre parfaitement ceci.
En ajoutant du contexte, on peut expliquer pourquoi on s’oriente sur telle ou telle solution. Peut-être que le projet est dans une très vieille version de PHP, et que vous n’avez pas accès à certaines solution. Ou bien, votre patron veut absolument utiliser une méthode et vous êtes contraints de vous plier.
Avec suffisamment de contexte, vous vous protégerez de vous-même, mais aussi des autres, qui pensent tout savoir mieux que vous, cette bande d’hautains. Ils devront s’adapter à vos critères.
La solution XY: et si c’était une bonne chose, en fait?
Et si l’optimisation de temps n’est pas la seule chose à prendre en compte? Il est également important de comprendre pourquoi notre solution apportée n’était pas nécessairement la bonne. Ou si elle est en effet la bonne solution, nous devons savoir pourquoi. Avoir d’autres points de vue.
C’est en ça que l’intelligence artificielle peut être dommageable pour notre capacité à résoudre des problèmes: puisque l’on a pas besoin d’apporter nos solutions, nous sommes moins à même de résoudre un souci nous-même.
C’est également la raison pour laquelle il est important de poser les solutions essayées lorsque l’on demande de l’aide: on aura une base de réflexion, et on apprendra davantage. Se faire démolir ses solutions, ça fait pas de mal.
Le mot de la fin
En bref, il est important de savoir comment demander de l’aide. Le format d’une question n’est pas anodin, et vous progresserez bien plus vite dans votre carrière, et dans votre vie en général, si vous respectez cette règle simple: contexte, solutions, détails.
Je vous laisse avec une citation qui m’a bien fait rire en faisant mes recherches:
The easiest way to get to the real problem is usually asking Why five times.
Gordon, Oct 21, 2012 at 17:25
(La manière la plus simple d’arriver au coeur du problème, c’est demander « Pourquoi? » cinq fois.)
Sources
- Le site xyproblem, qui a été une source utile d’exemples du Problème XY.
- Le problème XY sur StackOverflow, donnant nombre d’exemple également.