非计算机专业,好奇为什么会出现“程序依赖bug运行”的情况?
这问题初看下没什么意思 - 真出现这种情况,那怕真能运行也是维护性地狱,所以也会尽快修复。
但是 - 换一个问法:为什么程序员无法理解自己创造的规则?能否利用这一特性?
这叫做涌现。

生命游戏就是涌现的最好例子:有一个二维棋盘,每格都或生或死,邻居数量刚刚好是生,太多太少都是死。
很简单吧?只要有一点耐心,聪明点的幼儿园小朋友也能学会。
但是,这是世界上最复杂的东西。你可以在里面实现任何程序,当然,也包括 - 生命游戏。
这时候,复杂度的来源,并非规则本身,而是环境。
这就是涌现的本质:简单的规则,在复杂的环境下,做出超出预期的行为。
我有幸见证过涌现的诞生,两次:

有一次,我告诉程序对象,“你们应该分开”。于是,对象们发明了分形[1]。
有一次,我告诉程序运行时,“你应该以指数速率忘记过去”[2]。
于是,运行时发明了空闲程序释放器[3],一个本来需要大量工作,还值得写成 paper 的功能。
有时候,涌现横跨多个组件。
考虑一个多线程程序。这个程序会用限长队列进行线程间交流。
这时候,会有一个致命问题:队列就如同小学生泳池问题,一边进数据一边出数据;
但是,现实里 - 进跟出的速度不一样:你在森林里找两棵树,没理由它们的高度一样。
这导致:只要程序运行得够久,队列不是满就是空,而这时因为资源争夺,程序会异常低效。
为了解决这一问题,Disruptor 开发团队做了一件看似无关的事情[4]:
他们写了一个功能,当队列里面有更多数据的时候,能同时批处理,比一个个处理更快。
然而,无心插柳柳成荫,刚刚好解决了泳池问题:
如果进的速度更快,数据就会累积,然后批处理就会变快,数据被消除,达成平衡。
数据越多,数据越小,恰好形成了一个负反馈回路。
能不能有更多的涌现?
如果,我们把尽可能多的涌现放在一起,让它们互相操作,最后,能否涌现出一个超出人类理解,也没有人成功过的程序,智能?
曾经,有一个孤独的天才,狂妄的疯子,隐秘的暴君,提出了这个问题。
就让我们走进他,Douglas Lenat,与他的造物,Cyc[5],的故事。
说来复杂,Cyc 是一个数百万行代码的闭源项目,我们并不知道这在做什么。
说来简单,Cyc 是一个思想的社会。Cyc 由很多函数组成。
有的函数,进行着各种各样的简单任务。
比如‘从字符串解析出四则表达式’ - 这是生产者。
比如‘如果经常调用 f(x, y),那试试看 f(y, x)吧’ - 这是探索者。
比如‘如果用了这个函数发生好事情,多用用这个函数’ - 这是管理者。
比如‘大家都要调用我’ - 这是欺骗者,还有‘前面的给我死’ - 这是执法者。
这些函数之间各自都有价值,做出成果‘比如发明新定理’就会得到价值,然后自身会消耗掉一部分,剩下的传给被调用函数。价值不够,就会被 Cyc 消除,而 Cyc 也会造新的函数。
函数们互相协作,价值就如同货币般在思想中传播;造物主 Douglas Lenat 则在白天给这座城市添砖加瓦,而 Cyc 则在晚上用发现换取电费跟 Doug 的垂怜。
Cyc 成功了;Cyc 可以发现数学定理,可以在军棋模拟中取得的胜利,甚至可以设计新的电路。
这成功如此惊人,得到了多个大学者如 Marvin Minsky 跟 Alan Kay 的赞美;也引起了美国军方的注意,进行了大量资助,使得 Doug 可以创立自己的公司,在内与诸多雇员潜心维护 Cyc。
取得如此成就后,Doug 再也不屑证明自己,只是一心给 Cyc 添砖加瓦,渴望到达量变转化为质变,解明智能那一瞬。Cyc 于是从向智能冲锋的堂吉诃德与众人渐行渐远,成为了神秘的天空之城。
这持续了四十年,直到伊卡洛斯因高龄从天坠落。
这时候,众人才发现:原来最初的闪光就是最后的辉煌 - 除了最初的战棋跟其他胜利,Cyc 并无寸进。任由 Doug 缝缝补补,涌现并没降临至天空之城。
问题出在那?没有 demo,没有 publication,一切都在暗处进行;整件时间也跨越了四十年,双重因素使得 Cyc 的失败就如 DB Cooper 的谋划一样,无从下手分析。
但是,就如同涌现是简单的规则造出复杂的行为一样,讽刺般的,神秘复杂的 Cyc,最终死因却很简单:没能达到临界点。
考虑一个 Cyc 函数。这些函数会互相反应,发现规则与函数。但是,大部分时候,这些规则跟函数已被发现,只有少数情况有新发现。那,我们可以记录下一个函数会发现多少新函数。
如果这个数小于 1,这代表反应会指数衰减,而如果大于 1 则会指数爆炸。
很不幸的是,Cyc 的链式反应数小于 1。换句话说,智能依旧在于 Doug 的输入,而不在于环境。一旦 Doug 停止输入,Cyc 就停止发现。到头来,Doug 只是把他的思想以奇怪的方法写成程序了。
我们的物理宇宙,在很漫长的未来才会迎来终结,但 Cyc 则在思维宇宙大爆发前败给了熵增,仅留下了一座 Still Life[6]宫殿供后人敬仰。