我們能夠從C語言的創造者身上學到什么東西?

fmms 13年前發布 | 10K 次閱讀 C語言

      我們能夠從C語言的創造者身上學到什么東西?
    UNIX 的奠基者之一、C語言的創建者,丹尼斯·里奇(Dennis Ritchie)上周去世了。盡管我感覺計算機科學和相關領域的許多人都了解里奇的重要性—一切與計算有關的東西,其成長和發展都跟里奇息息相關,但是我認為,回顧他的成就,把他高高放進 Lovelace圖靈以及最近去世的喬布斯(盡管這一說法會引起爭議,但起碼等到歷史有公論再說吧)早已入住的計算機科學先賢祠上會更有價值。

UNIX 是最早的多用戶操作系統之一,它使得科學家和研究人員得以分享計算機的時間,而這種設備在傳統上是以批處理的方式操作的。多用戶及多任務的概念之所以會引起研究人員極大的興趣,僅僅是因為批處理程序所需的編寫、運行以及收到輸出所需的時間。而在批處理模式下,計算機的時間是非常昂貴的,從這里的一則奇聞軼事中可見一斑:

1969年,在仔細考慮了操作系統的問題之后,湯普森(Ken·Thompson,Unix 創造者之一)利用閑暇時間開發出一個名為“太空旅行”的計算機游戲。該游戲模擬了太陽系行星的運動。玩家可以在行星之間漫游,享受其中的風景,甚至讓飛船登陸到行星和月球上。

起初的時候,這款游戲是在 Multics 上面寫出來的,然后再被編譯成了 Fortran 語言,在一臺加載 GECOS 操作系統的 GE 635 計算機上面跑。但是游戲的顯示很不穩定,也很難控制,因為玩家必須輸入命令來控制飛船。還有,在這臺龐大的 GE 635 機器上,其所占用的 CPU 時間需要花費掉75美元,這樣的成本是難以承受的。

玩一次游戲要花掉75美元,尤其是按照上世紀六十年代的貨幣水平,對于一名黑客來說,從中就幾乎找不到絲毫的樂趣了。里奇和湯普森于是一起開發出了 UNIX,讓它成為黑客的樂園,在那里可以對小程序進行測試并分享其結果。他是一位專業的物理學家和數學家,但卻在一個恰當的時間進入到了大型機和微型計算機的混沌初期世界里。上世紀六七十年代正是計算與世界的交互發生巨變之時。然而當時的普遍看法是“這些該死的計算機快要把我的電話賬單給搞砸了”,事實上,計算機破壞了當時的現狀。短短幾年的時間里,紙面記錄的地盤慢慢地被計算、電話交換機所侵蝕,從忙亂、蒸汽朋克的八爪章魚慢慢變成準機械式的由路由器和終端構成的系統。貝爾實驗室活躍在最前沿,承擔著用銅線連接世界的任務。最重要的是,他所做的事情是非常困難的,這種困難,在今天用拖拽和自動完成功能的 IDE 搞開發的我們已經遺忘了。

UNIX 的關鍵是共享概念。該操作系統始于1969年,是對貝爾實驗室關閉了湯姆森和里奇都非常喜歡的操作系統 Multics 做出的反應。在包括 MIT 在內的多個組織的配合下,新澤西貝爾實驗室的4人程序員組在一臺疏于管理的 PDP-7機器上開始了工作,他們在這臺機器上移植了太空旅行,然后為了保存游戲又建立了一個文件系統。慢慢地,圍繞著這一文件系統,一個對現代 Linux 熟悉的人都能夠理解的命令結構就增生成形了。UNIX 這個詞慢慢地就從一小撮原始用戶嘴里點點滴滴地透露了出來,1971年的時候,貝爾實驗室專利申請辦公室開始用它來排版文檔,以便用 nroff(將文本文件格式化為打印機所需要的格式的 UNIX 命令)來打印。

李納斯·托沃茲(Linus Torvalds,LINUX 創造者)是在1969年出生的,注意到這一點也很重要,這讓他成為從所謂的 UNIX 時代獲得好處的主要候選者。出生自一個新行業騷動喧囂的時代很重要,蓋茨、托沃茲,還有里奇都是極佳的證明。

里奇繼續做出了若干其他的改進,并在開發這款C寫成的操作系統時,為世界提供了首份多機器、交叉兼容的編碼標準,這份標準讓任何一個人,從白發蒼蒼的機器語言老手,到赫爾辛基的年輕學生,都能夠理解和使用。即便 AT&T拒絕提供給教育機構,但是此后 UNIX 源碼還是像圣經一樣從一位程序員之手傳到了另一位程序員之手。這份源碼是用C語言編寫的,為了節省時間和周期,更重要的是,為了里奇和湯普森在思想交流中孜孜不倦的教誨—保持優雅,其中的部分核心組件則是由機器語言完成。沒有一個人,甚至包括里奇本人在內,能夠理解那頭野獸的復雜性,最后它成為了 UNIX,設計如此。其目標是,簡單在前,復雜性在后,這是一個搞計算的人都能很好地效仿的模式。

實現清晰和優雅的美好理想,這種渴求也很重要。“在編碼技巧上,隨著更好或更多的基本觀念的出現,同輩的壓力和簡單的榮耀使得代碼塊被重寫或丟棄”,UNIX 團隊成員之一的 Doug McIlroy 寫道:“同業相爭和保護地盤幾乎是聞所未聞:出現了那么多的好東西,以至于沒有人需要對創新申請專利”。

問題是,在開發我們自己的產品時,我們能夠從這位計算機界的巨人身上學到些什么東西呢?首先,里奇和湯普森想要獲得樂趣。他們沒有要去賺錢的原生動力,實際上,他們的目標是省錢,或者起碼是把自己的游戲藏起來到一臺成本低一點的機器上。

其次是走出你的舒適區進行工作的必要性。里奇是一位物理學家和數學家。然而,他成為了一名程序員。盡管很顯然,正如 Bjarne Stroustrup(C++之父)所述,他的背景在做出 UNIX 和C的過程中給予了他極大的幫助,里奇并不懼怕在新的、不熟悉的領域中進行嘗試。“如果丹尼斯那十年決定把時間花在晦澀的數學上,Unix 也許就胎死腹中了”,他寫道。

第三是對于創新無為而治的重要性。里奇是幸運的,貝爾實驗室有錢也有人,讓他可以躲在朋友的陰影背后,根據自己的時間安排做自己想做的東西。Google 似乎已經學會了這一招,與此有異曲同工之妙,他們20%的項目是內部試驗項目,加上其實驗室產品,這些都會慢慢地演變成為主流工具。Google 創始人幾乎在該公司成立之初就允許這20%的存在,可謂是湯姆森和里奇方法論的見證。有工頭在監視住的時候,大家做的都是些中庸的東西,等工頭離開之后,大家就用自己的設備做出杰作來。

最后,分享也很重要。一些小型的初創企業把自己的產品嚴嚴實實地藏在 NDA(禁止披露協議)之后,或者,有一些創業家對網絡錯誤地過分熱情,每每看到這些都會讓我忍俊不禁。出現這種情況,很顯然說明他們的想法不夠新穎,也不會特別成功,其態度也不會有利于成長。我要說的是,許多最近成功的創業家并不成功,因為他們說得天花亂墜,因為他們只會玩一種花樣。

可以說,當今世界上最重要的軟件項目 Linux 之所以重要,是因為其極佳的廣泛性和開放性。有一些人說開放不是利潤的同義詞,不過這些人往好處說屬于悲觀主義者,往壞處說簡直就是蠢蛋。

最后,里奇教育我們,計算機界并不是一個秘密社團,需要長年服務和特別的咒語才能夠加入。他對知識的慷慨解囊顯而易見,在我們網上做的所有事情上都有體現,盡管他的害羞是出了名的,而他卻仍然充當一名講解員,給我們留下了海量的注釋和在線說明。盡管我們當中沒有人能夠取得他和 Bell/AT&T團隊那樣的成就,尤其是考慮到他們當時的環境,所處的相對是信息時代起源的時間背景,現在取得不了那樣的成就也沒關系。畢竟,正如我們這些年來從 UNIX 源碼所學到的東西那樣:

*你不需要去理解它。

只需在它上面做就行了。
     
       來自: www.36kr.com

Via:TC

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!