修 Bug 的手艺与架构的艺术:从熵增到熵减 - 张善友

修 Bug 的手艺与架构的艺术:从熵增到熵减 - 张善友

💡 原文中文,约3300字,阅读约需8分钟。
📝

内容提要

本文探讨软件工程中的“艺术”在于通过熵减原则修复Bug,即不仅修复问题本身,还消除其存在根源。作者提出以本体论投影、IRDI治理和MetaSkill DAG为核心的架构体系,将领域知识显式化、标识全局化、依赖单向化,从而降低系统复杂度,实现可治理的长期主义工程实践。

🔎

延伸解读

熵减的工程实践:从隐性知识到显式治理

文章指出,软件系统熵增的根源之一是领域知识的隐性化,它们散落在文档、脑图和代码注释中,随人员流动而失真。作者提出的本体论投影将领域模型显式化为JSON-LD语义层,使概念有正式定义,类似从口头协议升级为正式合同。这种显式化是熵减的基础,让复杂度从不可控变为可治理,为后续的标识统一和依赖管理奠定基础。

IRDI与DDI:全局一致性的双重保障

IRDI作为全局唯一标识,确保同一概念在不同系统、版本中名称一致;DDI三元组则进一步定义语义,保证同一名称代表同一含义。两者结合,从标识和语义两个层面阻止了“同名异义”和“异名同义”的概念混乱,这是技术债务中最隐蔽的部分。这种全局一致性是熵减的第一道闸门,也是实现跨系统协作的关键。

MetaSkill DAG:依赖单向性与局部可重构

MetaSkill DAG通过有向无环图约束依赖的单向性,避免循环依赖这一技术债务温床。其节点可独立修改和替换,只要输入输出Schema稳定,全局稳定性不受影响,这与DDD的限界上下文思想一致。此外,DAG的可视化特性使依赖关系一目了然,提升了系统的可观测性和可审计性,让复杂度显性化。

从艺术到手艺:熵减基础设施的长期价值

作者强调,熵减不是自然发生的,需要主动设计。通过本体论投影、IRDI治理和MetaSkill DAG,团队将“艺术”的架构判断转化为可复现的工程实践,使数字员工的技能组合具备显式结构和版本治理。这种基础设施让修改的影响范围可预测,降低了维护成本,体现了长期主义软件工程的核心:在每次提交中为系统“还债”而非“借债”。

Q&A

什么是软件工程中的“艺术”?

软件工程中的“艺术”指的是在修复Bug或进行架构决策时,不仅解决眼前问题,还通过熵减原则消除问题的根源,使系统复杂度降低,技术债务减少。它关注全局秩序,回答“该不该做”的问题。

为什么说软件系统天然服从热力学第二定律?

因为只要有人在写代码、修Bug或加功能,系统的信息熵就会增加。每一行临时补丁、绕过的抽象层或妥协的注释都是无序能量的注入,导致代码像藤蔓一样缠绕,最终难以维护。

什么是“本体论投影”?它如何帮助降低系统复杂度?

本体论投影是将领域模型显式化为JSON-LD语义层,使每个领域概念(如计费单元、技能节点)都被定义为本体实体。它把隐性知识变成显式合同,带来两个收益:一是领域知识不再散落,减少失真和漂移;二是为后续的IRDI治理和MetaSkill DAG提供基础,从而将复杂度从隐性转为显式、可治理。

IRDI和DDI在软件架构中分别起什么作用?

IRDI(International Registered Data Identifier)作为本体实体的全局键,确保同一概念在不同系统、版本和环境中具有唯一、可解析的标识。DDI(Data Documentation Initiative)三元组提供语义治理框架,确保同一名字在全系统代表同一意思。两者共同阻止“同名异义”和“异名同义”的概念混乱,是熵减的第一道闸门。

MetaSkill DAG如何实现熵减?

MetaSkill DAG通过三个层面实现熵减:1)局部可重构,全局稳定,节点可独立修改,只要输入输出Schema不变;2)依赖单向,无循环债务,强制无环约束,避免循环依赖;3)可视化与可审计,使依赖关系一目了然。这使系统复杂度变得可见、可度量、可治理。

在GoodCrew中,数字员工如何体现熵减的终极形态?

GoodCrew的数字员工不是黑盒AI,而是可拆解、可观测、可治理的技能组合体。当业务需求变化时,修改范围局部且可预测,只需查看DAG拓扑和节点契约,无需通读代码。这体现了熵减的终极形态:让系统复杂度可见、可度量、可治理。

为什么说“熵增是定律,熵减是选择”?

熵增是软件系统的自然趋势,不可避免;但熵减需要工程师主动设计,在每次提交、Code Review和架构决策中保持清醒,选择为系统“还债”而非“借债”。这是一种长期主义的工程实践选择。

🏷️

标签

➡️

继续阅读