人物介绍:
- 阿超:- 老练的架构师,深谙底层逻辑与系统复杂度的博弈。
- 果冻:- 习惯调用高级 API、迷信现成框架和新工具的初级程序员。
- 小飞:- 动手能力强、性急的一线工程师。
凌晨两点,超算中心的会议室。引发 1MB 内存死锁的第三方库终于被降级回滚,系统监控大屏上的曲线重新恢复了平稳。
果冻揉了揉布满血丝的眼睛,合上笔记本:“超哥,刚才那个 1MB 的底层死锁把我打醒了。既然抽象充满了漏洞,那我们为什么不效仿伊隆·马斯克?他在造火箭时,发现航空供应链的‘抽象层’(层层外包、资质审核、黑盒交付)太低效,就直接用第一性原理,打穿供应链,回归材料学底层的‘不锈钢板’,自己从底层解决了问题,这是一个颠覆式的创新。既然高层语言和第三方库这么不可靠,软件工程的第一性原理,是不是要求我们直接去写底层的 C 语言甚至机器码?”
小飞正仰着头喝可乐,听完差点呛到:“果冻,你疯了吧?写机器码?让你用汇编去写一个带分布式事务的电商结算系统,你连第一天的日出都活不到!”
阿超笑了笑,拿起白板擦,将刚才排查 Bug 时画的杂乱阵列擦掉,转身看向果冻:“小飞说得对。马斯克的‘第一性原理’之所以在制造业能形成降维打击,是因为连续的物理世界和离散的软件世界,底层的运作规律完全不同。”
阿超在左边写下“物理定律”,右边写下“认知带宽”,接着转过身,用指关节重重敲了敲右边的词:

“马斯克打破供应链的抽象,用钢板造火箭。他为什么能赢?因为当他剥离了人类社会堆砌的中间商黑盒后,底层的物理定律(热力学、连续介质力学)是免费的、绝对诚实的运行环境。钢板受力,地球引力和分子间作用力会自动帮他维持微观秩序,他不需要耗费哪怕一丁点脑力去控制每一个铁原子的排列。”


“但在软件里,如果你打破了操作系统和高级语言的抽象,直接去写机器码,你迎来的不是免费的物理定律,而是逼着你自己用血肉之躯,去手控每秒几十亿次的比特流。这引出了软件工程真正的刚性约束——人类大脑的认知带宽极限(Cognitive Capacity)。”
果冻: 这我知道,认知科学里著名的米勒定律(Miller's Law)早就给人类的智力划了红线:人类大脑的工作内存,同时只能处理 5-9 个独立的信息块。就是 7 加减 2。
阿超:对,为什么直接写机器码会让人脑崩溃?因为在机器码的尺度下,一个内存地址、一个寄存器状态、一个条件跳转、一个字节对齐,每个微观细节都会强行霸占你大脑里的一个信息块。当你写到第 100 行机器码时,这些机器代码能做的事情很少,但你的工作内存就已经满载了。一旦代码量叠加到几百行,你的大脑为了塞进新的细节,就必须强制把旧的细节 ‘换页(Swapping)’出去。这就跟低内存服务器疯狂读写虚拟内存一样,你的大脑会陷入严重的‘系统抖动(Thrashing)’——你刚想明白业务逻辑,转头就把刚才分配到哪个寄存器给忘了;你刚去核对寄存器,业务逻辑的状态机又断片了。你有限的脑容量全部被耗死在频繁的‘上下文切换’中。这就是软件工程的底层现实:离散状态机的微观细节,完全不具备物理世界的自动收敛性。如果你不用高级语言把这些细节打包成更高维度的信息块(比如一个变量、一个函数、一个类),你的大脑根本没有富余的带宽去构筑宏观的业务大厦。拒绝抽象,就好比拒绝开轮船,或帆船,而赤身横渡太平洋, 你的每一次划水都是肉体直接接触海水和海里的各种生物, 但是你游不了多久就会沉没。”
小飞把空易拉罐捏瘪,投进墙角的垃圾桶:“所以,制造业的第一性原理是 打穿中间人的抽象和黑盒,回归基本物理原则;但软件工程的第一性原理恰恰相反,是管理复杂度,使其永远不超过人类大脑的认知带宽。
阿超赞许地点点头,在白板上写下了软件工程先辈 Fred Brooks 在《人月神话》中的核心理论:
“为了管理认知带宽,Brooks 把软件的复杂度分成了三类。认清这三类困难,你才算掌握了软件的第一性原理。
第一是偶然困难(Accidental Complexity)。比如怎么分配内存、怎么处理底层网络协议、怎么配编译环境。高级语言、操作系统乃至现在的云原生框架,都是为了压制偶然困难,把你从底层各种细节的泥潭里拉出来。
第二是琐碎/社会学困难(Sociological Complexity)。比如你买一个商业软件模块,要走采购流程、各种招标、竞标、签法务合同、忍受闭源的黑盒溢价,而且后期还要为软件质量的验收而做各种扯皮。”
听到这里,小飞插话道:“这也是为什么开源社区这么伟大。Linus 那句经典的 ‘Talk is cheap, show me the code’,就是软件业打破‘社会学黑盒’的第一性原理宣言。开源直接越过法务和销售的废话,让你获取最纯粹的原材料(源代码)。”
阿超敲了敲白板,切入正题:“最后,是真正要命的本质困难(Essential Complexity)。不管你用什么高级语言,业务逻辑本身的多样性、并发状态机的时序纠缠、非确定性的数据输入,这些困难是绝对无法消除的。软件的第一性原理,就是用一层层适度的抽象把偶然困难屏蔽掉,从而把极其宝贵的大脑带宽省下来,去死磕那些无法逃避的本质困难。 而且 Fred 他老人家认为并不存在能解决本质困难的银弹。“
果冻的眼睛突然亮了,他在电脑上点开 AI 编程助手的界面:“等等!超哥,小飞!如果说管理认知带宽是核心,那现在的 AI 辅助编程工具简直就是终极银弹啊!它一键就能生成 80% 的代码。CRUD 接口、正则匹配、单元测试全自动完成。按照 Brooks 的理论,AI 帮我们写代码,是不是意味着软件危机终于被彻底解除了?”
会议室里的空气突然安静下来。
小飞冷笑了一声,拉过一把椅子跨坐下,双手交叉趴在椅背上:“你太天真了。AI 确实瞬间消灭了 80% 的代码量,但那 80% 全是‘偶然困难’。剩下的 20%,是硬核的‘本质困难’!”
阿超快步走到白板前,画了一个图:
“不要把代码行数和系统复杂度混为一谈。AI 时代的到来,不仅没有解除软件危机,反而把工程师推向了一个极其危险的高负荷盲区。
首先,代码密度的恐怖膨胀。AI 让你敲击键盘的摩擦力降到了零,原本一个月的代码量,现在三天就能堆出来。系统里模块之间的有向依赖图瞬间爆炸。AI 帮你堆砌了 80% 的脚手架,同时也帮你埋下了呈指数级增长的边界漏洞。
其次,调试门槛(Debugging Barrier)被疯狂推高。当你自己手写几千行代码时,你的大脑和代码是一起生长的,你拥有对整个状态机的隐性知识(Tacit Knowledge)。但现在,AI 一秒钟喷出两千行看起来很完美的逻辑,你没有参与微观的构建过程。一旦在极端并发下(就像刚才的 1MB 边界死锁)崩溃,你面对的是一坨庞大的、别人写的机器生成代码。理解并排查它的认知负荷,远超你自己手写一遍。
最后,是致命的熟练度陷阱。新手习惯了 AI 的‘一键生成’,以为只要写对提示词(Prompt)就能掌控系统。他们失去了在泥潭里和内存泄漏、死锁、脏数据肉搏的机会。当底层分形怪兽挣脱抽象的锁链冲出来时,这些缺乏底层直觉的驾驶员会在屏幕前目瞪口呆。”

果冻倒吸了一口凉气,“所以……” 果冻的声音有些发干,“在这个 AI 把一切都在加速的世界里,软件的三重分形被 AI 越堆积越多了,我们到底该怎么办?拒绝 AI 吗?”
“当然不是。” 阿超把白板笔扔回笔筒,“一流的工程师,必须具备双重视角(Dual Vision)。”
阿超走到会议室的落地窗前,看着外面深夜中几幢灯火通明的大楼,据说那是飞书和钉钉团队比赛谁加班更晚的实况:
“第一,你必须心安理得、并且极度熟练地去驾驶这辆名为 ‘抽象与 AI’ 的越野车。你要用最先进的 LLM 帮你写代码,用最高效的云原生框架去搭建架构。在宏观上狂奔,尽快获得真实世界的反馈,尽最大可能保护你的大脑带宽,不要把精力浪费在重复造轮子的偶然困难上。
第二,也是最重要的一点—— 必须永远有 ‘赤脚行走’ 的能力。

你要清醒地知道,越野车的底盘下面,永远是离散的分形。当系统平稳运行时,你是发号施令的架构师;但当服务器在深夜崩溃,当 AI 给出的解释全是指鹿为马的幻觉时,你必须有能力瞬间推开 AI 的胡言乱语和忽悠,化身成底层机器的同类。你能精准地潜入十六进制的内存快照,能在 TCP 的报文头部里抓虫,能在无数死锁的线程栈里,徒手掐死那只 bug。”
阿超转过身说:
能高效地享受高维抽象的红利,但又不丧失穿过抽象层次和黑盒直接 debug 和重构的软件工程原生能力。这,才是软件工程师真正的不可替代性。
夜雨聆风