Comment l'IA a guéri mon syndrome de l'imposteur

essai.book.html

Advent of code, IA et guérison du syndrome de l’imposteur

Si coder c’est pisser de la ligne, alors il est évident que le codeur n’a plus sa place en entreprise, et vous allez voir pourquoi.

En tout cas c’est ce que les bro-techs prétendent

Le code que l’on pond pour Advent of code

Si vous ne connaissez pas advent of code je vous conseille cet excellent exercice consistant à résoudre un puzzle par jour (peu ou prou) : c’est très amusant.

Moi-même, je n’arrive pas à faire plus des 4/5é des puzzles et j’en suis satisfait : les problèmes ne sont pas triviaux, par contre, ils sont bien posés avec souvent un jeu de test pour les gros problèmes, et ça me permet d’apprendre des choses soit dans le processus par essai erreur, soit en échouant misérablement et tentant de comprendre les réponses.

Et, il y a quelques points communs entre mes réponses et ceux des autres, et des divergences flagrantes avec du code d’entreprise : nos productivités sont décuplées, et nos réponses sont compactes.

Ce n’est pas uniquement pour le plaisir de golfer pour certains mais aussi, car le code le plus compact est plus facile à comprendre. Lire 300 lignes en java ou 10 lignes en python/Perl, ce n’est pas la même charge cognitive pour faire le job.

En ceci, avec advent of code, cela expose quelque chose de fondamental dans le code de bourrinage : il ne s’agit pas de faire du code maintenable lisible, mais du code performant au risque de dégrader la maintenabilité, la lisibilité, le bon style (d’un code solo pour un jour non réutilisable).

Les rares études chiffrées du paléolithique informatique faisaient état d’un paradoxe propre au code : quand on donne 5 axes de priorisation du code possible : performance, lisibilité, maintenabilité, concision et 1 autre que j’ai oublié, les équipes les plus performantes arrivent à en tenir au maximum 2. Là, on est dans un cas où la performance compte, car certains problèmes ne consistent pas à avoir la solution, mais à l’avoir en moins d’une journée, et même en brute forçant, je vous garantis que ça demande du savoir faire acquis chèrement en écrivant du code de pompier pour sauver la prod à l’arrache à chaud.

Est-ce que j’aurais pu vibe coder ?

Oui, mais non. Le code est mon plaisir, je ne vais pas déléguer à une IA le fait de pondre ce qui m’amuse.

Pour parler métrique, j’ai pondu entre 2 et 100 lignes de codes par jour pour advent of code. Pourquoi pas plus ? Ben, parce que le but du jeu, c’est de donner une réponse en codant, pas de coder le plus possible. Voire, pour éviter les bugs de coder le moins possible.

Le code que l’on pond en entreprise

Ai-je dit qu’advent of code c’était vraiment un truc plaisant, et qui vous traumatise en même temps qu’il vous amuse ?

Oui, il vous traumatise, car parfois même avec le code de soluce, vous ne voyez pas comment marche la solution. Et, c’est un grand moment de doute qui m’a étreint malgré ma satisfaction d’être un poil au-dessus de la moyenne.

En entreprise, on ne cherche pas des rocks stars du code pour coder ; au contraire et ce n’est pas par volonté de dénigrement de mes collègues et/ou de moi-même.

Tenez, j’ai du code qui se fait systématiquement sauter en entreprise car plutôt que de passer par des objets, j’aime faire des compréhensions de trucs, et chaîner en « one liner » des [map, reduce, filter] (https://www.cosmiclearn.com/lang-fr/python-filter.php)(je vous ai choisi un site concis avec les couleurs criantes du web des années 90, trollolol). C’est un pattern (schéma mental) qui vient des langages fonctionnels et que j’ai embrassé.

Ben, ce n’est pas un pattern partagé avec la majorité de mes collègues python d’entreprise. Dont la plupart ne perdent pas des heures entières en décembre à se crapahuter les neurones sur leurs temps libres. Parfois, ces gens ont une vie, et c’est tout à fait normal. Et ils doivent maintenir le code. Et dans le code, il y a un autre pattern qui est préféré par mes collègues pas tellement plus long, mais bien compris.

Vous, chef de chantier informatique, vous voulez 10 piliers identiques à votre système d’information, ou 9 piliers faciles à maintenir et une petite merveille que personne sauf vous peut réparer ?

C’est vite répondu.

Et croyez-moi, étant dyslexique, je fais littéralement une faute de typo invalidante tous les 100 caractères, indépendamment de ce que je crois écrire. Cerveau bugué. Donc, c’est pour moi une question de compensation d’un handicap d’écrire le moins de caractères possibles…

Donc en général, quand j’écris mon code compact pour être sûr de passer les tests avant tout, et que je fais les PR (pulls requests aka demande de modification de la base de code (ouf)), et que j’ai la revue de code, je passe systématiquement par les fourches de mes collègues qui me demandent gentiment de réécrire des idiomatismes pythons pas courants. Ce qui fait que pour 1 lignes de codes effectivement publiée, j’en ai parfois 2% à réécrire, ce qui fait en comptant la diff 4% de code qui partent en friction.

Mais : je ne suis pas le seul, ça arrive sur des sujets où l’on est « trop » bons, comme sur des sujets où l’où on aurait pu être meilleur. Ce qui fait en comptant la friction de « moins bon » 3% de code qui partent en friction.

Et une des qualités d’advent of code, c’est l’exposition claire des problèmes.

Macache en entreprise de trouver des supers specs ; le Chef de Projet qui fait la passerelle entre le métier et les codeurs pour leur mâcher le travail du recueil des besoins a disparu depuis longtemps là où je suis passé (et j’ai plus de 10 entreprises au compteur dans ma carrière pro).

Mais quand bien même vous avez un super chef de projet, les specs sont rarement totalement déterminés

Nan, en entreprise, en tant que codeur pour une ligne de code j’ai 100 lignes d’écrits entre les workflows (organigrammeur) agiles, les mails, les tickets (jira souvent), les outils de revues de code, la doc (si si), et les configurations à déployer pour les sysadmins (même quand je suis le sysadmin).

Coder en entreprise, ce n’est pas coder pour soi, mais pour autrui : ça change la manière de développer, on passe plus de temps à échanger sur le contexte du code, et le rendre accessible tant aux clients qu’aux collègues qu’à écrire du code.

Ce travail, gratifiant, permet de mettre le code au service des humains par la compréhension du contexte, et l’Humain a ceci de différent de l’IA, c’est qu’il peut garder le contexte en mémoire ; ça s’appelle la Culture du Métier qui intersecte avec la culture métier propre au code afin de produire une résultat utile.

Le code que pond une IA

Ma seule expérience en vibe coding pour recoder un accordeur de guitare me semble pertinente pour illustrer pourquoi une IA ne peut pas remplacer un codeur.

L’IA m’a pondu un code bien correct en très peu de temps que j’ai du remanier (pour ajouter la flêche) mais surtout remanier fondamentalement pour pouvoir faire avec le logiciel ce que l’IA avait complètement loupée : pouvoir accorder une guitare (basse).

Illustrons le problème, qui a mon avis est une allégorie des manques de l’IA en 2 images :

Voilà les résultats d’accordages de guitare avec le code initiale

C’est pas très propre

Et ici avec la correction effectuée par mes soins :

C’est utilisable

Le code demandé était un accordeur de guitare. Le code obtenu par suite de manque de contexte, de compréhension de l’attente humaine ne permet pas d’accorder proprement par manque de précision lié à un sous échantillonnage (pour les basses).

Que ce soit sur le plan du « ça marche pour moi » propre à la résolution d’un advent of code ou celui d’entreprise permettant la réutilisation du code, le code d’IA est faillible et nécessite d’être repris avec une compréhension fine de comment ça marche.

Et c’est 2 images simples me semble porter non la critique de l’IA comme outil pour coder, mais la mécompréhension du métier de codeur dont les développeurs sont les principaux propagateurs : notre valeur métier ne consiste pas à coder ; les IA ne peuvent pas nous remplacer.

L’IA sait-elle coder ?

Dans l’exemple ci-dessus, de nombreuses questions de contexte ne sont pas résolues par l’utilisation de l’IA, tant en termes de traitement du signal que par exemple de droit de la Propriété Intellectuelle : l’IA ne me renseigne par exemple pas sur la licence avec laquelle le code a été partagé. Ce qui quand on a une conscience professionnelle engage l’acteur qui réutilise le code dans la question de la compatibilité de la licence originale avec celle de la 2ᵉ œuvre produite avec.

Suis-je en train de mélanger du code qui interdit l’utilisation commerciale (donc non libre) dans mon code libre par exemple ?

Au moins quand on va sur stack overflow la licence de partage est indiquée CC-By-SA ce qui est compatible avec mon code libre.

J’admets ne pas faire partie des défenseurs de l’IA.

Pour moi, l’IA n’est qu’une lubie romantique bourgeoise qui traîne depuis la fable de Galathée, le joueur d’échec de Stephen Zweig (inspiré de la fraude du turc mécanique du XVIIIé) et des délires de Wiliam Gibson… Tous les siècles ou presque la bourgeoisie remet une pièce dans le jukebox de l’agent parfait à même de remplacer le pauvre dans les tâches ouvrières.

Faut il avoir peur de l’IA ?
Après, les LLMs existent et malgré tout ce que l’on peut leur reprocher
impact environnemental, pillage des droits d’auteurs, hallucinations, délocalisation et exploitation de la main d’œuvre qualifiée… J’admets être curieux de ce machin.

Surtout, que si dans des conditions extrêmes j’arrive à pisser 500 lignes de code par jour à peu près testées une IA peut prétendument monter à 10000 lignes de codes par jours sans bugs.

L’imposture est de limiter le travail codeur à coder

S’applique aussi aux sysadmins dont on considère à tort que leur travail se limite à installer et configurer des infrastructures.

Pourquoi tous ces allers-retours avec ces boulets d’humains alors que l’on serait tellement mieux nourris à la pizza et à la bière à coder dans des locaux qui puent notre sueur ?

Le codeur n’est jamais seul et pour une bonne raison :

Un ordinateur n’est jamais responsable

C’est bien beau de pisser du code mais :

  • il faut le documenter avec les lignes de configurations minimales nécessaires à sa mise en production ;
  • il faut le mettre en prod, et signer un chèque à la fin du mois et le comptable va me tenir pour responsable même si j’utilise une IA pour les dépenses ;
  • les marketeux ont besoin de savoir ce que fais le code, et croyez moi, 10 000 lignes, c’est beaucoup de code donc beaucoup de fonctionnalités ;
  • le client veut un contrat avec des engagements (niveaux de services, garanties de temps de rétablissement, fonctionnalités garanties) … sinon son comptable va lui taper dessus ;
  • la qualité logicielle n’est que la retranscription en flux de travail des échanges avec des humains sur ce qui est perçu comme ne pas aller, ou devoir être amélioré

Oui l’IA sait sûrement coder plus vite et mieux que moi tant qu’il s’agit de faire du code de bourrinage (c’est à dire celui nécessaire pour résoudre advent of code, ou faire des prototypes (et encore)), mais elle est d’une nullité crasse pour corréler le code avec les différents acteurs et prioriser dans les modifications les remarques des acteurs humains.

Ce pourquoi l’IA n’a pas de logique c’est la Qualité.

L’IA n’est pas forcément bonne à faire du code de bourrin

Ce qui fait une bonne « PoC » (preuve de concept), c’est sa concision (comme ici).

Or, le code d’IA que j’ai pu pondre est rarement concis, il est moyen. Moyen n’étant pas une insulte, mais une qualité pour du code d’entreprise.

L’IA n’est pas forcément bonne à faire du code de qualité

Ce qui fait la particularité d’un codeur d’entreprise en termes de productivité, c’est que les meilleurs développeurs savent retirer du code.

Moins de code c’est : moins de coûts, moins de bugs, moins de surface de vulnérabilité, plus facile à maintenir.

En ceci, les meilleurs développeurs ne développent pas ; ils factorisent. Ce qui explique pourquoi dans la profession, on ne paie pas à la productivité en lignes de code pondues par jour. La force d’un humain, c’est la concision, et le découpage.

Sérieusement, si vous envoyez 10 000 lignes de code d’un coup dans un pipeline de production d’une startup de 10 salariés, vous allez créer une indigestion de code qui va bloquer votre production pendant des semaines (entre le découpage pour le gestionnaire de version, l’analyse sécurité, la revue de code …).

À quoi l’IA est-elle bonne ?

Là, n’ayant plus l’argent pour acheter une carte graphique et faire partie des privilégiés ayant accès à la techno : j’ai bien envie de dire le « gatekeeping » (la sélection par la tune), qui m’a autrefois favorisée quand il s’agissait d’avoir un ordinateur. Je suis aigri.

Mis à part que le coût en apprentissage est NP (exponentiel avec la taille du corpus d’apprentissage) alors que l’usage d’une CPU est globalement polynomial avec le nombre d’instructions (ce qui veut dire en terme profane, qu’on est condamné à faire bouillir l’océan pour améliorer la qualité des modèles), j’aimerais bien expérimenter avec à petite échelle.

À remplacer un moteur de recherche ?

J’ai envie de dire les moteurs de recherche ont un avantage sur les IA : ils donnent du contexte, dont les licences d’utilisation quand il y a du code.

À remplacer les revues de code ?

Un truc que j’aimerais essayer, c’est remplacer les revues de code par un apprentissage sur la base de code existante par IA pour que le style imposé en entreprise soit celui du code déjà publié et non celui d’un idéal.

Le problème que je vois c’est comment faire évoluer dans de telles conditions un algorithme qui part le seul poids du passif aura tendance à être conservateur ?

Déboguer du code ?

Quand t’es bloqué, car du code bugue, j’admets que tout avis un poil argumenté est mieux que rien. En ceci, sur ce sujet où je suis vierge, j’admets que mon expérience ne vaut pas tripette.

Traduire ?

Tous les développeurs que j’ai rencontrés se prétendent bilingue en anglais car … la doc est souvent en anglais. Dans la réalité, mézigue qui ne suis pas bilingue, mais doit parler anglais à la maison puisque j’en ai pris l’habitude avec ma femme polonaise dont je ne parle pas la langue trouve que pas mal de confrères se poussent du col.

Et, prenez comme vous le voulez, mais les traductions par IA sont pas mal.

Faire des affiches de propagande ?

Je dois avouer qu’elle y excelle

Enfin, oui, si on est pas trop regardant sur le fait que c’est du pill.I.A.ge et que les auteurs originaux ne sont pas accessibles pour citation.

L’IA n’est pas la nouvelle machine à vapeur (pour mon métier)

Quand les révolutions industrielles ont emporté avec elles des métiers artisanaux (comme les Canuts, les laboureurs) elles ont emporté des tâches aliénantes pour lesquelles l’Humain n’avait pas de valeur ajoutée grâce à la pure valeur de l’augmentation de productivité. Sauf, que le code n’est pas au centre des métiers de l’informatique, que ce soit les dévs, les sysadmins, la MOE/MOA … la majeure partie du travail consiste à recueillir et traduire les attentes des humains en code (voire à faire disparaître du code).

La hype, l’engouement pour l’IA en informatique est essentiellement portée par une industrie qui peine à placer son produit comme solution miracle pour un problème qui n’existe pas : d’une part un codeur ne code pas, mais en plus, soyons honnête, c’est la partie plaisante du métier pour laquelle qu’on arrête la pratique (par exemple en utilisant l’IA) on perd l’expertise.

Par contre, en traduction même imparfaite l’IA bourrine et c’est effrayant. Ainsi qu’en création graphique où son avantage reste le vol de propriété intellectuelle implicite.

Un peu quand même ?

J’imagine aussi qu’en spécialisation en informatique comme … les recherches de régressions sur un jeu de données (la data science) l’IA excelle. Mais, vu que j’ai pas de GPU où même l’argent pour m’acheter une alim à 100 boules pour y coller une carte graphique sur mon xeon d’il y a 15 ans, je ne vais pas pouvoir creuser le sujet bien loin. Par contre, sans avoir besoin de carte graphique, je vois bien que le sujet de l’apprentissage consiste à délocaliser une activité dévalorisée qu’est la catégorisation d’échantillon en vue d’apprentissage. Activité qui quand elle consiste à sélectionner des contenus acceptables pour les réseaux sociaux est par ailleurs

No comments: