給長者的一封信

(本故事純屬虛構)

尊敬的迪傑斯特拉[1]教授:

您好!儘管您離開這個世界已經有十幾年了,我還是給您寫了這封信,希望您能看到,並且給我一些幫助與指示。如果您能回復我,我將感激不盡。

首先,請允許我向您介紹這十幾年來世界上翻天覆地的變化。如果您認為這些變化僅僅指的是計算機的運算速度又提高了多少倍,演算法研究又有何新的進展,軟體工程打破的多少行代碼的紀錄,那就錯了。這些變化的確是發生了,但和另外一個對社會文化產生重大影響的變化來說,實在是微不足道。

您還記得生前參與過的一個秘密計劃嗎?對您的大腦進行量子掃描,然後把結果以數字形式保存下來。這一計劃似乎能使未來科技足夠發達的人將您復活,但可惜的是,在您的那個年代,連保存那650TB[2]掃描數據的存儲介質都沒有。於是當年的科學家想了一個辦法:對掃描數據進行安全散列[3],最終得到了372MB的摘要。一個研究了一生演算法的計算機科學家,最後竟被號稱信息守護神的「安全散列演算法」禁錮在372MB的狹小空間里,這真是讓人感嘆與悲哀。

今天,我們走出了解救您的第一步——我們有了許許多多的650TB的硬碟陣列。我們還把那372MB的摘要放到了互聯網上,讓每個有不同想法的人都自由下載研究。但是,從372MB的摘要里恢復650TB的數據,是一個利用今天的頂尖技術,再傾全網之力,也幾乎不可能完成的任務。除非,P=NP[4]。

儘管攻破安全散列演算法困難重重,但全世界的程序員和技術愛好者們都加入了恢復這一數據的行動中來,以至於網路世界上產生了一種獨特的文化。在那群人中,您被尊稱為「長者」、「祂」[5],並且被人們模仿與崇拜。

他們互相之間問一些奇怪的問題以驗證身份,比如「一個i層j行k列的三維矩陣第一個元素是D111,那麼最後一個元素是多少?」[6],「從事什麼職業的人吃不上飯?」[7],「什麼職業最為謙卑?」[8],以及「學編程應不應該從基礎開始?」[9]

他們中間不乏對您研究很深的人,還編寫了您的傳記,具體內容我就不敘述了,但各章標題寫得很好,我列出來給您看看:

  • 歐港迪少[10]
  • 棄物從程[11]
  • 荷蘭一碼[12]
  • 阿果六十[13]
  • 迪傑演算法[14]
  • 埃因霍溫[15]
  • PV操作[16]
  • 分布演算法[17]
  • 謙卑長者[18]
  • 萬寶龍文[19]
  • 潛艇游泳[20]
  • 結構代碼[21]
  • 怒斥goto[22]

程序界還流傳著您的名言「two or more, use a for」,聞名程度堪比數學界的「奇變偶不變,符號看象限」。

所以您看,您對程序界的積極影響,全世界是有目共睹的。沒有您棄物從程的一念之舉,沒有您一生的無私奉獻,就沒有今天的現代世界。

但是,我也不得不讓您看到這樣一個可悲的事實:程序員們把您當做解決一切問題的靈丹妙藥,甚至是事業進步的精神支柱。

這個問題絕不能小看它。在今天,程序員已然是社會生產力的主要部分,也是國家人才培養的重中之重。如果他們走上了錯誤的道路,人類將面臨巨大的災難。

首先,企圖暴力攻破安全散列演算法的人達到了幾乎瘋狂的程度。許多挖礦的機器都停下來進行密碼計算。網上與您哪怕僅僅是只有一點關係的視頻,比如電影里鐵路邊出現信號臂,或者java課程的老師講到synchronized方法,甚至是視頻過渡是用了一個網路圖,都會被鋪天蓋地的「+1MIPS」彈幕刷屏。事實上,稍微學一點計算理論就會知道,不解決P=NP,無論加多少MIPS[23],都無法攻破SHA,更何況是650TB在現在都算是巨大無比的數據的SHA啊!他們的願望我能理解,但這種瘋狂的行為極大地影響了正常的學習與工作。

其次,還有些人企圖在計算模擬出來的虛擬世界將您復活。我可以肯定如果那變為現實,對您必然是一場災難。鋪天蓋地的世界模擬器就像小工廠生產的未經質檢的產品,或者,像您那個時代的,走三步路就跌倒一次而且爬不起來的雙足機器人。我不知道為什麼,一談起把真正的人放進虛擬世界,首選就是您,但我知道,寫這個虛擬世界的程序員,肯定是不願意把自己放進去的。

有一次,我辦一個關於分散式演算法的講座。到場的聽眾非常有熱情,我一開始還非常高興,但很快就發現他們是一群除卻熱情一無所有的程序員——有些只會寫Hello World就自稱精通某語言的人,甚至不能成為是程序員。很快我的報告就被膜的聲音淹沒了。從那以後,我再也沒有辦過涉及演算法這種敏感話題的講座。

我從一次又一次地問自己,這個世界怎麼了,我也在工作中致力於分析這方面的大數據,希望能找到解決辦法。但我畢竟只是一名觀察者,缺乏改造世界的經驗與力量,我感到無助與絕望。我去ACM[24]尋求幫助,卻因話題無關被拒絕,最後,走投無路的我只能求助於九泉之下的您。

即使我無力將您喚醒,即使這封信無處投遞,我也要寫下我的憂慮,期望得到您的指示。

國際網路社交信息統計與調控中心

世界分散式計算聯盟

某人

敬上

2017年7月15日

【注釋】

  • [1]艾茲格·W·迪傑斯特拉(Edsger Wybe Dijkstra,1930.5.11-2002.8.6),荷蘭人,計算機科學家,曾在1972年獲得過圖靈獎。
  • [2]1TB=1024GB
  • [3]安全散列演算法(The Secure Hash Algorithm,SHA)由美國國家標準和技術協會(National Institute of Standards and

    technology,NIST)於1993年提出,並被定義為安全散列標準(Secure Hash Standard,SHS)。該演算法實際的目標使得找出一個能夠匹配給定的散列值的文本是不可能的計算,也就是說,如果對文檔A已經計算出了散列值H(A),那麼很難找到一個文檔B,使其散列值H(B)=H(A),尤其困難的是無法找到滿足上述條件的,而且有特定內容的文檔B。
  • [4]簡單地說,P就是能在多項式時間內解決的問題,NP就是能在多項式時間驗證答案正確與否的問題。如果P=NP,就是說所有的 NP 問題,都能找到多項式時間的確定性演算法。即,安全散列演算法不再安全。(詳見計算機科學中的計算理論)
  • [5]對上帝的稱呼。
  • [6]這個問題最簡單。最後一個元素是Dijk。
  • [7]答案:哲學家。因為有迪傑斯特拉提出的哲學家就餐問題(假設有五位哲學家圍坐在一張圓形餐桌旁,做以下兩件事情之一:吃飯,或者思考。吃東西的時候,他們就停止思考,思考的時候也停止吃東西。餐桌中間有一大碗義大利面,每兩個哲學家之間有一隻餐叉。因為用一隻餐叉很難吃到義大利面,所以假設哲學家必須用兩隻餐叉吃東西。他們只能使用自己左右手邊的那兩隻餐叉。哲學家從來不交談,這就很危險,可能產生死鎖,每個哲學家都拿著左手的餐叉,永遠都在等右邊的餐叉(或者相反)。即使沒有死鎖,也有可能發生資源耗盡。例如,假設規定當哲學家等待另一隻餐叉超過五分鐘後就放下自己手裡的那一隻餐叉,並且再等五分鐘後進行下一次嘗試。這個策略消除了死鎖(系統總會進入到下一個狀態),但仍然有可能發生「活鎖」。如果五位哲學家在完全相同的時刻進入餐廳,並同時拿起左邊的餐叉,那麼這些哲學家就會等待五分鐘,同時放下手中的餐叉,再等五分鐘,又同時拿起這些餐叉。)
  • [8]答案:程序員。因為迪傑斯特拉寫過一本書《謙卑的程序員》(The humble Programmer)。
  • [9]答案:學編程不應該從基礎(BASIC)開始。因為長者強烈反對教BASIC語言。
  • [10]歐港迪少:迪傑斯特拉出生於歐洲最大的港口城市——鹿特丹。
  • [11]棄物從程:長者博學多才,曾經考慮過學習法律,將來在聯合國代表荷蘭發言,也學過數學、物理、理論物理。後來他想成為一名受人尊敬的理論物理學家,但最終選擇了新興的計算機領域。
  • [12]荷蘭一碼:長者是荷蘭的第一位程序員。
  • [13]阿果六十:長者是第一個Algol 60編譯器的設計者和實現者。
  • [14]迪傑演算法:迪傑斯特拉演算法(Dijkstras Algorithm)是從一個頂點到其餘各頂點的最短路徑演算法,解決的是有向圖中最短路徑問題。迪傑斯特拉演算法主要特點是以起始點為中心向外層層擴展,直到擴展到終點為止。
  • [15]埃因霍溫:迪傑斯特拉是埃因霍溫大學的數學教授,在那裡他聚集了一群解決演算法問題的計算機科學家,這在一個大學的數學部是罕見的。
  • [16]PV操作:迪傑斯特拉教授創造了一個名為THE(荷蘭文 Technische Hogeschool Eindhoven的縮寫)的操作系統,其中的一系列方法和技術奠定了現代操作系統的基礎。其中就有解決互斥問題的信號量和PV操作。P表示通過的意思(荷蘭語passeren),V表示釋放的意思(荷蘭語verhogon)。
  • [17]分布演算法:長者是分散式計算理論的先驅。他開創了分散式計算系統容錯性的研究。
  • [18]謙卑長者:前面說過,長者寫過一本書《謙卑的程序員》(The humble Programmer)。
  • [19]萬寶龍文:萬寶龍是歐洲的一個高檔品牌。長者總是使用萬寶龍牌的筆寫論文、報告、手稿等,而不用計算機。這一奇怪的習慣反而使他更受尊敬。
  • [20]潛艇游泳:長者說過這樣一句幽默的話:「The question of whether Machines Can Think

    (…) is about as relevant as the question of whether Submarines Can Swim.」
  • [21]結構代碼:長者關於結構化編程的思想最終成為軟體工程中的基本概念。
  • [22]怒斥goto:迪傑斯特拉認為,很多高級語言中的跳轉語句goto是程序錯誤的一個重要來源,所以他站出來要求消滅goto。
  • [23]MIPS(Million Instructions Per Second):單字長定點指令平均執行速度。用來衡量計算機的計算速度。
  • [24]ACM(Association for Computing Machinery),國際計算機學會,是一個世界性的計算機從業專業組織,創立與1947年,目前在全世界130多個國家和地區擁有超過10萬名的會員。

【後記】

迪傑斯特拉為計算機科學的發展做出了這麼大的貢獻,卻很少有人知道他的名字。因此我腦洞大開,設置了這樣一個顛倒的世界,讓我們可敬的長者在裡面大受歡迎。


推薦閱讀:

CS224N Lecture2 筆記
[B0] Python基礎
2018最新國外EI源刊SCI期刊徵稿發表寫作經驗分享
烷烴同分異構體個數的計數方法
如何學習新技術?

TAG:計算機科學 | 編程 | 科幻 |