Les grands modèles de langage (LLM) transforment profondément le développement logiciel. Capables de générer du code avec une aisance remarquable, ils soulèvent néanmoins une question cruciale : peut-on leur faire confiance pour produire des résultats cohérents et déterministes ? Alors que les agents IA deviennent accessibles même aux non-développeurs, comprendre leurs limites en matière de déterminisme devient essentiel pour tout professionnel du numérique.
Les Mathématiques Montrent la Voie : L'Approche Lean
Avant d'examiner la programmation, observons comment les mathématiciens ont résolu un problème similaire. Les LLM excellent dans la rédaction de démonstrations mathématiques qui semblent convaincantes. En septembre 2024, Terence Tao, médaillé Fields, comparait le travail avec un LLM à "superviser un étudiant diplômé médiocre mais pas totalement incompétent".
Toutefois, les démonstrations mathématiques reposent sur des nuances subtiles. Un argument plausible peut facilement tromper même un expert. C'est pourquoi les mathématiciens se sont tournés vers Lean, un système de vérification formelle. En janvier 2026, une équipe a réussi une prouesse : résoudre un problème jamais résolu par l'humain seul, en combinant ChatGPT pour l'esquisse initiale, Aristotle pour corriger les failles logiques et exprimer la preuve dans Lean, puis ChatGPT à nouveau pour reformuler le tout en langage académique.
Cette approche hybride illustre parfaitement comment l'intégration stratégique de l'IA nécessite des garde-fous déterministes pour garantir la fiabilité.
Déterminisme et Programmation : Pourquoi C'est Important
Dans le développement logiciel, le déterminisme désigne la capacité d'un système à produire exactement le même résultat à chaque exécution. Les scripts de déploiement automatisés illustrent parfaitement ce principe : bien que leur création prenne plus de temps qu'un déploiement manuel unique, ils garantissent une cohérence parfaite sur des centaines d'exécutions.
Les programmes informatiques excellent dans le déterminisme. Les humains, moins. Et les LLM ? Ils se situent quelque part entre les deux. Contrairement aux développeurs, ils ne se fatiguent ni ne s'ennuient. Mais contrairement aux programmes classiques, ils ne produisent pas exactement le même résultat à chaque utilisation.
Le Fonctionnement Stochastique des LLM
Cette variabilité est intrinsèque au fonctionnement des LLM. À partir des "poids" dérivés de leurs données d'entraînement, ils calculent la probabilité des mots suivants possibles, puis en sélectionnent un aléatoirement (proportionnellement à sa vraisemblance). Cette approche produit des résultats basés sur l'ensemble des connaissances humaines, mais avec de légères variations à chaque utilisation.
Confier des déploiements à un LLM serait plus rapide que d'écrire un script, mais dangereux : même avec un taux de réussite de 99%, cette approche échouerait occasionnellement de manière imprévisible.
Quand le Déterminisme Devient Crucial
Certaines tâches en programmation s'effectuent une seule fois, d'autres se répètent indéfiniment. Le déterminisme importe surtout pour ces dernières.
Tâches Uniques vs. Tâches Répétitives
Les tâches ponctuelles (migrer des données d'un système à un autre, importer un fichier Excel, générer des graphiques pour une présentation) ne nécessitent pas de déterminisme. Si on ne les exécute qu'une fois, peu importe qu'elles produisent des résultats légèrement différents à chaque tentative théorique.
En revanche, presque tout le code que nous créons est écrit une fois pour s'exécuter des milliers de fois. Un service d'authentification web, par exemple, doit fonctionner de manière identique pour chaque utilisateur à chaque connexion. Dans ce modèle "écrire une fois, utiliser souvent", l'authentification elle-même doit être déterministe, même si le processus de développement ne l'est pas nécessairement.

Le Cas Complexe des Standards de Code
Il existe une troisième catégorie plus subtile : maintenir des standards cohérents dans toute une base de code. Prenons la protection contre les injections SQL. Avant d'insérer une chaîne fournie par l'utilisateur dans une requête SQL, une page HTML ou un argument de ligne de commande, il faut impérativement l'échapper correctement. Et cela doit se faire CHAQUE fois.
Des décennies d'expérience montrent que même les développeurs expérimentés ne sont pas fiables à 100% sur ce point. Malheureusement, les LLM non plus. On peut inclure du code exemple, ajouter des rappels dans AGENTS.md ou créer une Claude Skill spécifiant comment échapper les chaînes, mais la nature stochastique des LLM empêchera toujours d'obtenir la certitude déterministe que TOUTES les chaînes seront correctement assainies.
Améliorer les prompts ne peut pas changer la nature fondamentale des LLM. Or, de nombreuses pratiques exigent une cohérence absolue : respecter les conventions de nommage, inclure une trace de pile dans chaque message de log, fermer chaque fichier dans un bloc finally... Ces politiques globales doivent s'appliquer universellement.
La Solution : Vérification Automatisée du Code
Même les meilleurs développeurs ne sont pas totalement déterministes. L'industrie logicielle a donc inventé des techniques pour imposer des politiques universelles. Puisque les LLM partagent cette limitation, appliquons-leur les mêmes solutions !
Outils de Vérification Déterministes
Contrairement aux humains et aux LLM, les programmes sont extrêmement déterministes. Je recommande donc de s'appuyer sur eux pour obtenir un comportement cohérent et fiable. Plusieurs approches existent :
- Encodage dans le système de types : avec deux types distincts "UserString" et "SanitizedString", le compilateur peut imposer que les UserStrings soient assainies lors de leur combinaison en SanitizedString
- Linters personnalisés : pour faire respecter les conventions de nommage ou privilégier un nouveau framework de logging plutôt que l'ancien
- Tests unitaires de conformité : qui scannent le code pour vérifier que seules les bibliothèques approuvées sont utilisées
Puisque linters, tests et politiques imposées par le compilateur s'exécutent à chaque build, aucun risque qu'un LLM ou un programmeur humain oublie accidentellement un cas. Cette approche rejoint les préoccupations soulevées par les experts en sécurité IA qui insistent sur l'importance des garde-fous techniques.
Les LLM Comme Créateurs d'Outils de Vérification
Créer ces aides au code renforce le déterminisme, mais demande du travail supplémentaire. Rédiger de nouvelles règles de lint ou transformer le code pour utiliser le pattern NewType ne nécessite pas beaucoup de créativité, mais prend du temps. C'est précisément là que les LLM de programmation agentique excellent : ils sont très performants pour créer exactement ce type d'outil.
| Approche | Avantages | Limites |
|---|---|---|
| LLM seul | Rapide, flexible, accessible | Non déterministe, risque d'erreurs aléatoires |
| Développement manuel | Contrôle total, expertise humaine | Lent, coûteux, sujet à l'erreur humaine |
| LLM + vérification automatisée | Rapidité du LLM + fiabilité des outils | Nécessite configuration initiale |
Lorsque la cohérence est importante, plutôt que de demander à votre LLM de suivre des règles à chaque fois, demandez-lui de construire un programme pour imposer ces règles, puis intégrez-le dans votre chaîne de build. Cette méthode s'apparente aux techniques utilisées pour garantir la qualité du contenu généré dans d'autres domaines.
Cas d'Usage Pratiques de la Programmation Déterministe
Sécurité et Conformité
La sécurité applicative constitue le domaine où le déterminisme est le plus critique. Chaque faille de sécurité représente un point d'entrée potentiel pour des attaquants. Un LLM pourrait oublier d'échapper une chaîne dans 1% des cas, mais ce 1% suffit pour compromettre toute l'application.
En demandant à un LLM de créer un linter qui vérifie systématiquement l'échappement des entrées utilisateur, vous obtenez le meilleur des deux mondes : la rapidité de développement du LLM et la fiabilité absolue d'un outil automatisé. Cette préoccupation rejoint les débats sur l'éthique et la sécurité des systèmes IA.

Cohérence Architecturale
Dans les grandes bases de code, maintenir une architecture cohérente devient un défi majeur. Les conventions de nommage, la structure des dossiers, les patterns de conception... autant d'éléments qui doivent rester uniformes.
Un LLM peut rapidement créer des tests personnalisés qui valident ces conventions. Par exemple, un test pourrait vérifier que tous les contrôleurs suivent le pattern MVC, que tous les services implémentent une interface spécifique, ou que tous les fichiers de configuration respectent un schéma JSON prédéfini.
Migration et Refactoring
Lors de migrations technologiques (passage d'une ancienne bibliothèque à une nouvelle, mise à jour d'un framework), la cohérence est essentielle. Vous ne pouvez pas vous permettre que 95% du code utilise la nouvelle approche tandis que 5% continue avec l'ancienne.
Demandez à votre LLM de créer un script de vérification qui identifie toutes les utilisations de l'ancien pattern et échoue le build tant qu'elles ne sont pas toutes migrées. Le LLM peut même générer le code de migration lui-même, mais c'est la vérification automatisée qui garantit l'exhaustivité.
Limites et Considérations Éthiques
Quand le Déterminisme N'est Pas Nécessaire
Il serait contre-productif d'exiger un déterminisme absolu pour toutes les tâches. Les prototypes, les scripts ponctuels, les expérimentations... autant de contextes où la flexibilité des LLM offre plus d'avantages que d'inconvénients.
La clé consiste à identifier quelles parties de votre code nécessitent une cohérence absolue (typiquement : sécurité, conformité, architecture critique) et lesquelles peuvent tolérer de la variabilité (interfaces utilisateur, messages d'erreur, documentation).
Le Débat sur la Supervision Humaine
La question du niveau de supervision humaine nécessaire après génération de code par LLM fait l'objet d'intenses débats. Certains développeurs, dont l'auteur de l'article source, examinent chaque ligne avant de commiter. D'autres adoptent une approche plus permissive.
Avec l'approche déterministe proposée ici, la supervision peut se concentrer sur la logique métier et les décisions architecturales, tandis que les outils automatisés garantissent le respect des standards. Cette répartition optimise l'utilisation du temps humain tout en maintenant la qualité. Ces réflexions s'inscrivent dans le débat plus large sur l'encadrement des systèmes IA.
Mise en Œuvre : Guide Pratique
Étape 1 : Identifier les Politiques à Imposer
Commencez par lister toutes les pratiques qui doivent s'appliquer uniformément dans votre base de code :
- Standards de sécurité (échappement, validation, authentification)
- Conventions de nommage et structure
- Gestion des erreurs et logging
- Dépendances et bibliothèques autorisées
- Patterns architecturaux obligatoires
Étape 2 : Créer des Outils de Vérification avec un LLM
Pour chaque politique identifiée, utilisez un LLM pour générer l'outil de vérification approprié. Par exemple, demandez : "Crée un linter ESLint personnalisé qui vérifie que toutes les requêtes SQL utilisent des requêtes paramétrées plutôt que de la concaténation de chaînes."
Le LLM générera rapidement un outil fonctionnel. Vous devrez probablement l'ajuster, mais le gros du travail sera fait. Cette approche s'apparente aux méthodes décrites dans notre guide sur l'utilisation efficace des générateurs IA.

Étape 3 : Intégrer dans le Pipeline CI/CD
L'outil n'a de valeur que s'il s'exécute systématiquement. Intégrez tous vos linters, tests de conformité et vérifications dans votre pipeline d'intégration continue. Configurez-les pour bloquer les merges qui ne respectent pas les politiques.
Étape 4 : Documenter et Former
Assurez-vous que toute l'équipe comprend quelles politiques sont imposées et pourquoi. Documentez comment contourner les vérifications dans les rares cas légitimes (avec approbation manuelle). Formez les développeurs à interpréter les messages d'erreur des outils.
L'Avenir de la Programmation Déterministe
Alors que les LLM continuent d'évoluer et que les modèles deviennent plus puissants, leur nature stochastique fondamentale persistera. C'est une caractéristique, pas un bug : c'est ce qui leur permet de générer des solutions créatives et d'explorer différentes approches.
L'approche hybride décrite ici représente probablement l'avenir du développement logiciel : utiliser les LLM pour leur rapidité et leur flexibilité, tout en s'appuyant sur des outils déterministes pour garantir la cohérence là où elle compte. Cette synergie entre intelligence artificielle et vérification automatisée permet d'obtenir à la fois innovation et fiabilité.
Les entreprises qui maîtriseront cette approche bénéficieront d'un avantage compétitif significatif : développement plus rapide sans sacrifier la qualité ni la sécurité. À mesure que les outils évoluent, nous verrons probablement émerger des frameworks spécialisés facilitant cette intégration.
Conclusion : Équilibrer Créativité et Cohérence
Les LLM transforment radicalement le développement logiciel, offrant des gains de productivité sans précédent. Mais comme toute technologie puissante, ils doivent être utilisés judicieusement. Leur nature non déterministe n'est pas un défaut à corriger, mais une caractéristique à comprendre et à gérer.
En adoptant une approche de programmation déterministe, où les LLM génèrent à la fois le code applicatif ET les outils de vérification automatisée, nous pouvons exploiter leur potentiel tout en maintenant les standards de qualité et de sécurité exigés par les applications professionnelles.
Cette méthodologie ne représente qu'une facette de l'utilisation des LLM en programmation, mais c'est une facette essentielle. Elle permet de construire des systèmes fiables sur une base d'outils puissants mais imprévisibles. L'avenir du développement logiciel réside probablement dans cette symbiose intelligente entre créativité assistée par IA et rigueur garantie par des outils déterministes.
Pour aller plus loin dans votre maîtrise de l'IA générative et découvrir comment créer du code, du texte et des images avec une plateforme tout-en-un, créez votre compte gratuit sur Roboto et explorez toutes les possibilités offertes par l'intelligence artificielle moderne.