最近 GitHub 上有一个围绕 AI 编程的项目很火,核心其实只是一个大约 65 行的 CLAUDE.md 文件。它之所以能拿到大量 star,不是因为技术实现复杂,而是因为它抓住了很多人使用 AI 写代码时反复遇到的问题。
这个项目的背景,要从 Andrej Karpathy 对 AI 编程的观察说起。Karpathy 是 AI 领域很有影响力的教育者和工程师:斯坦福博士,参与过 OpenAI 早期工作,也曾在 Tesla 负责 Autopilot 视觉系统。后来他持续分享对大模型、教育和 AI 工具的理解,所以他对编程方式变化的判断,总会引起很多开发者关注。
他在一次分享中提到,自己使用 Claude Code 几周后,编程方式发生了明显变化:过去大概是 80% 手写代码、20% AI 辅助,现在更接近 80% 让 AI 写代码,自己做 20% 修改。他形容这像是“用英语编程”,通过自然语言告诉 LLM 要写什么。
但他也指出了 AI 编程的几个典型问题。
01 错误假设
第一个问题是模型很容易替用户做假设,然后沿着这个假设一路写下去。它不一定会主动管理自己的困惑,也不一定会在需求含糊时停下来追问。
比如用户只说“添加用户导出功能”,模型可能会默认导出全部用户,默认输出 JSON,默认写成本地文件,默认权限和字段都不需要再确认。等代码写完,用户才发现它理解的需求和真实场景并不一致。
更好的做法应该是先把不确定点列出来:导出全部用户还是筛选结果?是浏览器下载还是后台任务?需要哪些字段?数据量大不大?是否有权限限制?这些问题不问清楚,后面写得越快,偏得也越远。
02 过度复杂化
第二个问题是模型很容易把简单问题写复杂。一个函数能解决的问题,它可能加上抽象类、策略模式、工厂模式、配置层和一堆“未来可能有用”的扩展点。
这类代码看起来很工程化,实际却增加了维护负担。AI 尤其擅长快速生成大量结构,但并不总能判断这些结构是否真的必要。结果就是一百行能解决的任务,被膨胀成一千行。
判断标准其实很直接:一个资深工程师看到这段改动,会不会觉得它过度设计?如果答案是会,就应该删掉多余层次,用最少的代码解决当前问题。
03 附带伤害
第三个问题是模型有时会修改或删除自己没有充分理解的代码。它可能在修一个小 bug 的时候顺手改注释、重排格式、清理看似无用的 import,甚至动到和当前任务无关的逻辑。
这类“顺手优化”很危险,因为它扩大了变更范围,也让 review 变得更困难。用户本来只想修复一个空邮件导致验证器崩溃的问题,结果模型顺便增强了邮件验证、加了用户名校验、改了文档字符串,最后很难判断到底哪一行影响了行为。
更稳妥的原则是:只动必须动的代码,只清理自己造成的问题。原本就存在的死代码、格式问题或历史包袱,除非任务明确要求处理,否则最多提醒一句,不要直接改。
04 把吐槽变成 CLAUDE.md
在 Karpathy 的观点被大量传播后,开发者 Forrest Cheung 做了一件很聪明的事:他把这些吐槽整理成可以执行的行为准则,写进一个 CLAUDE.md 文件。
这个项目没有复杂代码,关键就是把 AI 编程中最容易出问题的地方,转成明确的工作规则。大致可以概括为四条。
第一条是先想再写。不要默默假设,不要隐藏困惑;如果需求有多种理解,就把它们列出来;如果存在更简单的方案,也要说出来;该追问时追问,该反驳时反驳。
第二条是简单优先。不添加没被要求的功能,不为一次性代码做抽象,不加入多余配置,也不为极小概率场景写大量防御代码。如果 50 行能解决,就不要写成 200 行。
第三条是精准修改。每一行改动都应该能直接追溯到用户请求。不要顺手改善邻近代码,不要重构没坏的东西,尽量匹配项目既有风格。
第四条是目标驱动。不要只给模型一个模糊指令,而是给它可验证的成功标准。比如“修复 bug”可以变成“先写一个能复现 bug 的测试,再让测试通过”;“添加校验”可以变成“写无效输入测试并通过”。成功标准越清楚,模型越容易自己循环到完成。
05 为什么它会火
这个项目能火,不是因为内容很玄,而是因为它足够贴近真实开发。
很多人用 AI 编程时都经历过类似场景:模型自信地误解需求,代码越写越复杂,或者在不该动的地方动手。CLAUDE.md 的价值,是把这些经验变成可以放进项目里的协作规则。
它的门槛也很低:一个文件就能开始生效,不需要复杂接入。再加上 Karpathy 本人的影响力,以及项目里有实战对比案例,它很自然会在 Claude Code 用户和 AI 编程社区里传播开来。
更重要的是,这类规则不是只适用于 Claude Code。无论使用哪种 AI 编程工具,本质问题都很相似:模型需要知道什么时候该问、什么时候该简化、什么时候该停手、怎样判断任务已经完成。
06 对普通开发者的启发
这件事给普通开发者的启发很简单:AI 编程不是把一句需求丢给模型,然后等待奇迹发生。真正有效的方式,是给模型建立边界。
需求不清楚时,让它先暴露假设。实现方案变复杂时,让它主动回到最小可行解。修改代码时,让它只围绕任务目标行动。完成任务时,用测试、命令或明确检查点来验证结果。
AI 写代码的能力已经很强,但它仍然需要好的协作约束。一个短小的 CLAUDE.md 能获得大量关注,说明开发者真正需要的并不只是更聪明的模型,也包括更可靠的工作方式。
简单总结:
- 先想再写,减少错误假设。
- 简单优先,避免过度设计。
- 精准修改,控制变更范围。
- 目标驱动,用可验证标准推动完成。
这四条并不复杂,却很实用。AI 编程真正提升效率的前提,不是让模型写得更多,而是让它写得更准、更少、更可控。