Mon avis sur Github Copilot

Posté le 19 juillet 2021 - High-Tech - Par Grafikart - Proposer une correction

Vous avez été plutôt nombreux à me demander mon avis sur Github Copilot et j'attendais d'avoir accès à la technical preview avant d’écrire sur le sujet. J'ai pu tester l’outil dans différentes situations et, même si c'est une technical preview, le résultat est plutôt étonnant.

Avant de commencer

Avant de parler du fonctionnement de Copilot je pense qu’il est important de parler de quelques problèmes liés au concept général de l’outil.

Le problème éthique et légal

Le principe général de cette IA pose un problème légal et éthique car Github a utilisé le code Open Source disponible sur sa plate-forme. Le problème est que le code disponible sur la plateforme n'est pas nécessairement libre d'utilisation et on peut se demander si Github a réellement le droit d'exploiter le code des dépôt hébergé sur sa plateforme dans le cadre d’un tel projet (surtout si copilot devient ensuite un produit commercial).

Cela pose aussi un problème côté utilisateur qui pourrait se voir suggérer des morceaux de code qui seraient sous licence sans le savoir.

La télémétrie

Si on lit les questions fréquemments posées, Github précise qu'une partie de votre code est envoyé sur leur serveur afin d'être utilisé comme contexte pour l'intelligence.

In order to generate suggestions, GitHub Copilot transmits part of the file you are editing to the service

Le problème est que si vous êtes en train de travailler sur un fichier qui contient des données sensibles, ces données pourraient se retrouver sur les serveurs de Github et pourraient être exploitées par quelqu'un de mal intentionné. Il serait intéressant de voir si dans un avenir plus ou moins proche une version pouvant fonctionner en local sera fournie (comme pour tabnine par exemple).

Du mauvais code

Enfin le dernier problème avec cet assistant est la possibilité d’obtenir du mauvais code ou du code qui contient des failles de sécurités.

$pdo = new PDO();
$pdo->setDSN("mysql:host=localhost;dbname=test");
$pdo->setUser("root");
$pdo->setPass("root");

// Trouve l'article avec l'ID depuis l'URL
$pdo->exec('SELECT * FROM article WHERE id = "'.$_GET['id'].'"'); // Ligne générée par copilot

Aussi, l’assistant doit être en mesure d’identifier la version du langage que vous utilisez en fonction du contexte (ce qui n’est pas forcément évident). Et dans de nombreux langages il y a de grandes différences de syntaxe entre les versions ce qui peut poser des problèmes lorsque Copilot propose des suggestions. Cela sera aussi problématique lorsqu’une nouvelle version d’un langage deviendra disponible car l'intelligence artificielle ne sera pas forcément entraînée correctement et proposera peu de suggestions pertinentes (PHP 8 par exemple).

Mais en vrai, ça marche ?

En dehors de toutes ces considérations on peut se demander si le concept même est fonctionnel. Et pour être honnête j'ai été plutôt étonné par la capacité qu’a l’IA à proposer des suggestions pertinentes dans un projet (à condition de lui fournir un contexte suffisant).

Par exemple, si on se trouve dans une fonction JavaScript qui utilise une syntaxe ES2015+ les snippets qui sont proposés seront automatiquement écris avec les standards modernes. En revanche, lorsque l'on commence à travailler sur un fichier l’assistant aura plutôt tendance à nous proposer des suggestions un peu plus anciennes (code jQuery, XMLHttpRequest et var).

Ce contexte peut être apporté de différentes manières mais une bonne solution est souvent de mettre un commentaire qui permet d'indiquer l'intention derrière notre code, l’IA se chargera alors de traduire votre intention en code et sur ce point-là elle est plutôt impressionnante.
En revanche, cela peut amener à une mauvaise pratique où l'on se retrouve à écrire un commentaire pour décrire exactement la ligne de code qui suit. En revanche, cela est très efficace lorsque l'on crée des fonctions bien documentées et ça peut même inciter à écrire de meilleur commentaires en proposant des suggestions.

Il faudra faire en revanche attention à vérifier le code qui est proposé et ne pas nécessairement faire une confiance aveugle à l'assistant. Cela rejoint le point indiqué plus haut, l'intelligence artificielle aura tendance à écrire du code qui contient des petites erreurs et notre rôle sera alors de vérifier le code qui est proposé. C'est sur ce point que le concept me pose un problème personnellement car elle transforme votre position de développeur en simple critique de code (ce qui peut s'avérer contre-productif car il est assez facile de louper des petites erreurs).

Personnellement je trouve que Copilot est un outil intéressant lorsqu'il propose des suggestions relativement courtes qui sont faciles à vérifier. J’aimerais aussi avoir une IA en locale qui soit capable de s’adapter en fonction de ma propre manière de coder avec une logique par projet. A voir ce que cela donne à l’avenir.