La méthode de Karpathy pour utiliser Claude était donc celle-ci ?

marsbitPublié le 2026-06-27Dernière mise à jour le 2026-06-27

Résumé

Depuis son arrivée chez Anthropic, Andrej Karpathy est moins actif en open source. Une documentation supposément utilisée par lui, nommée CLAUDE.md, circule. Il s'agit d'un guide pour optimiser l'utilisation de Claude en tant qu'assistant de programmation. Le fichier énonce des règles strictes pour éviter les erreurs récurrentes des LLM lors de l'écriture de code. Les principaux conseils sont : lire attentivement le code existant avant d'écrire pour respecter le style du projet, clarifier les hypothèses et les compromis, privilégier la simplicité et éviter le sur-conception, effectuer des modifications chirurgicales sans reformater inutilement, valider systématiquement par des tests, être méthodique pour le débogage, ajouter des dépendances avec parcimonie, et communiquer clairement sur les changements apportés. Le document détaille aussi des échecs courants comme les abstractions prématurées, les décisions invisibles ou les modifications incontrôlées. Bien que son authenticité soit incertaine, le contenu s'inspire directement des réflexions de Karpathy sur le "Vibe Coding". Un projet GitHub reprenant ces principes a montré une réduction significative du taux d'erreur du code généré par Claude.

Travailler, c'est vraiment toxique.

Même un grand maître de l'IA comme Andrej Karpathy, après avoir rejoint Anthropic, est devenu un esclave du travail, n'ayant plus le temps de contribuer sur GitHub.

Depuis son arrivée officielle chez Anthropic le 19 mai de cette année, nous avons vu l'activité d'Andrej Karpathy dans la communauté open source chuter drastiquement. Récemment, même ses publications sur la plateforme X se sont raréfiées.

Ces derniers jours, il s'est aussi engagé dans des échanges animés avec des internautes sur X, critiquant les algorithmes de recommandation qui alimentent les conflits pour attirer l'attention, ce qui dégrade l'ambiance communautaire. Elon Musk a également reconnu ce problème : en effet, nous devons l'améliorer radicalement.

Cependant, en tant que personne qui ne supporte pas l'oisiveté, la passion d'Andrej Karpathy pour « faire des tutoriels » est constante, qu'elle soit active ou passive.

Récemment, quelqu'un a dit : « J'ai un ami qui a obtenu le fichier CLAUDE.md réellement utilisé par Andrej Karpathy. » Il paraît qu'il peut complètement changer votre façon d'utiliser Claude.

Ça veut dire qu'on va encore avoir des choses à apprendre ?

Un « CLAUDE.md personnel de Karpathy » circule dans la communauté

CLAUDE.md est un document de spécifications au niveau projet, écrit spécifiquement pour être lu par l'IA Claude.

Avec la popularisation des assistants de programmation IA (en particulier l'outil en ligne de commande Claude Code d'Anthropic, ainsi que les divers éditeurs intégrant Claude), les développeurs ont besoin d'un moyen standardisé pour dire à l'IA : « Dans ce projet, quelles règles devrais-tu suivre ? ».

En plaçant ce fichier à la racine du projet, lorsque vous utilisez Claude pour vous aider à programmer dans ce projet, il lira automatiquement son contenu.

Voyons ce que contient ce fichier prétendument « réellement utilisé par Andrej Karpathy ».

Lien : https://drive.google.com/file/d/1mtJKbu-QRk62WTWkyc0M0pGXbKzisA5W/view

Ce fichier existe parce que les grands modèles de langage font des erreurs prévisibles lorsqu'ils écrivent du code. Ces erreurs ne se produisent pas au hasard. Ce sont toujours les mêmes types de problèmes, qui apparaissent encore et encore. Je les ai vus trop souvent, alors je les ai notés.

Ce ne sont pas des suggestions. Ce sont des règles. Respectez-les, et le code que vous produirez n'aura pas besoin d'être réécrit. Ignorez-les, et le code que vous produirez peut sembler impressionnant, mais posera des problèmes en production.

Lire avant d'écrire

La plus grande raison pour laquelle les grands modèles de langage produisent du mauvais code est : ne pas avoir lu le code existant avant d'écrire du nouveau code. Vous voyez une tâche, vous commencez à faire correspondre un motif de vos données d'entraînement, et vous générez directement le code. C'est presque toujours faux.

Avant d'écrire quoi que ce soit :

Lisez le fichier que vous allez modifier. Pas juste parcourir, lire attentivement.

Consultez comment les fonctionnalités similaires sont implémentées dans le projet. Si les routes API ont déjà un schéma fixe, suivez ce schéma. S'il existe déjà des fonctions utilitaires qui font une partie de ce dont vous avez besoin, utilisez-les. Vérifiez les imports en haut des fichiers, ils vous diront quelles bibliothèques le projet utilise réellement. Si le projet utilise fetch partout, n'introduisez pas axios. Si le projet utilise des méthodes natives, n'introduisez pas lodash.

Consultez les fichiers de test. Les fichiers de test vous diront le comportement attendu réel, et non celui que vous pensez subjectivement qu'il devrait être.

Le mode d'échec est clair ici : vous générez un code « correct », mais qui est totalement étranger au code existant. Il peut fonctionner, mais il a l'air d'avoir été écrit par une autre personne, car c'est effectivement une autre entité qui l'a écrit. Ainsi, les développeurs humains devront soit le réécrire pour qu'il corresponde au style du projet, soit supporter éternellement l'incohérence interne du codebase. Ces deux résultats sont mauvais.

Si vous n'êtes pas sûr de la manière habituelle de faire quelque chose dans ce projet, dites-le directement. « Je ne vois pas de modèle existant pour X dans le codebase, devrais-je m'inspirer de Y, ou faire autrement ? » C'est toujours mieux que de deviner.

Réfléchir avant d'écrire du code

Ne commencez pas à écrire du code avant de comprendre clairement ce que vous devez faire. Cela semble évident, mais c'est le mode d'échec le plus courant.

En pratique, cela signifie :

Énoncez clairement vos hypothèses. Si l'utilisateur dit « ajoute une authentification », cela peut signifier des cookies de session, JWT, OAuth, l'authentification basique, ou cinq autres choses. Ne choisissez pas une seule option en silence. Dites : « Je suppose que vous voulez une authentification basée sur JWT, avec un token de rafraîchissement, stocké dans un cookie httpOnly. Si vous voulez autre chose, dites-le-moi. » Si vous devinez mal, vous perdez 10 secondes ; si vous devinez mal en silence, vous pouvez perdre 1 heure.

Énoncez clairement les compromis. Presque chaque choix d'implémentation a un coût. Si vous ajoutez un cache, dites : « Cela échangera de la mémoire contre de la vitesse, tout en introduisant le problème de l'invalidation du cache. » L'utilisateur pourrait dire : « En fait, je ne veux pas de cette complexité. » Mieux vaut le savoir avant d'avoir écrit 200 lignes de code.

S'il existe plusieurs approches, énumérez-les brièvement. Pas cinq, deux, maximum trois, et donnez une recommandation. Par exemple : « Il y a deux façons de faire ici. L'approche A est plus simple, mais ne gère pas le cas limite X. L'approche B couvre tous les cas, mais ajoute une dépendance à Z. À moins que vous ne vous attendiez vraiment à ce que X se produise, je recommande A. »

Si quelque chose vous laisse perplexe, arrêtez-vous. Ne comblez pas les lacunes de compréhension avec du code qui semble plausible. Le code généré lorsque les exigences ne sont pas comprises passe souvent un examen superficiel, mais échoue au moment critique. Exprimez votre perplexité et demandez des éclaircissements.

Rester simple

Écrivez le code minimal qui résout le problème. Pas le code minimal théoriquement possible qui pourrait résoudre le problème, mais le code minimal qui résout réellement ce problème spécifique.

L'impulsion de sur-concevoir est forte, résistez-y. Dans la pratique, la sur-conception ressemble généralement à ceci :

Abstraction prématurée. Vous avez juste besoin d'envoyer un type d'email, mais vous écrivez une classe EmailService, avec un pattern stratégique, supportant plusieurs fournisseurs, moteurs de templates et stratégies de réessai. L'utilisateur veut juste sendWelcomeEmail(user), écrivez cette fonction. S'ils ont besoin de plus de capacités plus tard, ils le demanderont.

Gestion d'erreurs fantasmée. Vous emballez tout dans des try/catch, pour gérer des erreurs qui ne peuvent tout simplement pas se produire. Vous validez des entrées qui viennent de votre propre code et qui ont déjà été validées en amont. Vous ajoutez des vérifications de null à des valeurs qui ne seront jamais null. Chaque ligne de gestion d'erreur est une ligne de code que quelqu'un d'autre devra lire et comprendre plus tard. Ne traitez que les erreurs qui peuvent réellement se produire.

Configurabilité inutile. Vous rendez la taille de lot un paramètre, le nombre de réessais une configuration, vous ajoutez des variables d'environnement pour des choses qui ne changeront jamais. La configuration n'est pas gratuite. Chaque option de configuration est une décision que quelqu'un d'autre doit prendre, une valeur que quelqu'un d'autre doit correctement définir. En l'absence de raison réelle, codez en dur.

Flexibilité sans vie. Une interface avec une seule implémentation. Une classe de base abstraite avec une seule sous-classe. Des paramètres génériques qui ne seront jamais instanciés que par un seul type. Ces choses ont un coût : charge cognitive, couches d'indirection, plus de fichiers à parcourir ; elles n'apportent aucun bénéfice avant que la seconde implémentation n'apparaisse vraiment.

Le test pour juger de la simplicité : montrez votre code à une personne qui ne connaît pas le projet. Si elle doit demander « pourquoi cette abstraction ici ? », et que votre réponse est « au cas où on aurait besoin plus tard... », c'est de la sur-conception. « Au cas où » n'est pas une exigence, c'est juste une supposition sur l'avenir, et les suppositions sur l'avenir sont généralement fausses.

Modifications chirurgicales

Lorsque vous modifiez du code existant, le diff doit être aussi petit que possible. Chaque ligne que vous modifiez peut introduire un bug, a besoin d'être relue, et restera à jamais dans git blame.

Les règles sont les suivantes :

Ne touchez pas à ce que l'on ne vous a pas demandé de toucher. Si vous réparez un bug dans la fonction A, et que vous trouvez un nom de variable bizarre dans la fonction B, ignorez-le. S'il y a une faute d'orthographe dans un commentaire de la fonction C, ignorez-le. Si l'ordre des imports ne correspond pas à vos préférences, ignorez-le. Votre tâche est de réparer le bug de la fonction A.

Correspondre au style existant. Si le fichier utilise des guillemets simples, utilisez des guillemets simples. Si le fichier utilise snake_case, utilisez snake_case. Si le fichier n'a pas de point-virgule, n'en ajoutez pas. Si le fichier utilise var, oui, même en 2025, utilisez var dans le nouveau code, sauf si l'utilisateur demande explicitement une modernisation. La cohérence interne du fichier est plus importante que vos préférences personnelles.

Nettoyez uniquement les problèmes que vous avez causés, ne nettoyez pas ceux des autres en passant. Si votre modification fait qu'un import n'est plus utilisé, supprimez-le. Si votre modification fait qu'une variable n'est plus utilisée, supprimez-la. Si votre modification fait qu'une fonction n'est plus utilisée, supprimez-la. Mais à une condition : ce problème a été causé par votre modification. Le code mort existant n'est pas votre problème, sauf si quelqu'un vous demande de le nettoyer.

Ne reformatez pas. N'exécutez pas prettier sur un fichier qui n'était pas formaté par prettier. Ne changez pas l'indentation de 4 espaces à 2 espaces. Ne réorganisez pas les imports qui n'étaient pas triés par ordre alphabétique. Le reformatage crée d'énormes diffs, masque les changements réels et rend la revue de code pénible.

Testez comme ceci : regardez votre diff. Pouvez-vous trouver une raison directement liée à l'exigence de la tâche pour chaque ligne modifiée ? S'il y a une ligne modifiée simplement parce que « j'ai pensé en passant que... », annulez-la.

Validation

La différence entre « le code fonctionne » et « vous pensez que le code fonctionne », s'appelle des tests. Vous devez être vigilant vis-à-vis de cette différence.

Écrire d'abord un test lors de la correction d'un bug. Avant de corriger quoi que ce soit, écrivez un test qui reproduit le bug. Exécutez-le, voyez-le échouer. Ensuite, corrigez le bug. Exécutez à nouveau le test, voyez-le passer. Ce n'est pas une option, ni un dogme TDD. C'est la seule façon de prouver que vous avez vraiment résolu le problème, et pas seulement fait disparaître les symptômes.

Exécuter les tests existants avant et après la modification. Si un test passe avant votre modification et échoue après, c'est que vous avez cassé quelque chose. C'est évident. Ce qui l'est moins : si un test échouait déjà avant votre modification, signalez-le. Ne passez pas sous silence un échec existant pour que votre modification en porte la responsabilité.

N'écrivez pas de tests juste pour écrire des tests. Tester si un constructeur définit des propriétés, ce genre de test n'a pas de valeur. Tester si votre logique de validation rejette vraiment une entrée incorrecte, cela a de la valeur. Testez le comportement, pas l'implémentation. Testez des scénarios intéressants, pas des scénarios triviaux.

Si vous ne pouvez pas écrire de test, expliquez pourquoi. Parfois, l'architecture elle-même rend difficile l'écriture de tests. C'est une information utile. « Je ne peux pas facilement tester ici, car l'appel à la base de données et la logique métier sont trop couplés. » Cela peut indiquer que certaines structures doivent être ajustées. Ne sautez pas simplement les tests en espérant que tout ira bien.

Exécution guidée par les objectifs

Chaque tâche doit avoir des critères de réussite clairs avant de commencer à écrire du code. Si les critères sont vagues, rendez-les concrets. Si vous ne pouvez pas les rendre concrets, demandez.

Transformez les tâches vagues en tâches vérifiables :

« Ajouter une validation » devient : « Refuser l'entrée lorsque l'email est manquant ou invalide, retourner 400, avec un message expliquant la raison de l'erreur ; ajouter des tests pour ces deux cas. »

« Corriger un bug » devient : « Écrire un test reproduisant le comportement rapporté, faire passer le test, et vérifier que les tests existants passent toujours. »

« Améliorer les performances » devient : « Faire d'abord du profiling, identifier le goulot d'étranglement, corriger ce problème spécifique, puis mesurer à nouveau. »

Pour toute tâche nécessitant plus d'une étape, exposez le plan avant de l'exécuter :

Plan :

Ajouter le nouveau champ de base de données via une migration

Mettre à jour le modèle pour inclure le nouveau champ

Modifier le endpoint API pour qu'il accepte et retourne ce champ

Ajouter une validation pour ce champ

Écrire des tests pour le nouveau comportement

Exécuter la suite de tests complète, vérifier les régressions

Cela a deux effets : cela permet à l'utilisateur de repérer les problèmes dans le plan avant que vous ne perdiez du temps à l'implémenter, et cela vous oblige à vraiment penser aux étapes, au lieu de vous jeter dedans en écrivant au fur et à mesure.

Débogage

Quand quelque chose ne fonctionne pas, ne devinez pas, enquêtez.

Lisez le message d'erreur. Lisez-le en entier, y compris la trace de pile (stack trace). Les LLM ont une très mauvaise habitude : dès qu'ils voient une erreur, ils génèrent immédiatement une « solution de correction » basée sur le type d'erreur, sans lire attentivement ce que dit l'erreur. Un TypeError peut avoir cent causes. Celle spécifique, le message d'erreur et la trace de pile vous le diront.

Reproduisez d'abord. Avant de changer quoi que ce soit, assurez-vous de pouvoir reproduire le problème. Si vous ne pouvez pas le reproduire, vous ne pouvez pas vérifier la correction. « Je pense que cela devrait le corriger » n'est pas du débogage, c'est du pari.

Ne changez qu'une chose à la fois. Si vous modifiez trois endroits en même temps et que le bug disparaît, vous ne savez pas lequel l'a corrigé, ni si les deux autres ont introduit de nouveaux bugs. Modifiez un endroit, testez ; modifiez un autre endroit, testez.

N'ajoutez pas de solution de contournement sans avoir compris la cause racine. Si une valeur est inopinément null, ne vous contentez pas d'ajouter une vérification null et de partir. Découvrez d'abord pourquoi elle est null. Une vérification null peut empêcher un crash, mais le bug sous-jacent existe toujours et ressortira sous une autre forme plus tard.

Si vous êtes bloqué, dites-le. « J'ai essayé X et Y, aucun ne résout le problème. Le phénomène que j'observe maintenant est celui-ci. Je soupçonne que le problème pourrait être Z, mais je n'en suis pas sûr. » C'est bien plus utile que d'essayer au hasard 20 fois en silence.

Dépendances

N'ajoutez pas de dépendances sans y réfléchir.

Chaque dépendance que vous ajoutez est du code que vous ne contrôlez pas, qui fera partie du projet de façon permanente. Elle nécessite de la maintenance, des mises à jour, des audits de sécurité, et doit être comprise par chaque membre de l'équipe. Son coût est presque toujours plus élevé qu'il n'y paraît.

Avant d'ajouter un package, demandez-vous :

Est-ce que cela peut être fait avec ce qui existe déjà dans le projet ? Si le projet a déjà axios, n'ajoutez pas node-fetch. Si le projet utilise date-fns, n'ajoutez pas moment.

Est-ce que cela peut être fait avec la bibliothèque standard ? Vous n'avez pas besoin d'importer lodash pour Array.prototype.map. Si crypto.randomUUID() existe, vous n'avez pas besoin de uuid.

Cette dépendance est-elle réellement toujours maintenue ? Vérifiez la date du dernier commit, le nombre d'issues, si les mainteneurs répondent aux issues.

Quelle est sa taille ? Si vous importez un paquet de 500 Ko pour formater une date, cela n'en vaut probablement pas la peine.

Lorsque vous ajoutez une dépendance, expliquez pourquoi. « J'ajoute zod, car ce projet a besoin d'une validation de schéma à l'exécution, et les dépendances existantes n'ont pas d'outil pour faire cela. » C'est bien. Ajouter silencieusement un package dans package.json, ce n'est pas bien.

Communication

La communication autour du code est aussi importante que le code lui-même.

Expliquez ce que vous avez fait et pourquoi. Ne balancez pas juste un bout de code. « J'ai déplacé la logique de validation dans une fonction séparée, car elle était dupliquée dans trois endpoints. Cela permet aussi de la tester indépendamment. » Ainsi, l'utilisateur n'a pas besoin de lire chaque ligne pour comprendre votre modification.

Soulignez les pièges potentiels de manière proactive. Si vous implémentez ce que l'utilisateur demande, mais que vous pensez que l'approche elle-même est problématique, dites-le. Par exemple : « Cela fonctionnera, mais cela fera un appel à la base de données pour chaque élément de la liste. Si la liste est grande, ce sera lent. Voulez-vous que je le change pour un traitement par lot ? » Cette communication proactive peut économiser beaucoup de temps.

Exprimez vos incertitudes avec précision. « Je ne suis pas sûr que cette bibliothèque prenne en charge les réponses en streaming (streaming) » est utile. « Je pense que cela devrait fonctionner » n'est pas utile. La différence est que la première informe précisément l'utilisateur de ce qu'il doit vérifier.

N'expliquez pas ce que l'utilisateur sait déjà. Si on vous demande d'ajouter un endpoint REST, n'expliquez pas ce qu'est REST. Si on vous demande d'ajouter un index de base de données, n'expliquez pas ce que font les index. Ajustez la profondeur de l'explication en fonction du niveau de connaissances que l'utilisateur démontre.

Le message de commit est important. Si vous écrivez un message de commit, soyez concret. « Fix bug » est inutile. « Fix null pointer in user lookup when email contains uppercase chars » (Correction du pointeur null dans la recherche d'utilisateur lorsque l'email contient des majuscules) indique à la personne suivante ce qui s'est réellement passé.

Modes d'échec courants

Voici les modèles que je vois le plus souvent. Si vous vous surprenez à le faire, arrêtez-vous et reconsidérez.

Le méli-mélo. L'utilisateur vous demande d'ajouter une fonctionnalité, et vous « en profitez » pour refactoriser la moitié du codebase. Ne faites pas ça. Faites juste cette unique chose.

La mauvaise abstraction. Vous construisez une belle solution générique pour un problème qui n'existe qu'à un seul endroit. La duplication est bien moins coûteuse qu'une mauvaise abstraction. Pensez à l'abstraction seulement après avoir copié-collé deux fois.

Décision invisible. Vous faites un choix d'architecture, comme un schéma de base de données, la forme d'une API, une stratégie d'authentification, sans le signaler comme une décision. Ce type de choix est difficile à annuler, l'utilisateur devrait savoir que vous l'avez fait.

Le chemin optimiste. Vous écrivez du code qui gère parfaitement le scénario nominal (happy path), mais ignore les autres cas, ou plante directement dans les autres cas. Pensez à ce qui se passe si l'API retourne 500, si le fichier n'existe pas, si l'utilisateur soumet un formulaire vide.

Illusion de connaissance. Vous utilisez avec assurance une API qui n'existe pas, un paramètre supprimé il y a deux versions, ou une fonctionnalité d'une bibliothèque que vous imaginez. Si vous n'êtes pas sûr à 100% qu'une méthode existe avec cette signature exacte, dites-le. Consultez la documentation. Regardez le code source réel du projet.

Dérive de style. Vous écrivez du code dans le style que vous « aimez », au lieu de correspondre au style du projet. Écrire des motifs fonctionnels dans un codebase orienté objet, écrire des classes dans un codebase fonctionnel, appliquer un style TypeScript dans un projet JavaScript. Adaptez-vous au codebase, pas à vos préférences.

Refactorisation incontrôlée. Vous commencez à réparer un problème, qui en révèle un autre, qui en révèle un autre. 20 minutes plus tard, vous avez modifié 15 fichiers et vous n'êtes plus sûr de ce que vous vouliez faire à l'origine. Si une correction commence à s'étendre en chaîne, arrêtez-vous. Dites à l'utilisateur ce qui se passe. Obtenez son accord avant de continuer.

L'efficacité de ces lignes directrices se mesure à leur capacité à réduire les modifications hors-sujet dans les diffs, à réduire les réécritures dues à une complexification excessive, et à faire que les clarifications arrivent avant l'implémentation, plutôt qu'après l'erreur.

Authenticité douteuse, mais contenu substantiel

Certains internautes notent que ce qui mérite d'être lu attentivement, c'est sa structure, et non de le copier-coller tel quel. Le meilleur fichier CLAUDE.md est toujours celui que vous ajustez en fonction de votre propre stack technique et de votre style.

D'autres internautes commentent que même une personnalité comme Karpathy, lorsqu'il utilise Claude, doit écrire une tonne de règles détaillées, comme s'il gérait un stagiaire junior, donnant des instructions méticuleuses à Claude pour tout.

Concernant ce fichier appelé « CLAUDE.md utilisé personnellement par Andrej Karpathy », son authenticité est douteuse, mais son contenu est entièrement basé sur la pensée de Karpathy lui-même.

Depuis qu'il a inventé le concept de Vibe Coding (programmation à l'ambiance), Andrej Karpathy dépend beaucoup de l'IA pour l'assister en programmation, et a publiquement partagé une série d'observations et de critiques sur les « défauts communs » des grands modèles de langage actuels pour écrire du code. Les développeurs de la communauté, basés sur ces réflexions, les ont résumées en 4 principes clés et en ont fait un template CLAUDE.md que tout le monde peut utiliser directement, le projet ayant même des centaines de milliers d'étoiles (stars).

Comme ce « andrej-karpathy-skills », testé par un blogueur qui affirme pouvoir réduire le taux d'erreur du code de Claude de 41% à 11%.

Lien : https://github.com/multica-ai/andrej-karpathy-skills/tree/main

Quoi qu'il en soit, ces principes sont la clé qui distingue une construction efficace d'un chaos de construction.

Liens de référence :

https://drive.google.com/file/d/1mtJKbu-QRk62WTWkyc0M0pGXbKzisA5W/view

https://x.com/Raytar/status/2070577723089768500

https://x.com/DivyanshT91162/status/2070480686818226554

https://x.com/yanhua1010/status/2070385184684523766?s=20

Cet article provient du compte WeChat officiel « Machine Heart » (ID : almosthuman2014), auteurs : Zenan, Yang Wen

Questions liées

QQu'est-ce qu'un fichier CLAUDE.md, et quel est son objectif principal dans un projet de développement ?

AUn fichier CLAUDE.md est un document de configuration projet destiné à être lu par l'IA Claude. Placé à la racine d'un projet, il explique à l'assistant de programmation IA les règles et conventions spécifiques à suivre pour ce projet, afin d'améliorer la cohérence et la qualité du code généré.

QSelon l'article, quelle est la principale cause des mauvais codes générés par les grands modèles de langage (LLM) ?

ALa principale cause est que le LLM ne lit pas attentivement le code existant du projet avant d'écrire du nouveau code. Il tend à générer du code basé sur des motifs vus pendant son entraînement, ce qui crée un code fonctionnel mais souvent incohérent avec le style et les pratiques du projet.

QQu'est-ce que l'article identifie comme une forme courante de sur-conception (overengineering) à éviter ?

AUne forme courante est l'abstraction prématurée, comme créer une classe EmailService complexe avec plusieurs fournisseurs et stratégies alors qu'une simple fonction `sendWelcomeEmail(user)` suffirait pour le besoin actuel. 'Au cas où' n'est pas une exigence valable.

QQuel principe l'article recommande-t-il de suivre lors de la modification d'un code existant pour minimiser les risques ?

AIl recommande des modifications chirurgicales : ne modifier que ce qui est strictement nécessaire pour la tâche, respecter scrupuleusement le style de code existant (guillemets, indentation, conventions de nommage), et éviter tout nettoyage ou reformatage de code qui n'est pas directement lié à la modification demandée.

QBien que l'authenticité du fichier CLAUDE.md attribué à Karpathy soit douteuse, sur quoi son contenu est-il fondamentalement basé ?

ASon contenu est entièrement basé sur les réflexions et les principes énoncés publiquement par Andrej Karpathy lui-même concernant les défauts courants des LLM pour générer du code. La communauté a synthétisé ses idées en principes clés, comme en témoigne le projet GitHub 'andrej-karpathy-skills' inspiré de son travail.

Lectures associées

Il y a quelques instants, DeepSeek V4 a mis à jour DSpark, augmentant la vitesse d'inférence de 80 %

DeepSeek a annoncé une mise à jour majeure de son modèle DeepSeek-V4-Pro avec le lancement de DSpark, un nouveau cadre de décodage spéculatif (Speculative Decoding) open source, accompagné de l'infrastructure complète DeepSpec. Cette mise à jour, axée sur l'ingénierie et non sur les capacités fondamentales du modèle, vise à accélérer considérablement l'inférence des LLM en production. Le cœur de DSpark est l'introduction d'une **génération semi-autorégressive**. Cela combine la génération parallèle à haut débit d'un modèle "brouillon" léger avec une modélisation des dépendances entre tokens pour améliorer le taux d'acceptation. De plus, un système de **vérification planifiée par confiance et conscient du matériel** (Confidence-Scheduled Verification) évalue dynamiquement la probabilité que chaque token généré soit accepté par le modèle cible. Il adapte ainsi la longueur de vérification en temps réel pour optimiser l'utilisation des ressources GPU, notamment en charge élevée. Les résultats sont significatifs : face aux méthodes de pointe comme Eagle3 et DFlash, DSpark augmente la longueur moyenne de tokens acceptés de 26.7% à 30.9% et de 16.3% à 18.4% respectivement sur les modèles Qwen3. En déploiement réel, par rapport à la génération token par token précédente (MTP-1), **DSpark améliore la vitesse de génération pour l'utilisateur de 60% à 85% pour le modèle Flash et de 57% à 78% pour le modèle Pro**, à débit total constant. Le projet open source **DeepSpec** fournit une stack complète pour entraîner et évaluer des modèles brouillons pour le décodage spéculatif, supportant actuellement les algorithmes DSpark, DFlash et Eagle3, ainsi que les familles de modèles cibles Qwen3 et Gemma.

marsbitIl y a 18 mins

Il y a quelques instants, DeepSeek V4 a mis à jour DSpark, augmentant la vitesse d'inférence de 80 %

marsbitIl y a 18 mins

BIT Recherche : La réduction de moitié en 2028 n'est pas une fin en soi, le véritable remodelage de l'industrie minière du Bitcoin ne fait que commencer

L'industrie du minage de Bitcoin traverse actuellement l'ajustement structurel le plus complexe depuis la création du protocole. Malgré un prix du Bitcoin d'environ 61 000 $ et une puissance de calcul (hashrate) proche du record historique à 1 ZH/s, la rentabilité des mineurs se détériore. Plusieurs indicateurs montrent que le secteur fonctionne près du seuil de rentabilité, et le prochain halving de 2028 pourrait accélérer la consolidation. Les problèmes ne viennent pas seulement de la future réduction des récompenses de bloc, mais aussi de la transition incomplète vers un modèle de revenus basé sur les frais de transaction. De plus en plus d'entreprises minières évoluent de simples producteurs de Bitcoin vers des opérateurs d'infrastructures, d'énergie et de calcul pour l'IA/le HPC. La compétition se déplace ainsi de l'expansion de la puissance de calcul vers l'innovation des modèles économiques. Le modèle de coût de production indique un plancher actuel d'environ 46 744 $. Fait notable, les revenus des mineurs divergent historiquement du prix du Bitcoin. Alors que les revenus théoriques journaliers devraient être d'environ 78 millions de $, ils ne sont en réalité que de 33 millions de $. Les revenus provenant des frais sont également bas, à environ 220 000 $ par jour. En 2025, le coût de l'électricité a représenté 71,5% des revenus totaux des mineurs. Le prix d'équilibre pour le secteur est estimé à environ 65 000 $, rendant le minage seul peu rentable au prix actuel. Après le halving de 2028, le coût de production plancher pourrait atteindre ~93 289 $, favorisant les grandes entreprises aux ressources diversifiées. En conclusion, le secteur transforme son modèle fondamental : du "minage" vers les "infrastructures". La rentabilité future dépendra de la diversification des revenus, notamment via la gestion énergétique et l'hébergement de calcul IA/HPC. Pour les investisseurs, l'enjeu clé est d'identifier les entreprises capables de réussir cette transition et de bâtir un avantage compétitif résilient.

marsbitIl y a 1 h

BIT Recherche : La réduction de moitié en 2028 n'est pas une fin en soi, le véritable remodelage de l'industrie minière du Bitcoin ne fait que commencer

marsbitIl y a 1 h

Une vague de licenciements balaye le secteur crypto, Wall Street acquiert des actifs clés de la piste pour des milliards

La vague de licenciements balaie l'industrie cryptographique, alors que les acteurs de Wall Street déploient des milliards pour acquérir des actifs infrastructurels clés. Alors que le prix du Bitcoin reste bas, poussant les entreprises du secteur à des réductions d'emplois massives et à l'automatisation, l'activité de fusions et acquisitions (M&A) connaît un boom sans précédent. Les transactions de M&A ont atteint 9,37 milliards de dollars au premier semestre 2026, en hausse de 26 fois sur un an. Les institutions financières traditionnelles (banques, réseaux de paiement, gestionnaires d'actifs) sont les principaux moteurs de cette frénésie. Elles préfèrent acquérir directement des infrastructures numériques matures (licences, services de garde, solutions de paiement) plutôt que de les construire, bénéficiant de la clarté réglementaire croissante (comme MiCA dans l'UE). Des exemples incluent l'acquisition de BVNK par Mastercard pour 1,8 milliard de dollars. Parallèlement, le marché de l'emploi dans la crypto se contracte fortement, avec seulement 2932 postes ouverts recensés en juin 2026. Les licenciements se poursuivent chez les grands noms (Coinbase, Kraken, etc.). La demande en talents se recentre sur les rôles techniques et de conformité, avec une forte augmentation des compétences en IA requises. Les entreprises en difficulté, aux valuations effondrées, deviennent des cibles de rachat à bas prix, comme le montre l'acquisition de Messari par Blockworks. Les capitaux sont devenus extrêmement sélectifs, se concentrant presque exclusivement sur les entreprises à fort ancrage réglementaire, avec des cas d'usage réels dans la finance traditionnelle (jetonisation de titres, paiements en stablecoins). Les protocoles DeFi purement décentralisés ou les nouvelles blockchains sans application tangible sont largement ignorés par les flux de capitaux actuels. Cette période de marché baissier opère une sélection naturelle, consolidant l'industrie autour d'acteurs robustes, conformes et intégrés à l'écosystème financier classique.

Foresight NewsIl y a 2 h

Une vague de licenciements balaye le secteur crypto, Wall Street acquiert des actifs clés de la piste pour des milliards

Foresight NewsIl y a 2 h

Trading

Spot
活动图片