Pour ceux qui programment pour gagner leur vie, il s(agit la plupart du temps d’un jeu de Jenga mental : une ligne de code empilée sur une autre, construisant une tour de code que l’on espère suffisamment robuste pour ne pas s’effondrer. Mais, et c’est toujours le cas, le code ne fonctionne jamais la première fois qu’il est exécuté. C’est pourquoi l’une des compétences clés de tout programmeur est le débogage – soit l’art de trouver pourquoi le code ne fonctionne pas ou fait quelque chose d’inattendu ou d’indésirable.
C’est un peu comme être un détective, trouver des indices, puis découvrir ce que ces indices essaient de vous dire. C’est très frustrant et très satisfaisant, parfois les deux à la fois. Je fais beaucoup de débogage. Ce n’est pas seulement parce que le code ne fonctionne jamais la première fois qu’il est exécuté. C’est aussi parce que j’utilise le débogage pour comprendre en profondeur comment le code fonctionne.
Bien qu’un bon débogage exige des compétences particulières, il s’agit en fin de compte d’un simple travail de programmation. Une fois que vous avez découvert pourquoi un bloc de code ne fonctionne pas, vous devez trouver comment écrire quelque chose qui fonctionne.
Tests de ChatGPT dans le monde réel
Cette semaine, j’ai travaillé sur trois tâches de codage pour la maintenance d’un logiciel. Deux d’entre elles consistaient à corriger des bogues signalés par des utilisateurs. L’autre était un nouveau morceau de code pour ajouter une nouvelle fonctionnalité. Il s’agissait donc pour moi d’un véritable travail de programmation, une partie de mon travail habituel.
Si je vous dis cela, c’est parce que jusqu’à présent, j’ai testé ChatGPT avec du code de test. J’ai inventé des scénarios pour voir comment ChatGPT fonctionnerait. Cette fois-ci, c’était différent. J’essayais de faire du vrai travail, et j’ai décidé de voir si ChatGPT pouvait être un outil utile pour faire ce travail.
C’est une façon différente de voir ChatGPT. Les scénarios de test sont souvent un peu artificiels et simplistes. Le codage dans le monde réel consiste à retirer un ticket de support client de la pile et à travailler sur ce qui a fait que l’expérience de l’utilisateur s’est détériorée. Sur ce, examinons ces tâches et voyons comment ChatGPT s’est comporté.
Réécriture du code d’expression régulière
En programmation, nous devons trouver de nombreux pattern dans le code. Pour ce faire, nous utilisons une forme de mathématiques symboliques appelées expressions régulières, dite regex. J’écris des expressions régulières depuis des décennies et je n’aime toujours pas le faire. C’est fastidieux, source d’erreurs et souvent indéchiffrable.
Aussi, lorsqu’un rapport de bogue m’a signalé qu’une partie de mon code n’autorisait que les nombres entiers alors qu’il devrait autoriser les dollars et les cents (en d’autres termes, un certain nombre de chiffres, éventuellement suivis d’un point, puis, s’il y a un point, suivis de deux chiffres supplémentaires), j’ai su que je devrais utiliser le codage par expressions régulières.
Comme je trouve cela fastidieux et ennuyeux, j’ai décidé de demander de l’aide à ChatGPT. Voici ce que j’ai demandé :
Capture d’écran par David Gewirtz/ZDNET
Et voici la réponse très bien présentée de l’IA :
Capture d’écran par David Gewirtz/ZDNET
J’ai inséré le code de ChatGPT dans ma fonction et cela a fonctionné. Au lieu de 2 à 4 heures d’arrachage de cheveux, il m’a fallu environ cinq minutes pour trouver l’invite et obtenir une réponse de ChatGPT.
Reformatage d’un tableau (array)
L’étape suivante était le reformatage d’un tableau (array). J’aime bien faire du code de tableau, mais c’est aussi fastidieux. J’ai donc essayé une fois de plus ChatGPT. Échec total.
J’ai probablement envoyé dix messages différents. Certaines réponses semblaient prometteuses, mais lorsque j’ai essayé d’exécuter le code, ça n’a pas marché. Certains codes ont planté. Certains codes ont généré des codes d’erreur. D’autres encore s’exécutaient, mais ne faisaient pas ce que je voulais.
Au bout d’une heure, j’ai abandonné et je suis revenu à ma technique habituelle, qui consiste à fouiller dans Github et StackExchange pour voir s’il existe des exemples de ce que j’essaie de faire, puis à écrire mon propre code.
Trouver l’erreur dans mon code
OK, la partie suivante va être difficile à expliquer. Mais réfléchissez au fait que si c’est difficile à expliquer à vous (vraisemblablement un humain et non l’un des quelque 50 robots qui se contentent de copier et de republier mon travail sur des sites Web frauduleux), c’est encore plus difficile de l’expliquer à une IA.
J’écrivais un nouveau code. J’avais une fonction qui contenait deux paramètres et une instruction d’appel qui envoyait deux paramètres à mon code. Les fonctions sont de petites boîtes noires qui exécutent des fonctions très spécifiques et elles sont appelées par des lignes de code qui s’exécutent ailleurs dans le programme.
Le problème, c’est que je n’arrêtais pas de recevoir un message d’erreur.
La partie la plus importante de ce message est l’indication « 1 passed » à un moment donné et « exactly 2 expected » à un autre. J’ai regardé l’instruction d’appel et la définition de la fonction et il y avait deux paramètres dans les deux cas. Après un quart d’heure de frustration profonde, j’ai décidé de faire appel à l’IA pour voir si elle pouvait m’aider. J’ai donc écrit l’invite suivante :
Capture d’écran par David Gewirtz/ZDNET
Je lui ai montré la ligne de code qui a effectué l’appel, je lui ai montré la fonction elle-même, et je lui ai montré le gestionnaire, un petit morceau de code qui distribue la fonction appelée à partir d’un hook dans mon programme principal.
En quelques secondes, ChatGPT a répondu par ceci :
Capture d’écran par David Gewirtz/ZDNET
Comme suggéré, j’ai mis à jour le quatrième paramètre de la fonction add_filter() à 2, et cela a fonctionné !
ChatGPT a pris des segments de code, les a analysés et m’a fourni un diagnostic. Pour être clair, pour qu’il puisse faire sa recommandation, il devait comprendre la façon dont WordPress gère les hooks (c’est ce que fait la fonction add_filter) et comment cette fonctionnalité se traduit par le comportement des lignes de code qui l’appellent et l’exécutent.
Je dois dire que c’est incroyable, indéniablement incroyable de « vivre dans le futur ».
Qu’est-ce que tout cela signifie pour la pertinence de ChatGPT côté développement informatique ?
Comme je l’ai mentionné précédemment, le débogage relève à la fois de l’art et de la science. La plupart des bons environnements de développement comprennent des outils de débogage puissants qui vous permettent d’observer le flux de données à travers le programme pendant qu’il s’exécute, ce qui est utile pour tenter de repérer les bogues.
Mais lorsque vous êtes bloqué, il est souvent difficile d’obtenir de l’aide. En effet, même un collègue proche peut ne pas être familiarisé avec l’ensemble du code que vous déboguez. Le programme sur lequel je travaille comporte 153 259 lignes de code réparties dans 563 fichiers – et pour un programme, c’est peu.
Ainsi, si j’avais voulu obtenir l’aide d’un collègue, j’aurais peut-être dû construire une requête presque identique à celle que j’ai envoyé à ChatGPT.
Mais il y a une chose à prendre en compte : Je me suis souvenu d’inclure la ligne handler même si je n’ai pas réalisé que c’était là que se trouvait l’erreur. À titre de test, j’ai également essayé de demander à ChatGPT de diagnostiquer mon problème dans une invite où je n’avais pas inclu la ligne handler, et il n’a pas été en mesure de m’aider. Il y a donc des limites très nettes à ce que ChatGPT peut faire pour le débogage aujourd’hui, en 2023.
Vous devez donc savoir comment poser les bonnes questions de la bonne manière, et ces questions doivent être suffisamment concises pour que ChatGPT puisse traiter l’ensemble en une seule requête. C’est quelque chose qui demande des connaissances en programmation et de l’expérience pour savoir comment faire.
Aurais-je pu corriger le bogue moi-même ? Bien sûr. Je n’ai jamais eu de problème que je n’ai pas pu résoudre. Mais je ne sais pas si cela m’aurait pris deux heures ou deux jours (plus des pizzas, des injures et beaucoup de caféine) tout en subissant de nombreuses interruptions. Je peux vous dire que ChatGPT l’a résolu en quelques minutes, m’épargnant une tonne de temps et de frustration.
Un regard vers l’avenir (peut-être dystopique) du développeur augmenté par l’Intelligence Artificielle
Je vois un avenir très intéressant, où il sera possible de donner à ChatGPT les 153 000 lignes de code et de lui demander de vous dire ce qu’il faut réparer. Microsoft (qui possède Github) travaille déjà sur un outil de « copilotage » pour Github afin d’aider les programmeurs à créer du code. Microsoft a également investi des milliards de dollars dans OpenAI, le fabricant de ChatGPT.
Bien que le service puisse être limité aux environnements de développement de Microsoft, je peux imaginer un avenir où l’IA aura accès à tout le code de Github, et donc à tout le code de n’importe quel projet que vous publiez sur Github.
Compte tenu de l’efficacité avec laquelle ChatGPT a identifié mon erreur à partir du code que j’ai fourni, j’entrevois clairement un avenir où les programmeurs pourront simplement demander à ChatGPT (ou à un équivalent de la marque Microsoft) de trouver et de corriger des bogues dans des projets entiers.
Et c’est ici que cet article prend une tournure très sombre.
Imaginez que vous puissiez demander à ChatGPT de regarder votre dépôt Github pour un projet donné et qu’il trouve et corrige les bogues. Il pourrait par exemple vous présenter chaque bogue qu’il trouve pour approbation, afin que vous puissiez effectuer les corrections. Mais qu’en est-il de la situation où vous demandez à ChatGPT de simplement corriger les bogues, et que vous le laissez faire sans prendre la peine de regarder tout le code vous-même ? Pourrait-il intégrer quelque chose de mauvais dans votre code ?
Et qu’en est-il de la situation où une IA incroyablement compétente a accès à la quasi-totalité du code mondial dans les dépôts Github ? Que pourrait-elle cacher dans tout ce code ? Quel mal infâme cette IA pourrait-elle faire à l’infrastructure mondiale si elle peut accéder à tout notre code ?
Jouons à un simple jeu de réflexion. Et si l’IA recevait comme instruction clé la première règle d’Asimov. Il s’agit d’un « robot qui ne doit pas nuire à un être humain ou, par son inaction, permettre à un être humain de nuire ». Ne pourrait-elle pas décider que toute notre infrastructure nous cause du tort ? En ayant accès à tout notre code, il pourrait simplement décider de nous sauver de nous-mêmes en insérant des portes dérobées qui lui permettraient, par exemple, de couper le réseau électrique, de clouer les avions au sol et de bloquer les autoroutes.
Je suis tout à fait conscient que le scénario ci-dessus est hyperbolique et alarmiste. Mais il est également possible. Après tout, si les programmeurs consultent leur code sur Github, il n’est pas possible pour quiconque de consulter toutes les lignes de tout leur code.
Quant à moi, je vais essayer de ne pas trop y penser. Je ne veux pas passer le reste de la décennie en position fœtale à me balancer d’avant en arrière sur le sol. Au lieu de cela, j’utiliserai ChatGPT pour m’aider occasionnellement à écrire et à déboguer de petites routines, je garderai la tête baissée et j’espérerai que les futures IA ne nous tueront pas tous dans leur effort pour « ne pas permettre à un humain de se blesser ».
Le fait que ChatGPT puisse déboguer vous semble-t-il utile ou terrifiant ? Pensez-vous que les IA nous tueront dans notre sommeil ou que nous assisterons à notre perte les yeux grands ouverts ? Ou bien allez-vous, comme moi, essayer de ne pas trop y penser parce que cela vous fait mal à la tête ? Parlez-moi dans les commentaires ci-dessous. Pendant qu’il en est encore temps.
Source : « ZDNet.com »
(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/fr_FR/all.js#appId=243265768935&xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));
Cliquez ici pour lire l’article depuis sa source.