




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
\h為什么需要生物學思維目錄\h01\h歡迎來到這個糾纏的時代連接和反饋是復雜系統的典型標志。技術系統已經變得如此復雜,以致每個專家都僅知道其中的一個部分,沒有人能夠完全理解整體。我們已經從“啟蒙時代”邁進了“糾纏時代”。\h什么是復雜系統\h從“啟蒙時代”到“糾纏時代”\h抽象的局限\h02\h復雜系統形成的4個原因技術系統變得越來越復雜的主要原因是“吸積”和“交互”。隨著時間的推移,系統中不斷加入更多的組成部分,部分之間也增加了越來越多的連接。“必須處理的例外情況”和“普遍的稀有事物”也讓技術系統變得愈加復雜。\h原因1:吸積\h原因2:交互\h原因3:必須處理的例外情況\h原因4:普遍的稀有事物\h越來越多的復雜系統\h03\h為什么復雜系統越來越難以理解了對于大多數人來說,記住一個7位數就相當不容易了。當復雜系統的組成部分和連接數量猛增時,即便是專家也會望而生畏。我們個人的知識儲備,與理解復雜系統所需要的知識相比,存在著根本性的沖突。\h力不從心的大腦\h認知的極限\h最后一個無所不知的人\h04\h令人費解的bugbug并不都是能夠找到確切起因的那些錯誤,在以連接和交互為特征的復雜系統中,經常會出現一些令人費解的bug。盡管我們對這些bug沒什么好感,但它們卻是這個糾纏時代中無法回避的存在。\h并不是所有bug都能被消除\h從錯誤中學習\h像生物學家一樣思考\h05\h為什么需要生物學思維復雜的技術系統更接近生物學系統,因此,用生物學思維思考復雜技術是個不錯的選擇。為了從整體上理解系統,我們也會忽略掉一些細節,這時,物理學思維才是首選。我們真正需要的是經過物理學思維錘煉的生物學思維。\h復雜的技術系統需要生物學思維的3個原因\h技術領域的“生物學家”\h當物理學遇見生物學\h復雜性科學的視角\h思維方式的進化\h我們需要通才\h06\h生物學思維是理解復雜世界的一把金鑰匙認識復雜系統的正確態度是:對于難以理解的事物,要努力克服我們的無知;一旦理解了某個事物,也不會認為它是理所當然的。謙卑之心,加上迭代的生物學思維,就是洞悉復雜世界的正確方式。\h不要被表象迷惑\h以欣慰感看待不理解的事物\h謙卑之心+迭代的生物學思維連接和反饋是復雜系統的典型標志。技術系統已經變得如此復雜,以致每個專家都僅知道其中的一個部分,沒有人能夠完全理解整體。我們已經從“啟蒙時代”邁進了“糾纏時代”。1986年初的一個冬日,距離“挑戰者號”航天飛機爆炸事件發生還不到一個月,著名物理學家理查德·費曼(RichardFeynman)在調查委員會的聽證會上公開了一份調查報告。\h\h[1]費曼非常冷靜地揭示了導致“挑戰者號”航天飛機起飛后不久就爆炸解體的原因。問題出在用于密封固體火箭助推器各部分之間縫隙的O型圈上。O型圈其實是一小片橡膠,放入冰水后會失去彈性,也就是說,這種小部件對溫度變化非常敏感,所以無法保證密封的牢固性。這些O型圈很可能就是這起導致7名機組人員喪生災難的罪魁禍首。與此事件如出一轍的是發生在汽車業中的另一事件。2007年的一天,瓊·布考特(JeanBookout)駕駛著一輛生產于2005年的豐田凱美瑞,行駛在俄克拉何馬州的一個小鎮上。突然,她的車開始加速,并失去了控制。\h\h[2]她踩下了剎車,但沒有任何作用;她拉起了緊急制動器,輪胎在道路上留下了觸目驚心的摩擦痕跡。然而,這些努力都無濟于事,汽車最終狠狠地撞到了路堤上。布考特受了重傷,車上的乘客、她的朋友芭芭拉·施瓦茨(BarbaraSchwarz)則不幸遇難。并不是只有布考特一個人遇到這種怪事。事實上,多年以來,在豐田公司生產的汽車中,有多種型號的汽車都曾出現過此類奇怪且危險的故障:汽車在行駛過程中會“違背”駕駛員的意愿保持勻速,甚至還會“擅自”加速。這種意外加速事故已經導致多人傷亡。業內專家分析出了這類事故的幾個導火索:駕駛員操作失誤,墊氈頂住了油門加速踏板,油門加速踏板黏滯未能及時復原,等等。但是,這些原因并不能解釋所有的意外加速事故。在受事故影響的車型中,因為墊氈或油門加速踏板不合格而被召回的并不多,而且我們也沒有理由認為,豐田汽車的駕駛員比其他汽車的駕駛員更容易犯錯。無奈之下,豐田公司請來了嵌入式軟件專家邁克爾·巴爾(MichaelBarr)追查原因,并向他開放了專有數據庫以及向來嚴格保密的軟件代碼。在6位經驗豐富的工程師的協助下,巴爾幾經周折終于找到了問題的根源。與此同時,計算機科學家菲利普·庫普曼(PhilipKoopman)也通過對公開程序的仔細分析,找到了事故發生的大致原因。\h\h[3]兩位專家都認為,對于意外加速事故的發生,豐田發動機軟件系統的過度龐大和極度復雜,以及糟糕的設計都應該承擔相應的責任。我們無法將事故責任明確地歸咎于某個設計或部件出了錯,畢竟,這里面存在的問題盤根錯節,而且這些問題還會引發汽車軟件系統與外部機電系統之間的巴洛克式結構(baroquestructure)的大規模交互。無論是單獨看來,還是整體看來,這個系統的極度復雜性讓我們很難理解這些相互作用、相互影響的部件的深層問題和缺陷。有依據表明,豐田公司本來完全沒有必要搞出一個如此復雜的系統,至少在現有情況下,不必如此復雜,它們顯然不夠小心。\h\h[4]這個“診斷結果”與我們熟悉的“技術失敗”并無二致。費曼找到了導致“挑戰者號”航天飛機爆炸的單一原因,有所不同的是,我們無法確定導致豐田汽車出現事故的單一原因。無論如何,如果部件堆積得越來越多,設計也越來越復雜,那么災難便只會越來越多。事實上,即使找到了導致失敗的單一原因,但在極度復雜的系統中,那很可能也只是掩人耳目的東西罷了。1996年,阿麗亞娜5型火箭在發射升空39秒后爆炸,火箭上搭載的4顆衛星均毀于一旦。\h\h[5]事故分析表明,發生爆炸的原因是,火箭在新環境下使用了一些較為陳舊的軟件代碼。但是,根據霍默-狄克遜教授的說法,沒有任何一個承包商被追責。這次爆炸并不是某個決策失誤所致,而是整個發射系統的極度復雜性所致。其他類似的災難還有三哩島核電站事故,\h\h[6]盡管有關方面也找到了一個原因,但是究其根本,仍然得歸咎于系統的龐大和極度復雜,而非某個部件或決策出了錯。\h\h[7]當我們試圖將這種復雜性拆解開來時,難免會陷入“挑戰者號”航天飛機的主流事故中。\h\h[8]盡管航天飛機的發射和操作是一項異常復雜的工作,但是很多人都相信,只要徹底核查復雜系統,將其分解開來,確定每個部件如何工作,在什么情況下會出故障,我們就應該能夠理解它們。這無疑是一種過于自信的想法,其根源在于:人類的思想擁有無限潛力。人們總認為,只要足夠努力,就可以完美地理解身邊的一切事物,特別是人類自己所構建的那些東西。我們觀察到,這種情緒在所謂的輝格黨式(Whiggish)的進步觀念中體現得最為充分。正如科學作家菲利普·鮑爾(PhilipBall)所描述的那樣,這種觀念認為人類已經踏上了“從無知和迷信的黑暗時代走向理性時代的勝利之旅”\h\h[9]。在科學界和技術愛好者的圈子中,這個觀念根深蒂固,正如歷史學家伊恩·畢考克(IanBeacock)在文章中所寫:“科技行業講述了人類‘數字時代’的崛起,那是一個輝格黨式的故事:陰郁昏暗的時代行將結束,人類將迎來一個更加美好的未來,一個更幸福、更開放的世界。在那個美麗新世界中,一切都是測量好的、經過精心設計的,并達到了最高效的完美狀態。”\h\h[10]當然,堅持這種觀點的人還認為,效率和生產力的提高,促使人們為了實現某個令人振奮的目標,而持續關注和理解自身所構建的現代工程。這種輝格黨式的觀點與社會學家馬克斯·韋伯(MaxWeber)所描述的“現代思維模式”有關:在一個“不再擁有幻想的世界”中,人們會產生一種感覺,也就是“在原則上,我們可以通過運算來掌握所有事物”。\h\h[11]然而,這種理解復雜性的方法如今已經失效了。是的,我們正處在一個新時代,正在建立一個新系統,而這個系統是無法從整體上被掌握的\h\h[12],或者說,無論對誰而言,它都太復雜了。我們發現,在分析豐田汽車意外加速事故時,無論是不是專家,上述那種陳舊的思維模式都不足以應對其復雜性了。不僅如此,這些情況不只附著在我們缺失的經驗中,它們已充斥了我們的整個生活。什么是復雜系統在這里,我們必須先花些時間討論一下“龐雜”(complicated)和“復雜”(complex)系統的含義。\h\h[13]盡管我在文中,以及書名中使用這兩個術語時所指含義與它們在口語中的意義大致相同,但實際上,它們的準確含義和日常意義存在著一些重要區別。請想象一下,有許多水上浮標被綁在一起,漂浮在水面。\h\h[14]當一艘船經過時,其尾流會形成一個個小波浪,從而使浮標一個個動起來。但是,每個浮標都無法單獨“行動”。因為每一個浮標都通過繩索連接著不同重量和大小的其他浮標,所以任何一只浮標的行動,都會帶動其他浮標產生相應的行動。這些行動還可能會引發意想不到的反饋過程,也就是說,浮標的行動會間接地影響到自身。于是,船的簡單尾流,在這個復雜的浮標網絡中引發了大量級聯式(cascade)的行動。如果船以其他方式駛過,比如以另一種速度或角度駛過,那么浮標的行動可能會完全不同。接下來再想象一下,人們把這些浮標從水中撈了出來,扔在了碼頭上。它們可能被排列得非常巧妙,卻很難描述清楚,我們需要頗多文字才能講明白它們之間的相對位置,或許還需要附上一些圖表,以便日后能復制出同樣的排列方法。但是,無論被排列成什么樣,這里也不會有趣事發生。因為在這個精巧的網絡中不存在級聯效應,也不存在反饋過程。說到底,只不過是一堆可以漂浮的東西被放在了碼頭上。水中的浮標形成了一個復雜的系統。那么碼頭上的浮標呢?它們的排列也許看上去很巧妙,但其所構成的系統最多只能說是龐雜的。任何一個系統,要想成為一個復雜的系統,僅僅包含很多組成部分是不夠的,各部分之間還必須相互關聯,并在“嘈雜的舞蹈”中相互作用才行。在這種情況下,我們可以觀察到某些行為特征,那是復雜系統的標志:微小的變化通過網絡被級聯式放大,并引發反饋過程,同時敏感地依賴于系統的初始狀態。這些特征,與其他一些特征一起,使系統從“龐雜的”變成了“復雜的”。對于這種區別,還可以從另一個角度來思考:生物在活著的時候是復雜的,而死后最多只能說是龐雜的。死去的動物雖不失其復雜特性,但其內部卻沒有任何過程在發生:整個生命網絡,比如血液循環系統、新陳代謝系統、神經系統等,都很“安靜”。生命是運動和相互作用的“狂暴之流”,極其復雜精妙,在有生命的機體中,再小的變化都會被級聯式放大,進而引發大量行為。另外,即使一個系統是動態的,比如浮在水中的一堆沒有被連接起來的浮標,因為其內部不存在相互聯系,沒有反饋的可能性以及其他類似的屬性,所以我們也只能稱其是“龐雜的”,而非“復雜的”。如果將技術定義為人類為特定目的而設計和構建的各種類型的系統,那么就不難注意到,當今最先進的技術幾乎都是復雜的系統:動態、功能復雜、規模龐大,而且擁有近乎有機生命體般的復雜性。這些復雜的系統遍布我們周圍,從汽車軟件到電腦設備,再到城市基礎設施。\h\h[15]那些龐大的、高度互聯的軟件,其規模足以與百科全書相比。據估計,微軟的辦公軟件就有數千萬行計算機程序代碼。\h\h[16]美國的公路系統有30萬個交叉路口,每一個路口都有交通信號燈。\h\h[17]這是一個覆蓋全美的動態交通網絡,所包含的自動糾錯系統先進得令人難以置信,盡管我們會因為它經常出問題而嘲笑它愚蠢得令人絕望。該系統的背后是PB級數據(1PB等于100萬個GB)和復雜的概率模型。\h\h[18]隨著時間的推移,法律體系也變得越來越復雜。截至2014年,美國聯邦稅法的總頁數已經超過了74000頁。\h\h[19]這個龐大的法律網絡非常復雜,擁有無數個關聯點,會對納稅人產生級聯式的影響,可以說幾乎沒有人能從整體上完全理解其功能。在我們的生活中,復雜的技術系統無處不在,這通常是一件好事。正是在這種龐大的復雜性中,我們發現了驚人的彈性,也就是復原力。這些系統通常擁有許多功能各異的工具箱和故障保險箱,可以幫助人們完成任何“想要”完成的事情。這些系統也為我們提供了連古代皇室都無法想象的生活:免除了辛苦的重復勞動;把水電送到家中;讓我們一年到頭都可以生活在舒適的溫度下;還能幫助我們快速地傳遞信息。那么,我們該如何理解復雜系統,而這又意味著什么呢?無論是分析一個現象,還是了解一個系統,都不是非此即彼的二元選擇。這種理解其實是一條內涵豐富的光譜。\h\h[20]換句話說,你可以只從整體上去理解一個系統,掌握它的全局情況,而不一定非得理解其各個組成部分的細節情況;你也可以只理解它的所有組成部分,而不太關注其整體功能;你還可以只了解各部分是如何相互關聯的,或者只探究這種關聯的最終效應。此外,所有的“理解”都會涉及一些具體活動:描述事物是如何運行的,在不同層面上預測其未來的行為,并在時間充足和資源豐富的情況下通過構建模型來復制它。回到上文中有關浮標的例子。你或許只能了解到兩三個被連接在一起的浮標的行為細節,甚至只能搞清楚一個浮標的行為,而無法描述所有浮標所組成的巨大網絡的整體行為;或者,你能夠描述浮標的整體運動,卻無法預測它們各自的行為。對于軟件,你或許可以很好地理解給定程序中的若干模塊,例如計算圓周率值的子程序,或是對一組數字進行排序的子程序,但你卻不一定能理解它們是如何一起發揮作用的。通常,我們只能把握上述“理解”中的一部分,而非全部。另外,“理解”也不是固定不變的,它可以通過訓練來改進。從來沒有下過國際象棋的人,在看到棋局的時候,可能無法將勢均力敵的平局和王已經受到致命威脅的殘局區別開來。而接受過一定訓練的初學者和中段棋手,均能掌握下棋的基本模式,并判斷棋局的基本形勢和大致走向。國際象棋大師則能一眼看透當前的形勢和接下來可能會出現的演變,而后評估棋局并給出可靠的走法,同時彌補潛在的弱點。經過充分訓練后,棋手在看到一盤棋時,眼中所見的就不再是一排排、一列列的棋子了,而是諸如“白棋三步就可將死對方”之類的棋局。因此,學習專業知識并接受一定的訓練確實可以從根本上改變我們對世界的看法和理解方式。對于人類構建的系統而言,亦是如此。計算機代碼既可能是難懂的天書,也可能是解決難題的優雅方案,這一切都取決于你到底了解些什么。不過,當我們無法完全理解它們時,就會遭到某種特定的失敗或打擊,也就是某種意想不到的結果。以空中交通預警防撞系統(TrafficAlertandCollisionAvoidanceSystem,TCAS)為例,人們創建這個系統的目的是防止飛機在空中相撞。這個系統會提醒飛機駕駛員注意潛在危險,并告之如何根據規則做出應對。但是,幾十年來,這個系統的規則已經變得極其復雜,復雜到全世界只有屈指可數的幾個人能夠真正了解它。每當有人提出一項新的系統規則時,有關方面就會通過模擬實驗來測試其效果。在若干次測試中,如果表現均能達到預期,新規則就會被批準投入使用。盡管避免飛機相撞本就是一個復雜的挑戰,但是從根本上來說,我們為此而建立起來的系統已經變得太過復雜了。不但一般人無法理解,即使是專家,有時候也會對系統在某些情況下所做出的反應感到疑惑。當結果出人意料時,就意味著我們對相關問題的理解還不夠充分,因而無法搞清楚這種結果從何而來。倘若只是視頻游戲中的一個錯誤,那倒也無傷大雅,甚至還能起到娛樂大眾的效果。然而,如果是極度復雜的社會保障系統發生了出人意料的狀況,我們肯定就無心娛樂了。這些復雜的系統可能是為我們提供水電的基礎設施,也可能是執行金融交易的軟件,還可能是防止飛機相撞的程序。在這種時候,理解是否到位就成了一個生死攸關的問題。每個人理解世界的能力天生就有所不同。天才擁有常人難以企及的直覺,他們的跳躍性思維可能遠遠超出了常人所能理解的范疇。但是,人類的認知能力終歸是有限的。隨著時間的流逝,我們所構建的各種技術系統變得越來越復雜,系統之間的關聯性也變得越來越強,越來越難以理解。無論人類有多聰明,記憶力有多強,都無濟于事,因為這些系統的構建方式與人類的思維方式不一樣。人類不具備同時應對數百萬個組成部分及其之間的大量交互,并將所有結果都記在腦袋中的能力。我們的大腦會“嚴重超載”,繼而宣告失敗。從“啟蒙時代”到“糾纏時代”在當今這個機器時代,非技術專家在試圖理解技術時,偶爾會訴諸迷信或某種一廂情愿的觀點。通常來說,在一個家庭中,總會有一個人會因計算機或某種機器無法正常運行而受到指責,在其他人看來,他只是用手碰了一下就把事情搞砸了。有時候,甚至只要他在場,人們就會認定他是導致某種技術無法正常發揮作用的原因。例如,一個大學生放暑假回到家,偏巧打印機壞了;或者父母來訪,電腦鼠標就失靈了。反之亦然。一個你無法解決的問題,別人卻能輕松解決。你將某個出了故障的設備交給技術人員維修,可是一到他們手上,故障就消失得無影無蹤,而當你把設備帶回家后,卻發現它仍然無法使用。在缺乏專業技術知識的外行人看來,機器的內部工作原理相當神秘。如果我們只是這些系統的使用者,那么不知其詳也并無大礙。當機器出現故障時,我們可能會半真半假地認為有人正在對機器“發功”,對它施加了不利影響。當然,不管有沒有做出這樣的假設,至少我們會很自然地相信,肯定有某個專家知道到底是怎么回事,比如“主板燒了”,于是我們便將那個神秘的搗蛋鬼因素拋之腦后。然而,持有這種“迷信”觀念的,早已不再僅限于普通人了,事實上,就連技術開發者也開始這樣想了。美國計算機工程師李·費爾森施泰因(LeeFelsenstein)講述了一個發生在某位工程經理身上的故事:在對軟件進行展示的時候,那位工程經理不得不選擇回避,因為只要他在場,軟件就會運行失常。軟件工程師們完全搞不清楚為什么會這樣,總之只要這位經理在場,事情就會變糟。\h\h[21]費爾森施泰因指出,這種無法通過運算來解釋的失敗“已經落入形而上學的領域”。工程師們不明就里,下意識地把思考點放在了“存在問題”這個層面上,并走上了哲學思考之路。當然,他們并不孤單。計算機科學家杰勒德·奧爾茨曼(GerardHolzmann)也有同樣的感受:大型的、復雜的代碼總會包含一些不祥的“暗碼”(darkcode)\h\h(1)。沒有人能完全理解這種代碼,它的存在也沒有明確的目的。然而,想要讓應用程序按照預期正常地運行,這種代碼又是不可或缺的。你不想去碰它,所以會傾向于繞過它。暗碼是會逆轉的。應用程序具有防止實際代碼被追溯的功能,它會莫名其妙地做出一些程式之外的事。\h\h[22]在司法領域中也存在類似的狀況。根據律師兼作家菲利普·K.霍華德(PhilipK.Howard)的說法,我們目前正處在這樣的境況中:“現代法律的叢林已經太密集了,成了不可知之境。”\h\h[23]在技術領域,這樣的例子顯然更多,甚至不需要到最前沿去找。正如作家奎因·諾頓(QuinnNorton)所指出的那樣,即使是功能平庸的家用臺式電腦,也是“非常復雜的,復雜到地球上的任何人都不知道它在做什么、怎么做”。\h\h[24]近幾十年來,在人類一手打造的“創世界”中,異常龐雜、難以理解的事物越來越多。事實上,即使是這些系統的創造者也常常一頭霧水。美國政治理論家和技術哲學家蘭登·溫納(LangdonWinner)在其著作《自主的技術》(AutonomousTechnology)中指出,英國著名小說家和政治家赫伯特·喬治·威爾斯(H.G.Wells)晚年提出的那個觀點是值得相信的:“人類的思維已經無法應對它自己所創造的環境了。”\h\h[25]威爾斯早在1945年就得出了這個結論,不過,他當時討論的主題是“人類的組織和社會本身”。近年來,這個問題變得愈加尖銳,盡管技術已經發展到當年的威爾斯完全想象不到的水平。計算機科學家丹尼爾·希利斯(DanielHillis)認為,我們的世界已經從“啟蒙”(enlightenment)轉向了“糾纏”(entanglement),至少技術領域肯定如此:“技術已經變得如此復雜,以致我們無法完全理解它,也無法完全控制它。我們已經進入了‘糾纏時代’……每個專家都只了解難題的片段,卻無法把握難題的整體。”\h\h[26]就連作為技術創造者的專家都無法完全了解技術了。抽象的局限在創建復雜的技術時,最強大的方法就是人們常說的“抽象”(abstraction)。從根本上說,抽象其實就是:將系統中某些不必要的組件細節隱藏起來,同時保留組件與系統進行高效交互的方式和能力。例如,我在編寫計算機程序時,不必再用機器代碼語言來編程,而可以使用C語言或其他類似的語言。機器代碼語言是一種二進制代碼,此前,每臺特定的計算機都需要用這種語言來設置指令。現在,我寫出來的程序不僅易于閱讀,還可以轉換為機器代碼語言。在很多情況下,我甚至不需要知道程序將會在哪種特定的機器上運行,那些與機器有著更深層級交互的其他程序自然會“考慮”細節。換句話說,這些細節在編程時已經被我抽象化了。這種抽象方法在技術中無處不在。在與某個界面友好的網站進行互動時,對于網站的內部技術細節,我們并不關心;在將烤面包機的插頭插入某個插孔中時,我們也不需要知道電力是哪里輸送過來的,或是發電廠位于什么地方。這就好比我們無須知道搜索引擎是如何給出具體結果的。只要接口或界面是合乎邏輯的、可以使用的,那么我們就只需要關注正在構建或修復的細節,而不用擔心接口和界面背后的一切復雜問題。利用這種抽象方法,我們可以在一種技術的基礎上構建出另一種技術,也就是直接利用他人創建的技術,而無須了解其內部細節。如果你是使用統計軟件包分析數據集的財務分析師,或是使用預設代碼創作有趣動畫的應用程序開發者,那么你無疑已經在使用抽象方法了。抽象給人們帶來的最大好處是專業化。即使系統擁有數百萬量級的交互,系統的構建者和維護者也不是必須知道它到底是如何工作的。抽象使他們只需了解自身關注的某個具體部分,而其他部分的細節會被再次抽象化。然而在這個糾纏時代,抽象方法也可能會崩潰。事實上,這種情況出現得越來越頻繁。在一個系統中,原本被設計者和構建者屏蔽的各個組成部分,正在越來越多地以意想不到的方式發生碰撞。這一點在金融領域顯得尤為突出。在當今的金融市場上,“參與者”早就不僅限于人類了,大量以各種信息為基礎的計算機程序也參與了交易,而且速度比人類手動執行快了無數倍。這些計算機程序以異常復雜的方式相互聯系著,并通過巨大的交易網絡對決策進行級聯式放大和傳播。那么,它們究竟是如何做出交易決策的呢?某些計算機程序能從海量的數據中總結出有意義的參數。結果可能會非常極端。2010年5月6日,全球金融市場出現了閃電崩盤,股市出現了大規模的、非常迅速的巨幅震蕩。\h\h[27]許多上市公司的市值都因此遭受了重創,不過不久之后又都基本重回原位。這次閃電崩盤涉及一系列交易算法和實施細則,這些算法和細則以意想不到的方式進行了交互,在短時間內便造成數十億美元的損失。盡管很復雜,但這些系統并非處于真空地帶,它們是更高層級的技術生態系統的一部分,而這個技術生態系統決定了每種證券或商品的交易時段。金融系統還會受到一系列法律法規的約束。當然,法律法規本身即是一個系統,而且是一個龐大且復雜的系統。不同法律之間存在相互依賴、相互援引的關系,且聯系方式時而精確、時而混沌,令人難以琢磨。此外,這些交易所依賴的基礎設備,都建立在持續發展了數十年的技術之上。這樣一來,整個系統就成了“新”與“舊”的組合:在這個系統中,古老的依靠人工喊價的實物交易與通過光纖傳輸完成的電子交易共存。我們在構建能夠實現高效交易的計算機程序時,不僅要考慮日新月異的計算機科學、繁雜的金融工具和深不可測的法律法規等,還要深入了解物理學。因為“光在不同材料中的傳輸速度”這一點在交易中至關重要。因此,我們說,地球上沒有人能完全理解金融世界中相互關聯的所有系統,甚至沒有人能完全理解其中任何一個系統。當然,在很多情況下,系統的使用者確實只需要很好地理解系統的一小部分,甚至僅是最表層的一部分就可以了。在一家金融公司里,程序員可能只需要知道如何維護交易系統,而不需要了解計算機在物理層面上的基礎設置;有的人可能只會關注某個特定的軟件,這些軟件可以對公司外部的消息進行過濾,然后將部分信息傳輸到公司內部進行運算,至于其他大部分信息,只作大致了解即可;為該公司工作的律師則需要了解與各種交易有關的法律條文,但不需要知道軟件、服務器或光纖的任何細節。在這里,抽象方法給我們帶來了很大的便利。在大多數情況下,對某個事物“足夠”了解,看起來已經很不錯了,\h\h[28]但是,當我們構建出越來越復雜的系統之后,在系統及其子系統運行的不同層級之間就會越來越頻繁地出現跨界交互現象。尤其是隨著事物之間的相互聯系不斷加強,我們愈加難以判斷原有的那些粗略的、不完整的理解是不是仍然夠用。在糾纏中,事物會在不同的抽象層級上相互碰撞,以各種令人無法想象的方式進行交互。在充滿交互的網絡中,常常會出現被復雜性科學反復提及的“涌現”(emergence),也就是某種層次上的交互最終導致其他層次上的交互出現了預料之外的現象。涌現,在所有類型的復雜系統中都很常見。例如,昆蟲的集體飛行便是一種涌現行為。另外,在金融系統中,涌現也很常見。金融系統的運行所涉及的因素多種多樣,上至全球范圍內的算法交互,下至每條網絡線的傳輸速度。要想真正搞清楚哪些細節應該被抽象化,是一個太過繁雜的問題。當系統內部深處的某些微小細節像“微型造物主”一樣崛起,并開始破壞技術系統的其他組成部分時,我們就不能只對系統進行局部理解了。當系統處于糾纏之中時,其內部各部分之間的交互會陷入混亂,以往幫助我們管理復雜性的等級結構和抽象方法,都會迅速地分崩離析。那么,在可見的未來中,人類是否有希望找到擺脫這種混亂的辦法,并讓世界重新回到可管理的狀態呢?或者,我們注定要帶著深切的、無法言喻的恐懼感來面對這些不斷增殖的系統?在大多數人看來,不完全了解那些技術系統,不知道所在城市的基礎設施細節,不理解蘋果手機的硬件如何驗證指紋,不清楚法律法規如何促進國際貿易,其實并沒有什么關系。人們簡單地認為,對于那些復雜的系統,只需要明白如何使用即可,它們的具體機制是什么則無關緊要。不過,對于一個新工具的工作原理,有人搞不懂是一回事,所有人都搞不懂又是另一回事。許多人還在自欺欺人地以為,專家們終會把我們從這種龐大的復雜性中拯救出來,因為他們理解我們所不理解的東西。但是事實并非如此,專家也不一定理解,依賴專家的時代早就一去不復返了。我們過去所采用的用以理解這些系統的思維方式,也就是找到“挑戰者號”航天飛機失事原因的那種思維方式,現在已經完全失效了。這很令人絕望。糾纏的世界并非遠在天邊,而是近在眼前。每個人都需要用新的思維方式去理解技術,甚至是那些我們輕松地將理解外包給專家的技術。雖然對人類而言糾纏時代的到來是一場嚴峻的挑戰,但我仍然滿懷希望,并堅信:我們定能學會如何處理這些系統,至少在某種程度上。但是,要想真正理解這個由人類一手創造的時代,我們就需要先退而求其次,將迫使我們陷入復雜性、阻礙我們理解復雜性的各種因素找出來。技術系統變得越來越復雜的主要原因是“吸積”和“交互”。隨著時間的推移,系統中不斷加入更多的組成部分,部分之間也增加了越來越多的連接。“必須處理的例外情況”和“普遍的稀有事物”也讓技術系統變得愈加復雜。要想使用互聯網,我們就必須忍受或是間接地忍受雜亂無章、東拼西湊的網絡世界。真是一團糟!互聯網的第一步是在20世紀60年代邁出的。\h\h[1]當時,有人創造出了一個巧妙的設計,使人們能夠在不同的地方通過計算機傳遞信息包。于是,小網絡被相互關聯起來,構成了大網絡。同時,為了高效地傳輸信息,人們還開發出了各種各樣的協議。到了今天,互聯網的應用已與其最初出現時大不相同,以安全問題為例。互聯網原本是研究者以溝通為目的開發出來的系統,對于要求高效和安全的大規模商業交易而言,并不理想。為了彌補這種缺陷,促進商業交易,人們在原有的互聯網基礎設置上開發出了很多不同的機制,包括加密和解密信息的方法,以數字方式轉移資金的規則,等等。令人高興的是,這個系統確實變得有用了。然而,在網站的用戶界面背后,其實潛藏著一個奇怪且復雜的結構。有時候,作為用戶的我們也能直接窺見些許混亂的跡象,例如,網頁上彈出的安全證書警告。是的,很多事物都是這樣,有用,但是遠遠稱不上優雅。與此類似,開發網站所用的HTML語言,在設計之初,也并非是為了服務諸如谷歌在線辦公軟件(GoogleDocs)這類基于全球廣域網(Web)的交互式應用程序。現在,這類應用程序已經投入運行,但人們仍然在付出代價:我們必須在一個簡單的系統上建造一棟非常宏偉的巴洛克式建筑。倘若你想一瞥這種復雜性的一角,只需查看一下谷歌主頁的源代碼就足夠了。雖然我們在瀏覽器中看到的網頁既簡潔又優雅,但是潛藏在這個表象下的東西卻數不勝數。我上一次查看谷歌主頁的源代碼時,其字符數已超過了10萬個,如果完整地打印出來,將超過50頁紙!\h\h[2]再比如電子郵件。從表面上看,這是一個相對簡單的應用程序,已經發展了好幾十年。在其古老的原始結構的基礎上,消息線程等各種新功能層出不窮。不過,網絡雜志《頁巖》(Slate)的互動編輯克里斯·柯克(ChrisKirk)在嘗試構建自己的電子郵件客戶端程序之后指出:“雖然電子郵件的軟件時有創新,但這些創新都建立在過時的系統之上,如同狡猾的平衡術,有時甚至相當隨意,比如,將電子郵件恢復為最初形式,或是將它改頭換面。”\h\h[3]在計算機學和工程學中,有一個術語kluge,指的是拼湊起來的系統,也就是將許多不同的東西混合在一起,以求解決問題的系統。這種系統肯定是不精致、不優雅的,而且很多時候龐雜得毫無必要。雖然這種拼湊起來的系統是有效的,但遠遠稱不上完美。有些東西的第一代設計可能是相當優雅的,但是隨著時間的推移,它們的結構變得越來越復雜,最終變成了雜亂的魯布·戈德堡(RubeGoldberg)式\h\h(2)的應急之物。包括互聯網在內,在每一個技術領域中,都存在著這類拼湊起來的系統,例如交通網絡和醫療設施。以家庭娛樂系統為例,它們雖然有用,但需要同時使用好幾個遙控器,以及一大團亂麻般的電線、信號線和數據線。美國的法律體系也是個拼湊起來的系統。這是一個為了達到特定目的而被構建出來的技術系統,遠遠稱不上優雅。就像計算機代碼是操作軟件的書面描述一樣,法律法規本質上也是技術代碼的書面體現。\h\h[4]毫無疑問,《美利堅合眾國憲法》是一部非常優雅的文件,只用了寥寥數頁,就為代議制民主奠定了堅實的基礎。當然,憲法的確立并不是故事的結局。對聯邦法律具有指導意義的《美國法典》是在憲法的框架內發展起來的。這些法律致力于闡明憲法的一般原則,以及對各種具體情況的處理準則和方法。例如,《美利堅合眾國憲法》只用一句話規定了國會有權建立公共郵政服務機構,而在《美國法典》中,有關這個政府職能的闡述多達500余頁。\h\h[5]此外,美國聯邦郵政法規還規定了從郵政局的職位設置到郵政資費等各方面的所有細節。總而言之,《美國法典》比《美利堅合眾國憲法》要復雜得多。\h\h[6]事實上,《美國法典》的規模和互聯性仍在不斷增加,時至今日,其總字數已經超過了2200萬,內部各章節之間的關聯點也已超過了8萬個。其實,無論在什么地方,我們都可以觀察到,隨著時間的推移,各種系統的復雜性都出現了大規模增長。我們還發現,一般來說,當一個復雜的系統龐大到一定程度時,無論其具體形式如何,都會變成一個拼湊起來的系統。萊特兄弟于1903年制造的飛機是簡約主義的杰作\h\h[7],只有很少的幾個部件,載人后總重量僅為340千克;而到了今天,制造一架波音747-400飛機\h\h[8]需要用掉67000千克鋁材,600萬個獨立部件和275千米管線\h\h[9]。這是個普遍現象,在過去的200年里,我們制造出來的機器所包含的零件數量一直在大幅增加。那么,對于影響著我們生活方方面面的,現代技術系統中的軟件來說,情況又如何呢?衡量軟件復雜性的常用指標之一是程序代碼的行數。據估計,微軟操作系統的源代碼行數近10年增長了10倍。\h\h[10]Photoshop的源代碼行數在過去20年里爆炸式增長,幾乎是1990年的40倍。\h\h[11]在電話通訊系統中,類似的情況同樣存在,隨之而來的還有巨大的復雜性。20世紀20年代,美國的電話通訊系統已經擁有了大約480萬千米的收費線路和大約1700萬部電話。\h\h[12]要知道,就當時而言,電話才剛剛問世幾十年;而時至今日,相關的技術生態系統已遍布全美。所有這些系統都是為了實現某個特定功能,由一代又一代的專家設計、構建出來的。有人可能會認為,如果這些系統的設計是合理的,那么它們理應合乎邏輯、優雅,甚至簡潔,也理應易于說明、易于修復。然而,盡管我們已盡了最大努力,但技術系統還是變得越來越復雜、越來越龐大。這絕非偶然,技術發展過程中某些固有的力量,使我們在“復雜性”中越陷越深。和萬有引力之類的物理定律截然不同,這些力量強大到能讓系統變得越來越復雜。不管時代如何變遷,它們總能壓制住人們對簡單的渴求,以致在人們心中,它們已如物理規律般不可抗拒。可是,為什么會這樣呢?在本章中,我將詳細分析一些會使系統變得日益復雜的因素。從表面上看,這些因素完全合理,它們所引發的每一個變化都能使技術更加適應不斷變化的環境,要么有助于系統繼續在新環境中正常運行,要么增加了系統的實用性。然而,這些因素最終會使原本優雅的解決方案變成雜亂無章的、拼湊起來的系統。無論付出多大努力也無法避免這樣的結果,無法阻止技術復雜性的不斷增長。最終,我們生活的方方面面都會受到影響。各種技術系統皆會隨著時間的推移而越來越復雜,究其首要原因,也是最顯而易見的原因是系統內部存在著雙重力量:吸積(accretion)和交互,也就是說,隨著時間的推移,系統的組成部分越來越多,同時組成部分之間的關聯也越來越多。原因1:吸積在2000年1月1日到來前的幾年里,許多工程師都在研究如何解決“千年蟲”問題。簡而言之,若一個軟件在存儲年份時使用的是兩位數,而不是四位數,那么當2000年到來時,這個軟件就會“認為”那是1900年,從而引發諸多問題。恐怕沒有任何人、任何機構會比美國聯邦航空管理局(FAA)更擔心“千年蟲”問題了。如果空中交通管制系統在新千年到來時出現故障,那將會導致巨大的災難。因此,美國聯邦航空管理局檢查了計算機系統,并對系統進行了測試:如果系統認為那是1900年,會出現什么情況?\h\h[13]在測試過程中,他們發現交通管制系統中的IBM3083計算機問題特別棘手。作為技術人員代表,美國聯邦航空管理局的工會主席指出主要問題在于:“IBM公司只有兩個人知道這種型號的計算機的微代碼,但是他們都退休了。”\h\h[14]但真正的原因是,IBM3083屬于大型機,從20世紀80年代開始發售,而且所用的系統軟件早在發售前幾年就已投入使用。這就意味著,到了20世紀90年代后期,這個為全美的飛機制定航線的計算機系統所使用的代碼幾乎已無人可識。這還算不上令人震驚。一直以來,許多大型系統的基礎都是較小和較陳舊的系統。只要這些系統能夠繼續平穩地運行下去,就不會有人在意那些舊東西上面到底堆了多少新東西,系統中到底累積了多少次第加入的片段。據一位消息人士透露,直到2007年,美國國稅局所使用的報稅系統依舊是20世紀60年代早期,也就是肯尼迪政府時期開發的系統。\h\h[15]美國國稅局所使用的另一個系統則始建于20世紀70年代,并于1985年進行了大修。與此類似,美國的航天飛機在執行最后一次航天任務時,\h\h[16]所用的平臺是由5臺IBM計算機組成的,其計算能力甚至還比不上今天的一部普通智能手機。然而,這些軟件和技術仍然在使用著。1975年出版的《人月神話》(TheMythicalMan-Month)一書中,計算機科學家小弗雷德里克·布魯克斯(FrederickP.BrooksJr.)討論了有關軟件設計和項目編程的管理問題。在這本書中,他引用了業內的一句俗語:“每次加一點,每次加一點,最后就有了一大堆。”\h\h[17]每一個獨立設計,無論是為了修復,還是用來提供新功能,看上去都不過是一次獨立的選擇,而且都很合理:要么解決了問題,要么為用戶創造了新的令人興奮的功能。然而,日積月累下,它們終會變成“一大堆”。從交通運輸業到能源業,再到農業,我們都可以從中清楚地看到,但凡是大型的技術系統,就定會發生這種情況。舉例來說,一大堆石頭不一定會成為問題,即使它們看上去可能很難處理、過于零亂,但卻不一定深奧難解。真正的問題是,當我們創造的“一大堆”引發出意料之外的狀況時,我們就會遭遇“雪崩”。不幸的是,我們不斷地往技術系統中加入一個又一個片段,“雪崩”在所難免。“一大堆”不僅變得更大,而且變得更難琢磨了。我記得我最早是在一些討論“行星系如何形成”的文章中看到“吸積”這個術語的。行星系由一團旋轉的塵埃和氣體凝聚而成,這種星星點點的累積過程,就是“吸積”的過程。\h\h[18]這個用來描述行星系如何形成的概念由來已久,而在技術的增長過程中也是類似的吸積作用。吸積過程的結果之一就是形成了人們常說的遺留代碼(legacycode)或遺留系統(legacysystems),即過時的機器和技術,也就是開發出來之后使用至今的機器和技術,譬如美國國稅局所使用的報稅系統。這種老舊的系統并不罕見,甚至可以說相當常見。\h\h[19]它們經歷了多年的吸積過程,成了拼湊起來的系統,從科學模型到城市基礎設施,幾乎無處不在。例如,在城市的排水系統中,既有服役超過百年的舊管道,也有剛剛埋設好的新管道。就計算機領域而言,很多技術系統都依賴于已停產的舊型號計算機系統,而且程序代碼也是用早已退役的編程語言所寫。例如,許多科學軟件現在都成了遺留系統,它們一般都是用Fortran語言編寫的,那是一種功能強大但早已過時的編程語言。隨著技術的高速發展,如今我們再來看Fortran語言編寫的計算機代碼,就好像是在看中古時代的英語。在這里,不妨引用《全球概覽》(WholeEarthCatalog)的創始人斯圖爾特·布蘭德(StewartBrand)在《萬年鐘傳奇》(TheClockoftheLongNow)一書中的說法:“通常,這些已經過時的遺留系統,在過去的許多年里,一直都扮演著十分重要的角色,若是替換掉它們,必定會‘傷筋動骨’,恐怕沒有人能夠承擔這樣的后果。此外,它們也是無法被完全修復的,一是因為問題過于復雜,二是因為沒有人完全了解整個系統。”那么,當我們面對一個仍在緩慢增大、小故障不斷的遺留系統時,又該怎么辦呢?我們只能小心翼翼地對待它,因為設計它的人可能早就“杳無音訊”了。這個遺留系統可能已經完全嵌入了其他系統,徹底移除它的后果,可能遠比容忍它的小故障更加糟糕。這種系統實在難以處理,有時甚至會被稱為“恐怖爬行獸”(crawlinghorrors),也就是美國恐怖、科幻小說作家霍華德·菲利普斯·洛夫克拉夫特(H.P.Lovecraft)小說中那種無法形容的怪物。\h\h[20]司法系統條文,也有類似的情況。在法律體系中,隨著時間的推移,法律條文會被修正或修改。人們會根據不斷變化的環境,對法律條文做出調整,但總會留下一些數十年前制定的法律條文。例如,互聯網流量管理的相關法規就源于1934年通過的一項法律。隨著時間的推移,法律體系也在不斷地吸積,最終成了一個拼湊起來的系統。它可以發揮作用,但是遠遠談不上優雅。以稅法為例。事實上,美國的稅法早已復雜不堪了,立法者也早就承認了這個事實。稅表的使用說明已經從1940年的兩頁,增加到了2013年的200多頁。\h\h[21]鑒于此,如果你在申報納稅時,因為法律法規太過復雜而出了錯,那么最高法院會裁定你無罪,因為你在錯誤報稅這件事上并沒有“主觀故意”。\h\h[22]盡管如此,就法律體系本身而言,在現有稅法上修修補補,要比重新制定更容易,也更有效。另外,我們也要考慮一下諸如美國環境保護署之類的政府部門和機構所頒布的法規的總體增長趨勢。事實上,只要看一看《美國聯邦法規》的總頁數就足夠了。\h\h[23]《美國聯邦法規》收錄了各行政機構頒布的各種法規,在過去的50年里,其頁數從不到25000頁增加到了超過165000頁。我們還觀察到,行政人員和行政機構的數量也出現了類似的增長趨勢。20世紀50年代,《經濟學人》雜志中有一篇文章提到了帕金森定律(Parkinson'sLaw),并定量地描述了行政人員數量的增長規律。\h\h[24]雖然這篇文章的觀點還不太完善,但帕金森定律畢竟有數據的支持,其結論到今天仍基本成立:政府部門的行政人員數量以每年5%至6%的速度在增長。毫無疑問,隨著行政機構的規模越來越大,機構的管理問題只會越來越復雜。事實上,軟件界已經將吸積和積累奉為普適規則。\h\h[25]就發展而言,軟件系統的規模勢必會與日俱增,除非有人積極地嘗試簡化它們。那么,為什么我們不能對復雜的系統進行定期清理并從頭開始呢?這和實際操作有關。例如,軟件未能按時重寫完,索性就在推出新版本之前先發布一個補丁。\h\h[26]我在想,只要愿意花上很多年的時間,那么微軟內部的任何一位軟件專家都可以重寫Word的全部代碼。當時間、精力和金錢都有限,且不得不進行權衡時,\h\h[27]我們通常會選擇對系統進行修改,讓它“足夠好”就行了。這意味著,我們需要不斷對系統進行調試和修正,就像立法者對美國法律體系所做的那樣,也就是說,我們需要在以往的基礎上加上一層又一層的東西。我們的城市擁有一個多世紀之前埋設的燃氣管道\h\h[28]、20世紀30年代建成的運輸網絡\h\h[29],以及廢棄的地鐵站。它們都隱藏在城市的地下。不過,更多的時候,我們之所以放棄從頭開始的想法,是因為那樣做不僅太困難,而且太危險。沒有人能夠完全理解一個系統所依賴的所有舊的組成部分的全部作用,所以重新設計一個未經檢驗的系統不僅是愚蠢的行為,更是危險的行為。試想一下,一個幾十年前設計好的、非常復雜的銀行軟件系統正慢慢適應著各種先進的技術,無論是新型的計算機,還是新的操作系統,或是無處不在的互聯網。雖然這個系統的核心基礎并不適用當今時代,但它們已經嵌入得太深,以致無法刪除。總而言之,我們必須接受這樣一個普遍規則,那就是:無論何種技術系統,終將變得日益復雜。\h\h[30]但是,當仔細觀察技術系統中的遺留代碼時,無論是在一個軟件中,還是在一個法律體系中,我們都會發現,真正的復雜性絕不僅僅只體現在日益擴大的系統規模上。畢竟,只有和另一個因素結合起來,吸積才能使技術系統變得復雜,這個因素就是交互。原因2:交互現在,幾乎所有的學生都會在師長的引導下,學習一些編程技術。是的,不管是教育工作者還是技術專家,都告訴我們計算機編程就是未來。計算機操縱了周遭的一切,比如汽車和微波爐。專家們當然沒有說錯。不僅如此,編程還可以為你帶來一種結構化的思維模式,以及提示你關注某種技術系統的實際功能。當我說起某個新的應用程序能夠做某件事時,如果你參與了編程,哪怕只是一點點,你也會比一般人更清楚我的說法是否合理。如果你以前寫過代碼,那么你應該清楚計算機程序是如何抵制簡化工作的。隨著計算機程序變得越來越龐大、越來越復雜,代碼也變得越來越復雜,而且絕大部分代碼的聚合方式都是令人費解的。為了確保大型程序仍可控,我們開發出了各種各樣的技術方法,例如版本控制、錯誤跟蹤,以及跨團隊溝通工具等,但是這些方法通常都只是“戰斗失敗”后的亡羊補牢之術。不僅軟件代碼本身在不斷吸積,每個組成部分也在越來越頻繁地與其他組成部分進行交互。與存在于“真空”中的全新項目有所不同,任何一個計算機程序都是一個大規模的互聯系統:不僅會作用于自身,還會與其他程序相互作用。我們在舊代碼中一次又一次地加入新代碼,并以出其不意的新方式去使用它們,以此將各個層次拼接在一起。交互過程,包括許多意外交互在內,有時會因編程語言本身的原因而加劇。即使是剛入門的程序員也知道,GOTO語句會帶來麻煩。在BASIC編程語言中,通過設置GOTO語句,可以讓程序輕松地從某一行跳轉到另一行。換句話說,如果代碼中包含了GOTO語句,那么程序就可以輕松地從某一行指向另一行,從代碼中的一個點跳轉到另一個點。如此容易便能實現跳轉,難怪有人會說,對于那些想要對自己的計算思維進行測試的文科生而言,GOTO語句無疑是“天賜良品”。\h\h[31]在一個小程序中,使用GOTO語句實現跳轉,既容易又無傷大雅。但是,隨著程序變得越來越大,GOTO語句最終會將代碼綁定到某些龐雜的節點上,但即使是最熟練的程序員也無法解開這些龐雜的節點。最終,你得到的將是所謂的“意大利面條”式的代碼,因為所有東西都糾纏在了一起,既難解開,又難理解。在這種情況下,要想搞清楚程序指令執行的次序幾乎是不可能的,這也是為什么這樣的計算機程序特別容易出現令人意想不到和無法理解的行為。此類簡化命令即使只是在獨立的、較小的環境下發揮作用,也有可能通過某種方式脫離當初設定的目標。如果使用的頻率和方式超出了預設范圍,系統及其組成部分就會出現諸多問題,而這些問題比當初設想的要龐雜得多。GOTO語句就是一個突出的例子,它從一個美妙的超快捷工具變成了既不優雅,又實為“有害”的東西。\h\h[32]為了更好地理解并強化系統秩序,專家們想出了很多方法,包括使用更加復雜的計算機語言。\h\h[33]在大多數由專家構建的新系統中,意大利面條式的代碼已成為過去式。然而,由于互聯的易發性和各種層次上的不斷吸積,交互作用正在持續增多。于是,高度互聯的系統動態,即信息的流動和各部分之間的交互,也就變得異常復雜和不可預測。仍以豐田汽車軟件為例,因為存在交互,豐田汽車軟件中的大量代碼已無法被測試了。\h\h[34]在我們構建的其他類型的技術系統中,互聯性同樣在不斷升級。例如,在法律體系中,由于每項新的法律法規都與以前的法律法規相互關聯,因此我們很難預測單項法律條文的效果。菲利普·K.霍華德曾仔細分析過貝永大橋(BayonneBridge)這個案例。\h\h[35]貝永大橋是連接紐約州和新澤西州的主要通道之一。由于這座百年大橋的橋梁實在太低,以致那些前往紐瓦克港的現代集裝箱船無法順利通過。紐瓦克港是一個重要的商業中心。那么應該怎么辦呢?在人們提出的各種解決方案中,有一個方案是這樣的:對這座橋進行改造,適度提高橋梁高度。這應該是成本最低的方案了,也是在2009年脫穎而出的方案。但是,改造工程拖了很多年都未能啟動,因為人們難以應對吸積和交互的綜合作用。與大橋改造工程有關的規章制度總共涉及19個政府部門的47份許可文件,從環境影響評估報告到歷史影響評估報告,不一而足。\h\h[36]其他地方也出現過諸多類似情況,一些公共項目需要10年左右的時間才會獲得批準,因為相關的規則和流程冗長繁多。\h\h[37]正如霍華德所說,這種情況在很多時候甚至是致命的,比如,老化腐朽的基礎設施如果未能得到及時修繕,就有可能奪走許多人的生命。研究員邁克爾·曼德爾(MichaelMandel)和黛安娜·卡魯(DianaCarew)就職于位于華盛頓特區的進步政策研究所(ProgressivePolicyInstitute)總部。他們將規則體系的增長稱為“監管積累”(regulatoryaccumulation),即隨著時間的推移,規則會變得越來越多。\h\h[38]換句話說,每一條法律法規都是合理的,但當它們被放到一起時,就有可能會因為相互作用而變得異常“軟弱”,甚至可能以令人驚訝和意想不到的方式產生沖突。我們不僅越來越多地將某項技術的各個組成部分關聯起來,而且還越來越多地將不同的軟件和技術關聯起來。后者是一種高階互聯模式,也就是互操作性(interoperability)。\h\h[39]讓各項技術互通,也就是讓不同系統進行交互,相互傳遞信息通常是一件好事。例如,因特網之所以擁有如此強大的功能,就是因為其連接的機器數量極其龐大,而且可以在無數機器之間傳遞信息。當你問Siri“世界總人口是多少”時,你的蘋果手機會通過WolframAlpha服務獲取到答案,然后回答你;當你使用谷歌地圖時,它會告訴你利用“優步”去往目的地可能要花多少錢。這些都是互操作性的實例。但是不要忘記,讓不同系統互通的同時,我們不得不去面對陷入復雜世界的巨大風險。我們現在不僅建成了互聯網絡,比如由不同計算機和設備組成的互聯網,而且還建成了擁有眾多子系統的大型互聯系統。除了互操作性之外,不同類型的技術之間還會產生相互依賴性,例如互聯網與電網之間的相互依賴性。\h\h[40]研究者在研究了多種類型的系統,并了解了它們的優缺點后指出,某些系統在多種條件下均可能會出現故障或崩潰。例如,某個規模相當小的電網出現了故障,繼而引發了無法收拾的級聯效應。對于這種風險,有一種觀點是:將技術系統之間的相互聯系切斷。然而,這種想法的可操作性幾乎為零。互聯系統的構建成本其實很低:在當今這個充滿互操作性的時代,工程師和設計人員都在有意為各個系統創建接口,因此,不同的系統可以很容易被關聯起來。我們在構建新事物時,通常都會在故障成本和構建成本之間進行權衡。我們需要知道,如果出了故障,失敗的成本會有多大。\h\h[41]如果Word崩潰了,那么尚未保存下來的東西將會丟失。盡管沒有人希望看到這樣的結果,但這個故障的成本的確是相對較低的。如果電網出了故障,并導致美國很多地區停電,那么故障的成本就極其高昂了。例如,在2003年,美國東北部的大停電對5000萬人的生活和工作造成了影響,并導致11人喪生,直接損失估計高達60億美元。\h\h[42]每一項故障成本都應該拿來與系統的構建成本進行比較。縱觀歷史,我們所構建的系統越重要,構建成本就越高。例如,構建銀行系統的基礎設施所耗費的資源,比編寫一個聊天程序多得多。因此,我們必須確保那些昂貴的系統不易發生故障,而這又意味著需要增加構建成本。換句話說,在極高的構建成本面前,通過大量檢查和測試來降低故障成本的做法,變得至關重要。在一個相當長的時期內,這種方法一直行之有效。因為對構建成本的重視程度超過了對故障成本的重視程度,所以我們所依賴的所有重要的社會保障系統,都是花費大量資源構建起來的。\h\h[43]然而,現在事情已經發生了變化。出于各種原因,例如,我們可以找到現成的工具和組件,同時“云”上面也存有很多可用資源,所以構建成本已大幅下降。創立技術公司已不再需要太多啟動資金:你可以快速地設計和生產出復雜的工具,并通過市場進行測試,而你為此所付出的成本并不大。與此同時,與互聯有關的故障成本也已出現持續上升的趨勢。盡管系統關聯技術相當簡單,而且成本很低,但是這種互聯系統的故障成本卻非常巨大。當我們把數字地圖軟件與出行指導軟件關聯到一起時,哪怕只是一個很小的錯誤也有可能導致一場災難。例如,蘋果地圖在首次發布時就曾將超市錯標為醫院。在當今時代,利用互聯網信息人工合成微生物并不是一件不可思議的事情,但正因如此,爆發生物災難的風險也比以往任何一個時代都高得多。例如,已經有實驗室通過使用電子郵購的生物原料合成出了脊髓灰質炎病毒。現在,有不少初創公司正在努力實現生物學實驗的遠程操作。不難想象,在這個日益自動化的世界中,軟件合成的生物因子\h\h[45]完全有可能會在不經意間被釋放。當構建成本持續暴跌,而故障成本直線上升時,我們便進入了一個無比復雜的技術領域。是時候停下來想一想了。一般來說,隨著系統內部及系統之間的交互增多,包括擁有子系統的大型系統在內的所有系統的復雜性都會增加。有人認為,互聯性的不斷提高,體現了技術的基本要求。\h\h[46]技術終究會產生交互和聚合,并在這種情況出現時進一步推動我們走向復雜化。盡管從開始構建大型技術系統的第一天起,這些趨勢就一直存在,但是近年來,它們變得愈發強大了。正如我在本書導論中所提到的那樣,計算機科學家艾茲格·迪科斯徹對當下的大型系統,特別是計算機系統的激進新穎性所進行的分析發人深省。早在1988年,迪科斯徹就已指出,計算機程序的設計需要克服大量規模上的差異,當然,在計算機問世之前,沒有人需要去處理這樣的事情。\h\h[47]以智能導航系統為例,迪科斯徹很好地解釋了其跨度極大的層級結構。從程序中的1個比特,到機器存儲空間里的幾百兆字節,的確是從非常小到非常大的跨越。這種跨越涉及近10億次的跳轉,極端的規模變化不但超乎想象,而且史無前例。事實上,這一切已經,并將繼續走向極端化,因為日常應用技術的普通用戶,現在已經熟悉了千兆或萬兆這樣的前綴,而這些前綴又意味著,我們要對龐大的規模差異負責,而這種龐大系統的邊界已近乎天文意義上的邊界了。在過去的短短幾十年間,大型系統已變得異常龐大且錯綜復雜,用迪科斯徹的話來說即是“概念層級的深度,絕非人類心智曾需面對的任何事物可比”。不僅如此,即使我們有能力阻止系統的吸積和交互,也還需面對另一個會使系統變得日益復雜的因素,而那將是更加難以解決的問題。原因3:必須處理的例外情況假設你想創建一個日歷程序。看上去很簡單,是不是?從很多方面來看,的確如此。要想計算一年的天數,相對來說并不算困難。一般來說,一年有365天,遇到閏年就在2月底加上一天。怎樣計算閏年?也不難。只需要看一下年份即可。如果年份可以被4整除,但無法被100整除,或是能被400整除,那么這年便是閏年。也許你還希望這個應用程序能夠處理時區問題。這應該也不算難。只需利用全球定位系統(GPS)中的地理坐標來確定所在位置的時區即可。你還可以創建一個列表,將各州與時區對應起來。當然,時區并不是沿著州界劃分的。現在你需要用更具體的、分辨率更高的信息來處理小區域。此外,你還不能忘記,亞利桑那州的大部分地區都是不使用夏令時的,它把自己置于一個“特殊的時空”當中了。是不是還想讓日歷程序包含節假日的相關信息?當然,節假日通常都有明確的時間安排,至少大部分節假日都是如此,把它們加上去應該不會太困難。感恩節是11月的第4個周四,美國退伍軍人節被定在每年的11月11日。那么逾越節(Passover)呢?看來,我們還需要將這個日歷程序與另一個基于希伯來歷的日歷程序整合到一起。因為逾越節是從希伯來歷一月的第15夜伊始的。因此,我們需要遠超預期的更多信息。那么,你是否還希望這個日歷程序包含其他時間段,并且在過去時段和未來時段上都表現得準確無誤呢?如果我們回到19世紀,在那個時代,由于標準化時區制尚未被推行,所以各個城鎮都有自己的時間制度,而這些信息都需要“硬編碼”(hard-coded)\h\h(3)到我們的應用程序中。與此類似,在過去的幾個世紀里,雖然全球許多國家和地區都已放棄使用羅馬儒略歷(Juliancalendar),轉而使用格里高利歷(Gregoriancalendar),但是各國以及各地區所采用的具體時間制度并不全然相同。例如,俄羅斯“十月革命”的紀念日之所以是在11月,是因為在革命發生時,俄羅斯仍在使用羅馬儒略歷,其日期與西方許多地區所使用的格里高利歷相差一周多,而“十月革命”發生在儒略歷的10月底。如果希望日歷程序準確且詳盡,那么就應該將此類信息也植入進去。這個過程還將持續下去。以這種方式構建起來的系統最終會變得復雜無比,因為它所要反映的事物,本身就是復雜的。\h\h[48]通過一個簡單的模型來處理絕大多數復雜性,是相對直接的方法。比如,我們知道了一年有365天或366天,就可以通過簡單的運算來確定某一年到底有多少天。但是,如果你對準確性有要求,無論是想確保永遠不會錯過任何一個約會,還是想構建一輛既不會迷路也不會撞傷人的自動駕駛汽車,事情就會變得非常復雜。\h\h[49]這種復雜的情況就是必須處理的例外情況,也就是所謂的“邊界情況”(edgecase),若不處理,技術系統就會出現漏洞。\h\h[50]邊界情況各種各樣,從閏年問題,到如何編寫數據庫軟件來處理特殊的人名,比如人名中帶有特殊符號的情況。我們不能說邊界情況是普遍現象,但它們確實經常出現,所以我們必須加以識別和管控。但是與此同時,技術的簡單性也就漸漸消失了。邊界情況使技術變得復雜了。這一點在科學模型中尤為突顯,科學模型也是一種技術,也會隨著時間的推移而發生變化。接下來,我們就以社會科學中的語言學為例展開討論。原因4:普遍的稀有事物在中學時期,英文老師教會了我語法,因此我很早就知道,不規則動詞tobe的兩個單詞是必須連在一起用的;我還記住了很多介詞,并學會了造句。在那個時候,根據語法規則來分解句子,將句子的修飾成分去除,剝離出它的邏輯骨架,是一件很有趣的事情。你可以將語言簡化到原子量級,如名詞、動詞和形容詞,然后再來看它們是如何關聯在一起的。盡管語言無法用方程式來表達,但是語法確實擁有一種獨特的、有秩序的美感。然而,構建一個語言處理系統并不是一件容易的事。任何一種語言都有很多習慣性表達,而且其內涵往往比我們想象的要豐富得多、“狡猾”得多。因為語言具有非正式性,所以使用者在面對作為規則集合的語法時,多半只會深表認同,而不會嚴格遵從。所有這些都屬于同一類邊界情況,它使下面這個簡單規則無法成立:每個句子都必定是“主語-謂語-直接賓語”這種結構的變形。為了更好地理解語言中的邊界情況,我們現在來討論一下所謂的罕用語(hapaxlegomena)。罕用語可謂“普遍的稀有事物”(commonrarities)。請問你以前用過snowcrie這個單詞嗎?我想你應該沒有用過。事實上,snowcrie這個詞是無意義的。據我所知,它可能是一個錯詞。根據《牛津英語詞典》的解釋,snowcrie這個詞曾經出現在1402年的一首詩中:“NotinGoddisgospel,butinSathanaspistile,wherofsoroweandofsnowcrienoonistoseken.”。有學者認為它應該是一個錯詞,\h\h[51]正確的那個詞可能是sorcerie,意為巫師。不管有沒有意義,snowcrie這個詞就是所謂的罕用語,或者說“只用過一次的詞”。這個詞在《牛津英語詞典》的語料庫中只出現過一次。語料庫是大量的、通常是完整文本的合集,例如某種語言的全部文本,或某個時期的所有文本。《牛津英語詞典》的語料庫即是編寫者可以使用的所有英語文本。不過,語料庫的文本體量并不一定非常大。在莎士比亞文集這個語料庫,也就是莎士比亞的全部著作中,經常會碰到一些罕用語,比如honorificabilitudinitatibus,含義可能就是“榮譽”(ofhonor)。當一個語料庫擁有某種語言的全部,或近乎全部的文本時,罕用語就會變得讓人頭疼,比如《希伯來圣經》中的希伯來語,人們對它們的意義知之甚少。但是,罕用語并不是離奇的統計錯誤。它們不僅比想象中更加普遍,而且與語言學中特定的數學規則有關。語言中不同詞匯的使用頻率可以用冪律(powerlaw)\h\h(4)中的長尾分布來進行描述。\h\h[52]長尾分布與用來描述人類身高的鐘形曲線(bellcurve)\h\h(5),即正態分布,有所不同。在長尾分布中,有一些值會延伸到更加深遠的區域,以便容納普通詞匯,比如the,或一些極其罕見的詞匯,比如flother。一般來說,語料庫中有近一半的單詞都只出現過一次,也就是說,有一半的單詞都屬于罕用語。這些詞就是長尾中“長”的部分。\h\h[53]因此,雖然你遇到某個特定罕用語的概率很低,但是你遇到這類詞的概率卻相當高。在這里,我們不妨用看電影來做下類比。相信并沒有太多人看過那部大名鼎鼎的經典電影《天生愛神》(TheAdventuresofBuckarooBanzaiAcrossthe8thDimension),但是看過至少一部經典科幻電影的人卻大有人在。因此,作為一個整體類別,罕用語是非常重要的。它們深深地滲透在我們的語言之中。當我們試圖編寫一個計算機程序來模擬語言時,可能會將罕用語,或罕見的語法結構抽象為異常值。但是,作為一個類別,而非一個單詞,罕用語在語言中所占的比例其實是相當大的。將它們抽象化會導致模型的嚴重缺失,從而使程序變得不完整。為了避免“遺漏”,\h\h[54]我們需要建構出可以處理例外情況和邊界情況的復雜模型。在這個問題上,谷歌公司研發主管彼得·諾維格(PeterNorvig)的話可謂一語中的:“形成一種語言的,并不是那種可以用幾個參數來代表的永恒的理想模型,而是復雜過程中的偶然結果。”\h\h[55]因此,計算機語言學家應該考慮邊界情況,并嘗試著針對這個復雜系統構建一個穩健的、豐富的技術模型。在這里,復雜系統指的就是語言。那么,他們最終會得到什么呢?毫無疑問,他們將會得到一個復雜的技術系統。和語言有關的計算機模型必定具有復雜性。要說明這一點,只需舉一個例子就夠了:計算機是如何將一種語言翻譯成另一種語言的。關于計算機的翻譯功能,有一個流傳已久但未經證實的故事。\h\h[56]在冷戰期間,科學家們就已開始研究英俄語互譯的運算方法了。在測試計算機的翻譯程序時,他們選擇了一個含義相當微妙的句子“Thespiritiswilling,butthefleshisweak.”(靈固有所愿,肉卻軟弱不堪)。他們通過計算機將這句話翻譯成俄語,然后再次翻譯成英語,最終得到的是“Thewhiskeyisstrong,butthemeatisterrible.”(威士忌很有勁,但是肉卻很難吃)。顯然,通過運算來實現機器翻譯功能并非易事。谷歌翻譯雖然有趣,但結果卻可能不夠準確。不過,專家在這方面已經取得了很大的進步。那么,機器翻譯專家使用的是哪些技術呢?\h\h[57]早期的一種方法是利用語言的結構化語法,進行模型搭建。計算機語言學家將每種語言的屬性硬編碼為軟件,然后讓計算機根據語法規則進行翻譯。這種方法可以處理相對簡單的句子,但無法應對日常語言的多樣性。例如,一個用來處理“直接不定式”的規則,不一定能夠處理“分離不定式”,即無法處理“Toboldlygowherenoonehasgonebefore.”(勇敢地進入前人未曾涉足之地)這樣的句子。另外,不定式的用法還具有一定的地域性,比如,匹茲堡人很喜歡省略掉tobe,直接說“Thecarneedswashed.”(這車該洗了)。很顯然,面對這種形式靈活的“方言”,語法規則將束手無策。事實上,依賴上述語法模型的機器翻譯程序是不可能給出準確結果的。語法規則看上去既優雅又簡潔,但無法應對文本翻譯過程中所需處理的,復雜且古怪的語言現象。簡而言之,邊界情況實在太多了。為了填補這道鴻溝,機器翻譯專家引入了機器學習領域的多種統計方法,他們讓計算機先攝取大量已經翻譯好的文本,然后基于一組算法翻譯新文本。這樣一來,計算機就不用理解句子的含義,也不必解析句子的語法結構了。舉例來說,對于復數問題,我們不再需要創建復數的語法規則,規定將后綴“-s”加在單詞末尾,就能夠使之變成復數形式;我們只需讓機器知道,“-s”這個后綴在99.9%的情況下意味著創建了一個復數形式的單詞,而在剩余0.1%的情況下并非如此。\h\h[58]例如sheep和deer,它們的單復數形式相同;此外,還有一些單詞的復數形式是不規則的,如men、feet和kine。對于語言系統中的其他例外情況,也都可以采用這種運算方法。盡管擺脫混沌就能迎來秩序,但這不可能沒有代價。最終得到的最有效的翻譯程序肯定不是一個簡單的模型,而會是一個擁有大量參數的龐大的計
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 防火安全我知道幼兒園
- 顧客導向的營銷策略
- 非洲民宿創業方案策劃
- 預防偌如病毒主題班會
- 腹膜平衡試驗操作
- 銀行內勤培訓
- 經濟學-北京大學國家發展研究院真題
- 青協個人年終總結
- 需求管理年終總結
- (高清版)DB12 046.93-2011 產品單位產量綜合能耗計算方法及限額 第93部分:超高溫無菌奶
- 2025中考道德與法治核心知識點+易錯易混改錯
- 2025年日語n2考前試題及答案
- 1889-13-15-食堂承包協議工地食堂承包協議書
- T-NYA 007-2023 多味草本足浴包技術規范
- 課題開題報告:教育家精神在當代教育實踐中的傳承與創新研究
- 防洪防澇知識培訓課件
- 高等職業學校辦學能力評價的策略及實施方案
- 2024年全國統一高考英語試卷(新課標Ⅰ卷)含答案
- 漢語語法教學-寧可……也……
- 通用技術技術與設計2必修2高二下期全套教案
- 電路圖及實物圖連接練習
評論
0/150
提交評論