第二章 传统软件观为什么必须被终结

"软件=代码"之所以能长期占据主流,有四个历史原因。第一,软件最初确实是以代码形式进入人类视野的。第一批程序员写的就是代码,第一批计算机科学课程教的就是语法,第一批软件产品呈现的就是源代码文件。一个对象最初被认识的方式,往往会长期锁定人们对它的理解。第二,代码是最可见的软件存在形式。数据结构的逻辑关系看不见,算法的运行过程看不见,数据库的世界沉积看不见,只有代码以文本形式清晰地呈现在屏幕上。可见性造成了本体错觉。第三,软件产业长期以"代码行数""功能清单""编程语言"作为评价标准,这进一步巩固了"代码=软件"的等式。第四,软件教育体系几乎完全围绕编程语言展开,这使得每一代新工程师从入行第一天起,就被植入了"软件就是代码"的前提。

但这种观念已经不能继续维持了。在GPT时代,代码可以被大模型在几秒钟内大量生成。如果软件真的等于代码,那么软件已经变得几乎不值钱——因为代码正在被大规模自动化生产。可事实显然不是这样。真正有价值的软件系统,其价值从来不在代码文本本身,而在代码背后那套不可见的结构安排、流程设计和世界组织。代码贬值恰恰证明了代码不是本体。本体是那些即便代码被全部重写,仍然必须被保留的东西——结构、流程和世界,即S、D、E。

因此,传统软件观不是"不够精确",而是必须被终结。不终结"代码=软件"的等式,就无法理解GPT时代的软件到底是什么,也无法理解为什么思想可以直接长成软件。

必须追问一个更深层的问题:如果代码不是软件本体,那为什么"代码=软件"这个等式能统治这么久?除了前述四个历史原因之外,还有一个更根本的认知机制在起作用:人类倾向于把"最先被看见的东西"当作"最重要的东西"。

软件发展的历史恰好制造了这样一个认知陷阱。最初的程序员直接面对机器码和汇编语言,他们的全部工作就是写代码。后来出现了高级语言,工作仍然是写代码。再后来出现了框架和工具链,但核心活动仍然被定义为编程。整个软件产业的职业认同、技能评价、薪资体系和社会认知,都围绕着"会写代码"建立起来。当一个行业的全部社会基础设施都建立在某个前提之上时,这个前提就几乎不可能被质疑——不是因为它正确,而是因为质疑它的成本太高。

但GPT打破了这个平衡。当代码可以被AI在几秒钟内大量生成时,"会写代码"作为核心技能的稀缺性急剧下降。如果代码真是软件的本体,那么GPT应该已经让软件变得毫无价值。但事实显然不是这样——真正有价值的软件系统不仅没有贬值,反而在GPT时代变得更有价值。这个矛盾只有一种解释:代码不是软件的本体。代码的贬值没有导致软件的贬值,恰恰证明软件的价值不在代码中,而在代码背后那套不可见的结构安排、流程设计和世界组织中——即在数字SDE中。

因此,GPT时代不是在摧毁软件的价值,而是在暴露一个长期被遮蔽的事实:软件的真正价值从来就不在代码里。GPT所做的,只是把显影层的成本降到接近于零,从而让本体层的价值第一次赤裸裸地暴露出来。

很多团队越来越善于生产代码,却越来越不擅长生产真正稳定的软件本体。代码可以快速膨胀,但结构未必清晰;流程可以大量堆上去,但目标未必明确;数据库可以疯狂扩展,但世界未必真正成形。于是,"软件开发"经常在表面上极其忙碌,在本体上却越来越混乱。今天在AI剧烈动摇代码劳动地位的历史时刻,越必须看见:代码能力是重要技能,但技能不等于本体;劳动方式不等于存在定义;职业身份不等于对象本身。AI正在强迫软件行业从"语法劳动时代"转向"本体设计时代"。未来的软件高手,不是写得最快的人,而是最懂SDE的人。

把软件理解为"功能集合"同样不够。功能只说出了软件"有什么用途",却没有说出软件"靠什么成其为软件"。如果一个健康APP只有"记录跑步""给出评分""生成周评"这些功能,那它仍然只是一个说明书上的条目集合。但一个真正的软件世界远不止这些——它会逐渐形成用户画像,会形成阶段结构,会形成规则网络,会形成历史沉积,会形成趋势判断,会形成一种围绕用户、数据、界面、流程不断纠缠出来的数字环境。功能只是结果,存在方式才是本体。因此,"功能观"是对"代码观"的改进,但依然无法完成软件本体论。把软件理解为"工具",问题就更严重。工具这个词太轻了,它适合描述一把锤子、一把剪刀、一台打印机,适合描述某种直接被主体拿来使用的辅助器具。但今天的软件早已大幅超出了这种地位。手机上的APP并不是一个个孤立工具,而是构成了人的行动空间、信息空间、自我空间和社会空间。

要从根上突破代码观,必须明确地区分两个层次:显影层和本体层。代码属于显影层——它把对象定义写出来,把逻辑流程写出来,把数据库操作写出来,把页面渲染写出来。代码很像一张把软件拍成照片的胶片或一束把内部结构照亮出来的灯光。它让我们看到软件"怎么被写出来",但并不等于它就是软件最深的存在层。显影层的最大特征是它可以变化而本体可以连续——一套系统前端可以重写、后端可以迁移、ORM可以替换、微服务可以拆分或合并,但在这些剧烈变化之后软件本身可以仍然保持连续性。这说明:代码变了本体未必变。能够在代码变化中保持连续的东西才更接近本体。而一旦把代码从本体层降回显影层,事情立刻清晰:软件的骨架是什么看S,软件的流程是什么看D,软件的世界是什么看E,代码做什么——把这些写出来。代码不再被神化但也不被贬低,它被放回了正确的位置:代码是执行性的显影形式而不是软件存在的最终根源。

所以今天必须重写软件学,不是因为想增加一层理论装饰,而是因为软件本身已经成长到了一个必须被重新定义的历史阶段。软件已经不只是程序,不只是工具,不只是功能集合,不只是页面系统,而是一种新的存在物:它有骨架,有流程,有世界,有历史,有画像,有能量,有主体相关性,有文明塑造力。对于这样的存在物,如果人类继续缺乏一个统一的软件学总纲,那么数字文明就会长期在"强大而盲目"的状态中前进。SDE软件学的任务,正是在这种盲目性最强烈的时代,重新为软件立一个房角石。这个房角石一旦立住,软件教育就不再只是训练工匠而能培养真正的软件思想者;软件工程就不再只是经验堆叠而能形成总纲化的方法论;AI时代的软件开发就不再只是"代码写得更快"而能走向"设计得更深"。

回顾软件定义的历史演变,可以看到三次系统性的误判和一次迟到的重生。第一次误判发生在计算机科学的早期:人们把软件等同于程序文本。这个判断在简单系统时代有局部合理性,但它从根上锁死了"软件=可执行指令序列"的狭窄视野。第二次误判发生在互联网产品兴起时期:人们把软件等同于功能清单。这比第一次进步了——从开发者视角进入了用户视角——但仍然只看到用途而看不到存在。第三次误判发生在平台经济时代:人们把软件理解为工具接口和服务端点。API、微服务、云平台这些概念虽然触及了软件的关系性,但仍缺乏一个能统一解释结构、运行和世界的本体公式。三次误判的共同根源是:每一次都只抓住了软件的一个面向,却把它当成了全部。第四次,不是又一次修正,而是真正的重生:软件=数字SDE。这个定义之所以是"重生"而非"修正",是因为它不是在旧定义上补丁,而是从本体论层面重新回答"软件究竟是什么"——软件是结构、流程与世界的三维统一体,数据结构承担S,算法承担D,数据库承担E。三次误判之后的第四次重生,不是可选项,而是软件时代在旧定义全部失效后被逼出来的新本体。