在各種程式語言當中,C語言因其簡潔、有效、通用的特性而始終佔據一席之地。自 C語言出現後,以 C語言為根基的 C++、Java 和 C# 等面嚮物件語言相繼誕生,並在各自領域大獲成功。
直到今天,C語言依舊在系統程式設計、嵌入式程式設計等領域佔據著統治地位。
瞭解過去,我們才能知其然,更知其所以然。今天我們就來分享 C語言的發明者,“C語言之父” —— 丹尼斯·裡奇,這位傳奇人物的奇聞軼事。
除了是 C語言的創造者、也是 UNIX作業系統的關鍵開發者,他在 1983年獲得圖靈獎,因為他為黑客圈做的“貢獻”,黑客圈子通常稱他為「dmr」。
“假如有一個能夠把計算機放大的顯微鏡,你會看到裡面到處都是他的貢獻。”
裡奇的成長史
丹尼斯·裡奇生於美國紐約州布隆克維。他的父親是《開關電路設計》作者之一、貝爾實驗室的資深科學家阿利斯泰爾·裡奇。
1954年,13歲的裡奇跟著他的父親,電氣工程師阿利斯泰爾•裡奇舉家從紐約州的布朗克斯維爾,搬到幾十公里外的新澤西。目的是離他父親的工作單位“貝爾實驗室”更近一些。
可能是受到父親的影像,裡奇的理科成績一直很優異,高中畢業後進入哈佛大學學習應用數學和物理學。1967年,在父親的介紹下,26歲的丹尼斯·裡奇進入貝爾實驗室,從事當時非常前沿的一項工作 —— 計算機研究。
加入貝爾實驗室的第二年,裡奇在電腦科學家帕特里克·C·費希爾的指導下發表了博士論文《程式結構與計算複雜性》,但不知道為什麼,裡奇始終沒有正式獲得博士學位...
丹尼斯·裡奇為人所知,主要是因為他創造了C語言,作為關鍵開發者參與了Unix作業系統的開發。但在此外,裡奇還參與了貝爾實驗室九號專案、Inferno作業系統以及Limbo語言的開發,而這些專案也都是基於他以前的成果進一步開發的。
貝爾實驗室在20世紀90年代中期重組時,他轉到了朗訊科技。在朗訊,他曾領導系統軟體研究部門,直到2007年退休為止。
退休之後,有人問裡奇是什麼啟發他如此設計 C 語言時,裡奇回答說“看來是件值得做的事”("looked like a good thing to do")。
他說任何人在同一地方、同一時間也會像他那樣做的。但是許多人認為這只是裡奇的謙言,例如裡奇在貝爾實驗室的同事、C++的創造者和設計師比雅尼·斯特勞斯特魯普曾說:“假如裡奇決定在那十年裡將他的精力花費在稀奇古怪的數學上,那麼Unix將胎死腹中”。
在裡奇去世之後,計算機歷史學家保羅·茨露吉評價說:“裡奇的名字並不容易讓人察覺,也不為人熟知,但是……假如有一個能夠把計算機放大的顯微鏡,你會看到裡面到處都是他的貢獻。”
開發 UNIX,只為了打遊戲?
上世紀六十年代時,大部份計算機都是採用批處理的方式(也就是說,當作業積累一定數量的時候,計算機才會進行處理)。為了解決這個問題,美國電話及電報公司(AT&T)、通用電器公司(GE)及麻省理工學院(MIT)計劃合作開發一個多用途、分時及多使用者的作業系統,命名為 MULTICS,這也是裡奇在加入貝爾實驗室後,參與的第一個專案。
不過,這個專案由於太過複雜,整個目標過於龐大,進展速度非常慢,幾年下來都沒有任何成果,而且效能都很低。於是在1969年的2月,貝爾實驗室決定退出這個專案。
可能是對工作中第一個專案的執念,裡奇一直對此耿耿於懷,試圖解決這一難題。
貝爾實驗室中的有個叫 Ken Thompson 的人,他曾經為 MULTICS 這個作業系統寫了個叫「Space Travel」的遊戲,在 MULTICS 上經過實際執行後,他發現遊戲速度很慢而且耗費昂貴 —— 每次執行會花費75美元。在貝爾實驗室退出這個專案以後。他為了讓這個遊戲能玩,所以找來 Dennis Ritchie 為這個遊戲開發一個極其簡單的作業系統。
當時 Ken 的老婆正好回孃家度假,就把裡奇拉到了家裡,兩個好基友夜以繼日的搞,工作之外的時間基本都搞在一起,終於在 1969年的聖誕節搞出來了一個作業系統,也就是我們熟悉的 UNIX。
值得一提的是,當時他們本想在 DEC-10 上寫,後來沒有申請到,只好在實驗室的牆角邊找了一臺被人遺棄的 Digital PDP-7 的迷你計算機進行他們的計劃,這臺計算機上連個作業系統都沒有,於是他們用匯編語言僅一個月的時間就開發了一個作業系統的原型,他們的同事 Brian Kernighan 非常不喜歡這個系統,嘲笑他們說:“你寫的系統好真差勁,乾脆叫Unics算了。”Unics 的名字是他們對 MULTICS 的一種戲稱,也是根據這個名字,裡奇最後把系統的名字定為了 Unix。
於是,Unix 就在這樣被遊戲和玩笑創造了,當時是1969年8月。巧合的是,也就是這一年,Linux 之父 Linus Torvalds 在芬蘭出生了。
之前 Multics 作業系統研發中的失敗經驗後,裡奇將UNIX的設計原則定為Keep it simple & stupid(大道至簡)。
UNIX 的特點:
- Everything (including hardware) is a file
- Configuration data stored in text
- Small, single-purpose program
- Avoid captive user interfaces
- Ability to chain program together to perform complex tasks
- 所有的事物(甚至硬體本身)都是一個的檔案。
- 以文字形式儲存配置資料。
- 程式儘量朝向小而單一的目標設計
- 儘量避免令人困惑的使用者介面
- 將幾個程式連結起來,處理大而複雜的工作。
UNIX 的出現一改 Multics 作業系統的大型程式的複雜性,每個單一執行目的的小程式都是簡潔高效,開發時間短,穩定性卻更好。
UNIX 由許多小程式構成,每個小程式只能完成一個功能,任何複雜的操作都必須分解成一些基本步驟,再由小程式逐一完成。雖然看起來很低效,實際上這些小程式可以像七巧板一樣自由組合,輕易就能完成意想不到的大任務。
後來,在此基礎上又衍生了好幾代的 UNIX 系統,直至目前的 Mac OS 和 Linux。
由於 UNIX 諸多優點,人們將它稱為軟體中的瑞士軍刀。
順手發明 C語言
作為一門偉大的程式語言,C 語言是藉助 UNIX作業系統的翅膀而起飛的,UNIX 作業系統也由於 C 語言的存在而得以快速落地生根,兩者相輔相成,成就了軟體史上最精彩的一幕。而這一幕,離不開丹尼斯·裡奇的一手操辦。
最初的 UNIX 系統就是用匯編語言編寫的,而當時的一些應用是由叫做 B語言的解釋型語言和組合語言混合編寫的,在移植的過程中遇到不少麻煩。一開始他們想嘗試用 Fortran(福傳,源自於“公式翻譯”的縮寫,是世界上第一個被正式採用並流傳至今的高階程式語言。),可是失敗了。後來他們用一個叫 BCPL(Basic Combined Programming Language)的語言開發,他們整合了 BCPL 形成 B 語言,後來裡奇覺得 B 語言還是不能滿足要求,在 UNIX 的移植方面依然不盡人意,此後又對 B語言做了改進,C語言這才正式誕生。
C 語言也貫徹了 UNIX 大道至簡的原則,語法簡潔,結構清晰。為此裡奇還自己寫了本教材《C程式語言》,只有100頁....
公眾號後臺回覆:C,即可檢視PDF版程式設計手冊
他還是黑客之父...
由於 C語言和 Unix系統 兩項成就,裡奇成為許多程式設計愛好者膜拜的物件。裡奇在1978年出版的《C程式設計語言》被程式設計師們稱為「白皮書」,獲得狂熱擁戴。
然而,由於 C語言的簡潔和高效,也成為入侵他人電腦的利器之一。裡奇因此被諸多電腦黑客尊為導師,雖然裡奇本人並不認可這一說法。
這裡還有一個小故事。
在 Unix 研發成功後不久,安裝了這一程式的 PDP-11 被放在貝爾實驗室供大家使用。有一天,大家發現兩位創始人總是可以得到最高的許可權輕鬆進入他們的帳戶,在貝爾實驗室這種高人云集的地方,這簡直是太不能容忍的事情了。
於是,若干憤懣的同事仔細分析 Unix程式碼,找到後門,修改後再重新編譯整個 Unix程式。當所有人都以為這個世界應該從此清靜了的時候,卻發現他們的帳戶許可權還是很容易洩露。
直到很多年後,肯和裡奇才道出其中的原委,原來程式碼裡確實存在後門,不過並不在Unix程式碼中,而是藏在編譯Unix的編譯器裡。
知乎上有個問題“真正的黑客是什麼樣的?”,我認為在裡奇面前,其他的黑客全都是弟弟,真正的黑客,是搞底層入侵,讓你從根兒上防無可防...
傳奇謝幕
那個年代社交網路還很不發達,再加上裡奇一直沒有結婚,日常的生活也比較宅,所以從他在退休之後就一直沒有太多的資料可考。就連他的準確去世時間,我們都不得而知。
維基百科上的說法是:2011年10月12日,裡奇於新澤西州伯克利·海茨鎮的家中去世,享年70歲。去世的訊息由他之前的同事羅勃·派克提供,但未指明具體的去世時間和原因。
不知道傳奇人物的一生是不是充滿了巧合。賈伯斯老爺子的去世日期是2011年10月5日,兩人相差不超一個星期。但人們對裡奇的思念,遠不及對賈伯斯的鋪天蓋地。
原因不難理解:喬老爺子的影響力我們大部分人都能瞭解到,但大眾對於裡奇作出的貢獻知之甚少。
也許你看到這,會感到一絲傷感,有人因此說他是史上最慘的圖靈獎得主。但其實不必,他也許就覺得這樣挺好。有些人天生不喜歡給周圍的人添麻煩,他們充實的活在自己的世界。
在裡奇去世後的每年,計算機愛好者們都會以特有的方式紀念這位程式語言的重要奠基人。許多網友的發帖中沒有片言隻字,僅僅留下一個分號“;”。
在C 語言中,英文分號標誌著一行指令語句的結束,網友們以此來悼念“C語言之父”,美國著名計算機專家丹尼斯·裡奇(Dennis Ritchie)所引領的時代悄然遠去。
-END-
掃描下方二維碼,關注社群官方公眾號,後臺回覆關鍵字「C」,檢視PDF版《C程式語言手冊》
部分內容素材來源於網路,如:Wikipedia詞條:Dennis Ritchie
C語言網:《記:丹尼斯·裡奇(Dennis Ritchie)》
Techorange:《改變世界的男人- C 語言之父 Dennis Ritchie 逝世;沒有他,就沒有 Linux、BSD、Mac OS》
知乎:《丹尼斯里奇是什麼人?》
差評:《沒他,還玩個鳥手機,上個鳥網,而絕大多數人並不知道他...》
書生劍客:《肯·湯普森、丹尼斯·裡奇與UNIX、C語言》