- La programmation lettrée (Literate Programming), qui tisse le code et son explication en langage naturel dans un même récit, n’a pas été largement adoptée en raison du fardeau consistant à maintenir en parallèle le code et la documentation, mais les agents de codage IA peuvent éliminer ce travail central
- Avec
org-babel d’Org Mode dans Emacs, il est possible de faire de la programmation lettrée multilingue, mais dans les grands projets, la contrainte du processus d’extraction du code source (tangling) en limite l’usage
- En demandant à un agent de rédiger un runbook basé sur un fichier Org, on obtient un workflow où l’intention est développée dans l’explication, où les blocs de code peuvent être exécutés de façon interactive, et où les résultats sont enregistrés dans le document
- Comme l’agent gère automatiquement la synchronisation entre explication et code ainsi que le tangling, il n’est plus nécessaire de réécrire les explications à chaque modification du code, tout en exploitant les capacités de traduction et de résumé dans lesquelles les LLM excellent
- À mesure que le rôle des ingénieurs évolue de l’écriture vers une activité centrée sur la lecture du code, la question clé devient la praticité d’une base de code narrative maintenue par des agents
Concept et limites de la programmation lettrée
- La programmation lettrée (Literate Programming) consiste à mêler le code et son explication en langage naturel afin qu’un lecteur sans connaissance préalable puisse lire la base de code comme un récit et en comprendre le fonctionnement
- Le concept est séduisant, mais dans la pratique il impose le poids de maintenir deux récits parallèles — le code lui-même et son explication — ce qui est la raison fondamentale qui en a limité l’adoption
- Dans la pratique, la forme la plus répandue est celle des notebooks Jupyter dans la communauté data science, où explications, calculs et résultats s’affichent ensemble dans le navigateur
Emacs Org Mode et la programmation lettrée
- Org Mode d’Emacs prend en charge la programmation lettrée multilingue via le package
org-babel, avec la possibilité d’exécuter n’importe quel langage et de capturer les résultats dans le document
- Cela reste toutefois un usage de niche, réservé à un petit nombre d’utilisateurs passionnés
- Si l’on utilise un fichier Org comme source de vérité d’un grand projet logiciel, le code source devient en pratique une sortie compilée, et il faut l’extraire (« tangle ») puis le déployer à destination après chaque modification
- Cela peut être automatisé, mais si l’utilisateur ou l’agent modifie directement le vrai code source, il est facile qu’il soit écrasé au prochain tangle
Schémas d’usage avant les agents
- L’idée n’a pas été abandonnée avant l’arrivée des LLM, car elle donnait déjà des résultats suffisants pour la gestion de configurations personnelles
- Un modèle d’usage d’Org Mode pour les tests manuels et la prise de notes : au lieu de la ligne de commande, on écrit et exécute les commandes dans l’éditeur, on les modifie jusqu’à ce que chaque étape soit correcte, puis on enregistre les résultats sur place
- « Si l’on combine la prise de notes et l’exécution des tests, les notes sont générées gratuitement une fois les tests terminés »
Un nouveau workflow avec les agents
- Des agents de codage comme Claude ou Kimi comprennent bien la syntaxe d’Org Mode, et Org est un langage de balisage tolérant que les LLM manipulent très bien
- L’ampleur de la syntaxe d’Org Mode est un inconvénient pour les humains, mais ce n’est pas un problème pour les modèles de langage
- Lors d’un test fonctionnel, si l’on demande à l’agent de rédiger un runbook Org :
- l’explication contient la réflexion du modèle sur l’intention de chaque étape
- les blocs de code, après relecture, peuvent être exécutés de manière interactive un par un ou dans leur ensemble comme un script
- les résultats sont enregistrés sous le code, comme dans un notebook Jupyter
- On peut modifier l’explication puis demander au modèle de mettre à jour le code, ou modifier le code puis laisser le modèle refléter ce sens dans l’explication, ou encore laisser l’agent modifier les deux en même temps
- Le problème du maintien de récits parallèles disparaît
Le travail clé que les agents éliminent
- En confiant le tangling à l’agent, le problème de l’extraction du code est lui aussi résolu
- Via un fichier
AGENTS.md, on peut demander à l’agent de traiter les fichiers Org comme source de vérité, de toujours rédiger des explications et d’exécuter le tangle avant exécution
- L’agent sait très bien faire tout cela et ne se fatigue jamais de réécrire l’explication après une modification du code
- Les agents suppriment ainsi le surcroît de travail fondamental qui empêchait la programmation lettrée de se généraliser, en mettant à profit les capacités de traduction et de résumé dans lesquelles les LLM excellent le plus
Bénéfices attendus
- La base de code peut être exportée dans différents formats pour en faciliter la lecture
- C’est particulièrement important si le rôle principal des ingénieurs se déplace de l’écriture vers la lecture
- Même si cela n’est pas étayé par des données, on peut supposer que la qualité du code généré pourrait aussi s’améliorer, car un récit expliquant l’intention de chaque bloc de code apparaît dans le contexte avec le code lui-même
- Cela n’a pas encore été essayé à grande échelle sur une base de code importante et complète, et est pour l’instant utilisé dans des workflows de test et de documentation de processus manuels
Limites d’Org Mode et alternatives
- Le format Org est étroitement intégré à Emacs, ce qui constitue une contrainte, et l’idée de longue date est qu’Org devrait sortir d’Emacs
- On aimerait recommander Markdown comme alternative, mais Markdown manque de mécanismes pour inclure des métadonnées
- Le concept de Properties d’Org Mode permet de manipuler les documents de manière programmatique en Emacs Lisp, et désormais les LLM peuvent même écrire des fonctionnalités sur mesure pour ces documents en Emacs Lisp dans la section file variables
- Markdown n’a pas l’équivalent des header arguments d’Org Mode pour spécifier les détails d’exécution des blocs de code, comme l’emplacement d’exécution ou une machine distante
- Ce qui est enthousiasmant, ce n’est pas l’implémentation spécifique d’Emacs, mais l’idée elle-même
Question centrale
- « Grâce aux agents, peut-il devenir pratique de disposer d’une base de code de grande taille qui se lit comme un récit, tout en laissant une machine infatigable maintenir la synchronisation entre modifications du code et explications ? »
Aucun commentaire pour le moment.