GitHub Copilot

Qu’est ce ?

Si je cite la documentation il s’agit de son “AI pair programmer”, ce que je comprends par là c’est, la personne assise à côté de moi, qui est censée m’aider, m’assister lorsque j’écris du code. Donc je me retrouve à faire du pair programming à longueur de temps avec un développeur virtuel ayant connaissance de toute la codebase publique de GitHub. En effet si je regarde la documentation encore une fois, j’apprends que le modèle a été entraîné sur des milliards de lignes de codes stockées sur GitHub. Ce n’est pas un “simple” outil d’auto-complétion, cela va plus loin, en regardant le contexte et en suggérant un bloc de code complet pour écrire une fonction ou encore terminer logiquement la liste des constantes que j’ai commencé à saisir. L’idée étant de gagner du temps, en évitant les allers retours sur internet pour vérifier comment faire telle ou telle chose ou encore trouver des exemples.

Comment ça fonctionne ?

En installant le plugin dans son IDE favori (pour l’instant sont supportés: Visual Studio Code, Neovim et JetBrains) celui-ci va analyser le contexte en regardant les commentaires et le code pour pouvoir proposer une suggestion. Il peut s’agir de la fin d’une ligne de code ou d’une fonction entière juste à partir du nom de celle-ci. GitHub Copilot s’appuie sur OpenAI Codex pour justement comprendre nos attentions en se basant sur ce que nous avons déjà codé mais aussi sur ce que nous avons écrit en commentaire du code. L’idée étant de choisir la meilleure solution proposée ou de modifier une proposition afin d’améliorer continuellement le modèle comme on peut le voir sur le schéma ci-dessous.

De la promesse à la réalité (Technical Preview)

Des débuts compliqués

L’installation est super simple puisqu’il n’y a rien à faire à part installer l’extension pour son IDE préféré. Ensuite il faut avoir reçu son invitation par email après s’être inscrit pour la “Technical Preview”. À partir de là les premiers soucis sont arrivés puisque la version du plugin que j’avais pour IntelliJ le faisait littéralement planter à longueur de temps dès que j’écrivais la moindre ligne de code et sans rien me suggérer… FAUX DÉPART

La lumière au bout de la touche TAB

Après une mise à jour du plugin il semblerait que tout soit rentré dans l’ordre et j’étais enfin prêt à devenir un meilleur développeur. Un exemple d’une première intervention très utile a été le suivant, j’étais en train d’écrire le résultat attendu d’une fonction dans un test unitaire et GitHub Copilot est venu me filer un petit coup de main d’une manière très intelligente sur les données que j’avais à compléter.

Dans cet exemple on voit que je suis en train d’ajouter une propriété à mon objet et qu’il y a une suite logique dans ces données, à savoir, les mois de l’année 2022. Il a donc été capable de s’alimenter du contexte de mon test et de la récurrence de la donnée pour me suggérer la bonne réponse: “Avril 2022”. La bonne nouvelle c’est que la proposition est instantanée aucun ralentissement ressenti et il n’y a pas eu non plus d’analyse du fichier en amont qui m’aurait empêchée d’avancer, tout se fait en temps réel.

Comme je le disais plus haut GitHub Copilot va plus loin que de l’auto complétion et essaie de nous faire gagner du temps en essayant de deviner le code que l’on souhaite écrire. C’est ce qu’on va voir dans l’exemple suivant où grâce au nom de la fonction et au contexte dans lequel se trouve cette fonction il me propose de tout écrire lui même…

Dans cet exemple j’ai écris le nom de la fonction et ses paramètres, à partir de là il me suggère ce que pourrait être le corps de la fonction selon lui et c’est plutôt pas mal pour être honnête. Il a détecté que j’utilisais la librairie moment.js et l’utilise donc pour calculer la différence entre les deux dates. Peut être que je ne souhaite pas avoir la différence en jours mais ceci étant dit si c’est la seule modification que j’ai à faire par la suite ça me semble être un véritable gain de temps.

Dans cet exemple on prend le cas d’une suggestion spécifique à une technologie, en l’occurence nous sommes dans un contexte Vue avec Vue Router et je définis les routes pour mon application. De part la structure de mes routes il est capable de me suggérer ce que je vais vouloir faire pour celles en dessous de mon layout principal. Ici on voit clairement l’apprentissage sur le code de GitHub car on imagine assez bien que c’est un bout de code “normal” que de vouloir protéger ce genre de routes.

Un dernier exemple pour la route avant de conclure et pour mettre en avant la compréhension du langage au delà du code. Ici on voit bien que c’est grâce à la description de mon test que GitHub Copilot est capable de me suggérer ce que je veux écrire. Je parle en effet de vouloir vérifier qu’il y a bien 12 éléments qui sont retournés par ma fonction et il me propose donc de tester que le résultat de mon appel à une taille de 12 sans même que j’ai à écrire quoi que ce soit.

Après un mois d’utilisation…

Globalement je trouve que c’est une réussite (surtout pour une Technical Preview), sur le fond, c’est à dire la pertinence de ce qui est proposé, c’est tout simplement impressionnant et véritablement utile au quotidien. Sur la forme, c’est à dire la façon dont est suggéré le code en mode inline, c’est parfois un peu trop intrusif voir même perturbant pour s’y retrouver quand ça nous propose des gros pavés de plusieurs lignes de codes. Pas facile cependant de trouver un juste milieu mais on peut imaginer que l’IA va s’améliorer avec le temps jusqu’à n’intervenir que quand on en a vraiment besoin.

En ce qui me concerne je pense continuer à l’utiliser au quotidien, je suis curieux de voir si les suggestions vont s’améliorer avec temps et s’adapter à mes habitudes de code. Reste à voir si ce service restera gratuit car GitHub parle déjà d’un potentiel d’une version “commerciale”. En attendant je vous invite à tester pour vous faire votre propre idée sur le sujet quitte à activer uniquement le plugin de temps en temps.

Où vont mes données ?

Dans sa documentation GitHub précise que seul le contexte du fichier dans lequel on travaille est transmis et qu’ensuite est stocké si oui ou non on accepte la suggestions qui a été faite. Pour plus de détails je vous invite à aller lire la documentation qui est complète sur ce sujet.

Les biais de l’apprentissage

Si on utilise les suggestions et qu’on push notre code pour que celui-ci soit utilisé dans l’apprentissage de l’IA est-ce qu’on ne va pas se retrouver dans une boucle où tout le monde fait tout le temps pareil sans innovation ? Pire encore, des mauvaises pratiques pourraient se propager à grande échelle ? Il en va de même pour les failles de sécurités qui existent sur les repos GitHub dont l’IA se sert pour faire son apprentissage, cependant GitHub précise que plusieurs outils sont mis en place pour filtrer et suggérer le code le plus secure possible. Plus de détails dans la documentation.

Du coup c’est bon on peut se séparer de tous les développeurs ?

Pour l’instant les deux idées principales du projet sont d’aider les développeurs existants en réduisant les tâches répétitives et en leur permettant de gagner du temps ainsi que rendre le code plus accessible à tous notamment pour ceux qui veulent débuter. Encore une fois je vous renvoie vers la documentation qui aborde ce sujet.

Laisser un commentaire