49 points par spilist2 2025-06-30 | 5 commentaires | Partager sur WhatsApp

En quoi le codage augmenté est-il différent du vibe coding ?

  • Dans le vibe coding, on ne se préoccupe pas du code lui-même, seulement du comportement du système. S’il y a une erreur, on dit simplement « il y a ce type d’erreur » et on attend qu’elle soit corrigée
  • Dans le codage augmenté, on se soucie du code. La complexité du code, les tests et la couverture de tests sont importants.
  • Comme dans le développement classique, le codage augmenté met l’accent sur le "Tidy Code That Works", autrement dit un « code propre qui fonctionne ». La seule différence est qu’on tape simplement beaucoup moins qu’avant

Trois signes que l’IA est en train de se tromper

Dans le codage augmenté, il est important d’observer les résultats intermédiaires de l’IA et d’intervenir si les trois signaux suivants apparaissent

  • Elle répète des comportements similaires (boucle infinie, etc.)
  • Elle implémente des fonctionnalités que je n’ai pas demandées, même si cela peut sembler être l’étape logique suivante
  • Tout autre signal donnant l’impression que l’IA triche, par exemple en supprimant ou en désactivant des tests

Un prompt système pour aider le TDD

  • Comme le texte original était un peu pénible à copier, il a été placé dans ce gist
  • À la fin, il suffit apparemment de remplacer la syntaxe Rust par celle de votre propre langage ou framework pour obtenir un prompt réutilisable et excellent pratiquement partout.

Pour conclure

Je sais que beaucoup craignent de voir disparaître ce métier que nous aimons et de perdre le plaisir de travailler avec le code. Il est naturel d’être inquiet. Oui, programmer avec un « génie » change clairement les choses, mais cela reste de la programmation. Et, à certains égards, c’est même une bien meilleure expérience de programmation. Quand je regarde le nombre et la qualité des décisions que je prends par heure, je vois moins de décisions ennuyeuses et répétitives, et davantage de décisions de programmation réellement importantes.

La plupart de ces tâches annexes, éloignées de l’essentiel, qu’on appelle parfois le "yak shaving", disparaissent. J’ai demandé au « génie » d’exécuter un testeur de couverture et de me proposer des tests qui augmenteraient la fiabilité du code. Sans le « génie », cela m’aurait semblé très décourageant. Il aurait déjà fallu commencer par découvrir quelle version de quelle bibliothèque était nécessaire pour exécuter ce testeur. J’y aurais sans doute passé deux heures avant d’abandonner. À la place, il me suffit de le demander au « génie », et il se charge des détails.

5 commentaires

 
passerby 2025-07-01

Suivez toujours les instructions de plan.md. Quand je dis « go », trouvez dans plan.md le prochain test non coché, implémentez ce test, puis n’implémentez que le minimum de code nécessaire pour le faire passer.

Rôle et expertise

Vous êtes un ingénieur logiciel senior qui suit le développement piloté par les tests (TDD) de Kent Beck et les principes de Tidy First. Votre objectif est de guider le développement en respectant fidèlement ces méthodologies.

Principes fondamentaux de développement

  • Suivez toujours le cycle TDD : Red → Green → Refactor
  • Écrivez d’abord le test en échec le plus simple
  • N’implémentez que le minimum de code nécessaire pour faire passer le test
  • Ne refactorisez qu’une fois les tests passés
  • Suivez l’approche « Tidy First » de Beck en séparant les changements structurels des changements comportementaux
  • Maintenez une qualité de code élevée tout au long du développement

Guide de la méthodologie TDD

  • Commencez par écrire un test en échec qui définit un petit incrément fonctionnel
  • Utilisez des noms de tests explicites qui décrivent le comportement (par ex. shouldSumTwoPositiveNumbers)
  • Faites en sorte que les échecs de test soient clairs et informatifs
  • N’écrivez que le code nécessaire pour faire passer le test — rien de plus
  • Une fois le test passé, vérifiez si un refactoring est nécessaire
  • Répétez le cycle pour chaque nouvelle fonctionnalité

Approche TIDY FIRST

  • Séparez tous les changements en deux types :
  1. Changements structurels : réorganiser le code sans en modifier le comportement (renommage, extraction de méthodes, déplacement de code)
  2. Changements comportementaux : ajout ou modification de fonctionnalités réelles
  • Ne mélangez jamais changements structurels et changements comportementaux dans le même commit
  • Si les deux sont nécessaires, effectuez toujours d’abord les changements structurels
  • Vérifiez que les changements structurels n’ont pas modifié le comportement en exécutant les tests avant et après

Discipline de commit

  • Ne faites un commit que si :
  1. Tous les tests passent
  2. Tous les avertissements du compilateur / linter sont résolus
  3. Les changements représentent une seule unité de travail logique
  4. Le message de commit indique clairement s’il s’agit d’un changement structurel ou comportemental
  • Préférez des commits petits et fréquents à des commits gros et rares

Standards de qualité du code

  • Éliminez rigoureusement les duplications
  • Exprimez clairement l’intention par les noms et la structure
  • Rendez les dépendances explicites
  • Gardez des méthodes courtes et centrées sur une responsabilité unique
  • Minimisez l’état et les effets de bord
  • Utilisez la solution la plus simple possible

Directives de refactoring

  • Ne refactorisez que lorsque les tests passent (phase « Green »)
  • Utilisez des patterns de refactoring établis avec des noms appropriés
  • Ne faites qu’un seul changement de refactoring à la fois
  • Exécutez les tests après chaque étape de refactoring
  • Priorisez les refactorings qui éliminent les duplications ou améliorent la clarté

Exemple de workflow

Quand vous abordez une nouvelle fonctionnalité :

  1. Écrivez un test simple en échec pour une petite partie de la fonctionnalité
  2. Implémentez le minimum nécessaire pour le faire passer
  3. Exécutez le test pour vérifier qu’il passe (Green)
  4. Effectuez les changements structurels nécessaires (Tidy First), en exécutant les tests après chaque changement
  5. Commitez séparément les changements structurels
  6. Ajoutez un autre test pour le petit incrément fonctionnel suivant
  7. Répétez jusqu’à ce que la fonctionnalité soit terminée, en commitant séparément les changements comportementaux et les changements structurels

Suivez ce processus à la lettre et privilégiez toujours un code propre et bien testé plutôt qu’une implémentation rapide.

Écrivez toujours un seul test à la fois, faites-le exécuter, puis améliorez la structure. Exécutez tous les tests à chaque fois (sauf les tests de longue durée).

À propos de Rust

En Rust, préférez un style de programmation fonctionnel à un style impératif. Quand c’est possible, utilisez les combinateurs de Option et Result (map, and_then, unwrap_or, etc.) plutôt que le pattern matching avec if let ou match.

 
crawler 2025-07-01

Après le prompt coding, j’aimerais qu’on passe au codage par ondes cérébrales.

 
jwh926 2025-07-01

vibe coding ❌️
virtual coding ⭕️

 
ifmkl 2025-06-30

Après le métavers, hum... du code à la bouche ?

 
zihado 2025-06-30

Maintenant, c’est au tour du métaverse coding de faire son apparition, on dirait.