From 92b8f7649b40b7572d7e079ebdabbe138983e862 Mon Sep 17 00:00:00 2001 From: muqiuhan Date: Mon, 29 Dec 2025 13:47:33 +0000 Subject: deploy: 5f01e4da3485ca5bc1aeffaea8d4b1ecb753e9a9 --- .../index.html" | 124 ++++++++++++++++++++- 1 file changed, 118 insertions(+), 6 deletions(-) (limited to '2025/12/20/谈谈软件工程') diff --git "a/2025/12/20/\350\260\210\350\260\210\350\275\257\344\273\266\345\267\245\347\250\213/index.html" "b/2025/12/20/\350\260\210\350\260\210\350\275\257\344\273\266\345\267\245\347\250\213/index.html" index c304cb7b..fdb31292 100644 --- "a/2025/12/20/\350\260\210\350\260\210\350\275\257\344\273\266\345\267\245\347\250\213/index.html" +++ "b/2025/12/20/\350\260\210\350\260\210\350\275\257\344\273\266\345\267\245\347\250\213/index.html" @@ -66,7 +66,119 @@ - +
@@ -196,15 +308,15 @@

在有限认知下,持续对抗系统熵增,在相互冲突的目标间做出最优权衡,以可工程化的方式交付价值。

一、复杂性是固有属性,而非偶然缺陷

-

软件复杂性源于状态空间的指数级爆炸。一个仅有100个布尔变量的系统,其状态空间已达 $2^{100}$(约 $10^{30}$),远超人类认知极限。

+

软件复杂性源于状态空间的指数级爆炸。一个仅有100个布尔变量的系统,其状态空间已达 (约 ),远超人类认知极限。

1
2
3
4
5
6
7
8
# 示例:复杂度不在于代码行数,而在于状态组合
class Order:
def __init__(self):
self.paid = False # 2^1
self.shipped = False # 2^2
self.cancelled = False # 2^3
# 3个布尔值 -> 8种合法状态,但业务规则会禁止某些组合
# 真实系统有上千个状态变量 -> 灾难

复杂性是软件的本质,无法消除,只能转移或控制。这与建筑工程有本质区别,桥梁不会自发产生新状态。

二、 熵增是不可逆热力学过程

组织沟通结构的混乱会精确映射为代码结构的混乱。代码在没有外力干预下必然走向腐烂。

1
2
3
4
5
6
7
graph TD
A[需求变更] --> B[快速补丁]
B --> C[技术债务]
C --> D[开发速度下降]
D --> E[更多补丁]
E --> C
style C fill:#f00,stroke:#333,stroke-width:2px
-

技术债务的利息是超线性增长的。一个类被10个模块依赖时,修改它的成本不是10倍,而是约 $O(n^2)$ 倍,因为需要理解所有依赖方的上下文。

+

技术债务的利息是超线性增长的。一个类被10个模块依赖时,修改它的成本不是10倍,而是约 倍,因为需要理解所有依赖方的上下文。

三、人类认知约束

-

人类工作记忆容量为 $7 \pm 2$ 个信息单元。这是代码审查、架构设计、故障排查的硬性天花板。

+

人类工作记忆容量为 个信息单元。这是代码审查、架构设计、故障排查的硬性天花板。