- UNIX傳奇:歷史與回憶
- (美)布萊恩·W.克尼漢
- 2205字
- 2021-06-15 16:25:25
1.3 結緣貝爾實驗室
本節寫到好些我的個人經歷,希望能告訴你是什么樣的好運氣讓我選擇電子計算作為職業,將我帶入貝爾實驗室這個舉世無雙的地方從事相關工作。
我出生于多倫多,曾就讀于多倫多大學,專業是工程物理(后來改名為工程科學),這是為那些自己也不知道想學什么的人準備的“大雜燴”專業。我畢業于1964年,那時電子計算正處于早期階段:我大三時才第一次見到計算機。整個學校只有一臺IBM 7094大型計算機,算是當時最高端的設備。它擁有32K(32 768)個36位字長的磁芯存儲器(如今我們會說是128 KB),還有大機械硬盤形態的次級存儲。當時它價值足足300萬美元,安放在空調機房中,由專業操作員照料,普通人(尤其是學生)不允許靠近。
所以,盡管我努力學習Fortran語言,但身為本科生,也只能淺嘗輒止。對于那些曾經掙扎著寫出自己第一段程序的人,我感同身受。我精讀了丹尼爾·麥克拉肯(Daniel McCracken)的Fortran II大作[2],學會了各種編程規則,但還是不懂怎樣寫出第一段程序。動手能力跟不上理論知識,這該是很多人都會遇到的障礙吧。
在大學生活第一年結束前的那個夏天,我在多倫多帝國石油(Imperial Oil)公司找到一份工作,加入為精煉廠開發優化軟件的小組。新澤西標準石油(Standard Oil of New Jersey)公司是帝國石油公司的股東,標準石油于1972年更名為埃克森(Exxon)。
回想起來,我在實習時的表現遠低于平均水平。我花了整個夏天的時間編寫一套體量龐大的COBOL程序,用來分析精煉數據。我不記得其具體功能,但它肯定沒能正常工作。我其實并不清楚如何編程。COBOL缺乏對良好程序組織方式的支持,結構化編程也還未被發明出來。我的代碼充斥著沒完沒了的IF語句,在我想到要做什么事時,將執行流程分支到另外某處。
我還嘗試讓Fortran程序在帝國石油的IBM 7010上運行,因為相對于COBOL而言,我對Fortran懂得多一點兒,而且Fortran大概更適合用來做數據分析。在與JCL(IBM的作業控制語言)搏斗了幾周之后,我才發現7010上根本沒有Fortran編譯器。JCL錯誤信息如此晦澀難懂,以至于以前根本沒人搞清楚過這個問題。
度過略有挫敗感的暑假之后,我回到學校繼續完成學業。我對編程的興趣依然強烈。學校沒正式開設計算機科學課程,但我高年級時的論文都與人工智能有關。人工智能在當時是熱門主題。定理證明器、下國際象棋和跳棋的程序、自然語言的機器翻譯似乎觸手可及,看似只需要一點點程序設計就可以實現。
1964年畢業后,我不知何去何從,所以就像很多其他學生一樣,打算直接讀研究生。我申請了十來所美國大學(那時加拿大人不怎么申請美國學校),并有幸被其中幾所錄取,其中就有麻省理工學院和普林斯頓大學。普林斯頓大學說,完成博士學業通常需要3年時間,麻省理工學院說大概需要7年;普林斯頓大學提供全額獎學金,麻省理工學院說我得每周做30小時的研究助理工作——結論顯而易見。而且,我的好友,高我一屆的多倫多校友阿爾·阿霍,已就讀于普林斯頓大學,于是我就去了普林斯頓大學。事實證明,這是一個超級幸運的選擇。
1966年,好運再度降臨。因為普林斯頓大學研究生李·瓦里安(Lee Varian)上一年在麻省理工學院干得不錯,所以我得到了暑期去麻省理工學院實習的機會。我在那兒使用兼容分時系統(Compatible Time-Sharing System,CTSS)和密歇根算法譯碼器(Michigan Algorithm Decoder,MAD,ALGOL 58語言的分支)編寫程序,為一種叫作Multics的新操作系統打造工具。我會在第2章中詳談Multics。(Multics本來拼作MULTICS,但小寫字母版本看起來更順眼,其他全大寫字母單詞我也都會寫成比較順眼的形式,如將UNIX寫成Unix,哪怕這樣寫不符合史實。)
我在麻省理工學院名義上的老板是費爾南多·科巴托(Fernando Corbató)教授,人人都叫他“科爾比(Corby)”。他創建了CTSS,負責Multics,是一位了不起的紳士。1990年,科爾比因其為分時系統做的基礎工作獲得圖靈獎。他于2019年去世,享年93歲。
除了帶領團隊設計、實現CTSS和Multics,科爾比還是輸入密碼訪問計算機的發明人。批量計算很少用到這種方式,但運行共享文件系統的分時計算機的確需要某種安全機制來保護私有文件。
1966年夏天我在麻省理工學院時,系統自動為我生成了兩個可拼讀的短密碼,我至今仍然想得起來。使用兩個密碼確有必要。夏日的某天,有人搞混了存儲密碼的文件和保存當日歡迎登錄消息的文件。密碼都是明文存儲的,結果一登錄系統就會看到所有人的密碼。
我的辦公室屬于約瑟夫·魏岑鮑姆(Joseph Weizenbaum)教授,那個暑假他不在學校,記得辦公室里也沒有其他人。早在1966年,魏岑鮑姆就發表了對Eliza的描述。Eliza是模擬與羅杰斯學派心理學家對話的程序[3],也是使用自然語言與計算機互動的早期嘗試之一。它令人驚奇地有效,起碼在我第一次看到時特別有效。我也樂意帶領訪客去看它。如今有許多模擬Eliza的網頁程序,雖然這些程序很快就會“原形畢露”,但和它們聊幾分鐘還是很有意思的。
ELIZA: Please tell me what’s been bothering you.
YOU: I’m trying to write a book about Unix.
ELIZA: Is it because you are trying to write a book about unix that you came to me?
YOU: Yes.
ELIZA: You are sure.
YOU: Yes.
ELIZA: You seem to be quite positive.
YOU: Yes.
ELIZA: I see.
1967年夏天,終極好運從天而降:墨里山的貝爾實驗室計算科學研究中心讓我去實習,老板是道格·麥基爾羅伊(圖1-4)。道格建議我研究內存分配評估問題,這也是他長期關注的方向。遵循最佳實習傳統,我最終做出了與老板要求風馬牛不相及的東西。我寫了一套函數庫,以方便在Fortran程序中做列表處理。整個夏天我都在墨里山的大型計算機GE 635上編寫嚴密的匯編語言。GE 635實際上是重整過后更有條理的IBM 7094,同時也是Multics專用機GE 645的簡化版。那差不多是我最后一次寫匯編語言。盡管我所做的事從根上就走錯了方向,但代碼寫得十分過癮,讓我與編程結下了不解之緣。

圖1-4 道格?麥基爾羅伊,約1981年
(杰勒德?霍爾茲曼供圖)
- 30天自制操作系統
- 操作系統實用教程(Linux版)
- Windows Server 2012 Hyper-V:Deploying the Hyper-V Enterprise Server Virtualization Platform
- 從零開始寫Linux內核:一書學透核心原理與實現
- Instant Handlebars.js
- Linux性能優化
- 開源安全運維平臺OSSIM疑難解析:入門篇
- 計算機系統開發與優化實戰
- Python基礎教程(第3版)
- 8051軟核處理器設計實戰
- INSTANT Galleria Howto
- Building Telephony Systems With Asterisk
- HTML5 Enterprise Application Development
- CSS揭秘
- 鴻蒙HarmonyOS應用開發入門