Blog Arolla

Chat GPT va-t-il remplacer les développeurs ? 😱😱😱

J'ai testé chatGPT pour du dev !

Au début ça partait d'un délire perso, en gros je lui demandais des implémentations de FizzBuzz dans différentes technologies.

Sur Python il m'a généré un code un peu brut avec des print directement dans les IF, c'était pas dingue niveau effets de bord, mais en le guidant un peu et en lui indiquant comment refactorer, il a réussi à me sortir une fonction qui retournait la bonne valeur en fonction du critère de divisibilité, et même à me dire, sans que je lui demande, que ça permettait d'isoler la responsabilité, la lisibilité blablabla.

Bon ensuite je lui ai demandé un FizzBuzz en Cobol et un en Fortran et de la même façon, après un peu de refacto ce n'était pas si moche que ça.

Mais à chaque fois, je voyais que c'était toujours le IF 3 et 5 retourne FizzBuzz qu'ils me mettait en premier et puis le 3 -> Fizz et puis le 5 -> Buzz.

J'avais l'impression qu'il déterminait toutes les combinaisons possibles et me faisait un IF pour chacune d'entre elles.
J'ai donc décidé de passer à Haskell 😊


J'ai commencé à lui demander le FizzBuzz classique, pas de changement là-dessus, puis je lui ai demandé de refactorer un peu pour isoler le coeur logique dans une fonction à part.

Pour les néophytes, Haskell fonctionne par pattern matching (voyez ça comme un IF amélioré), votre fonction va comparer votre input à plusieurs patterns (donc pour FizzBuzz celui d'un nombre divisible par 3, un par 5, un par 3 et par 5) et retourner le résultat qui correspond au premier match.

Donc je me retrouve bien avec le même travers qu'avant, un pattern match par condition possible du FizzBuzz.

Et là je commence à jouer, je lui demande de rajouter une règle "si divisible par 7 qui retourne Bizz", bon ça a pris quelques essais pour lui faire comprendre ce que je voulais (au début j'avais juste un "n mod 7 == 0 -> Bizz" en plus dans la fonction…) mais finalement ça a bien confirmé mon intuition qu'il déterminait juste l'ensemble des combinaisons possibles et faisait un pattern match pour chacune d'entre elles.
Je lui ai rajouté la règle "11 -> Fuzz" et là Chat GPT m'a donné une liste de tout un tas de pattern matches bien costauds.

Et bah ensuite j'ai bien galéré à lui faire refactorer tout ça, mais il a réussi à me sortir une liste de couples (Nombre, "Verbe") en fonction du critère de divisibilité, même si pour cela j'ai quand même du le pousser un peu.
J'ai eu pas mal de cas où je demandais "Est ce qu'on peut faire comme ça ?" Et la réponse était juste "Oui c'est possible", mais avec aucun code en réponse, ou bien il me faisait la fonction refactorée à part mais il ne voulait pas la mettre dans le code principal. Bref je me suis bien marré mais c'est pas moi qui codait donc tranquille.

Et bien sûr tous ceux qui connaissent mon FizzBuzz se doutent bien que je ne me suis pas arrêté là : (https://github.com/khantzen/FizzBuzzFactory-Java)

Je lui demande de rajouter la règle "si impair retourne Tizz" ; celle-là elle est un peu tordue mais elle a l'avantage de complètement déglinguer l'implémentation générique avec une liste de couple (Nombre, "Verbe") et il faut donc partir sur une liste de couple (lambda x, "Verbe").

Bon bah pareil, il a réussi à avoir le bon résultat mais ça s'est un peu fait dans le sang et les larmes 😅

Ensuite je lui ai donc demandé de convertir ce magnifique code Haskell en Cobol et il m'a gentiment répondu d'aller me faire voir…


Donc je lui ai demandé une conversion en Python et j'ai eu un résultat très élégant avec ma liste de lambda et une petite boucle FOR.
Ensuite je lui ai demandé de convertir en Java 17.

D'abord il m'a fait une erreur parce qu'il a voulu revenir sur les critères de divisibilité et sortir de la liste de lambdas, et donc pour lui être impair ça voulait dire être divisible par 1… Mais pas grave, je le corrige, il a aussi bien esquivé l'utilisation des streams et de la même façon j'ai un peu eu à me battre avec lui pour obtenir le bon résultat.

J'ai essayé, ensuite, de lui demander de générer un énoncé d'exercice pour atteindre cet implementation de FizzBuzz mais je n'ai rien eu de très dingue.

En conclusion : j'étais clairement en terrain connu, je lui ai demandé des technos dont je connaissais globalement les capacités, c'est un exercice que je maîtrise bien et donc j'avais quand même une bonne idée du résultat attendu.

En conséquence, je dirais que quand vous êtes dans un contexte similaire où vous avez globalement une idée du résultat mais juste la flemme de chercher pendant 3 plombes comment on parse la date "Feb 8 09:37:25 2023 GMT" c'est très pratique et ça fait gagner du temps.

Sur des problèmes plus complexes et avec un peu plus d'inconnues, ça peut faire sens de s'en servir, mais il faut avancer avec des pincettes et toujours vérifier ce qu'il fait.
Comme il ne fait pas vraiment du clean code nativement et qu'il faut quand même pas mal le guider dans sa refacto, la question se pose très vite de savoir si on n'aurait pas plus vite fait de le faire soi-même, en s'en servant juste comme doc' interactive.

Après on copie-colle bien du code de StackOverflow sans vraiment prendre le temps de le lire avant...

Plus de publications

Comments are closed.