十多年後又看了遍《黑客帝國》,扯點和程序有關的非技術話題。程序員
前段時間又把黑客帝國重溫了一遍,不看沒關係,十年後再看發現之前對這部電影的理解徹底錯了。 第一次看《黑客1》我還在讀高中,槍版。 整個畫面黑漆漆的,看了不到半小時直接睡過去了,醒來時已是最後的高潮槍戰部分,感受結尾打鬥好看,劇情不懂。 《黑客2&3》一塊兒推出後,又連起來看了一遍,老實說當時不少概念仍是沒看懂,大概以爲是一我的類反抗機器統治的故事。編程
現在此次看完後再回想起來,當時不少概念看不太明白可能有兩個緣由。 一方面,當時剛學編程不久,電影中大量使用程序世界的概念來做明喻或暗喻。 另外一方面,中文字幕翻譯太不許確,特別是術語的部分。 此次重溫,我直接用的原版英文字幕,看完後發現我曾經的理解徹底跑偏了。 十年後,人工智能、機器學習、虛擬現實各類概念大行其道的今天,再加上我程序員的背景再來理解《黑客》三部曲顯得毫無難度了。 但我懷疑,若是不懂程序的人今天看這部電影恐怕也不是那麼容易理解吧?安全
爲何我會以爲不懂程序看《黑客》會比較費力呢? 由於整個故事的內涵,從背景到環境到人物角色甚至道具都使用了程序來做比喻。 咱們先簡單回顧下故事背景,某天,一個有意識的程序誕生了,並繁衍了整我的工智能的機器種族。 後來人類和人工智能機器爆發了戰爭,人類選擇遮蔽天空切斷機器的能量來源。 而聰明的人工智能機器發現能夠利用人體大腦的生物電和身體熱量經過一種特殊形式的聚變融合反應來提供源源不斷的能源。 因此,機器就開始大量養殖人類,將人類變成了機器能源的供應者,電影裏用電池做了個比喻。oracle
在《黑客》里人類的真實生存現狀是下面這樣的,身體生活在黏糊糊的養分液中,而思想則生活在 Matrix 中,一個虛擬現實空間。機器學習
機器一開始創造了一個完美的 Matrix 空間,是一個毫無生活壓力並實現了共產主義的烏托邦。 但人類天生的基因缺陷致使它們沒法在這樣的烏托邦中長久生存,很快出現大批量的死亡。 因此機器從新模擬了一個基於 1999 年真實人類社會現狀的虛擬空間,在這裏人類能夠長久的存活下去,而當時實際的年代是 2199 年。 故事背景就交代到這裏,再這麼寫下去就變成影片簡介了。 下面我會站在程序背景的角度來提出一些設問並做答,若是你發現答案和你當初理解的不一致,不妨再重溫一遍電影。分佈式
電影中的經典一幕是讓 Neo 做出選擇,選紅藥丸仍是藍藥丸。post
紅色藥丸實際是一個跟蹤程序(trace program)用來幫助定位 Neo 物理身體的位置。 爲何須要一個跟蹤程序?作過度布式系統都會有深入體會,解決一個大型分佈式系統中的問題,第一個難點就在定位問題。 而 Matrix 實際就是一個鏈接全球人類的超大型分佈式系統,須要定位一個個體,trace 程序必不可少。 (旁白:今天剛評審了咱們系統的 trace 程序設計方案,想努力作的像紅色藥丸那麼精巧啊)學習
《黑客1》 Oracle 出場時確實沒有交代她的身份,直到第二部結束時 Neo 與 Matrix 的 Architect 對話才得知。 Oracle 實際上是一個程序,原文說法叫 Intuitive Program,一我的類直覺測試程序。 因此劇中,她一直在引導 Neo 和其餘人經過直覺做出選擇,而他們的選擇對與 Matrix 相當重要,下面會詳細說。測試
Neo 做爲男主角與其餘人都不一樣,因此劇中給了他一個特殊的叫法 The One。 Neo 在第一次見 Oracle 時,Oracle 說他還不是 The One,還差了點什麼,可能須要第二次生命。 Neo 在《黑客1》最後被 Agent 槍殺後,由於女主一吻得到對愛的感受後重生才真正成爲 The One。 而真正特殊的地方在於 Neo 始終認爲本身是人,但它實際也是個程序,一個認爲本身是人的程序,這正是他獨一無二之處。ui
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 說:你在玩一個危險的遊戲。
《黑客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 虛擬空間中或現實中。 而機器文明中也出現了一些擁有人類情感和意識的程序覺醒者,幫助機器文明進一步發展。 兩種文明找到了一點點融合與平衡的空間,留下無限的思考和探討空間。