27 points par GN⁺ 24 일 전 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Un outil de développement de haute qualité pour SQLite, longtemps absent, a pu être finalisé rapidement avec l’aide de l’IA
  • L’obstacle majeur a été la construction du parseur, en raison de l’absence de spécification grammaticale officielle et d’une base de code C complexe
  • Des agents de codage IA comme Claude Code ont permis d’accélérer l’implémentation initiale, mais un problème de code spaghetti a conduit à une réécriture en Rust
  • L’IA s’est montrée très efficace pour la génération de code, le refactoring, l’aide à l’apprentissage et l’amélioration de l’UX, mais a aussi entraîné des effets secondaires comme le retard de conception, la déconnexion du code et l’addiction à la dépendance
  • En conclusion, l’IA n’est qu’un outil pour accélérer l’implémentation ; la conception et la direction du logiciel restent de la responsabilité humaine

Trois mois pour construire un outil de développement SQLite avec l’IA

  • Je voulais depuis longtemps un outil de développement de haute qualité pour SQLite, mais les outils open source existants étaient insuffisants en matière de fiabilité, de vitesse et de flexibilité
    • En maintenant PerfettoSQL, il existait des besoins pour un formateur, un linter, une extension d’éditeur, etc., mais aucun outil adapté n’était disponible
    • Je voulais créer un nouvel outil comme projet personnel, mais la difficulté et le poids du travail répétitif ont repoussé cela pendant des années

Les difficultés du projet

  • SQLite ne dispose ni de spécification grammaticale officielle ni d’API de parseur stable
    • En interne, il ne génère pas d’arbre de syntaxe, il a donc fallu extraire directement la logique du parseur depuis le code source
    • Il fallait mapper une à une plus de 400 règles grammaticales, et l’écriture des tests comme le débogage étaient des tâches extrêmement répétitives et fatigantes
  • La base de code C de SQLite est complexe et très dense, donc difficile à comprendre
    • La structure est si obscure qu’il a fallu plusieurs jours rien que pour comprendre l’API des tables virtuelles et son implémentation

Le processus de développement avec l’IA

  • À partir de la fin 2025, utilisation active d’agents de codage IA comme Claude Code
    • Au début, la majeure partie de la conception et de l’implémentation a été confiée à l’IA, dans une approche de type « vibe-coding »
    • Le résultat fonctionnait, mais la base de code est devenue un enchevêtrement spaghetti d’une complexité impossible à maintenir
  • Ensuite, l’ensemble a été réécrit en Rust afin de restructurer le projet
    • L’usage de Rust à la place du C a facilité le développement des composants de plus haut niveau (validateur, language server, etc.)
    • L’IA a été limitée à un rôle d’« outil d’autocomplétion renforcé », tandis que la conception, la revue et les tests ont été directement pilotés à la main
    • Mise en place d’un scaffolding de validation des sorties de l’IA : linting, vérification, automatisation des tests, etc.

Ce que l’IA a rendu possible

  • Surmonter l’inertie

    • L’IA découpe le travail en problèmes concrets, ce qui facilite le démarrage
    • Au lieu de « je dois comprendre le parsing SQLite », on passe à « j’examine l’approche proposée par l’IA », ce qui accélère l’exécution
  • Vitesse de génération de code et de refactoring

    • Quand les exigences sont claires, l’IA écrit rapidement un code standardisé et cohérent
    • En revanche, sur des conceptions non standard (comme la structure du parseur), elle devient plutôt un obstacle et il faut coder soi-même
    • Après une génération de code à grande échelle, un refactoring continu est indispensable pour préserver la qualité
  • Rôle d’assistant d’apprentissage

    • L’IA explique en temps réel de nouveaux concepts comme l’algorithme de formatage Wadler-Lindig
    • Elle permet aussi d’entrer rapidement dans des domaines moins familiers comme Rust ou les extensions VS Code
    • Quand le contexte du projet se perd, des requêtes comme « explique-moi ce composant » permettent une restauration immédiate du contexte
  • Amélioration du niveau de finition

    • Elle réduit le coût de développement des fonctionnalités annexes comme une extension d’éditeur, des bindings Python, un playground WASM ou un site de documentation
    • La baisse de charge sur l’implémentation permet de se concentrer sur l’amélioration de l’UX, par exemple les messages d’erreur ou la conception de la CLI

Les effets secondaires de l’usage de l’IA

  • Addictivité

    • Une structure de récompense façon machine à sous qui pousse à relancer « juste un prompt de plus »
    • Plus on est fatigué, plus la qualité des prompts baisse, et les résultats se dégradent, créant un cercle vicieux
  • Déconnexion vis-à-vis de la base de code

    • Plus il y a de code généré par l’IA, plus on perd le sens de la structure détaillée
    • Quand on perd le contexte, les échanges avec l’IA s’allongent et deviennent inefficaces
    • Comme solution, l’habitude a été prise de relire immédiatement le code généré et de vérifier « ce que j’aurais écrit différemment »
  • Retard et érosion de la conception

    • Le refactoring étant facile, il apparaît une tendance à repousser les décisions de conception essentielles
    • Même avec beaucoup de tests, il est difficile de masquer des erreurs de conception fondamentales, et une réécriture complète finit par s’imposer
  • Absence de perception du temps

    • L’IA ne comprend pas le contexte temporel ni le processus d’évolution du code
    • Elle peut répéter des erreurs passées ou réexplorer des problèmes déjà résolus, générant de l’inefficacité
    • La documentation peut compenser en partie, mais il reste difficile de consigner complètement l’intention de conception

La relativité de l’usage de l’IA

  • Dans les domaines que l’on comprend en profondeur, l’IA excelle et permet une revue rapide ainsi que de l’itération
    • Exemple : la génération de règles de parseur est efficace car il existe une réponse claire
  • Dans les domaines partiellement connus, elle est utile comme outil d’apprentissage mais exige une vigilance constante
    • Exemple : l’apprentissage d’un algorithme de formatage
  • À l’étape où l’on ne sait pas encore quoi construire, elle est au contraire nuisible
    • Exemple : des boucles improductives apparaissent pendant la phase de conception de l’architecture
  • L’IA est forte sur les problèmes vérifiables (compilation, tests qui passent),
    mais faible sur les problèmes sans réponse unique, comme le design ou la qualité d’API

Conclusion

  • Si un outil SQLite imaginé depuis 8 ans a pu être réalisé en seulement 3 mois, c’est grâce à l’IA
    • Mais le processus n’a pas été un simple récit de réussite : il s’est accompagné des limites et du coût de la dépendance à l’IA
  • L’IA est un accélérateur d’implémentation, mais pas un substitut à la conception
    • Elle répond précisément aux questions techniques, mais manque de mémoire historique, de goût et de sensibilité utilisateur
  • La véritable leçon est que, même si l’IA permet de se heurter plus vite aux murs,
    c’est à l’humain qu’il revient d’assumer la direction de la conception et “l’âme du logiciel”
  • Ce qu’il faut désormais, c’est partager des cas de projets capables de résister à de vrais utilisateurs et à la maintenance
    • Il ne s’agit pas de simples expériences, mais d’une accumulation d’expériences de développement collaboratif avec l’IA réalistes et durables

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.