1. Introduction
Un des compétences les plus intéressantes des modèles conversationnels est qu’ ils sont assez doués pour l’écriture de code informatique.
A la base, ceci peut sembler surprenant car ces modèles ont plutôt été développés dans le but de converser naturellement avec nous dans nos propres langues. En réalité, les développeurs de ces modèles ont cherché dès le début à rendre ces modèles capables de coder, et leurs jeux de données d’entraînement comprennent une grande quantité de code informatique.
Ceci transforme en pratique un programme comme ChatGPT en une sorte « programmeur conversationnel », et des modèles similaires sont intégrés dans certains sites web à destination de programmeurs chevronnés comme GitHub (qui offre GitHub Copilot, un assistant de programmation dont l’accès est payant).
Ce texte sera organisé en deux parties. Dans la première partie, nous regarderons comment utiliser ChatGPT dans des tâches de programmation élémentaires. Dans la seconde partie, nous réfléchirons aux cas d’utilisation appropriés, les avantages et les limitations de ces nouveaux assistants de programmation.
2. Quelques cas d’utilisation
Les modèles générationnels ont des compétences suffisantes pour rédiger des codes simples mais leur avantage est surtout qu’ils peuvent assister un programmeur dans la création de programmes élémentaires ou de fonctions et routines bien circonscrites, à condition de bien décrire l’algorithme dans le texte de la question, ainsi que le langage de programmation souhaité.
Ces modèles peuvent aussi servir à automatiser des codes de nature répétitifs dont la rédaction à la main est fastidieuse (par exemple pour les interfaces utilisateur graphiques), ou encore proposer des améliorations à un code préalablement fourni, voire identifier des erreurs dedans. Finalement, si vous expliquez le comportement attendu d’un programme, vous pouvez demander la génération automatisée de code de test unitaires (ce qui tombe en général dans la catégorie « barbant »!). Quoi que vous fassiez, attention de toujours rester critiques quant aux propositions qui vous sont faites.
Nous allons passer ces différents cas en revue, en illustrant avec le langage Python :
2.1. Rédiger du code exécutant un algorithme élémentaire
Il suffit de bien décrire ce que l’on veut, y compris le langage et la forme (programme autonome, fonction avec ses arguments…). Nous allons ici demander à ChatGPT le code pour une fonction Python qui retourne une liste de nombres premiers :
Cela semble bien correct. Le modèle en a profité pour créer une autre fonction qui indique si un nombre est premier ou pas. Très bien. Il ne reste qu’à copier le code et le placer dans un fichier source puis l’exploiter.
2.2. Commenter le code
Vous pouvez utiliser le modèle à la fois pour ajouter des commentaires en ligne dans un code que vous lui fournissez, ou encore pour générer des fichiers de documentation séparés (README, description d’interface..).
Commençons par demander à ChatGPT de commenter le code qui a été généré au point précédent.
Et voici le fichier README qui décrit succinctement le code:
Pas grand chose à redire, cela semble fonctionner correctement. A noter que le modèle à utilisé un format Markdown sans que cela lui ait été demandé.
2.3. Demander la génération d’une batterie de tests unitaires
La bonne pratique de la programmation veut que chaque fonctionnalité codée se voie accompagnée d’une fonction de test unitaire qui s’intègre dans un environnement de test/validation qui va être exécuté à chaque mise à jour du code afin d’éviter toute régression. Demandons donc à ChatGPT de générer un code de ce type pour nos deux fonctions :
Ici encore, cela semble correct. Néanmoins, il serait intéressant d’ajouter des tests pour voir comment le programme se comporte si on lui donne en argument une valeur nulle ou négative, voire non-numérique, pour voir la robustesse de la fonction en cas d’argument incorrect. Bien sûr vous pouvez lui demander interactivement de le faire ou bien l’ajouter vous-même à la main.
2.4. Traduire du code d’un langage à l’autre
A titre d’exemple, nous allons traduire la fonction décrite ci-dessus de Python vers Go.
Je n’ai pas testé ce code mais ici encore le code semble tenir la route. Il serait néanmoins judicieux de le tester, éventuellement en demandant au modèle de fournir des fonctions de test comme il le suggère par ailleurs lui-même.
2.5. Faire générer un code fastidieux
Pour garder cet exemple simple, nous allons momentanément quitter le monde du Python pour passer au HTML, qui contient souvent des tas de répétitions pénibles à encoder.
Ici aussi, c’est correct. Il suffit de sauvegarder le texte dans un fichier à l’extension .htm ou .html et vous pouvez l’ouvrir dans un navigateur.
2.6. Demander des informations sur les librairies appropriées à un projet
Identifier les librairies disponibles les plus utiles à un projet est souvent une des tâches les plus importantes de la rédaction d’un programme. Supposons que je cherche à faire de l’analyse linguistique en python. Il existe des librairies qui vont offrir une série de fonctions de traitement pour me faciliter la tâche. Demandons à ChatGPT ce qu’il peut proposer :
Cela semble un bon point de départ. Bien sûr, vous pouvez approfondir le dialogue et demander des détails sur l’une ou l’autre librairie afin d’orienter votre choix.
3. Réflexions
Les modèles conversationnels ne sont pas (encore ?) en mesure de remplacer un programmeur. Le code qu’ils rédigent est susceptible de contenir des erreurs et il ne faut pas attendre d’eux la création d’une application complexe à partir de rien. Il ne faut pas oublier que ces modèles sont « dressés » à répéter ce qu’ ils ont vu ailleurs – y compris les erreurs éventuelles -, pas à raisonner de manière abstraite…
Cela veut aussi dire que les personnes n’ayant aucune expérience en programmation ne pourront pas recourir à ces modèles pour pallier à leur ignorance. Par contre, le programmeur « occasionnel », celui qui connaît les bases du langage sans être plongé dedans quotidiennement, verra le gain le plus important. Le programmeur expert pourra l’utliser pour confronter ses propres idées mais le gain sera probablement moindre.
Leur autre grande valeur ajoutée est qu’ils ont un bon niveau de connaissance des différentes librairies et packages existants qui sont souvent d’une grande aide à la programmation. Et pour cela, il suffit d’entamer un dialogue avec le modèle en lui demandant ce qu’on cherche et dans quel contexte. Comme pour les autres utilisations de ces modèles, il ne faut pas hésiter à remettre en cause ses propositions ou lui demander de changer d’approche.
Et d’ailleurs, quels langages de programmation ces modèles maîtrisent-ils ? Eh bien la plupart d’entre eux, soit non seulement les suspects habituels (Python, Java, C++, Go, PHP…) mais aussi des langages moins répandus comme le Fortran, le Cobol ou le Lisp. Et si vous hésitez sur le choix d’un langage, vous pouvez lui poser la question…
Une dernière remarque pour mentionner le plugin code interpreter qui est disponible si vous avez l’abonnement ChatGPT+. Je ne l’ ai volontairement pas utilisé dans cet article pour rester généraliste. Ce plugin va permettre à ChatGPT d’exécuter automatiquement du code qu’il génère et de vous montrer le résultat, au lieu de devoir le recopier manuellement dans un éditeur puis l’exécuter. C’est un avantage intéressant si vos scénarios d’utilisation sont fortement orientés vers la programmation ou si vous devez souvent analyser des données.