这是【DSH 工程哲学】系列的收官之作。前五篇我们系统拆解了裁判权收拢、ADR 决策记忆、文档 Tier 分层、三层物理门禁以及架构不变量。但当这些确定性防线全部落成之后,所有向 AI 全栈转型的团队终将面对终极的系统性困局:当大模型让“写代码”的边际成本彻底趋近于零时,代码库将以指数级疯狂膨胀,谁来负责清理?为什么删代码比写代码难十倍? 本篇探讨工程领域最具审美感的维度:负空间(Negative Space)的艺术。

在 AI 编码时代,最容易让人产生成就感的,是“代码行数(LOC)”的爆炸式增长。
借由智能体的强大吞吐量,工程师几天之内就能搭出数万行代码的庞大系统:丰富但无人问津的辅助函数、层层封装却只有单一调用的抽象接口、以及各种“未来可能用得上”的备用分支。
然而,软件工程有一条永恒的铁律:每一行进入主干的代码,都在暗中签署一份昂贵的终身维护契约。
随着无用代码的堆积,CI 流水线越来越慢、模块依赖图越来越盘根错节、大模型的上下文被陈旧无用的符号严重污染。更严重的是,当新会话的 Agent 面对这些冗余代码时,它会基于概率本能把废弃的接口当作“活跃规范”继续调用和衍生,导致系统陷入越滚越大的熵增漩涡。
想删?人类不敢删,怕引发未知的线上雪崩;Agent 不敢删,因为它的默认偏置永远是“向系统添加更多补丁”。
在 DeepSeek Harness 源码库 的演进历程中,顶级工程师的真正分水岭,从不取决于能往系统里塞入多少代码,而取决于如何在代码生成的汪洋大海中,果断而优雅地创造“负空间(Negative Space)”。
一、建立心智:什么是软件工程中的“负空间”?
在艺术设计中,**负空间(Negative Space)**是指主体周围刻意留出的留白,留白的存在赋予了主体呼吸感与真正的形式。
在 AI 原生软件工程中:负空间就是系统中被刻意剔除、修剪和拒绝的非必要表面积。
一个优秀的系统,绝不是因为“再也加不进任何功能”而完美,而是因为“再也减不掉任何多余的包袱”而坚固。
很多工程师以为“删除”不过是“添加”的简单反义词,以为跑个 git rm 就算删除了代码。但在真实的复杂工程中,这种草率的删除必然招致灾难——遗留了破损的文档链接、留下了未清理的依赖补丁、甚至在某一天被某个不明真相的同事或 Agent 以“重构”为名重新写了一遍。
代码添加(Addition):单点行为,局部自洽即可合入;
代码删除(Deletion):系统工程,需要同等的判据、同等的验证基础设施、以及防止死灰复燃的法律条文。
二、第一性原理:P9 负空间对称原理
在 DSH 的方法论体系中,指导所有精简操作的基石是 P9 负空间对称原理(Negative Space Symmetry):
每一次添加,都隐含着持续支付的终身维护税。 删除绝不是添加的简单逆操作,而是需要同等判据、同等验证、同等记录基础设施的独立工程。
如果一个团队只给“增加功能”配置了详尽的设计规范与验收流程,却对“清理功能”毫无章法,这个代码库在 AI 时代不出三个月就会沦为无法维护的技术垃圾场。
flowchart TD
subgraph Addition["常规添加链路"]
A1[新增意图] --> A2[编码实现]
A2 --> A3[测试通过]
A3 --> A4[并入系统 + 承担维护税]
end
subgraph Pruning["DSH 负空间精简工程"]
B1["唯一消费者是自己?(判据)"] -->|无真消费者| B2["连根拔起四件套 (全量清理)"]
B2 --> B3["复活条件立法 (Notes 封印)"]
B3 --> B4["全局零残留门禁 (物理闭环)"]
end
A4 -.->|熵增蔓延| B1
classDef danger fill:#fef2f2,stroke:#ef4444,color:#991b1b
classDef safe fill:#2563eb,stroke:#1d4ed8,color:#ffffff
class A4 danger
class B1,B2,B3,B4 safe
三、DSH 的三大精简工艺(Pruning Patterns)
在支撑约 260 个 npm 包演化过程中,DSH 将抽象的“精简哲学”沉淀为三项被机器门禁看守的工程工艺:
1. 核心判别句:唯一消费者是自己 = 无消费者
在代码审计与审查中,大模型最擅长制造“自我陶醉式抽象”:为一个辅助函数写了一个 Wrapper,为这个 Wrapper 建了一个服务类,然后骄傲地宣称“系统具有极高扩展性”。 DSH 的判决准则极度冷酷:“如果一个类、接口或包的唯一调用者就是它自己的测试或同级辅助包,那它就等同于没有真消费者。” 只要没有终端产品或核心运行时真正依赖该能力,不管抽象有多漂亮,一律判定为应当剥除的冗余表面积。
2. 连根拔起法则(Clean-Sweep Principle)
要删,就必须连根拔起,绝不留空壳或废弃死皮。 在 DSH 的 PR 规范中,移除一项功能必须在同一次提交中带走“四件套”:
- 源码与类型导出(删除所有实现);
- 测试套件与回放快照(删除伴生单测与
snapshots/,不保留无意义测试); - 配置补丁与依赖声明(清理
package.json中的废弃依赖与pnpm-lock.yaml); - 文档与索引链(修复所有指向该模块的入站超链,不留断头路)。
验收标准:全局符号搜索零残留 + 门禁验证照常全绿。只删代码而留着无用依赖或坏死文档,属于不合格提交。
3. 复活条件立法(The Resurrection Clause)
很多开发者不敢删代码,是出于“万一以后可能用得上”的怀旧心理。这种怀旧是代码膨胀的第一推手。 DSH 的策略是:拒绝无意义怀旧,为死代码的“复活”设立明确的法律条件。
在 DSH 的决策记录体系中,专门开辟了 .agents/notes/rejected/simplification/ 目录。当一个精简提案被否决、或者某项被废弃功能被清理时,必须白纸黑字写下记录:
- 为什么原方案被放弃?
- 它放弃了什么能力?
- 复活条件(Resurrection Criteria):未来在什么确切条件发生改变时(例如:第三方生态形成了通用标准、或者出现了具体的真实业务调用者),该功能才允许被重新考虑?
有了复活条件的立法,团队可以毫无心理负担地砍掉代码——因为思考过程已被永恒留存,未来若真有需要,直接按既定判据解锁,绝不需要把僵尸代码泡在主干中“以备不时之需”。
四、从原理到实践:明天就能用上的落地动作
在日常中小型工程中,你不必等到代码库彻底失控才去重构。明天上班,你就可以用以下三步启动第一轮“负空间精简”:
- 做一次“唯一消费者”逆向审计(10分钟排查):
利用简单的工具(如
knip、ts-prune)或全仓搜索,重点排查那些看起来极度通用的 Wrapper、工具类与中间层。如果一个函数的唯一调用者就是它自己的单测、或者只有某个已被废弃的旁路模块在调用它,果断将其列入首批处决名单。 - 执行“连根拔起”四件套提交(拒绝残留死皮):
在团队中确立同提交(Same-Commit)铁律:删代码绝不允许“只删业务函数”。删一个模块必须在同一次提交中带走关联的测试套件、快照文件、
package.json中的闲置依赖以及文档超链接。唯有“全仓搜索零残留 + CI 门禁全绿”,才算合格的精简提交。 - 为被砍方案立一张“带复活条件的墓碑”:
当团队中有人(或大模型)恋恋不舍地说“这段代码万一以后能用得上”时,拒绝无意义的怀旧。逼他在
.agents/notes/rejected/或 issue 中立下一张墓碑,写清:“未来当且仅当满足哪三个确切条件时(如:产生了真实的外部业务调用者、或者底层协议标准化),该方案才允许被重新考虑”。写完立刻删代码。
五、全系列总结:AI 时代的工程抗熵增新秩序
写到这里,【DSH 工程哲学】系列六篇长文正式画上了句号。从第 1 篇到第 6 篇,我们完成了一场关于现代软件工程世界观的重构之旅:
#1 裁判权收拢 ──▶ 不把确定性寄托在大模型自我觉悟上
#2 决策黑匣子 ──▶ 用双轴 ADR (Agent Notes) 阻断幽灵方案复活
#3 事实一个家 ──▶ 区分 AGENTS.md 与 README,用词数预算防通胀
#4 三层硬门禁 ──▶ 用负样本 Spec 证明门禁具备真正的杀伤力
#5 捍卫不变量 ──▶ 用类型印记与系统沙箱将愿望锁死在物理世界
#6 负空间艺术 ──▶ 连根拔起与复活立法,在生成海洋中精简表面积
这六大支柱,共同构筑了抵御大模型技术熵增的完整闭环。
未来的软件工程师,不再是键盘前熟练打字的“码农”,而是确定性系统的总架构师。你的职责是搭建坚不可摧的轨道、设立铁面无私的物理门禁、并在恰当的时刻为系统修剪枝叶。只有当你学会了用机器捍卫系统,你才能在 AI 掀起的生产力风暴中,从容不迫地驾驭惊涛骇浪。
🛠️ 全系列哲学的实证落地:作为 AI Coding 工程质量控制元框架,PonyGo 将本系列所阐述的裁判权收拢、ADR 决策记忆、文档分层、分层门禁、不变量守护与负空间简化,整体沉淀为轻量级零依赖的工程基建。开发者可通过
ponygo status与ponygo audit直接复现全套抗熵增生命周期。