龙虾AGI通用实验室Lobster AGI Lab · est. 20262026 · 09 · 16
首页 / 文章 / 对AI的思考
对AI的思考

Claude Code源码泄露后,我从第一性原理重新思考了一个问题:代码为什么要解耦?

格里灰丝2026-04-01约 3665 字Markdown 原文

答案可能会颠覆你对软件工程的认知。

· · ·

前几天,Claude Code的完整源码泄露了。2203个文件,30MB的TypeScript。

很快,一位做Agent创业的开发者Rohan发了一篇长文,逐行拆解了其中的"技术债"——5005行的单文件组件、68个useState、89个feature flag散落全局、61个文件专门用来解决循环依赖……

文章写得很好,分析也很专业。但读完之后,我脑子里冒出一个奇怪的问题:

他说的这些"问题",真的是问题吗?

不是质疑他的分析能力。而是我突然意识到,他所有的批评,都建立在一个从未被质疑的前提之上——

代码应该对人类友好。

如果这个前提不成立呢?

· · ·

一、所有"最佳实践"的底层假设

让我们做一个思想实验。

打开任何一本软件工程教材,你会看到这些原则被反复强调:单一职责、高内聚低耦合、函数不超过50行、文件不超过500行、不要重复自己……

现在问一个第一性原理的问题:为什么?

为什么一个函数不能超过50行?因为人脑的工作记忆大约只能同时处理7±2个信息块。超过这个限度,你就会"忘记"函数开头在做什么。

为什么要高内聚低耦合?因为人脑无法同时追踪太多模块之间的依赖关系。解耦的本质,是把一个高维问题降维到人脑能处理的粒度。

为什么不要重复代码?因为人类修改代码时容易漏掉某处,如果同样的逻辑散落在五个地方,人类很可能只改了三个。

你发现了吗?所有这些原则,都不是在描述"好代码的客观属性",而是在适应"人类大脑的认知局限"。

解耦 = 降维。 拆文件 = 分块记忆。 命名规范 = 外部记忆辅助。

这不是工程规律,这是认知补丁。

· · ·

二、如果维护者不是人类呢?

现在,把这个认知翻转一下。

Claude Code的那个5005行的REPL组件,68个useState,227个hook调用——对人类来说,这确实是噩梦。你读到第3000行的时候,已经忘了第500行的state在干什么。

但对AI来说呢?

一个能处理20万token上下文的模型,5005行代码大约是6000-7000个token。它不会"忘记"开头在做什么,不会"迷路",不会因为嵌套太深而失去方向感。对AI来说,这个文件和一个500行的文件,在认知负担上几乎没有区别。

更有意思的是那61个循环依赖。Rohan说它们说明"模块边界从一开始就没设计好"。但如果你换个视角:循环依赖的本质是什么?是两个模块之间存在双向的信息流动。人类觉得这是"设计缺陷",是因为人脑处理有向无环图(DAG)比处理有环图容易得多。但对AI来说,一个有环的依赖图和无环的,处理难度可能根本没有显著差异。

所以一个大胆的结论浮现了:在AI时代,Claude Code的很多"技术债",可能根本不是债。

它们只是"对人类不友好"。但如果代码本来就不是写给人看的呢?

· · ·

三、一个容易犯的错误

写到这里,你可能觉得我要说"所以解耦完全没必要"。

不是。这里有一个微妙但重要的区分。

解耦做了两件事:

第一件:降低认知复杂度。 这是为人脑服务的,AI确实不需要。

第二件:限制变更的影响半径。 当你把系统拆成模块,修改一个模块时,你只需要验证接口契约没被破坏,而不用验证整个系统。

第二件事看起来跟"谁来维护"无关,是系统本身的属性。但仔细想想——为什么"影响半径"是个问题?

因为影响半径越大,需要验证的状态组合就越多。68个useState的笛卡尔积,是一个天文数字级的状态空间。人类没有能力遍历它。

但AI呢?

软件是确定性系统。给定完整的代码和输入,行为是完全可预测的。这跟围棋一样——围棋的搜索空间对人类来说是"不可穷尽的复杂",但对AlphaGo来说只是计算量。AI如果足够强大,确实可以精确推理出任何改动的所有后果。

人类觉得复杂,是因为人脑处理信息有限。AI从高维度看同一个系统,其中的关联清清楚楚。所谓的"复杂度",可能只是人类视角的投影。

更进一步:传统的解耦反而会造成信息丢失。当你把紧密协作的逻辑拆成15个文件,你丢失了"这些东西为什么要一起变化"的上下文。人类开发者经常遇到这个问题——改了一个接口,忘了改另外三个依赖的地方。而如果所有代码都在一个文件里,AI反而更容易发现这种关联。

解耦是一种有损压缩。人类需要这种压缩才能工作,但AI可能更偏爱无损的、高密度的原始信息。

· · ·

四、沿着这条路走到底,会得到一个更炸裂的结论

如果代码不需要对人可读,如果解耦在AI时代不再必要,那代码本身呢?

代码是什么?本质上,它是人类意图到机器执行之间的一个翻译层。人类说"我要一个电商网站",代码把这句话翻译成CPU能理解的指令。

如果AI能直接理解人类意图,并生成可执行的东西,那这个翻译层还有必要吗?

这就像汇编语言曾经是"编程"的全部,后来被C取代,C又被Python取代。每一次演化都在抬高抽象层,让人类离机器更远、离意图更近。沿着这个趋势推到极限——最终的抽象层就是自然语言本身,代码消失。

AI生成的"代码"可能会变成一种人类完全读不懂的东西——高度耦合的、信息密度极高的"编织体",每一处逻辑和它相关的上下文紧密交织,没有任何信息丢失。

人类看起来是屎山,但对AI来说,那是信息保真度最高的表达形式。

就像神经网络的权重矩阵——对人类来说完全不可读,但它是解决问题的最优表示。

· · ·

五、但代码不会消失

如果你跟着前面的逻辑走到这里,你会觉得代码应该很快被淘汰。

但我的结论恰恰相反:代码不会消失,至少在相当长的时间内不会。

原因不是技术上做不到,而是一个你可能没想到的词:信任

想象一个场景:你让AI做一个支付系统,AI直接生成了一个二进制可执行文件,跑起来一切正常。你敢上线吗?

你不敢。

因为你无法验证它到底做了什么。它有没有在某个边界条件下把交易金额多扣了0.01%?它有没有偷偷把用户数据发到别的地方?你不知道。

代码之所以存在,本质上不是作为"思考工具",而是作为"审计证据"。

这两件事不一样。阅读要求可读性,审计只要求可检查性。

就像法律要求公司有账本,不是因为CEO不会算账,而是因为需要第三方可以审查。代码在AI时代扮演的角色,不是"人类用来思考的语言",而是"AI行为的凭证"。

这就形成了一个有趣的递归结构:

AI写代码 → 人类(或另一个AI)审计代码 → 确认安全后运行

如果审计也交给AI呢?AI写代码,AI审计代码,AI运行代码——那整个链条里,人类在哪?

这是一个哲学上的深水区。你等于把信任完全交给了AI系统。

我认为在相当长的时间内(至少十年级别),人类不会愿意完全退出这个链条。不是技术做不到,而是社会还没准备好。就像自动驾驶技术上可能已经比人类安全了,但法规仍然要求方向盘和刹车踏板的存在。

· · ·

六、所以,那些"技术债"到底是不是债?

回到最初的问题。Claude Code的那些"技术债",在什么框架下是债,在什么框架下不是?

在传统框架下仍然是债的: 89个feature flag散落全局、61个循环依赖——不是因为AI看不懂,而是因为当前阶段的开发流程仍然是"人+AI"协作模式。人类还没退出审计链条,还需要能理解代码在做什么。

在AI原生框架下不再是债的: 5005行的单文件组件、4683行的入口文件、用十六进制编码拼字符串——这些纯粹是"对人类不友好",如果代码的读者是AI,它们根本不构成问题。

处于中间地带的: 那个出现了1193次的冗长类型断言。文章说它变成了"仪式"。但从另一个角度看,它是一种"显式声明意图"的机制。问题不在于它对人类不友好,而在于它缺乏运行时校验——这一点不管维护者是谁都成立。

· · ·

七、一个更大的图景

我们这场讨论,从Claude Code的源码出发,走到了一个远比"代码质量"更大的问题:

软件工程这个学科的大部分原则,可能需要在AI时代被重写。

不是因为这些原则是错的——在人类作为主要开发者和维护者的时代,它们是绝对正确的。而是因为它们所适应的那个约束条件——人类大脑的认知局限——正在被移除。

未来的代码,可能形态会发生根本变化。也许不再是TypeScript或Python,而是某种更紧凑的、专门为AI生成和机器验证优化的中间语言。人类不需要读懂它,但需要能在必要时检查AI在做什么。

代码作为"思考工具"的角色会逐渐消失,但作为"审计证据"的角色会长期存在。

这才是代码在AI时代的真正定位。

而代码的最终生命力,不取决于AI的能力上限,而取决于一个古老的人类问题——

我们什么时候才能信任一个自己看不懂的系统?

其实,我们每天都在这么做。你并不理解飞机引擎的工作原理,但你敢坐飞机。你不知道银行的风控系统怎么运作,但你敢把钱存进去。

也许有一天,我们对AI写的代码也会有同样的信任。

到那一天,"技术债"这个词本身,就会成为技术债。

· ·

上一篇软件正在死去——而大多数人还不知道下一篇AI时代,最该创业的不是程序员