官术网_书友最值得收藏!

沉默的巨人:丹尼斯·里奇

2011年10月5日,蘋果前CEO史蒂夫·喬布斯去世。

萬家媒體競相報道,政治、經濟、科技、體育、娛樂等各界大佬紛紛發文悼念,無數粉絲走上街頭,他們在小紙條上寫上對喬布斯的感謝,貼在離自己最近的蘋果官方零售店玻璃墻上,用自己的方式送別這位天才。

如今快十年過去了,仍有大批媒體在每年的10月發文緬懷喬布斯。

其實與喬布斯同年同月去世的,還有另外一個大佬。當年他的去世無論是大眾還是媒體都鮮有人關心,近十年里提起他的更是屈指可數。

但,這位大佬在計算機操作系統和互聯網領域的成就是喬布斯開創蘋果帝國的起點,可以說,他正是用肩膀支撐起喬布斯眺望遠方的那位巨人。

為什么這么說呢?

因為如果沒有喬布斯的話,大家的蘋果手機現在可能只是更丑更難用一點,但是如果沒有這個人的話,喬布斯根本就不可能去做個人電腦和智能手機。

這位計算機大佬就是丹尼斯·里奇(Dennis Ritchie)。

丹尼斯·里奇1941年出生于紐約的布朗克斯維爾,他的父親阿利斯泰爾·里奇是大名鼎鼎的貝爾實驗室的研究員,專職研究電路板。

里奇在上學期間就是個成績優異的小天才,高中畢業后順利進入哈佛,最終以物理和數學雙學位快樂畢業。在哈佛的時候,里奇去聽了一場關于計算機操作系統的講座,本來就對電子系統非常感興趣的他,被當年還只見于高端科研實驗室和軍事基地的“操作系統”這個新奇的概念一發入魂。

R.I.P.(愿逝者永享安寧)

按照里奇的貢獻,他本可以名揚四海,家財萬貫,但他放棄了這些,甘愿在一家公司當個掃地僧。

操作系統就是一種給用戶提供交互界面、管理計算機硬件和軟件資源、控制輸入和輸出的程序。翻譯成人話就是,它把人的指令傳遞給各個電子元件,安排和指揮它們通力合作來實現有意義的結果反饋。

打個比方,你在玩槍戰游戲時看到地上有一把槍,你按下E鍵,這個E的信號就從鍵盤傳到操作系統,然后操作系統再通知游戲引擎E鍵被按下了,游戲引擎判定玩家要撿起槍了,再反過來經過操作系統通知CPU和GPU(圖形處理器),一個負責把撿槍這件事“算”出來,一個負責把撿槍的動作“畫”出來,最后再由操作系統把動畫展現在顯示器上。

你最終在屏幕上看到的畫面很簡單,就是玩家把槍撿了起來,而在這背后負責指揮各個部件之間交流的程序就是操作系統。

當時里奇覺得這種像軍師一樣接收用戶命令,指點電子江山的操作系統實在是太新奇了,比手動撥計算機上幾百個開關來控制各種電子元件不知道要高明到哪里去了。

由于哈佛大學當時并沒有完善的計算機科學專業,里奇決定馬上出門右轉,去街對面的麻省理工學院(MIT)找了個工作,開始研究計算機系統和軟件。

為了自己的夢想,作為哈佛學子的里奇來到麻省理工發光發熱。

.因為里奇在MIT工作的時候和貝爾實驗室有點接觸,再加上老爸也在那做事,他就在1967年順理成章地進入了貝爾實驗室。

貝爾實驗室那時在緊鑼密鼓地研發一款劃時代的操作系統,這對里奇來說簡直正中下懷。

現在大家用電腦的時候,多任務切換已經是稀松平常的事情了,前面做著Excel表格,后臺Alt+Tab一切就是掛機游戲,工作游戲兩不誤。

不過如果你用著當年的電腦的話,就別想后臺掛機了:用戶一旦啟動一個軟件,輸入一批數據,這臺機子這一段時間就只能處理這一件事情。比如第一款做商業和行政用途的計算機UNIVAC 1,就被美國人口普查局所采購,專門用來統計人口。

對于當年的計算機來說,時間就是金錢,讓機器滿負荷跑出來的數據對于研究所和大公司來說都是白花花的真金白銀,更不要說消耗的人力和電力了。

有效利用CPU的計算時間就是在印鈔票!

所以,能夠做多任務處理的計算機呼之欲出。

世界上第一款商用計算機UNIVAC 1。曾經在CBS(美國哥倫比亞廣播公司)電視臺上直播預測過1952年的美國大選,計算出的結果和當時的主流預測大相徑庭,但最后大選結果卻和UNIVAC 1算出的預測一致。

第一臺能夠多任務同時進行的電腦,叫做分時系統(time-sharing)計算機,可以讓不同的程序在同一時間處理各自的任務,來滿足多個用戶同時使用自己的程序的目的,能更高效地利用CPU的計算時間。

于是通用電氣(General Electric)找到了貝爾實驗室和麻省理工學院,打算在自家的GE 645電腦上開發一個名為Multics(多路復用信息與計算服務)的交互式操作系統,來達到多用戶同時處理多任務的目的。

雖說是交互式系統,但當時人和電腦的互動并不像現在大家點點鼠標甚至是戳一下屏幕,操作就完成了,因為鼠標那時根本就沒有!如果回到1960年,交互是非常簡單粗暴的:你對電腦輸入一串命令行,它能對你的指令做出即時的反應,人們要背下來很多指令才能操作電腦。

剛進入貝爾實驗室的里奇在麻省理工學院的時候就聽說過這個Multics系統,加上自己感興趣,他二話不說就參加了研發。過程中,他碰到了自己的好友,也是一生中最重要的研究伙伴——肯尼斯·湯普森(Kenneth Lane Thompson)。

這兩位老哥不僅一頭栽進系統的開發,而且還充分地利用了Multics的交互特性,抽空給Multics系統適配了一個叫做《宇宙航行》(Space Travel)的小游戲。這個游戲的操作方式現在看來非常原始——你要在命令行里手動輸入操作指令來指揮飛船飛行。

想象一下你玩槍戰游戲的時候前進不是按鍵盤上的W鍵,而是調出聊天框,在里面輸入“人物向前移動距離:5米;移動速度:1米每秒”。聽起來很復雜,但在當時都算是高級貨色了。

不過由于貝爾實驗室和通用電氣對Multics這個系統的期望過大,導致整個系統過度研發,變得非常復雜和臃腫,使用起來要消耗大量的人力物力,比如玩一把上面的《宇宙航行》小游戲,竟然要花費掉相當于50—75美元的CPU計算時間。

眼看團隊花幾年做出了個事倍功半的東西,通用電氣很失望,在1969年一刀砍掉了Multics這個項目。

項目被砍,被沒收游戲和機子的里奇與肯尼斯手癢得不行,于是兩個人商量好,打算私底下繼續研究這種交互式系統,順便把之前玩的游戲搬運過去。

他們決定把這個系統命名為Unics,后來演化為Unix,告誡自己吸收Multics失敗的教訓(作為英語前綴的uni是“單”的意思,multi是“多”的意思),刪繁就簡,積少成多。

由于Multics的失敗,貝爾實驗室不肯給里奇和肯尼斯買新設備,他們就不得不使用之前留下來的老設備老硬件來開發Unix,也就是PDP-7,這也促使他們把目光聚焦在了迷你計算機上。

——確實迷你,大概也就半噸重吧。

不過,雖然硬件很爛,這兩位同學開發的情緒卻異常高漲,而且PDP-7更低的內存和更差的處理性能反而鞭策他們把Unix做得更簡潔,效率更高。經過了大半年業余時間的爆肝,里奇和肯尼斯終于在1969年的圣誕節把Unix系統的最初版做出來了。

然而當他們來找貝爾實驗室要更好的設備去測試Unix的時候,辦公室里的其他老哥們依然不信他們能寫出一個完整的操作系統來:“我們整個團隊花了5年的時間都沒能寫出令人滿意的Multics系統,你們短短一年能做出啥?”

這咋辦?

Multics的logo(標識)

PDP-7迷你計算機。這個塊頭放在今天怎么看都不算迷你,但是比起動輒占滿一整個房間的大型計算機,PDP-7就像過家家的玩具一樣。

里奇和肯尼斯巧立名目連蒙帶拐地提出:貝爾實驗室當時正好缺文字處理軟件,他們可以把Unix包裝成一個“辦公室自動化系統”,大概就是一套Office軟件,可以拿來做文字處理。一頓操作下來,終于說服貝爾實驗室買了臺當時最先進的PDP-11。他倆將整個系統遷移了過去,然后暗中傳播給辦公室里的其他同事用。

結果大家紛紛表示真香,而Unix這套系統也在貝爾實驗室里慢慢流傳開了。

但是里奇覺得這套初版的Unix還不是他心目中完美的操作系統。其中最大的原因是Unix系統的運行效率有點低,而這個效率取決于編寫系統的語言。

這里,我們就要稍微解釋一下編程語言和計算機的關系了。

由于計算機是各種電路板的組合,只能理解0和1,沒辦法直接理解人話,所以人就要用機器語言0和1來和機器交流。但是一個程序動不動就是幾百萬字節,也就是上千萬個0和1,人手動打這么多個0和1怕是要打到天荒地老。于是為了寫程序方便,我們就需要編程語言,比如想要實現雙擊打開Word的功能,我們寫程序的時候寫成“當用戶雙擊鼠標時,打開Word文檔”就好了,這樣不需要敲幾千個0和1。雖然這行字是用編程語言寫的,但到0和1的機器語言還需要層層翻譯,這就需要編譯器,相當于機器和人類的翻譯官。

但是每個人或者組織編程的時候用的人話又不太一樣,比如還是“雙擊運行Word”這段程序,有些人可能更喜歡說“當用戶點兩下鼠標時,運行Word文檔”,同樣,編程語言也有多種,比如C語言、Java、Python等等。這些語言就和標準普通話一樣,都有自己的語法、編寫標準和對應的編譯方法與編譯器。

而里奇感到不滿意的初版的Unix是基于Basic語言的,屬于解釋語言,每次運行的時候,編譯器都要先把人話解釋成機器語言再運行,每運行一次就重新解釋一次,做了許多無用功,效率比較低。

與之相對,如果是編譯語言的話,編寫好程序以后點擊編譯,編譯器就會把整個程序都翻譯成機器語言打包保存下來,之后每次運行直接用機器語言運行就OK了。所以在系統運算資源匱乏的60、70年代,編譯好的系統能大大提升運行的效率。

碰巧之前在開發Multics的時候里奇就設計過好幾個不同的編譯器,于是他就改良了Basic語言,添加了數據類型和數據結構,將其演化成了C語言,順便還給C語言加了個編譯器,每次寫好程序,編譯器就直接把程序翻譯成0和1再保存下來,讓C語言成為編譯語言,大大簡化了用C語言編寫軟件的難度和流程,也大大提升了Unix系統的運行性能。

而C語言也隨著Unix系統的推廣迅速成為當年全世界程序員最愛的語言,沒有之一。

這里補充一個高級語言和低級語言的概念。這里的高級和低級是指在計算機高低層運行的意思。越低級的語言越靠近計算機底層的0和1的邏輯,雖然寫起來會比較繁瑣,但是能直接指揮計算機,運行效率比較高;而越高級的語言就越靠近人類的思維,比如“人物向前移動距離:5米”這種指令,需要層層翻譯才能到達計算機能理解的程度,運行效率會變低,但是寫起來卻特別容易,比如現在大量編程培訓機構主推的Python就是典型的高級語言,因為它和人話更像,比較容易上手。而C語言這么受歡迎是因為它不僅有高級語言的語法,寫起來比較容易,還有著低級語言的運行效率,能直接進行系統比較底層的操作,貫徹了大道至簡的原則,語法簡單,結構清晰。

里奇和布萊恩合著的《C程序設計語言》。這本書到現在還被非常多的程序員和編程愛好者買來放在家中裝飾鎮宅用。

里奇還和他的同事布萊恩一起寫了本《C程序設計語言》的教材,就是左面這本。前前后后加起來只有100多頁,和C語言本身一樣清晰明朗。

1973年,用C語言整個重新編寫過的Unix操作系統正式向大眾發布第五版,從此以后Unix系統的熱度就一發不可收,后來的大學研究院、大公司和開發者都紛紛采用了Unix系統的標準來編寫程序,所以市面上大部分軟件也能在Unix上直接運行。比如iPhone的操作系統iOS,蘋果一系列產品,比如Mac電腦、蘋果手表AppleWatch等,用的操作系統也都是基于Unix開發的。

你可能會說“我不用蘋果產品啊”,那么很遺憾地通知你,不用iPhone的朋友們手上的安卓系統是基于Linux開發的,而Linux則被稱為“類Unix系統”,因為本質上Linux是照搬參考了Unix系統以及其各種變體創作出來的。

換句話說,世界上除了Windows(基于DOS系統)以外,其他所有現存的操作系統要么是直接基于Unix,要么多多少少參考了Unix的結構。沒錯,就連深受米粉喜歡的MIUI也算是Unix的遠房親戚。

快來跟差評君一起喊:

萬物基于Unix!

Unix和類Unix系統的演變

而C語言的重要性更是不言而喻,除了上面列的一大堆操作系統都是用C語言寫的以外,毫不夸張地說,現在我們網上沖浪用的幾乎所有瀏覽器和網絡服務器都是用C語言寫的。

那么里奇這么牛的科技大佬為什么很少有人耳聞呢?

究其原因還是里奇本身就是個非常低調的老哥,和他一起寫C語言教程的同事布萊恩·柯林漢和另一位同事羅伯特·派克描述他說:“我和他在同一個走廊里工作了二十年,然而我還是覺得自己不太認識他。”

一般人要是有這么個轟動世界的科技發明,說不定早就開始躺著賺錢了,而里奇卻明確表示自己并不想通過Unix變富翁,只想老老實實待在貝爾實驗室,好好聚焦在自己的研究上,繼續從事Unix相關的工作。連里奇最后成為貝爾實驗室軟件系統部門的老大,都是經過百般推脫,實在沒有辦法了才上任的。

里奇在2007年正式退休,不過還是每天都去貝爾實驗室工作,直到他因為前列腺癌和心臟疾病去世。

大家現在每天用這么多的電子產品,可能很少會去思考它們背后運行的原理,更少會去想它們背后是哪些科學家智慧的結晶。但是如果有那么一套神奇的顯微鏡,往各位的手機、電腦上一照,就能看到背后所凝結的各位科學家一點一滴的心血,那么我相信大家一定能看到丹尼斯·里奇做出的不可磨滅的貢獻。

前人栽樹,后人乘涼。

而丹尼斯·里奇就是計算機和互聯網行業不為人知的參天大樹。

主站蜘蛛池模板: 万宁市| 潼关县| 长子县| 阿瓦提县| 正宁县| 盘锦市| 孟村| 澄城县| 屯昌县| 古丈县| 建水县| 政和县| 铅山县| 夹江县| 泉州市| 镇宁| 托里县| 卢龙县| 阳城县| 兴文县| 拉孜县| 叶城县| 诏安县| 改则县| 琼结县| 武陟县| 彰化县| 睢宁县| 汝州市| 项城市| 田东县| 都江堰市| 曲麻莱县| 贵南县| 怀安县| 长海县| 集贤县| 瓦房店市| 曲沃县| 开江县| 弥勒县|