Introduction
Développé par OpenAI, ChatGPT (Generative Pre-trained Transformer) est un agent conversationnel qui utilise l’intelligence artificielle pour générer du texte de manière contextuelle. Il a été entraîné sur une grande variété de sujets et de données. Les tâches qu’il peut accomplir sont diverses et variées. Il peut par exemple compléter du texte, le raccourcir, le traduire, le reformuler, changer le ton pour correspondre à des demandes spécifiques ou encore corriger des fautes d’orthographe et de grammaire.
Je vais vous partager comment, depuis plusieurs mois, cet outil a changé mon quotidien dans ma vie professionnelle. Je m’en sers aussi beaucoup dans ma vie personnelle, mais cela n’est pas le sujet de cet article.
ChatGPT: Un allié incontournable pour les développeurs
Dans ma vie professionnelle, en tant que CTO, je l’utilise régulièrement pour m’aider dans diverses tâches, en particulier dans le développement informatique. Il m’aide à retrouver le nom d’un package ou d’une fonction, à découvrir de nouvelles choses, à faire de la veille, à déboguer, à générer du code, etc…
Auparavant, ma première réaction aurait été de faire une recherche sur un moteur de recherche, mais maintenant, c’est souvent à ChatGPT que je m’adresse en premier. Les réponses arrivent plus rapidement et sont accompagnées d’exemples personnalisés qui rendent l’information encore plus utile.
L’efficacité de ChatGPT: Un gain de temps précieux
Là où « hier », une tâche de recherche et de développement pouvait me prendre plusieurs heures, ChatGPT me permet d’atteindre le même résultat en un temps record. Il suffit de savoir quoi lui demander et comment le formuler.
Prenons un exemple concret. Un soir, je travaillais sur un projet en Go (ou Golang, un langage de programmation open source développé par Google). J’avais besoin d’effectuer plusieurs appels API simultanément pour accélérer le processus, tout en évitant une surcharge des requêtes et en ayant certaines autres contraintes. Pour un développeur moins familiarisé avec Go comme moi, cette tâche aurait normalement nécessité plusieurs heures de recherche, de mise en pratique et de tests.
Voici comment j’ai formulé ma demande :
You are a backend developer with 20 years experience. You work with Golang 1.18. Let's create a proxy that respects the following constraints:
- Send API calls and retrieve results
- Retry on failure (maximum 2 times)
- Manage a rate limit called "Request Per Minute", which must not exceed 200
- As long as the limit is not reached, we launch as many API calls as possible.
- API calls are given in a certain order, and can be sent in any order in parallel, but the results must be ordered in the same order as the initial requests.
- The rate-limiting system must be kept in memory for subsequent calls.
En quelques minutes, j’ai obtenu un code précis et efficace qui répondait parfaitement à mes besoins.
Bien que le Français soit ma langue maternelle, j’écris mes prompts en Anglais car c’est dans cette langue que ChatGPT a été le plus entrainé et est le plus performant. Je donne toujours un contexte de départ pour mettre ChatGPT dans un rôle, aiguiller sa réponse et adapter son langage.
Pour ceux qui ne parle pas Anglais, ce prompt se traduirait en français de la façon suivante:
Vous êtes un développeur backend avec 20 ans d'expérience. Créons un proxy qui respecte les contraintes suivantes :
- Envoyer des appels API et récupérer les résultats
- Réessayer en cas d'échec (maximum 2 fois)
- Gérer une limite de débit appelée "Request Per Minute", qui ne doit pas dépasser 200
- Tant que la limite n'est pas atteinte, nous lançons autant d'appels API que possible.
- Les appels API sont donnés dans un certain ordre, et peuvent être envoyés dans n'importe quel ordre en parallèle, mais les résultats doivent être classés dans le même ordre que les requêtes initiales.
- Le système de limitation du débit doit être conservé en mémoire pour les appels suivants.
Explication et apprentissage
ChatGPT n’est pas seulement un outil de génération de code. Il est également un formidable professeur. Il m’a fourni non seulement le code dont j’avais besoin, mais aussi des explications détaillées sur son fonctionnement. J’ai simplement eu à lui demander :
Explain the code generated previously for a senior developer but beginner in Golang
Ainsi, j’ai pu m’assurer que j’avais bien compris le code généré précédemment, et de le réutiliser en toute confiance.
Il est important de noter que chaque conversation avec ChatGPT a un contexte dédié, qui est réutilisé au sein de la même conversation. C’est pourquoi je peux faire référence à des réponses précédentes. Cependant, ce contexte a une limite : plus votre conversation est longue, plus les références aux réponses les plus anciennes seront floues.
D’autres utilisations de ChatGPT
Implémentation de fonction
Il suffit de donner la signature d’une fonction (nom, paramètres et valeur de retour), et de décrire son comportement, et ChatGPT vous fournira une première implémentation. Vous pouvez le tester par vous-même. Voici un exemple:
You are a go developper with 20 years of experiences. Your role is to write clean and testable code. You work with Golang version 1.18. Write a function that transform a camelCase string into a snake_case string, and that handle errors. Below is the function signature:
'''
func camelCaseToSnakeCase(camelCase string) (string, error)
'''
Le code généré est-il trop long ? Demandez-lui de le raccourcir ou de faire plusieurs petites fonctions. La méthode utilisée ne vous convient pas ? Demandez-lui de faire autrement, d’utiliser une certaine bibliothèque ou soyez plus précis dans la description de la fonction ou des contraintes qu’il doit respecter.
Génération de tests unitaires
Plus d’excuses pour ne pas écrire vos tests unitaires ! Ici encore, vous devez simplement fournir à ChatGPT une signature de fonction, un contexte et une description. Voici un exemple:
You are a PHP developer with 20 year of experience. You are currently working with Symfony 5.2, already deployed in production. Your role is to write good software quality. Write unit testing for the following method:
'''
public function getFinalPrice(int $articlePrice, int $quantity, float $discount): int
'''
Ici, je précise already deployed in production
pour ne pas qu’il m’indique comment configurer PHPUnit et pour qu’il aille à l’essentielle.
Vous pouvez aussi lui fournir le corps de la méthode si besoin (si par exemple la méthode lance des Exceptions ou si elle contient un peu de branching).
Explication et apprentissage
De la même manière que dans mon premier exemple, si un morceau de code vous semble obscur, au lieu de passer du temps à essayer de le déchiffrer, vous pouvez copier/coller le code dans ChatGPT. Que vous recherchiez un patron de conception, que vous ayez du mal à comprendre un concept, ou que vous cherchiez à réaliser quelque chose de précis, ChatGPT peut vous aider. Vous pouvez même l’utiliser comme un outil pédagogique pour l’apprentissage de nouvelles compétences.
You are a lead developer with 20 years of experience working with Node.js and JavaScript. Explain what a closure is, when it should and should not be used, and provide two examples.
Traduction de code
Je considère le développement comme une langue étrangère. Imaginez que vous trouvez une fonction sur internet écrite dans un langage spécifique ou que vous avez développé une fonction dans un certain langage, mais que vous avez besoin de la transcrire dans un autre langage. Fournissez le code de votre fonction dans le langage A, puis demandez à ChatGPT de le traduire dans la langue B.
Un autre exemple serait si vous avez une définition OpenAPI (anciennement Swagger) en YAML, mais que vous avez maintenant besoin de cette définition en JSON. Encore une fois, vous pouvez en un rien de temps réécrire votre définition dans un nouveau format.
Utilisation d’OpenAPI et génération de mocks
En parlant d’OpenAPI, je l’ai déjà utilisé pour générer des définitions d’API très rapidement. Expliquez ce que fait votre endpoint, ajoutez des contraintes, et laissez la magie opérer.
Une fois votre définition générée, ou en lui indiquant une définition existante, vous pouvez demander à ChatGPT de générer des exemples qui pourraient être utilisés pour améliorer votre documentation, pour vos tests ou pour mocker une réponse d’API.
Via un JSON existant, vous pouvez également lui demander de générer un JSON schema.
Refactoring et amélioration de code
ChatGPT peut également être utilisé pour d’autres tâches, telles que le refactoring. Il peut suggérer des changements pour améliorer la qualité de votre code, en expliquant pourquoi ces changements sont nécessaires.
Vous pouvez demander de l’aide pour rendre votre code plus lisible, plus testable ou plus efficace. Vous pouvez également demander de l’aide pour ajouter des commentaires, ou pour renommer des variables et des fonctions afin d’améliorer la lisibilité de votre code.
Enfin, si vous avez besoin de découper une fonction en plusieurs plus petites ou de fusionner plusieurs fonctions en une seule, ChatGPT peut vous aider à le faire.
Vous pouvez aussi utiliser l’extension Github Copilot dans votre IDE préféré et compatible (Visual Studio code, JetBrains IDE, ..) qui utilise une version spécialisée de ChatGPT pour fonctionner.
Pour conclure
Vous l’aurez sans doute remarqué, les prompts que je vous ai partagés ont une structure bien définie. Je mets d’abord GPTChat dans un rôle en précisant le comportement attendu. Ensuite, je lui exprime clairement mes attentes. Enfin, si nécessaire, je lui fournis des informations complémentaires (comme une définition de fonction ou un fragment de code).
Il existe de nombreux prompts partagés par des utilisateurs sur Internet. Je vous encourage vivement à y jeter un œil afin d’explorer toutes les possibilités qu’ils offrent : https://github.com/f/awesome-chatgpt-prompts
ChatGPT est pour moi un formidable outil. Au quotidien, ChatGPT me fait gagner beaucoup de temps. Pour ceux qui auraient peur que cela ne remplace certaines professions, dont celle de développeur, n’ayez crainte pour le moment. De mon point de vue, il est peu probable que cela arrive à court terme, car cela nécessite :
- savoir comment l’utiliser et comment structurer ses prompts (on parle aussi d’engineering de prompts)
- une plus grande démocratisation (je rencontre encore des personnes qui ne connaissent pas ChatGPT ou qui ne l’utilisent pas)
- une expertise pour formuler les requêtes (il y a une différence notable entre les demandes d’un développeur junior et celles d’un développeur senior, sans parler de la sensibilité à la tech).
- une expertise pour utiliser les réponses de ChatGPT, une connaissance métier des applications et une connaissance des systèmes.
Cependant, malgré le fait que ChatGPT a transformé ma façon de travailler dans de nombreux domaines, dont le développement, tout n’est pas parfait. Sans rentrer dans les détails, il est important de mentionner certaines limites de cet outil.
Étant donné que ChatGPT n’est pas connecté à Internet, et que ses données d’entraînement datent au maximum de septembre 2021, il n’est pas au courant des dernières versions des logiciels et des bibliothèques. Il peut produire du code obsolète, ne respectant pas les bonnes pratiques actuelles, ou ne correspondant plus aux nouveaux standards. Il peut également vous suggérer d’utiliser une bibliothèque désuète, non mise à jour ou comportant des vulnérabilités de sécurité. Pour remédier à cela, vous pouvez toujours effectuer une recherche sur un moteur de recherche pour vérifier que le code produit est à jour, lui fournir la signature des nouvelles fonctions ou packages, ou utiliser des plugins disponibles depuis peu.
Je vous conseille de faire attention à ce que vous partagez comme information dans vos prompts. Par défaut, l’historique des conversations est stocké sur les serveurs d’OpenAI. Celui-ci pourra potentiellement être analysé puis utilisé pour améliorer ChatGPT. Certaines grandes entreprises technologiques, comme Apple ou Amazon, limitent leur utilisation. Récemment, Samsung a connu des problèmes de fuites de données sensibles.
ChatGPT est un formidable outil qui a modifié ma manière de travailler. J’espère que ce partage d’expérience vous sera utile et vous donnera envie de l’utiliser.
Je suis impatient de voir comment cette technologie évoluera dans le futur et comment elle va changer notre manière de développer. De mon côté, je vais continuer à l’utiliser et je vais continuer à apprendre à l’utiliser et à comprendre ses limites. Je suis persuadé qu’il reste encore beaucoup à découvrir avec ChatGPT et les LLM en général.
Vous avez une idée, un exemple, une question, ou vous voulez partager votre expérience ? N’hésitez pas à commenter, et surtout à partager !