Table des matières
Ouvrir table des matières
C’est quoi Github Copilot ?
GitHub Copilot est un assistant de programmation développé par GitHub en collaboration avec OpenAI. Il utilise des modèles de langage basés sur des réseaux de neurones pour générer des suggestions de code en temps réel, directement dans votre IDE.
Lorsque vous écrivez du code, Copilot utilise l’analyse sémantique pour comprendre le contexte de votre code et générer des suggestions de code appropriées pour compléter votre code ou ajouter de nouvelles fonctionnalités. Il peut suggérer des blocs de code entiers, des expressions, des fonctions, des noms de variables, des imports, des conditions et bien plus encore.
Copilot s’appuie sur des modèles de langage avancés entraînés sur des millions de lignes de code open source (Merci nos repositories sur Github). En s’appuyant sur cette vaste base de données, Copilot est capable de proposer des solutions de code de haute qualité et de qualité professionnelle pour de nombreux cas d’utilisation différents.
C’est donc un allié au quotiden à l’instar d’une session de code avec votre collègue en mode pair programming. Cela tombe bien car c’est justement ce que proclame Github sur sa page Github Copilot 🔗.
Les principaux avantages à utiliser Github Copilot
Je vous ai listé les principaux avantages ventés par Github Copilot et la communauté ainsi que ceux que j’ai pu décélé via mon utilisation au quotidien :
- Gain de temps : Copilot peut générer rapidement du code pour des tâches courantes ou répétitives, permettant aux développeurs de se concentrer sur des aspects plus complexes du développement.
- Qualité du code : Les suggestions de Copilot sont basées sur des modèles de langage avancés entraînés sur des millions de lignes de code open source, ce qui signifie qu’il peut proposer des solutions de code de qualité professionnelle.
- Réduction des erreurs : Copilot peut aider à réduire les erreurs de syntaxe et les bugs en fournissant des suggestions de code précises et de qualité professionnelle.
- Apprentissage des langages de programmation : Copilot peut aider les développeurs à apprendre de nouveaux langages de programmation en leur fournissant des exemples de code bien écrits et adaptés à leurs besoins.
- Amélioration de la productivité : Copilot peut aider à améliorer la productivité des développeurs en leur permettant de travailler plus rapidement et plus efficacement, en réduisant le temps passé à écrire du code à la main.
- Rédaction des tests unitaires : Lorsque vous commencez à rédiger des tests unitaires, il est capable de les rédiger totalement pour vous mais aussi de produire des mocks de données (ce qui m’arrange je l’avoue car ce n’est pas des plus passionnant à faire)
Les inconvénients à utiliser Github Copilot
Comme tout ce qui existe, il y a quand même des défauts et il est toujours de les connaître :
- Qualité du code : Pardoxale puisqu’il est aussi dans les avantages mais il faut savoir que son modèle d’apprentissage et sa base de données c’est l’Open Source. Et comme dans tout, il y a du bon et du mauvais code. Même si c’était assez rare (2-3 fois pour ma part), il peut vous générer du code de mauvaise qualité.
- Propriété et confidentialité des données : Copilot fonctionne en utilisant des modèles de langage basés sur des réseaux de neurones, qui sont entraînés sur des millions de lignes de code open source. Cela signifie que les données que vous entrez dans Copilot peuvent être stockées sur les serveurs de GitHub et utilisées à des fins de formation de modèles de langage, ce qui peut soulever des préoccupations en matière de propriété et de confidentialité des données.
- Dépendance envers les suggestions de code : Utiliser Copilot peut encourager une dépendance envers les suggestions de code générées, ce qui peut empêcher les développeurs d’apprendre à coder de manière autonome et de devenir plus efficaces à long terme.
- Risques de sécurité : Comme avec tout logiciel basé sur l’IA, il existe des risques de sécurité associés à l’utilisation de Copilot. Les suggestions de code générées peuvent contenir des vulnérabilités de sécurité, des bogues ou des failles potentielles qui pourraient être exploitées par des pirates informatiques.
- Limitations de langage et de contexte : Copilot fonctionne mieux dans certains langages de programmation et pour certains types de projets que pour d’autres. De plus, il peut avoir du mal à comprendre le contexte spécifique de votre code et à générer des suggestions de code appropriées dans certains cas. J’ai notamment descellé le cas avec l’un de mes collègues qui l’a testé avec un projet Angular. Les propositions restent assez basiques et très limitées tant dans la partie HTML que dans la partie Typescript
- Le coût : même si cela paraît dérisoire (10€/mois) cela peut être un petit budget pour un développeur qui commence d’autant que le modèle de données est alimenté par les projets Open Source qui sont eux gratuit et qu’ils continuent à s’auto-améliorer et s’alimenter par le code que nous créons et les nombreux nouveaux repositories chaque jour
Les limitations à utiliser Github Copilot
- Compréhension limitée du contexte : Copilot fonctionne en générant du code basé sur des exemples de code existants, mais il peut avoir du mal à comprendre le contexte spécifique de votre projet. Pourquoi ? Parce son contexte de travail n’est pas réellement votre projet complet mais plutôt le fichier dans lequel vous travaillez (ainsi que des éventuels imports que vous auriez pu faire). Par conséquent il peut générer du code qui ne correspond pas exactement à vos besoins.
- Dépendance de la qualité des exemples : Copilot est basé sur des exemples de code existants, ce qui signifie que la qualité des suggestions de code dépend de la qualité des exemples fournis. Si les exemples sont de mauvaise qualité, les suggestions de Copilot peuvent également être de mauvaise qualité.
- Langages de programmation limités : Copilot prend actuellement en charge un nombre limité de langages de programmation, ce qui peut limiter son utilité pour certains développeurs.
- Limitations de taille et de complexité : Copilot fonctionne mieux pour des tâches courantes ou des segments de code relativement simples. Pour des tâches plus complexes ou des projets de plus grande envergure, Copilot peut avoir du mal à générer des suggestions de code précises ou appropriées.
- Risques de sécurité : Comme avec tout logiciel basé sur l’IA, il existe des risques de sécurité associés à l’utilisation de Copilot. Les suggestions de code générées peuvent contenir des vulnérabilités de sécurité, des bogues ou des failles potentielles qui pourraient être exploitées par des pirates informatiques. Les développeurs doivent faire preuve de prudence et vérifier soigneusement les suggestions de code proposées avant de les utiliser.
- Impossibilité de refactorer/améliorer du code : C’est une feature qui je pense est dans leur roadmap et qui manque cruellement au quotidien. Avoir la possibilité de demander à Copilot de refactorer le code d’une fonction ou de proposer des améliorations très pertinentes serait la bienvenue.
Mon utilisation et avis sur Github Copilot
J’utilise GitHub Copilot avec mon IDE favori, à savoir WebStorm. Il existe, au moment où j’écris ces lignes, des plugins pour les outils Jetbrains, VS Code et Neovim. Je l’ai surtout utilisé pour faire du backend en Typescript. Copilot fonctionne avec beaucoup de langages et de frameworks différents, mais il est très efficace avec Python, JavaScript, TypeScript, Ruby, Go, C# et C++.
Vous pouvez l’essayer pendant 60 jours (mais il faut renseigner une carte de crédit). Et une fois souscrit, il vous suffit de vous authentifier à votre compte Github depuis le plugin dans votre IDE. Et là, la magie opère avec deux façons d’utiliser Copilot !
L’onglet de proposition de solution
En général, il vous propose 2-3 propositions de solution en fonction de votre contexte. Il vous suffit de choisir la solution qui vous correspond le mieux. Je n’utilise pas trop cet onglet car je ne trouve pas cela hyper intuitif et productif dans l’utilisation de mon IDE.
L’autocomplétion directement dans le fichier
C’est ce que j’utilise et ce qui me paraît être le plus efficace. Il vous propose une solution en gris et il suffit de faire un petit coup de tabulation pour valider le code proposé par Copilot.
Copilot apprend de lui-même et arrive à rectifier ses erreurs en lui montrant la marche à suivre. Par moment, il peut me générer du code qui n’est pas forcément celui que j’attendais ou qui fonctionne mais n’est pas le plus optimal. En général, je valide quand même son code puis je le supprime ou je le modifie.
En utilisant ce mécanisme, il comprend qu’il doit s’améliorer pour me proposer d’autres solutions pertinentes.
J’utilise environ 50% de ce qu’il me génère tel quel car je juge sa solution pertinente. Le reste soit je le jette, soit je l’utilise comme premier jet pour ma fonction.
Les tests unitaires ne sont plus du tout une corvée
On ne va pas se mentir, mais écrire des tests unitaires, c’est chiant et parfois très redondant. Surtout ce que je n’aime pas faire, c’est inventer des mocks de données. Et je délègue ça très volontiers à Github Copilot car il est vraiment très efficace pour ça.
Il n’est pas capable de vous générer à la chaîne tous les getters d’une de vos classes, par exemple, juste en lui mentionnant l’un des premiers getters à titre d’exemple.
Il lui est même arrivé de me générer des tests auxquels je n’aurais pas pensé.
Pour découvrir un nouveau langage et sa syntaxe
Copilot peut vous aider à accélérer votre apprentissage et votre expérience sur un nouveau langage de programmation, que ce soit dans son utilisation ou dans sa syntaxe. Grâce à son système d’autocomplétion, vous pouvez apprendre tout en codant, en intégrant facilement les spécificités du langage. J’ai personnellement utilisé Copilot pour réaliser un petit PoC d’implémentation d’OpenAI en Flutter, dont vous pouvez retrouver le code source ici 🔗.
Mon conseil pour tirer partie au maximum de Github Copilot
Mon conseil est de vous forcer à être le plus Clean Code possible. Utilisez des noms de variables et de fonctions précis, faites en sorte de bien découper votre code et que chacune de vos fonctions soit créée pour réaliser une seule chose.
Vous verrez alors que Copilot va vous pondre du code hyper qualitatif et surtout cohérent par rapport à votre contexte.
Epilogue
Après avoir utilisé GitHub Copilot pendant 2 mois, je suis convaincu que cette IA révolutionne la manière de coder. Avec une précision impressionnante, elle propose des solutions cohérentes et qualitatives, qui facilitent grandement le processus de développement. En tant que développeur, j’ai pu tirer parti de ses fonctionnalités pour écrire du code plus rapidement et plus efficacement, tout en améliorant la qualité de mes tests unitaires.
Bien sûr, Copilot n’est pas infaillible et peut parfois générer du code qui ne correspond pas exactement à ce que l’on souhaite, mais cela reste anecdotique par rapport à tous les avantages qu’il apporte. Personnellement, j’ai trouvé que son utilisation est d’autant plus optimale lorsque l’on travaille avec un code propre et bien structuré.
Je recommande vivement à tous les développeurs d’essayer GitHub Copilot, pour en faire leur propre expérience et constater les avantages qu’elle peut apporter. Cette IA est un véritable game-changer pour le développement logiciel, et j’ai hâte de voir comment elle va continuer à évoluer dans les années à venir.