AI Worst Case – Expérience développeur & appréciation de la conjoncture

Beaucoup de mots barbares en titre, sujet intéressant tout de même.
J’ai fait ce blog à la base pour partager cela car je n’avais pas envie qu’il se perde au fin fond d’un Notion/Outline ou bloc note aléatoire.

Ce que je vais tenter de décrire ici est assez personnel, donc peut-être difficile à visualiser. Je vais tenter autant que faire ce peut d’être intelligible, bien que je ne sois pas le plus à l’aise lorsqu’il s’agit de parler de soi par écrit. Donc garanti 100% humain-powered mais stupid-powered aussi.

Aux origines de mon aventure tech

J’ai commencé à m’interroger sur mon métier à partir du lycée surtout, ça semblait plus utile que de manger mes feutres, j’ai donc creusé la question tout bêtement en classant mes matières préférées du moment. Nouveau bac facilite, si je trouve mes matières de coeur je pourrai plus facilement me spécialiser. Donc, pas de métier précis en tête, juste se laisser porter en naviguant sur le flot de ce qui me plaisait.

L’évidence se révèle : j’aime les maths, j’aime le code (un peu d’expérience de terrain même à cette époque, merci Minecraft). En général j’aime les sciences dures mais en pesant le pour et le contre, notamment en première lorsqu’il fallait lâcher une des 3 spés pour continuer, j’avais une préférence pour les disciplines “logiques”.

Un bon exemple de ce que j’aime : une formule de maths bien moche, bien pleine de lettres et de signes inquiétants – je me creuse la tête, je simplifie, je transpose, je résous et le résultat tombe : 1/2 ou -1/2, ou des réponses du genre “la droite x = 0 est une asymptote verticale à C”. Des résultats nets, précis.

Un bon exemple de ce que j’aime pas : un problème de physique-chimie appliquée, genre réaction chimique. Des formules simples mais un résultat qui ressemble à la fin à 3.456×10^-24 cm3/dB, non merci.

En ce sens, passer des maths à l’informatique coulait de source car on se forme avant tout sur des problèmes algorithmiques et les solutions sont généralement aussi satisfaisantes que celles en mathématique. En somme j’aimais deux choses : un problème auquel apporter une solution, et réaliser des solutions propres qui nécessitent connaissance et réflexion, se crozet les ménages.

Formation et anticipation

En continuant en étude supérieure dans cette voie j’avais hâte de voir ce que le taff me réserverait, dès la première année. J’avais envie de simplement coder et créer des trucs, dans la continuité de tous les petits projets persos que j’ai à droite à gauche. En outre j’ai une très bonne capacité de résilience, affinée d’année en année en me rapprochant du cadre professionnel. Je savais bien que l’idée que je me faisait au lycée ou à l’école du métier ne serait pas forcément effectif alors j’accepte et je reste attentif aux changements.

Je pense que c’est comme cela que j’ai pu rapidement m’intégrer au milieu startup, qui comporte pas mal d’enjeux que je ne concevait pas forcément au lycée. Le plus important de tous étant l’efficacité et la rentabilité (ben sinon ça coule et on est tous à la rue donc code vite). En soit tous ces changements de perception du métier se sont intégrées plutôt naturellement à mes routines car déjà bien conscient assez tôt de la différence entre coder pour soi et travailler dans le code. Aucune notion de rentabilité et d’efficacité n’entamait mon plaisir de résoudre un casse-tête lors du traitement d’un bug ou le kiff de la création quand je fais une nouvelle feature. Au contraire c’est plutôt stimulant d’avoir un cadre, c’est un défi à surmonter.

“Si tu dois être un dev entouré d’un tas de contraintes, sois un bon dev entouré d’un tas de contraintes”
– Epictètes (s’il eût été dev)

L’écosystème IA ne m’a donc pas fait plus peur que ça. Son arrivée au pouvoir n’a rien d’étonnant, bulle ou pas, nos concurrents font de l’IA, tout le monde fait de l’IA, si tu fais pas d’IA tu te fais manger par quelqu’un qui fait de l’IA jusqu’à ce que la bulle éclate et c’est assez peu probable. Donc normal, on va iater par-ci par-là, les années précédentes on a délaissé les docs pour ChatGPT et de plus en plus on laisse la main aux agents intégrés. Cela s’intègre peu à peu à nos routines, ce qui m’amène à parler de ce que j’appelle le “pire cas IA”, un phénomène qui m’est arrivé cette semaine et si soudainement sans que je le vois arriver, qu’il m’a durablement marqué et pour un bon bout de temps.

C’est quoi un pire cas ?

Quand je parle de pire cas, c’est plutôt sous un angle déterministe. Si je fais cette action, quel est le meilleur cas, quel est le cas moyen, quel est le pire cas – par exemple. Et pour bien comprendre le pire cas IA, parlons du pire cas avant l’IA.

Développer un code, à mes yeux c’est comme des maths. Il va y avoir les solutions tellement évidentes qu’on se presse d’écrire pour vite tomber sur le résultat, il y a les problèmes complexes qui demandent simplement du temps, et on arrive donc au pire cas : un problème se dresse et on tourne en rond, la lecture est difficile, la solution ne marche pas. Quand on est un peu con comme moi ce genre de cas peut prendre plus ou moins de temps à résoudre car on se rend pas forcément compte tout de suite de la taille du mur qui se trouve devant nous mais on y vient systématiquement. Et quelle solution à ça ? Généralement, c’est dû à un manque de connaissance sur cette partie du code, sur cette logique, ou alors les specs initiales étaient pas assez claires, ou des fois juste c’est RTFM car j’ai écrit n’importe quoi sans m’en rendre compte.
Toutes ces solutions sont “finies” et en soit elles sont compréhensibles. Je connais encore mal le sujet ou j’ai mal préparé ou on m’a mal communiqué les choses, soit. Je sais qu’en reprenant je m’en sortirai et mieux encore, je pourrai retomber sur un problème similaire plus tard et y arriver avec moins de difficulté que la première fois.

De l’IA et son lot de changements

L’arrivée de l’IA générative et notamment depuis qu’on se rend compte qu’elle sait coder a apporté pas mal de changements, surtout dans le cadre des études où on est censé être en apprentissage constant, cette arrivée brutale a poussé beaucoup à ralentir l’apprentissage classique au profit de déléguer à l’IA. On a vu cela de façon flagrante l’année dernière où le tiers des devs de la promo ne codent plus (certains parti carrément dans un autre mastère). La “faute” à l’IA, oui en quelque sorte car à force d’habitude de l’utilisation, on ne ralentit pas, on désapprend. La moindre question ou difficulté, on passera par notre modèle chéri. C’est quelque chose que je ne comprenais pas encore tout à fait car moi-même j’utilisais très peu ces outils, m’étant habitué à farfouiller les docs j’étais un peu plus vieille école à ce moment là.

Mais voilà. Plus récemment la cadence de travail s’est accélérée et de fait, j’ai vu une volonté grandissante de faire binôme avec du LLM pour augmenter la productivité. Chouette, me disais-je, l’occasion pour moi aussi de tester ce dont tout le monde parlait mais que je n’ai jamais expérimenté jusque là, les agents IA qui vont venir fouiller ton code et écrire dedans. Comme dit précédemment je l’utilisait dans un premier temps pour trouver plus facilement les sources des problèmes, donc ok ça il le fait mieux que moi. Des tests à réaliser ? C’est répétitif, l’IA doit savoir faire, ça part. Oh allez, la correction a l’air facile ici, on va demander à Claude. Un simple refacto ? Du code à réécrire ça semble pas insurmontable pour l’IA.

Peu à peu je fusionnais peu à peu l’IA dans toutes mes tâches si bien que je passais plus de temps à surveiller et relire qu’à réellement coder. Durant une semaine d’enchaînement de bugs je ne pense pas avoir écrit plus de 50 lignes par moi-même. Et le fait est que j’avais des doutes. La question commençait à apparaitre : j’étais efficace mais à quel prix ? Je commençais à douter de la pertinence des codes que j’envoyais mais de tous les retours que j’avais dessus, c’était du bon travail ! J’ai donc continué sur ma lancée. La semaine suivante : école. Sujet complexe, écriture de code pour un robot sur l’architecture ROS2, la dernière fois que j’en ai fait c’était il y a 6 mois, c’était pas un super souvenir, j’ai pas eu mon café, c’est mort. Je lance Claude sur le sujet une nouvelle fois et il est tout aussi pertinent que la semaine passée. Encore une semaine sans coder, à parler avec Claude en pariant sur le résultat.

Le pire cas IA

Tout le contexte est en place, je pense que vous sentez où je veux en venir à ce stade.

Un sujet de bug tombe, un gros problème difficile à identifier, se situant dans un code qui mériterait une réécriture, le tout sur des mécaniques que je ne maîtrisais pas.

Par habitude maintenant, je lance Claude sur le sujet, c’est long car complexe donc je prends le temps d’expliquer. À ce stade c’est un sujet comme un autre alors je fais d’autres tâches de fond, j’envoie. On me fait un premier retour, la solution n’a rien résolu. Je me repenche dessus, je relance claude avec ces instructions-là et corrigées, une fois, deux fois, j’essaie de lui donner plus de contexte sur l’objectif en lui décrivant ce que je comprenais du code. Trois fois, Quatre fois. Et on recommence.

Un cas simple pas vrai ? Mécaniquement quand je vois que c’est vraiment galère je me pose, un peu saoûlé, me disant “bon on va passer en mode manuel, ça ira plus vite”. Puis je relis le code. Je pense que c’est la première fois depuis des jours que je lis véritablement quelque chose, et je ne saisis rien de ce que je vois. Avez-vous déjà eu cette sensation bizarre en butant sur la lecture d’un texte, de voir les mots mais d’être incapable de lire la phrase ? Et bien sûr, cette sensation désagréable s’intensifiait d’autant plus que je réalisais que ma première envie à ce moment là était de rallumer Claude, comme un gamin à qui on a retiré sa tétine. Je ne me suis strictement jamais retrouvé devant un code ou un algorithme sans savoir le relire, même lorsque celui-ci utilise des mécaniques que je ne comprends pas tout à fait. Il reste des amorçes où s’ancrer dans la compréhension. Là, plus rien. En 2 semaines seulement j’avais perdu mes moyens l’espace d’un instant. Le vide, abyssal et terrifiant.

J’ai eu besoin de plusieurs longues minutes et d’un collègue attentif pour me sortir de ce puis sans fond, et plusieurs essais pour le formuler correctement.

Ce que j’appelle le pire cas IA n’est pas ce résultat. Je pense que ma réaction a été assez extrême surtout car je n’y étais pas préparé du tout. Mais c’est en obtenant ce résultat que j’ai pu mettre les mots dessus :

Souvenez-vous de ce que je proposais sur le pire cas “logique”. Des acteurs tangibles, et généralement la faute à soi-même et au manque de connaissance à la base. Mais dans notre cas, si une solution n’est pas bonne, voici les possibilités qui s’ajoutent : le LLM s’est perdu en route, le LLM a pas/mal lu la doc, le LLM a mal compressé ses token et perdu du contexte, l’explication que j’ai fait au LLM est mauvaise, le LLM que j’utilise n’est pas le meilleur pour la tâche que je veux faire… Et on peut ajouter à ça le biais assez classique des modèles qui consiste à aller systématiquement dans ton sens, ce qui le perdra encore plus car il tordra à la fois ta demande et la doc sur laquelle il est entrainé. Autrement dit, même si j’avais repris Claude pour tenter une énième fois de résoudre le problème, j’aurai été tout aussi incertain du résultat final, que cela vienne de l’IA ou de moi.

La suite

Toute cette expérience négative a été d’autant plus amplifiée lorsqu’après coup j’ai pris le temps de revenir aux fondamentaux (doc, tests, itérations, classique quoi), je me suis rendu compte de tous les automatismes que j’ai perdu à force d’être backseaté par un LLM.

Rien dans mon apprentissage et mes expériences n’aurait pu me préparer à un tel crash mental. De résolveur d’énigme j’étais passé à directeur. Et quand bien même, j’aime bien le lead, mais je suis plus formé à leader des gens, avec des mécanismes et des biais que je connais. Se faire chef d’agents IA, aujourd’hui, est encore bien loin d’être chef d’équipe. On arrive au classique “c’est pas ce qu’on m’avait vendu” au final, moi qui misait beaucoup sur ma résilience et ma capacité d’adaptation, je gardais quand même au dessus la volonté de produire, et plus que ça, de produire avec créativité et amusement.

Le constat se fait d’autant plus amer quand on en revient à l’arrivée de l’IA dans les entreprises et notamment les startups. Après tout ça, je vais devoir rallumer Claude,  et je vais devoir m’adapter en continu pour ne pas perdre le fil. Et rien ne sert de changer d’environnement, tout se démocratise, pas par volonté mais par pure logique concurrentielle. Changer d’entreprise n’y changera rien à moins d’aller dans une vieille entreprise de logiciels miteux, et j’y perdrai de toute façon tout ce que j’aime là où je suis, y compris tout ce qui n’a rien à voir avec le code.

Je reste optimiste pour la suite, car je l’ai finalement eu ce bug de con, mais j’y ai perdu temps et larmes. Le pire cas tech, je m’y attendais et il me paraissait comme un défi ultime. Le pire cas IA, en plus de ne pas l’anticiper du tout, il me rappelera par sa simple manifestation tout ce que j’aurai perdu en chemin, pour la gloire de l’efficacité et de la rentabilité : l’apprentissage continu, prendre le temps de bien faire et bien saisir, passer un obstacle par moi-même.

En résumé c’est la faute au capitalisme, raser l’élysée vaporiser macron plus de frites à la cantine (évidemment non, et bien souvent c’est parce que je me fixe moi-même des objectifs d’efficacité bien trop hauts).

Même si il est en soit logique de tomber sur ce genre de problème, à force de faire joujou avec l’IA au lieu de relire une documentation, et bien que j’en sois sorti sans trop perdre de plumes, je met quand même une première pièce dans le bocal. Je ne sais pas ce que je ferai quand celui ci sera plein, je ne sais même pas quelle taille il fait, mais il a le mérite d’être le premier gros désaccord que j’ai avec ce que devient le métier de développeur. J’aime quand 1 + 1 = 2, moins quand 1 + 1 = token limit reached, reset at 5pm.