不懂程序看的明确《黑客帝国》吗?

十多年后又看了遍《黑客帝国》。扯点和程序有关的非技术话题。



前段时间出差周末没事就在酒店又把黑客帝国重温了一遍,不看不要紧,十年后再看发现以前对这部电影的理解全然错了。 《黑客1》是 1999 年出的。我还在读高中,第一次看还在学校附近的录像厅,枪版。 整个画面黑漆漆的,看了不到半小时直接睡过去了,醒来时已经是最后的高潮枪战部分,感觉结尾打斗好看,剧情不懂。 2003 年《黑客2&3》一起推出后,又连起来看了一遍,老实说当时非常多概念还是没看懂,大概觉得是一个人类反抗机器统治的故事。

现在这次看完后再回想起来,当时非常多概念看不太明白可能有两个原因。 一方面,当时刚学编程不久。电影中大量使用程序世界的概念来作明喻或暗喻。 还有一方面。中文字幕翻译太不准确,特别是术语的部分。 这次重温,我直接用的原版英文字幕,看完后发现我以前的理解全然跑偏了。

十年后,人工智能、机器学习、虚拟现实各种概念大行其道的今天,再加上我程序猿的背景再来理解《黑客》三部曲显得毫无难度了。 但我怀疑,假设不懂程序的人今天看这部电影恐怕也不是那么easy理解吧?

为什么我会觉得不懂程序看《黑客》会比較费力呢? 由于整个故事的内涵。从背景到环境到人物角色甚至道具都使用了程序来作比喻。 我们先简单回想下故事背景,某天,一个有意识的程序诞生了,并繁衍了整个人工智能的机器种族。 后来人类和人工智能机器爆发了战争,人类选择遮蔽天空切断机器的能量来源。 而聪明的人工智能机器发现能够利用人体大脑的生物电和身体热量通过一种特殊形式的聚变融合反应来提供源源不断的能源。

所以。机器就開始大量养殖人类,将人类变成了机器能源的供应者,电影里用电池作了个比喻。

在《黑客》里人类的真实生存现状是以下这种,身体生活在黏糊糊的营养液中,而思想则生活在 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 虚拟空间中或现实中。 而机器文明中也出现了一些拥有人类情感和意识的程序觉醒者,帮助机器文明进一步发展。

两种文明找到了一点点融合与平衡的空间。留下无限的思考和探讨空间。

时间: 2024-10-14 12:21:08

不懂程序看的明确《黑客帝国》吗?的相关文章

不懂程序看的明白《黑客帝国》吗?

前段时间出差周末没事就在酒店又把黑客帝国重温了一遍,不看不要紧,十年后再看发现以前对这部电影的理解完全错了. <黑客1>是 1999 年出的,我还在读高中,第一次看还在学校附近的录像厅,枪版. 整个画面黑漆漆的,看了不到半小时直接睡过去了,醒来时已经是最后的高潮枪战部分,感觉结尾打斗好看,剧情不懂. 2003 年<黑客2&3>一起推出后,又连起来看了一遍,老实说当时很多概念还是没看懂,大概觉得是一个人类反抗机器统治的故事. 如今这次看完后再回想起来,当时很多概念看不太明白可

程序员讨论 《黑客帝国》 (三) 情感

人总会与人比较,找出自己拥有而别人没有的东西,从而建立起自信心.早期机器就已经在记忆和运算能力上超越人类,于是人类嘲笑机器没有智慧,突然有一天机器出现了智慧,能解决复杂问题,学会“骗人”了.人类傻眼了.想了半天,我们还有什么是独特的呢?于是“情感和爱”便成了人类自尊心的最后防线. 这大概就是很多科幻电影的主题,机器的体能智慧和以及各项指标完虐人类,但最终人类因为爱战胜了机器,比如终结者2018和黑客帝国. 但实际上,情感真的是人类的专利吗?动物会对人产生依恋,这无可否认.你可以写一个简单的电子宠

程序员讨论《黑客帝国》(二)平衡和进化

接上一篇<真实与虚拟>. 我有点纳闷,机器之主在他创造的虚拟世界中拥有无上的能力和权威,那他想解决任何问题不都轻轻松松吗?他想毁掉Zion,一个命令而已,就如同拔掉自家后院的杂草一样简单,又何必让机器如此大动周章,甚至屈膝让尼奥去帮忙? 这让我想起了一个有意思的问题,在我们设计的程序中,能量和物质是守恒的吗? 绝大多数人会拍脑袋说,当然不守恒,我设置一个变量value,可以让它等于任何值,从0到正溢出皆可.不过,当设计一款网游的时候,你会发现一些有趣的事实,如果玩家数量不变,而新的更好的装备不

让你的 Qt 桌面程序看上去更加 native(一共六篇)

<让你的 Qt 桌面程序看上去更加 native>是一个系列文章.在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native.这里,我假设你已经清楚如何使用 Qt 编写桌面应用程序,因为文章中大多都是所谓的“细节”,而有时候恰恰是这些“细节”决定着用户体验.同时,这里的程序都是指桌面程序,不包括各个嵌入式平台. 关于 Qt 的介绍这里就不再赘述.这里只说明一点,相比其他的 C++ UI库,Qt 的处理实际上更类似 Java 的 Swing.Qt 的大部分组件都是由自己的绘

从JDBC程序看为什么需要Mybatis

package com.xuebusi.jdbc; import java.sql.*; /** * 从JDBC程序看为什么需要Mybatis * * 1.加载驱动程序和数据库连接所需要的url.用户名和密码都是写死在程序中的, * 后期更换数据库的话还要修改程序.所以最好是定义到外部的配置文件中: * * 2.SQL语句也是写死在程序中: * (1)后期如果需要修改SQL语句的话,必须修改程序,重新编译: * (2)无法达到代码重用的作用: * (3)解决方案:最好将SQL语句也能够写死在配置

Block变量的的用法,使你的程序看起来清晰明了!

<span style="font-size:24px;">为什么要使用block变量呢? 因为当我们的程序比较繁杂的时候,我们在一个函数中要调用一个函数,还需要在外边来定义,实现,很不方便,但是有了block变量我们就可以在一个函数的内部来定义一个block变量,相当于又在函数的内部来定义了一个函数. int (^max)(int x,int y) = ^(int x,int y)//求两个数的最大值 { return x > y ? x :y; }; NSLog(

微信小程序看上去很美

目前不少关于 微信小程序 的文章主要集中在两各方面:一是开发技术细节:二是怎么靠此赚钱. -- “微信小程序”所处的环境 -- 2016年初,美国号召全民学编程,包括监狱服刑人员.同样,在中国要想掌握 HTML.JavaScript 和 SQL 技术也越来越容易,懂得毛皮的人也越来越多.加上政府近几年鼓励年轻人创业,尤其是“互联网+”概念,让很多人有创业的冲动:找几个朋友谋划个创业点子,找个懂点 HTML+JavaScript+SQL 技术的人合伙,不用营业执照,不用租用场地,未来之星就此诞生.

从几个简单的程序看PHP的垃圾回收机制

每一种计算机语言都有自己的自动垃圾回收机制,让程序员不必过分关心程序内存分配,php也不例外,但是在面向对象编程(OOP)编程中,有些对象需要显式的销毁,防止程序执行内存溢出. 一.PHP 垃圾回收机制(Garbage Collector 简称GC)永盈会娱乐城 在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾.PHP会将其在内存中销毁:这是PHP的GC垃圾处理机制,防止内存溢出.当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁.GC进程一般都跟着

通过微信小程序看前端

前言 2016年9月22日凌晨,微信官方通过“微信公开课”公众号发布了关于微信小程序(微信应用号)的内测通知.整个朋友圈瞬间便像炸开了锅似的,各种揣测.介绍性文章在一夜里诞生.而真正收到内测邀请的公众号据说只有200个. 虽然内测名额十分稀少,但依赖中国广大开发者的破解和分享精神,在网络上很快出现了开发工具的破解版本和API文档.然而可能是微信的妥协或者早已预料,9月24日微信官方发布了不需要破解就可以使用的微信小程序开发者工具和文档,对于费劲心思破解完的开发者来说应该瞬间整个人都不好了. 以下