用现有工具构建新工具,然后用新工具构建自己,这在编程技术中是普遍形态,然而它有着哲学层面的意涵。其实,人类的所有技术都是在旧的技术中诞生,然后自己又推动自己发展。
自举之所以有"生命感",是因为它构成了一个自我指涉的闭环。
编译器的历史是最好的例证:C 语言最初是用 B 语言写的编译器编译出来的,GCC 用 C 写自己,Rust 的编译器最早是用 OCaml 写的,等 Rust 够成熟了再用 Rust 重写 rustc,然后丢弃 OCaml 这个"脚手架"。新工具诞生后做的第一件事,往往是回头重新生产自己的母体。这不是循环冗余,而是能力的证明——一个系统只有在能描述/构造自身之后,才真正算"活"了。图灵的通用机本质上也是这个思想:一台机器如果能模拟任何机器(包括它自己),它就跳出了逐个定制的窠臼。
生物学上有个对应概念叫"自创生"(autopoiesis):生命系统的特征不是由外部零件组装而成,而是由自身的运作不断再生产自身的边界和组件。技术某种程度上也是这样:芯片用上一代光刻机制造下一代光刻机,科研仪器用已有仪器校准更精密的仪器。每一代工具都内嵌着前一代的痕迹,同时又把"工具能做什么"的上限推高,为下一代工具腾出存在空间。
不过有两个值得注意的细节:
冷启动永远需要一个外部基底。 自举不是无中生有,递归总得有个基例——第一台编译器要先用纸带打孔,最早的芯片要用手工布线。技术的"自我繁殖"始终扎根于它之前的世界(物理定律、已有的工业体系、人类语言)。所以它更像寄生的藤蔓,而不是凭空自足的火焰。
自我指涉的循环有退化风险。 如果只用 AI 生成的数据训练下一代 AI,模型会逐渐丢失真实分布的尾巴(模型坍缩);如果工具只被自己的后代使用和改进,可能沿着某个局部最优越陷越深。健康的自举需要持续注入外部性——真实世界的反馈、异质的旧技术、意外。
有意思的是,这个技术生态的演化循环现在正以新形态加速:AI 用现有代码训练出来,然后帮人生成更好的工具,这些工具的产出又成为下一代的训练燃料。冷启动的间隔在缩短,但那个"外部基底"的问题——最初那一下究竟是谁推的——并没有消失,只是被推得更深、更难看清了。