第二十章 布爾運算
「不對吧?」尤基皺著眉頭:「師父,好像不是這樣的。在棋牌類遊戲裡面……還有,還有駕駛裡面,電腦比生物腦厲害多了。」
向山點了點頭:「沒錯,但是一個下棋厲害的計算機,也只能下棋。它永遠不會懂『為什麼要下棋』這件事,甚至不一定知道自己在「下棋」。如果它的造物主不做出指示,那麼它一輩子也別想再去做第二件事。」
這應該是……是很久很久之前的事情了?向山覺得,這可能是自己出生之前就發生了的歷史。那個時候,有一位指揮家。他是一位21-三體綜合征患者——所謂的「先天愚型兒」。或許他僅僅是因為出生在音樂世家,所以將「模仿指揮動作」當成一種遊戲,但他確實以「指揮者」的身份登上了舞台。那麼他的大腦之中是否存在「音樂」呢?
或許確實,這個可憐人心中確實知曉什麼是音樂的吧。
但在「音樂」之外的事情,他就不怎麼能夠理解了。
而計算機內孕育的智能,比這個更加極端。畢竟,即使是先天愚型兒,也知道餓了、渴了。身體不舒服會哭。但哪怕棋力足以碾壓棋聖的AI,也不會產生「我還需要電源」或者「我就是想要更多計算資源」的想法。
「實際上,計算機所能做的事情,從來沒有超出人腦的部分。紙筆運算……見鬼,你好像不知道什麼是『紙』。」向山搖了搖頭,隨手抄起一根鐵杄,在地上寫出q and p。
兩個值,1或0,TRUE或者FALSE。
二生三,三生萬物。
計算機的一切都是從這裡出來的。
「我現在要教你的東西,叫做『布爾運算』。」向山如此說道:「人類用一根鐵杄,就可以在地上完成布爾運算,從而模擬計算機的任何程序——不,這裡應該反過來。計算機不過是代替了人的手,在地上寫布爾運算的式子。它們只不過是比人類手寫更快、更快。僅此而已。」
「這個運算的方式,誕生自偉大的喬治·布爾。在喬治·布爾之前,萊布尼茨和巴貝奇也在做同樣的事情——他們嘗試用機器進行計算。巴貝奇或許一度接近這個境界,但是終歸是沒有達到。而布爾和所有的前人都不一樣。就好像艾薩克·牛頓試圖在時間與空間的維度中描述物質運動的軌跡一樣,布爾在嘗試描述精神運動的軌跡。這是開天闢地的成就。當然,布爾演算法和真正的人類思維的差距,就好像牛頓力學和真實世界的差距一樣。但是,這已經是起步了。」
「在布爾之後,人們意識到,齒輪與槓桿可以執行計算、神經網路可以執行計算、不斷開合的電路可以執行計算,就算是一堆化學設備,也一樣可以執行計算——布爾演算法,就將人類思維的一角,拆解成了機器可以理解的東西。」
人類用電路模擬神經網路、執行布爾計算的歷史,甚至比馮諾依曼架構更早——早在1943年,神經生物學家沃倫·麥卡沃克和數學家沃爾特·皮茨就製造了第一個可以執行布爾計算的人工神經網路。
而在布爾的時代之前,還有一個發明家,叫做約瑟夫·雅卡爾。他發明了一種全新的織布機。這種織布機可以用打孔的卡片操縱機器上的針線,編織經緯。相似的東西,歷史上獨立出現過很多次。這種「打孔卡片」甚至可以追溯到中國的東漢時期。
這就是圖靈機「打孔紙帶」的祖先,是只有若干個位元組的、最原始的存儲器,是機器們最早的「記憶」。
而希爾伯特為了研究純粹數學而提出的計劃,催動了圖靈機的誕生。
最後,這些結果,最終匯聚到另一個叫做馮·諾依曼的人手中。
於此,人類歷史上前所未有的工具誕生了。人類的社會、生活乃至政治、軍事都為之改變。
「但是,工具總歸是工具。」向山如此告誡自己的弟子:「它的本質,仍舊是創造了幾千、幾萬條手臂,為你來執行布爾運算。計算機能夠做到的,你自己用布爾運算能夠做到的,只不過計算機更快——當然,這種『快』已經達到了本質上的改變。」
「對於一般的使用者來說,你只需要將任務交給這『若干的手臂』,就可以等待結果了。但這樣是練不成內功的。內功有成者,就等若是能最大限度發揮這無數臂膀的力量,甚至將意志傳遞到這些手之間。」
「所以,你必須從布爾運算開始學習。」
在內功的領域,數學是「道」,而布爾運算就是「一」。
道生一,一生二,二生三,三生萬物。
布爾演算法本身不複雜,只是邏輯學的一些延伸。高中程度的數學差不多就夠學個入門了。
剩下的,就是大量練習了。
向山花了點時間,向尤基講述這些問題的精要所在,然後在腦子裡直接編寫了一個習題冊,點對點傳輸到尤基的腦晶元里。
尤基離開房間的步伐非常沉重。
向山滿意的點了點頭。他心裡有種感覺——這種事情他早就想做一次看看了。
不知道為什麼,可能是過去的經歷對他造成的影響?
反正他還蠻高興的。
………………………………………………………………………………
尤基終於做完了習題,回到了自己的房間。
然後他發現,房間裡面的氣氛完全變了。
向山閉著眼睛,如同冥想一般對著那台終端。終端的屏幕之上,無數的符號刷新一般出現又消失。更多的代碼覆蓋在代碼之上。
而與那終端相連的犬型義體,則在做著各種動作。
向山在參悟每一行代碼的意義,然後用自己的代碼替換原本的代碼。
他要嘗試掌握這種不曾見過的組件。
「尤基,習題已經做完了么。」向山依舊保持原本的姿勢:「你的腦部晶元是可以隨時取下的類型嗎?現在方不方便給我一片看看?」
尤基點了點頭:「可以是可以……」
他低下頭,后側的顱骨打開。隨後,一塊備用晶元彈了出來。
義體的驅動晶元永遠都有兩塊或以上。當其中一塊出了BUG崩潰之後,另一塊就會瞬間接管身體,同時,出BUG的那一塊就會快速Watchdog,重新啟用。
和向山那種一體式的顱骨有所不同。尤基這種現代式的人工顱骨開啟本來就很方便。
尤基將自己的備用晶元遞給向山:「師父,你這是幹什麼?」
「很快就弄好了。弄好了再說給你聽」向山搖了搖頭。最開始沒有注意到這一點,確實是他太大意了。這個時代,上位者對弱者的生殺予奪,比他想象中還有嚴重。他當初只是發現舒爾茨醫生請自己上網,所以就天真的斷定絕大多數賽博義體都沒有時刻連接網路。
在收尤基為弟子的時候,他只想著避開了村裡的監控路線。
但之前鎮長的話卻提醒了他。
不管社會是怎樣的,永遠不要小視暴政者對人的掠奪。
實際上,應該還存在一個普通人並不知道、或者根本無法使用的頻段。在這個非民用的頻段上,所有的義體都是連著網路的——只是那些義體的使用者並不知道。
唯一值得慶幸的是,現在的那些「真正統治集團」,似乎人手不足,或者有其他客觀上的困難,沒有時時刻刻的監視著每一個人。
——嘖……過去應該還沒有這個嚴重。
——但是,這個極端狀態,我應該是設想過的。
「練武不練功,到頭一場空」。內功設計之初,就包含了對抗這種狀態的想法。
因此,在給自己恢復了些許內功之後,向山就給尤基搭建抵禦外邪的力量,清除晶元之中的後門。
很快,向山就將晶元整個檢索了一遍。果然不出他所料,這個玩意裡面,確實存在幾個他沒有見過的協議,指向了某些具備信號發射機能的埠。
這個埠是用短波通信,信號較為微弱,數據傳輸能力有限,估計也就只能上傳低質量的音頻或者圖像。
但這就意味著,統治者確實可以在任何時候,對任何個人進行窺探。
「很好,至少值得慶幸的是,這個時代並不存在軍隊和警察,領主自由裁量權太大……他們最多只能意識到,我可能是個俠客。」
向山很快就在尤基的晶元裡面寫入了防火牆,使它拒絕那個特定埠的遠程訪問,併發送偽造的圖像。然後他抹去了另外幾個協議。
當然,在做這些事之前,他先做好了備份。
向山將晶元還給尤基,道:「自己試一試,有什麼不對的地方跟我說。如果沒問題的話,等會再幫我一個忙。」
向山自己現在驅使義體,是靠鎮長贈送的那一枚廉價晶元。而那一枚驅動晶元里,同樣有可能存在後門。向山的人工顱骨不像尤基這樣可以自由開合。如果沒有特殊的工具,他就必須得靠別人幫忙,才能將插進去的晶元取出來。
這就相當於將自己的大腦暴露給其他人。向山必須有一個可以信任的助手,才敢做這種事。
另外,他也必須杜絕「進行到一半的時候,助手被人遠程腦控,手指一個哆嗦戳進自己腦子」的狀況。因此他才優先給尤基準備了「灌頂」。
尤基一面將自己的數學作業傳輸給向山檢查,一面按照向山的吩咐,跑跑跳跳,測試一下驅動晶元是否有BUG。
人類在很早的時候就學會了「不要追求沒有BUG的編程」這件事,只要程序能跑起來,存在BUG也無所謂。
高級語言按照「類型論」的分法,大致可以分為「類型不安全語言」「類型安全語言」與「強規範化語言」。強規範化語言倒是可以保證「不會出錯」,這類語言對於任何程序都能給出唯一結果並且停機,絕對不會陷入死循環。但也正因為強規範化語言捨棄了「循環」的概念,失去了圖靈完備,所以任何錯誤系統根本不予識別不準運行。
簡單來說,強規範化語言就是「程序跑起來就絕對不會出錯,裡面但凡有一丟丟錯誤就跑不起來」的狀況。
而俠客們,則偏向於使用「類型不安全語言」。這種語言的使用者,日常就處於「我寫的代碼不能跑了?這是為什麼?我寫的代碼能夠跑了?這是為什麼?」的疑惑當中。這種語言很容易就產生「無法預料的錯誤」——這種「無法預料」可以說是數學本身註定的,在程序跑起來之前,就連編寫者本身也無法預測。
當然,這種「難以理解」,對敵人來說也是一樣的。
向山寧可麻煩一點,在寫任何程序之前都做好幾次測試,也要選擇「類型不安全語言」。
但向山的水平似乎真的還可以。尤基的驅動晶元依舊可以正常的駕馭義體。