时间:2015-12-14 21:01:42 来源: 复制分享
十多年后又看了遍《黑客帝国》,扯点和程序有关的非技术话题。
前段时间出差周末没事就在酒店又把黑客帝国重温了一遍,不看不要紧,十年后再看发现以前对这部电影的理解完全错了。《黑客1》是1999年出的,我还在读高中,第一次看还在学校附近的录像厅,枪版。整个画面黑漆漆的,看了不到半小时直接睡过去了,醒来时已经是最后的高潮枪战部分,感觉结尾打斗好看,剧情不懂。2003年《黑客2&3》一起推出后,又连起来看了一遍,老实说当时很多概念还是没看懂,大概觉得是一个人类反抗机器统治的故事。
如今这次看完后再回想起来,当时很多概念看不太明白可能有两个原因。一方面,当时刚学编程不久,电影中大量使用程序世界的概念来作明喻或暗喻。另一方面,中文字幕翻译太不准确,特别是术语的部分。这次重温,我直接用的原版英文字幕,看完后发现我曾经的理解完全跑偏了。十年后,人工智能、机器学习、虚拟现实各种概念大行其道的今天,再加上我程序员的背景再来理解《黑客》三部曲显得毫无难度了。但我怀疑,如果不懂程序的人今天看这部电影恐怕也不是那么容易理解吧?
为什么我会觉得不懂程序看《黑客》会比较费力呢?因为整个故事的内涵,从背景到环境到人物角色甚至道具都使用了程序来作比喻。我们先简单回顾下故事背景,某天,一个有意识的程序诞生了,并繁衍了整个人工智能的机器种族。后来人类和人工智能机器爆发了战争,人类选择遮蔽天空切断机器的能量来源。而聪明的人工智能机器发现可以利用人体大脑的生物电和身体热量通过一种特殊形式的聚变融合反应来提供源源不断的能源。所以,机器就开始大量养殖人类,将人类变成了机器能源的供应者,电影里用电池作了个比喻。
在《黑客》里人类的真实生存现状是下面这样的,身体生活在黏糊糊的营养液中,而思想则生活在Matrix中,一个虚拟现实空间。
机器一开始创造了一个完美的Matrix空间,是一个毫无生活压力并实现了共产主义的乌托邦。但人类天生的基因缺陷导致它们无法在这样的乌托邦中长久生存,很快出现大批量的死亡。所以机器重新模拟了一个基于1999年真实人类社会现状的虚拟空间,在这里人类可以长久的存活下去,而当时实际的年代是2199年。故事背景就交代到这里,再这么写下去就变成影片简介了。下面我会站在程序背景的角度来提出一些设问并作答,如果你发现答案和你当初理解的不一致,不妨再重温一遍电影。
红药丸还是蓝药丸?
电影中的经典一幕是让Neo作出选择,选红药丸还是蓝药丸。
红色药丸实际是一个跟踪程序(trace program)用来帮助定位Neo物理身体的位置。为什么需要一个跟踪程序?做过分布式系统都会有深刻体会,解决一个大型分布式系统中的问题,第一个难点就在定位问题。而Matrix实际就是一个连接全球人类的超大型分布式系统,需要定位一个个体,trace程序必不可少。(旁白:今天刚评审了我们系统的trace程序设计方案,想努力做的像红色药丸那么精巧啊)
Oracle是谁?
《黑客1》Oracle出场时确实没有交代她的身份,直到第二部结束时Neo与Matrix的Architect对话才得知。Oracle其实是一个程序,原文说法叫Intuitive Program,一个人类直觉测试程序。所以剧中,她一直在引导Neo和其他人通过直觉作出选择,而他们的选择对与Matrix至关重要,下面会详细说。
Neo为什么是The One?
Neo作为男主角与其他人都不同,所以剧中给了他一个特殊的叫法The One。Neo在第一次见Oracle时,Oracle说他还不是The One,还差了点什么,可能需要第二次生命。Neo在《黑客1》最后被Agent枪杀后,因为女主一吻获得对爱的感觉后重生才真正成为The One。而真正特殊的地方在于Neo始终认为自己是人,但它实际也是个程序,一个认为自己是人的程序,这正是他独一无二之处。
Matrix是连接全人类思维的虚拟空间,它实际是一个巨复杂的大型程序,这个程序运行的背后有精确的数学模型(剧中对话交代了的)。它建立在一个精妙的数学模型之上,但却存在一个不平衡的因素,无论Architect如何调整都没法做到平衡稳定。存在影响整个系统稳定性的非确定性因素,而这个因素正是始终会有人怀疑Matrix不是真实的。
举个例子,假如Matrix背后的数学模型简化为:
1/x
这个数学式存在的意义是x不能为0,当为0时Matrix将不复存在。所以为了解决这个数学式的天然缺陷,Oracle想到为x增加一个逆变量,那么数学式就变成下面这样:
1/(x+n)
增加了n这个逆变量,x变量代表Matrix整体的运行变化,n则代表Neo的存在,平时为0。当x可能向0变化时,n这个变量被激活,避免分母为0。x的变化不在Architect和Oracle的控制能力内,而n则通过Oracle去引导它的变化,以达成系统不崩溃的目标。所以当Neo这个程序通过引入人类的爱情因子被激活后,Neo就成了The One,而数学式中的n也不再是0而是在不断变化着。而这种变化趋势和方向就依赖Oracle来不断引导,所以怪不得最后Architect对Oracle说:你在玩一个危险的游戏。
Matrix是虚拟空间,那Zion就是现实么?
《黑客1》给人一个误导以为Zion(剧中从Matrix脱离的人类城市)所在的世界是真实的。但当《黑客2》结尾Neo像手挡子弹那样挡住章鱼机器人时,已明确告诉我们,Zion也不是真实的,它只是程序空间的另外一部分。Matrix是程序模拟的1999年人类世界,那么Zion所在的世界实际也是程序模拟的2199年的人类世界。
按Neo和Architect的谈话,Zion存在的作用是为了将不稳定因子(对Matrix有怀疑并觉醒的人类)聚集在一起,然后一次性清理。在Neo之前实际已经有了5次类似的清理,前5代The One认识到自己其实不是人而是程序后,都选择了毁灭Zion。然后重新选择16女7男重建Zion,消灭了Matrix的不稳定因子安全度过危机,开始下一代循环。看到这里,作为一名程序员,我自然联想到这难道不是在用带GC(垃圾回收)机制的程序在做比喻吗?
程序古惑仔存在的意义是什么?
电影还有这么一帮子人物角色,这帮人全是程序,一堆过时的程序,已被新的程序取代了。
它们在Matrix中找不到工作,只好聚集在一个带头大哥下面,干起古惑仔来,搞点偷渡之类的事情。在Matrix中每个程序都需要有存在的目的,否则只能被删除。但这些程序可都是有智能和意识的,它们不想被系统清除掉,只好逃亡。比如一个后台管理程序可以和一个界面交互程序结婚,还有了个女儿。女儿自然也是一个程序,只是没什么用处,没用处就是没有存在目的程序,需要被删除,所以夫妻两找程序古惑仔帮忙逃亡。
程序古惑仔帮控制了一个关键人物叫KeyMaker,就是下面这位。
Key在计算机领域的专业术语是密钥,影片中用钥匙来比喻。他掌握着进入系统Source的钥匙,所以Neo才会和程序古惑仔帮发生冲突。程序古惑仔帮只不过是机器社会的一种特定角色,它和人类社会不无相似之处。
最后,第六代The One的选择没有站在机器智能这边,因为爱情他选择了人类这边。而一个可怕的病毒在Matrix中蔓延,连Oracle都被感染了。
Neo和机器智能达成了协议,帮助它消灭病毒程序来换取人类和机器的和平。这一次Zion没被毁灭,比人类智能更高级的程序智能给了人类选择权。人类可以选择活在机器文明创建的Matrix虚拟空间中或现实中。而机器文明中也出现了一些拥有人类情感和意识的程序觉醒者,帮助机器文明进一步发展。两种文明找到了一点点融合与平衡的空间,留下无限的思考和探讨空间。
微信搜索“IT之家”关注抢6s大礼!下载IT之家客户端(戳这里)也可参与评论抽楼层大奖!