为什么我们都在生成无法理解的代码?如何通过上下文工程(Context Engineering)解决这一危机?
背景: Closure 语言拥趸,Rich Hickey 哲学追随者,Netflix 百万行级代码库维护者。
核心议题: 软件危机周而复始。AI 是极致的“易得性”(Easy),却加剧了复杂性(Complexity)。
每一代软件工程(从 Dijkstra 的大型机时代到 Cloud/DevOps)都面临复杂性危机。Fred Brooks 早在 1986 年就警告:没有银弹。现在的 AI 生成代码虽然快,但并未解决“概念化”的难题。
Rich Hickey 经典理论:我们混淆了这两个词,但在工程中它们是对立的。
定义: 单一、无纠缠(One braid)。关注的是结构(Structure)。需要深思熟虑和设计。
定义: 触手可及(Near at hand)。关注的是距离(Proximity)。例如 npm install 或 AI 代码生成。AI 消除了“易得”的所有摩擦力,导致我们不再思考结构。
Fred Brooks 的理论解释了为什么 AI 无法自动解决架构问题。
问题本身固有的难度(如:订单必须被履行,支付必须安全)。这是软件存在的意义。
由人类引入的额外负担(框架、历史遗留代码、权宜之计)。
致命点: AI 无法区分两者。它会将你的技术债(偶然复杂性)视为必须保留的“模式”并加以模仿,从而导致技术债无限放大。
为什么直接用 ChatGPT 进行长对话重构通常会失败?
面对 500 万 Token 的代码库,不能依赖 AI 的“魔法”。演讲者提出了一种规范驱动开发(Spec-Driven Development)的方法,将“思考”与“打字”分离。
动作: 将架构图、Slack 讨论记录、旧文档喂给 AI。让 AI 生成一份“研究文档”,分析依赖关系和组件影响。
关键点: 必须加入 Human Checkpoint(人类检查点)。这是你验证 AI 理解是否正确的时刻。纠正它对缓存、错误处理的误解。将数小时的代码探索压缩为几分钟的阅读。
动作: 基于研究文档,生成一份详尽的实施计划(Spec)。
标准: 必须详细到包含函数签名、数据流、类型定义。演讲者称之为“按数字填色(Paint by numbers)”——即使是最初级的工程师拿到这份 Spec,照着抄也能写出正确的代码。在此阶段确立边界,剔除不必要的耦合。
动作: AI 根据 Spec 生成代码(Coding Agent)。
收益: 避免了长对话带来的上下文混乱。人类 Review 的时候,只需检查“代码是否符合 Spec”,而不需要去猜“这堆生成的代码到底在干嘛”。
这是一个百万行代码库(Java单体)的真实案例。目标是将一个旧的 Auth 抽象层迁移到新的 OAuth 系统。
操作: 直接把代码扔给 AI,要求重构。
结果: 失败。因为旧代码中,业务逻辑和鉴权逻辑紧密耦合(Tightly coupled)。AI 无法识别“接缝”(Seams),它试图模仿旧系统中糟糕的模式(例如 gRPC 和 GraphQL 混用的奇怪写法),并将其带入新系统。代码变得不仅无法运行,而且更加难以理解。
关键转折: 工程师意识到必须先“挣得理解(Earn the understanding)”。
步骤:
结论:通过手动迁移建立的“理解”,使得后续的 AI 生成变得安全且可控。
如果不思考,我们就会失去能力。
高级工程师之所以能一眼看出架构问题,是因为他们曾在深夜修过类似的 Bug,这种痛感形成了直觉。
如果我们总是跳过“理解”直接生成代码,这种模式识别(Pattern Recognition)能力就会萎缩。我们将无法识别什么是“危险的架构”。
打字(Typing)从来不是瓶颈,思考才是。
未来的工程师不是那些能生成最多代码的人。
而是那些:
Generated based on the "Simple vs Easy in AI Coding" Tech Talk Transcript
Interactive Summary Designed for Cognitive Clarity