La page de connexion s'est affichée correctement. L'API REST a renvoyé un 200 OK. Le boilerplate SaaS s'est lancé sans la moindre erreur de linting. En un après-midi, vous avez terminé ce qui prenait autrefois une semaine. Les assistants de codage par IA ont tellement remodelé le développement logiciel que la création de fonctionnalités ressemble moins à de l'ingénierie qu'à une commande au menu. Cette commodité est bien réelle. Mais elle a un prix qui ne se manifeste que plus tard, généralement lorsque les enjeux sont les plus élevés. Les développeurs ont commencé à appeler ce piège le « Vibe Coding », et ce nom capture parfaitement le problème.
La boucle du copier-coller
Voici à quoi ressemble réellement la boucle. Vous placez votre curseur dans la fenêtre de chat et décrivez une fonctionnalité en langage naturel. Un bloc de code apparaît instantanément. Vous le surlignez, vous le copiez, vous revenez à votre éditeur, vous le collez et vous enregistrez. Le terminal n'affiche aucune erreur. Le navigateur affiche la bonne mise en page. Vous validez le changement et ouvrez le ticket suivant. Aucune pause pour tracer la logique. Aucun contrôle des dépendances importées. Aucune question pour savoir si cette bibliothèque tierce est réellement nécessaire ou si un outil de la bibliothèque standard suffirait. Le flux de travail se résume à : demander, copier, coller, exécuter. Si la surface semble correcte, on suppose que la profondeur l'est aussi. Ce n'est pas du codage au sens propre du terme. C'est l'assemblage de pièces préfabriquées sans lire le manuel. Comme tout raccourci, cela fonctionne jusqu'au moment précis où cela ne fonctionne plus.
Perdre le contrôle au pire moment
Quand le bug arrive en production, il atterrit sur votre bureau, pas sur celui de l'IA. À deux heures du matin, le chatbot n'est pas connecté à votre plateforme d'observabilité. Vous, si. Si vous n'avez jamais lu le code que vous avez déployé, vous ne pouvez pas raisonner sur sa défaillance. Vous allez faire des grep dans des fichiers que vous ne comprenez pas, en essayant de corriger une logique que vous n'avez jamais apprise. La sensation est désorientante. Un développeur qui écrit ses propres structures se construit une carte mentale du système. Il sait où se trouvent les zones critiques et quelles hypothèses soutiennent l'ensemble. Le Vibe Coding efface cette carte. Vous devenez l'opérateur de boîtes noires. La syntaxe est correcte, la démo a impressionné le client, mais le système ne vous appartient pas vraiment. La maîtrise exige de la compréhension, et la compréhension prend du temps. Sauter cette étape ne supprime pas le coût ; cela le déplace simplement vers le moment le plus coûteux possible.
Un code fonctionnel n'est pas un code sûr
Les modèles d'IA génèrent des réponses basées sur des modèles trouvés dans les données d'entraînement. Ces modèles incluent de nombreux exemples obsolètes et peu sûrs. La fonction de connexion que vous avez collée pourrait stocker les mots de passe en utilisant un hash rapide et obsolète au lieu d'un hash lent et salé (salted), car l'instantané d'entraînement privilégiait d'anciens extraits de forums. Le point de terminaison (endpoint) de l'API pourrait concaténer directement l'entrée de l'utilisateur dans une chaîne SQL brute parce que vous avez demandé un exemple simple et que le modèle a obtempéré. Vos identifiants de base de données pourraient fuiter dans le JavaScript côté client parce que l'IA ne savait pas que vous construisiez un frontend serverless et non une route backend.
L'absence de validation des entrées est courante. Le gestionnaire de formulaire généré suppose des utilisateurs polis et omet de vérifier la longueur des chaînes, les plages numériques ou les types de fichiers avant de transmettre les données plus profondément dans la pile (stack). Les contrôles d'authentification pourraient reposer sur des jetons (tokens) côté client sans vérification appropriée côté serveur, créant un faux sentiment de sécurité. Une IA pourrait générer un cookie de session sans les drapeaux (flags) HttpOnly ou Secure parce que son entraînement incluait des réponses obsolètes de Stack Overflow. Chaque problème est invisible lors d'une démo. L'application fonctionne. Les utilisateurs se connectent. Les données circulent. Mais un attaquant n'a besoin que d'un seul point d'entrée non protégé. Examiner les résultats de l'IA sous l'angle de la sécurité n'est pas de la paranoïa. C'est le socle de base de tout logiciel professionnel.
La taxe de l'incohérence
Une base de code est aussi un récit. Elle enseigne aux nouveaux membres de l'équipe comment les choses doivent être faites. Le Vibe Coding fragmente ce récit en une douzaine de dialectes conflictuels. La fonctionnalité que vous avez construite hier utilise des hooks React fonctionnels avec des réducteurs d'état (state reducers) explicites. La fonctionnalité d'aujourd'hui, générée à partir d'un prompt légèrement différent, introduit des composants de classe parce que le modèle a utilisé par défaut un ancien modèle. La couche API alterne entre des stubs générés par OpenAPI et des gestionnaires de routes écrits à la main. Les conventions de nommage dérivent entre le camelCase et le snake_case. La gestion des erreurs disparaît dans un fichier et réapparaît sous forme de blocs try-catch imbriqués et verbeux dans un autre.
Over weeks, the project becomes an archaeological dig. You cannot safely change one module because you do not know what assumptions the adjacent AI-generated module makes. Refactoring turns into a slow, risky game of whack-a-mole. The system compiles, but it no longer coheres. Maintainability dies a death by a thousand pasted snippets.
Turn the AI Into a Teacher
Real learning happens when you interrogate the output. Treat the AI like a senior developer who writes fast but still expects a code review. Ask why it chose recursion over iteration for that tree traversal. Ask if there is a more memory-efficient path that handles edge cases better. Ask what happens when the input is null, when the network request times out, or when two users trigger the function simultaneously. Make it explain the logic line by line as if you were reviewing a junior teammate's pull request.
When you force the model to justify its choices, you force yourself to understand them. This flips the dynamic entirely. AI stops being an autopilot and becomes a tutor. The goal is not to write zero code yourself. It is to ship only code you fully understand, even if the assistant drafted the first version.
The Skills That Actually Matter Now
Writing syntax is getting cheaper by the day. Reading and reasoning are
