程式設計觀 從黑客帝國談起

2021-10-05 10:57:57 字數 2738 閱讀 9188

在電影黑客帝國中,網路黑客尼奧發現自己身處的看似正常的世界實際上被某種力量控制。他在網路上探求真相時,遇到了黑客組織的崔妮蒂和組織首領墨菲斯,得知他身處的世界實際上是由乙個名為「矩陣」的人工智慧系統構造的虛擬世界,而現實中的每個人則被豢養在培養液中,只是意識被接入到了虛擬世界。尼奧從此走上了抗爭「矩陣」的道路。

黑客帝國1海報

蘇菲的世界中文版封面

《蘇菲的世界》認為世界可能是由文字所描述的,而電影黑客帝國假設世界可以由電腦程式模擬。這是因為無論是文字還是程式都具有乙個相同的屬性--抽象。所謂抽象可以簡單理解為描述世界、模擬世界的能力。在描述或者模擬的過程中,也會存在著簡化和提煉。同樣的,我們學習過的各種學科,包括數學、物理、生物等等,也是將現實世界中的事物或者問題抽象簡化為數學表示式或者物理公式,最終經過假設和推演獲得事物的狀態、變化的結果或者說問題的解。從這種角度講,我們的知識都是對世界的認知,本身就是抽象後的結果。

二比較樸素的程式設計思想其實和數學、物理學科的基本思想是一致的,即認為世界可以由某一時刻的狀態和狀態改變的操作所描述。舉個比較淺顯的例子:小明有1個糖,吃掉1個,還剩幾個?這個問題,「某一時刻的狀態"是「有1個糖」,狀態改變的操作是「吃掉1個」,那麼就能夠推導出執行「狀態改變操作」之後所處的狀態是"0個糖」。這個例子雖然簡單,但是需要知道複雜問題其實也是由簡單思想有邏輯的結合在一起來解決的。上述例子可以引申出新的問題,小明有100個糖,每1小時吃掉乙個,43個小時後還剩多少個?(對,小明就是乙個沒有感情的吃糖機器)這個問題如果從數學思維講,就是簡單的100-43.但是從對現實世界計時的角度來說,就包含了狀態的隨時間的連續變化,乙個狀態通過狀態的改變達到乙個新的狀態,然後新狀態作為新的起始狀態繼續通過-1的狀態變化達到乙個新的狀態,直到43小時這個問題的終結。綜合上述,這就是面向過程程式設計的基本思想。其中某一時刻的狀態能夠由資料來描述,而狀態改變的操作即為演算法。

電子躍遷:狀態改變--實現電子從乙個狀態到另乙個狀態的變化

面向過程程式設計面臨的基本問題是分類與分步。

分類需要處理狀態維度和狀態改變的操作維度的問題。由於整個流程中狀態和狀態變化操作的不確定性,需要對新狀態的可能結果進行分類,而接下來可又能由於新狀態的不同,對應的狀態改變的操作也不同,所以也需要對狀態的操作也進行分類。分類思想體現在程式語言的if else基本語句,這也是為什麼無論程式語言怎樣變化,if else基本語法永遠會存在的原因。

分步就相對沒有那麼複雜,每乙個狀態通過狀態改變到達新狀態的過程的粒度,就是分步需要解決的問題。比如100個糖的問題,最直接的數學思想100-43,即100是初始狀態,狀態的變化的操作是「吃了43個小時」,所以新狀態是57。我在舉例時介紹的情景想要要表達的是用更細的分步粒度,簡單表述是100-1-1···-1,每一小時減去1,連續減43小時。看上去在這種情景下,這種細粒度的演算法像是初學數學的小學生扳指頭算數,但是在一些複雜情景下,如何切分演算法的分步的粒度,是乙個很高深的學問。在程式設計中,順序語句和迴圈就對應著分步的思想。

三物件導向程式設計並不像面向過程程式設計那樣容易理解。電影黑客帝國中,有乙個情節是說指導尼奧和黑客組織的精神導師"先知"實際上只是一段程式。在「矩陣」模擬的世界中,存在許多沒有現實實體、只是人工智慧編寫的程式的「虛擬人」,這裡把這些人稱為有思想的(遊戲中的)npc可能更容易被理解。不止有人,「矩陣」世界所有的物體都是程式的模擬,包括高樓大廈、食用的牛肉紅酒等。

黑客帝國中用來表現世界是由程式模擬的劇照

物件導向程式設計一部分可以理解為將一些實體的概念封裝成了類。比如,可以將人類認為是具有「人」的共通屬性的類,而每個具體的人就是這個類」例項化「的物件。通用的屬性對應到每個具體「人」的物件身上,就是用來代表某種人的狀態,這個狀態可以是靜態的、不隨時間變化的,也可以是動態的、可以通過狀態操作改變的。類中不僅有狀態,還有狀態改變的操作--類自身定義的方法。根據這兩個特徵,其實可以察覺出物件導向程式設計似乎只是面向過程程式設計的乙個變體。面向過程程式設計中,所有的狀態資料的有效區間只能是全域性的或者函式內部的。但是物件導向程式設計實現了一種中間態,即既不是全域性的能被所有函式訪問的,也不是函式內部僅供函式自身訪問的,而是可以實現在類的內部多個函式間進行狀態共享。這種封裝可以認為是在面向過程程式設計的基礎上進行了模組化改造,每個類都是乙個"子系統",「子系統」和全域性、"子系統"和「子系統」可以通過外部方法的介面形式進行互動,子系統的內部又實現了區域性狀態的變化。     既然是面向過程程式設計的變體,物件導向程式設計同樣需要解決基本問題分類與分步。當然,在物件導向程式設計過程中,仍然可以使用面向過程程式設計的分類和分布的思想,很多時候也逃不開使用它們解決問題。但是,更好的解決方法是使用物件導向程式設計的分類分步思想,這一部分知識主要就是設計模式想要解決的問題。面向過程程式設計中目前普遍使用的分類,都是基於乙個「有限」的前提,即狀態不會無限多,狀態對應的操作也不會無限多。在分步這個維度,可以構造「假」死迴圈來實現形式上的類「無限」,很多web伺服器也是這樣實現的。但是在分類維度,if else的分類總是有限的。有人可能會反駁說,我們不可能預想出所有的情景,特別是無窮又該如何定義?我這裡之所以考慮這個點,是從程式智慧型的角度思考,如果在程式語言底層實現上能夠允許程式的自我編寫,比如自行實現情景**,編寫自己if else邏輯,這是否就算作程式具有了學習能力,能夠實現真正的人工智慧。

The Matrix 黑客帝國)

黑客帝國 講述了一名年輕的網路黑客尼奧發現看似正常的現實世界實際上是由乙個名為 矩陣 的計算機人工智慧系統控制的,尼奧在一名神秘女郎崔妮蒂的引導下見到了黑客組織的首領墨菲斯,三人走上了抗爭矩陣征途的故事。下面是關於影片中幾個疑點分析。1.建築師的真實身份 建築師只是機器世界裡的乙個ai 人工智慧 程...

剿滅「黑客帝國」

你會覺得自己的生活被 入侵 了,在網路上好像有一雙眼睛,你的所有行為都在它的監控之中,這雙眼睛,就是網路黑客的眼睛。你曾經接到過的 精準投放 的騷擾 可能並不是某個商家出賣了你的個人資訊,而是網路黑客通過攻擊 資料庫而得到,繼而你的個人資訊又被轉手販賣 你的家庭攝像頭所拍攝的隱私內容,被人傳到了網上...

The Matrix 黑客帝國

今天又刷了一遍,依舊跟第一次看一樣,非常驚嘆震撼,同時也發現了更多的細節。梳理一下情節 開始就是trinity在matrix裡被黑衣人agent追殺,trinity團隊的目的是尋找neo,顯然agent沒抓到trinity。然後就是介紹matrix裡的屌絲andrew 和neo是同乙個人,分兩面而已...