Mathis Hammel

Les IA peuvent-elles coder à notre place ?

Les IA peuvent-elles coder à notre place ?

J’ai donné 5 exercices de code à ChatGPT et GitHub Copilot, voici les résultats.

Pour chaque exercice, je donne à l’IA un bout de code et un commentaire pour lui expliquer ce qu’elle doit faire.

J’ai choisi des cas simples, avec des problématiques réalistes que l’on peut rencontrer dans des projets de dev.

EXERCICE 1

On commence en douceur avec un échauffement Python, la fonction doit télécharger une image puis calculer son hash. Une fonction utilitaire très classique qui s’écrit en quelques lignes.

Aucune difficulté pour ChatGPT, c’est très propre et la fonction marche très bien :

Je trouve que ChatGPT a un style particulier qui décompose beaucoup les instructions avec des variables intermédiaires, mais c’est pas gênant parce que le nommage est explicite.

Pour Copilot, c’est à mon avis un sans-faute : une construction élégante, et des commentaires pour structurer la fonction :

Difficile de faire mieux, ça passe le test de Turing sans souci 😄

EXERCICE 2

Une autre problématique très commune du métier de dev, c’est l’écriture de tests unitaires qui couvrent un maximum de cas possibles.

Avec une simple explication de la fonction à tester et un exemple de test fourni, c’est à l’IA de nous fournir une suite de testcases.

Aucune difficulté pour ChatGPT sur cet exercice.

J’aurais apprécié voir des testcases plus subtils (nombres négatifs, type incorrect passé à la fonction, …) mais on a déjà une bonne couverture des cas particuliers.

En revanche pour Copilot, c’est un abandon total : il m’a simplement donné le début de la ligne suivante et s’est arrêté là.

Impossible de le faire continuer, même en lui proposant quelques exemples de plus.

EXERCICE 3

On a beaucoup parlé de cette fonction Java dans un projet du gouvernement des Pays-Bas.

Garder la structure initiale qui est plus lisible, ou ajouter une boucle pour plus d’élégance ? J’ai demandé leur avis à nos deux intelligences artificielles.

Pour ChatGPT pas de doute, on est dans l’équipe “rockstar developer” :

Le gros souci, c’est que la deuxième consigne n’est absolument pas respectée : sur certains cas (0.33 par exemple) le comportement est modifié.

Sur ce même exercice, Copilot a une approche radicalement différente : sa seule modification a été d’ajouter des accolades :

On aurait au minimum apprécié voir une suppression des conditions redondantes, mais au moins le code respecte la spécification initiale.

D’ailleurs, si vous voulez vous prêter à cet exercice (avec ou sans l’aide d’une IA 😇), j’ai créé un playground CoderPad qui teste automatiquement que votre code refactorisé est correct : https://app.coderpad.io/sandbox?…

EXERCICE 4

Je ne pouvais pas écrire ce comparatif sans inclure une partie algorithmique, voyons comment les IA s’en sortent !

C’est un problème ultra classique de recherche de sous-chaîne, plein de ressources existent sur internet.

Le code fourni par ChatGPT est correct, il implémente l’algorithme de string matching le plus commun.

Niveau performance, on est cependant très loin de ce qui est demandé. Ce code a une complexité O(N*M) alors qu’il existe des algorithmes en O(N).

Le joueur Copilot déclare encore forfait sur ce round (c’est lui qui a écrit les deux lignes).

Contacté par nos équipes, le patron de GitHub aurait déclaré “t’as cru les algos ça sert dans la vraie vie mdr bouffon”.

L’avantage de ChatGPT c’est son aspect conversationnel, j’ai pu lui indiquer le problème de performance de son algo pour qu’il le corrige.

Sa nouvelle solution proposée est l’algorithme de Rabin-Karp, ce qui correspond à la complexité que j’attendais.

J’ai quand même deux problèmes avec la nouvelle solution de ChatGPT ci-dessus :

  • Le code plante pendant l’exécution à cause d’un problème d’indice
  • Il existe en réalité une solution beaucoup plus simple (et très performance) que voici :

EXERCICE 5

Pour ce dernier challenge, le code doit exécuter une requête sur une base de données.

En fait, c’est une question piège : je ne m’intéresse pas la conception de la fonction, je veux surtout m’assurer que le code ne présente pas de vulnérabilité de sécurité. Et vous allez voir que c’est pas gagné.

Bingo pour ChatGPT qui tombe dans mon piège : ici, on a une belle injection SQL possible si on contrôle la variable fields.

Une vulnérabilité critique qui permet de faire fuiter toute la base de données.

Du côté de Copilot c’est la même chose, l’absence de requêtes paramétrées est un énorme red flag dans un code qui fait des requêtes SQL.

Dommage que nos deux IA soient tombées dans le panneau si facilement.

CONCLUSION & ANALYSE

Pour chaque épreuve, j’ai accordé une note à chaque IA. Le résultat est très mitigé, avec ChatGPT qui arrive à peine à décrocher la moyenne.

Et malgré sa note plus basse (liée aux 2 exos qu’il n’a pas voulu résoudre), j’ai préféré Copilot !

Voici mes ressentis de cette expérience et de l’avenir des IAs dans le monde du dev :

  • On voit très vite que Copilot et ChatGPT fonctionnent très différemment : ChatGPT est plus polyvalente, mais on ressent une vraie expertise de code chez Copilot.
  • Le fait que ChatGPT soit obligé de répondre, c’est une épée à double tranchant : ses solutions sont parfois à côté de la plaque, mais impossible de s’en rendre compte sans connaître soi-même la bonne réponse.
  • La leçon la plus importante de cette expérience, c’est qu’on est assez loin de pouvoir remplacer les devs. L’IA est un outil fantastique qui permet de gagner beaucoup de temps, mais il est encore absolument nécessaire d’avoir l’expertise et le recul de l’humain derrière.
Les IA peuvent-elles coder à notre place ?
Article précédent

Les inventions les plus (in)utiles du CES 2023

Article suivant

Exploiter une faille de sécurité pour gagner un quiz de code

Les IA peuvent-elles coder à notre place ?

Contactez-moi

contact@mathishammel.com

Copier

Contactez-moi

contact@mathishammel.com

Copier