Skip to content

Articles

5 façons d'améliorer votre productivité de codage avec l'IA générative

31 janvier 2025 • 8 min de lecture

5 façons d'améliorer votre productivité de codage avec l'IA générative

En tant que Software Craftsman avec des années d’expérience dans le domaine, j’ai été témoin de l’impact de l’IA générative sur le développement logiciel depuis l’introduction de ChatGPT en 2023. Grâce à l’application pratique, j’ai identifié cinq façons puissantes d’exploiter cette technologie pour améliorer la productivité.

1. Recherche de code améliorée

La façon la plus fréquente dont j’utilise l’IA générative est de rechercher des informations techniques. Les moteurs de recherche traditionnels nécessitent une terminologie précise, tandis que l’IA générative comprend les concepts et le contexte. Par exemple, lors de la recherche du principe d’optimisation des paramètres de méthode, je demande :

Prompt

Quel est le nom du concept de programmation où vous ne devriez passer que les paramètres qui sont réellement utilisés par la méthode ? Passer des paramètres à une méthode qui ne sont pas utilisés par la méthode crée des dépendances inutiles.

L’IA générative comprend le concept que je décris (Loi de Déméter) et fournit la bonne réponse, éliminant le besoin de multiples recherches.

2. Génération de code efficace

L’IA générative excelle dans l’automatisation des tâches de codage répétitives. Récemment, j’avais besoin de convertir un gros fichier JSON en instructions d’insertion de base de données. Au lieu d’écrire un code de conversion fastidieux, j’ai fourni les données JSON à l’IA avec des instructions claires pour générer des instructions d’insertion MS SQL Server. Cette approche a économisé des heures de temps de codage manuel et réduit la possibilité d’erreurs.

Prompt :

Utilisez les données JSON fournies ci-dessous et générez des instructions d'insertion pour MS SQL Server à insérer dans la table dbo.Users.

[  
{  
"Username": "musiclover87",  
"Lastname": "Smith",  
"Firstname": "Alice",  
"Birthdate": "1987-06-12",  
"Password": "password123",  
"FavoriteIceCream": "Chocolate Chip Cookie Dough",  
"FavoriteSuperhero": "Spider-Man"  
},  
{  
"Username": "bookworm92",  
"Lastname": "Johnson",  
"Firstname": "Bob",  
"Birthdate": "1992-03-21",  
"Password": "securePassword",  
"FavoriteIceCream": "Mint Chocolate Chip",  
"FavoriteSuperhero": "Batman"  
},  
{  
"Username": "gamergirl01",  
"Lastname": "Williams",  
"Firstname": "Carol",  
"Birthdate": "2001-11-05",  
"Password": "gamer4life",  
"FavoriteIceCream": "Strawberry",  
"FavoriteSuperhero": "Wonder Woman"  
},  
{  
"Username": "techieguy95",  
"Lastname": "Brown",  
"Firstname": "David",  
"Birthdate": "1995-08-18",  
"Password": "techmaster",  
"FavoriteIceCream": "Vanilla Bean",  
"FavoriteSuperhero": "Iron Man"  
},  
{  
"Username": "foodiequeen89",  
"Lastname": "Davis",  
"Firstname": "Emily",  
"Birthdate": "1989-04-29",  
"Password": "delicious123",  
"FavoriteIceCream": "Salted Caramel",  
"FavoriteSuperhero": "Captain Marvel"  
},  
{  
"Username": "traveler76",  
"Lastname": "Miller",  
"Firstname": "Frank",  
"Birthdate": "1976-12-02",  
"Password": "adventuretime",  
"FavoriteIceCream": "Coffee",  
"FavoriteSuperhero": "Thor"  
},  
{  
"Username": "fitnessfanatic98",  
"Lastname": "Wilson",  
"Firstname": "Grace",  
"Birthdate": "1998-09-15",  
"Password": "strongandfit",  
"FavoriteIceCream": "Mango Sorbet",  
"FavoriteSuperhero": "Black Widow"  
},  
{  
"Username": "photographylover85",  
"Lastname": "Moore",  
"Firstname": "Henry",  
"Birthdate": "1985-05-23",  
"Password": "pictureperfect",  
"FavoriteIceCream": "Pistachio",  
"FavoriteSuperhero": "Superman"  
},  
{  
"Username": "musicjunkie93",  
"Lastname": "Taylor",  
"Firstname": "Isabella",  
"Birthdate": "1993-02-08",  
"Password": "musicislife",  
"FavoriteIceCream": "Rocky Road",  
"FavoriteSuperhero": "Black Panther"  
},  
{  
"Username": "sportsfanatic88",  
"Lastname": "Anderson",  
"Firstname": "Jack",  
"Birthdate": "1988-10-30",  
"Password": "goteamgo",  
"FavoriteIceCream": "Cookies and Cream",  
"FavoriteSuperhero": "Captain America"  
}  
]

Sortie :


-- Insertion d'enregistrements dans la table dbo.Users

INSERT INTO dbo.Users (Username, Lastname, Firstname, Birthdate, Password, FavoriteIceCream, FavoriteSuperhero)
VALUES 
('musiclover87', 'Smith', 'Alice', '1987-06-12', 'password123', 'Chocolate Chip Cookie Dough', 'Spider-Man'),
('bookworm92', 'Johnson', 'Bob', '1992-03-21', 'securePassword', 'Mint Chocolate Chip', 'Batman'),
('gamergirl01', 'Williams', 'Carol', '2001-11-05', 'gamer4life', 'Strawberry', 'Wonder Woman'),
('techieguy95', 'Brown', 'David', '1995-08-18', 'techmaster', 'Vanilla Bean', 'Iron Man'),
('foodiequeen89', 'Davis', 'Emily', '1989-04-29', 'delicious123', 'Salted Caramel', 'Captain Marvel'),
('traveler76', 'Miller', 'Frank', '1976-12-02', 'adventuretime', 'Coffee', 'Thor'),
('fitnessfanatic98', 'Wilson', 'Grace', '1998-09-15', 'strongandfit', 'Mango Sorbet', 'Black Widow'),
('photographylover85', 'Moore', 'Henry', '1985-05-23', 'pictureperfect', 'Pistachio', 'Superman'),
('musicjunkie93', 'Taylor', 'Isabella', '1993-02-08', 'musicislife', 'Rocky Road', 'Black Panther'),
('sportsfanatic88', 'Anderson', 'Jack', '1988-10-30', 'goteamgo', 'Cookies and Cream', 'Captain America');

3. Traduction de code transparente

La traduction de code est un autre domaine où l’IA générative s’avère inestimable. Lors d’un projet récent de conversion d’une application C# vers Python, nous avons utilisé l’IA de deux façons cruciales :

  1. Conversion directe de fonction de Python vers C#

  2. Traduction ORM complexe d’Entity Framework vers SQLAlchemy

Cette capacité a considérablement accéléré notre processus de migration et assuré la cohérence entre les traductions.

Conversion de Python vers C# :

Prompt :

Convertissez le code Python suivant en C#.
def reverse_string(text): 
"""
Inverse une chaîne donnée. 
	Args: text: La chaîne à inverser. 

Returns: La chaîne inversée.

""" 
return text[::-1]

Sortie :

/// <summary>
/// Inverse une chaîne donnée.
/// </summary>
/// <param name="text">La chaîne à inverser.</param>
/// <returns>La chaîne inversée.</returns>
public static string ReverseString(string text)
{
	return new string(text.Reverse().ToArray());
}

4. Documentation de code automatisée

La documentation est essentielle mais souvent fastidieuse. L’IA générative rationalise ce processus de deux façons :

  1. Résumé de code : Analyser le code existant et fournir des résumés clairs et concis

  2. Génération d’en-têtes de documentation : Créer une documentation de méthode complète qui maintient les standards de qualité du code

Par exemple, lors de la documentation d’algorithmes de tri ou de logique métier complexe, l’IA peut générer une documentation claire et précise qui suit les standards de l’équipe et les meilleures pratiques.

Prompt :

Générez un en-tête de documentation pour la fonction ci-dessous en ajoutant l'en-tête et en imprimant la fonction complète avec l'en-tête de documentation.
def bubble_sort(list_):
  n = len(list_) 
  for i in range(n):
    # Flag pour optimiser, si aucun échange n'a lieu, la liste est triée
    swapped = False
    # Les derniers i éléments sont déjà en place
    for j in range(0, n-i-1):
      # Échanger si l'élément trouvé est plus grand que l'élément suivant
      if list_[j] > list_[j+1]:
        list_[j], list_[j+1] = list_[j+1], list_[j]
        swapped = True
    # Si aucun élément n'a été échangé dans la boucle interne, la liste est triée
    if not swapped:
      break
  return list_

Sortie :

def bubble_sort(list_):
    """
    Trie une liste donnée en utilisant l'algorithme de tri à bulles.

    Args:
        list_: La liste d'éléments à trier. Les éléments doivent être comparables.

    Returns:
        Une nouvelle liste contenant tous les éléments de la liste originale en ordre croissant.
        
    Example:
        >>> bubble_sort([64, 34, 25, 12, 22, 11, 90])
        [11, 12, 22, 25, 34, 64, 90]
    """
    n = len(list_) 
    for i in range(n):
        # Flag pour optimiser, si aucun échange n'a lieu, la liste est triée
        swapped = False
        # Les derniers i éléments sont déjà en place
        for j in range(0, n-i-1):
            # Échanger si l'élément trouvé est plus grand que l'élément suivant
            if list_[j] > list_[j+1]:
                list_[j], list_[j+1] = list_[j+1], list_[j]
                swapped = True
        # Si aucun élément n'a été échangé dans la boucle interne, la liste est triée
        if not swapped:
            break
    return list_

5. Échafaudage d’application

L’application la plus impressionnante de l’IA générative est peut-être sa capacité à générer des structures d’application initiales. Avec un schéma ou une spécification claire, l’IA peut créer :

  • Scripts de création de base de données

  • Mappages ORM

  • Points de terminaison API de base

  • Implémentations d’interface utilisateur initiales

Cette capacité réduit considérablement le temps passé sur le code standard et assure une base cohérente pour le développement ultérieur.

Prompt :

Vous êtes un ingénieur logiciel travaillant dans une grande entreprise. En utilisant le schéma de base de données suivant, générez les scripts SQL nécessaires pour créer ces tables dans Postgres. Ensuite, générez les fichiers de mappage SQL Alchemy à utiliser avec FastAPI. Enfin, générez une interface utilisateur web simple utilisant FastAPI pour lister les commandes.
User
- UserId
- FirstName
- LastName
- Address
- Address2
- City
- State
- ZipCode
- Username
- Password
- IsActive

Client
- ClientId
- Name
- Address
- Address2
- City
- State
- ZipCode
- IsActive

Order
- OrderId
- OrderDate
- InvoiceNumber
- DueDate
- ClientId
- UserId

OrderDetail
- OrderDetailId
- OrderId
- Description
- Rate
- Quantity
- LineTotal

Ledger
- TransactionId
- Debit
- Credit
- OrderId
- TransactionDate

Sortie :

...
Je vous épargne la sortie, mais elle a généré une application entière utilisant FastAPI.
...

Demandons ce que nous pouvons faire pour améliorer la conception initiale.

Prompt 2 :

C'est un excellent début. Que pouvons-nous faire pour améliorer la conception de l'application ?

Sortie :
Implémentez la journalisation pour un meilleur débogage et une meilleure gestion des erreurs.

logging.py (Optionnel)

import logging

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)

def log_error(error):
    logger.error(f"Une erreur s'est produite : {error}")

Prompt 3 :

Pouvez-vous implémenter votre suggestion d'utiliser la gestion d'erreurs et générer le code pour moi ?

Sortie :
Vous pouvez également définir des gestionnaires d’exception globaux dans votre fichier main.py si vous voulez gérer des exceptions spécifiques globalement.

main.py

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import app.routers.order_router as order_router
from .exceptions import OrderNotFoundException, InvalidInvoiceNumberException

app = FastAPI()

# Inclure le routeur
app.include_router(order_router.router)

@app.exception_handler(OrderNotFoundException)
async def order_not_found_exception_handler(request: Request, exc: OrderNotFoundException):
    return JSONResponse(
        status_code=exc.status_code,
        content={"detail": exc.detail},
    )

@app.exception_handler(InvalidInvoiceNumberException)
async def invalid_invoice_number_exception_handler(request: Request, exc: InvalidInvoiceNumberException):
    return JSONResponse(
        status_code=exc.status_code,
        content={"detail": exc.detail},
    )

Meilleures pratiques et considérations

Bien que l’IA générative soit puissante, il est important de :

  • Réviser et valider le code généré
  • Maintenir la cohérence avec les bases de code existantes
  • Considérer les implications de sécurité
  • Tester minutieusement le code généré
  • Utiliser l’IA comme un assistant plutôt qu’un remplacement du jugement d’ingénierie

Conclusion

L’IA générative est devenue un outil indispensable dans le développement logiciel moderne. En exploitant ces cinq approches - recherche améliorée, génération de code, traduction, documentation et échafaudage d’application - les développeurs peuvent considérablement augmenter leur productivité tout en maintenant la qualité du code.

La clé est de comprendre les capacités et limitations de ces outils et de les utiliser stratégiquement pour améliorer plutôt que remplacer l’expertise humaine. À mesure que ces technologies évoluent, leur intégration dans les flux de travail de développement deviendra de plus en plus précieuse.

Auteur : Chuck Conway se spécialise dans l’ingénierie logicielle et l’IA générative. Connectez-vous avec lui sur les réseaux sociaux : X (@chuckconway) ou visitez-le sur YouTube.

↑ Retour en haut

Vous pourriez aussi aimer