首頁>科技>

每個人桌面上一臺電腦,這曾經是無數計算機先驅的夢想,這個夢想很早就實現了,在1997 年,喬老師和比老師就說過:“比爾,我們共同控制了100% 的桌面系統市場。”當然喬老師沒說的是,比老師控制了97%,喬老師還不到3%。時至今日,喬老師走了,比老師頹了,移動終端把傳統的 PC 市場衝擊得七零八落。普通使用者都知道了Windows、Android、OS X 、iOS、BlackBerry 等,但是,他們依然不了解的是另一款在計算機發展史上起到了革命性作用的作業系統:Linux !

當大家使用 Google 搜尋時,使用 Kindle 閱讀時,使用淘寶購物時,使用 QQ 聊天時,很多人並不知道,支撐這些軟體和服務的,是後臺成千上萬臺 Linux 伺服器,它們時時刻刻都在進行著忙碌的運算和資料處理,確保資料資訊在人、軟體和硬體之間安全地流淌。可以這麼說,世界上大部分軟體和服務都執行在 Linux 作業系統之上,什麼雲端計算、大資料、移動網際網路,說起來風起雲湧,其實沒有 Linux 全得趴窩(微軟除外)。

但是,Linux 和它的締造者林納斯·託瓦茲一樣低調,這麼牛逼的一個物件,居然只有程式設計師知道它的傳奇,這不科學!所以我準備在這個系列中寫寫林納斯:他是Linux 和 Git 的締造者,他是一個傳統的黑客,與沃茲一樣,少年成名,崇尚自由,一生只為尋找歡笑,他,是一名真正的程式設計師。

林納斯在2001 年出過一本自傳,叫做Just for Fun,是他和大衛·戴蒙合著的,當年我有幸讀到這本書,了解了很多林納斯的生平軼事,那時我就琢磨,這個天才已經達到人生的巔峰了吧,結果這位兄臺並未停止前進的步伐,轉眼就在2005 年搞出了分散式版本控制系統 Git,目前幾乎全世界的程式設計師都在用 Git 管理他們的程式碼,著名網站 Github 就是基於 Git 構建的。無論是 Linux 還是 Git,得一即可得天下,結果這哥們以一己之力發起了倆專案,而且都是主力開發人員。最終的結果是,成全了程式設計師,陶冶了使用者,造福了一方百姓。正如林納斯自己所言:“My name is Linus, and I am your God.”

Linus(一)——生命的意義

1969 年末,林納斯出生於芬蘭的赫爾辛基市,算是趕上了60 後的尾巴。小時候他是個其貌不揚的孩子,除了一個鼻子長得“富麗堂皇”之外乏善可陳。他為了讓鼻子看上去小一些,經常戴上眼鏡就不願意摘下來,這個策略和現在的很多大臉女生購買三星的 Galaxy Note 手機有異曲同工之妙。幼時的林納斯不修邊幅邋里邋遢,不怎麼費勁數學和物理就學得極好,社交卻一塌糊塗,他母親經常和別人說,這孩子非常好養,只要把他放到一個有電腦的小黑屋裡,然後再往裡扔點薯條和義大利麵,就行了。林納斯對此表示認同。

林納斯把年幼的自己定位成 Nerd(書呆子),但是從他的自傳裡我卻感受到了這位天才的有趣之處。他在書的序言裡寫道:

我對生活的意義有一些看法。咱們可以在第1 章跟讀者說一下生活的意義來釣他們上鉤,等他們上鉤,並且花錢買書以後,我們再隨便扯點別的把剩下的章節糊弄過去。(注:做人要厚道啊。)

關於生命的意義,林納斯的解釋是,有三件事具有生命的意義。它們是你生活當中所有事情的動機。第一是生存,第二是社會秩序,第三是娛樂。生活中所有的事情都是按這個順序發展的,娛樂之後便一無所有。因此,從某種意義上來說,生活的意義就是要達到第三個階段。你一旦達到了第三個階段,就算成功了。但首先要越過前兩個階段。

為什麼林納斯會這麼說呢,我摘段原文給大家看看,非常有趣:

林納斯:我簡單舉幾個例子吧,好讓你大概明白我的意思。最好理解的就是性了。它最開始只是延續生命的方式,但後來變成了一種社會行為,這也是人們結婚的原因。再後來它就成了一種娛樂。

大衛:性怎麼個娛樂法?

林納斯:好吧,有點兒對牛彈琴了。我換一個例子吧。

大衛:不,還是說回性吧。

林納斯:它是從另外一個層面來說的……

大衛(自言自語):噢,這娛樂說的是參與其中的娛樂,而不是置身事外來觀賞的娛樂啊。好吧,我懂了。那生存、社會秩序和娛樂又是如何與技術扯上關係的呢?

Linus(二)——天才也瘋狂

林納斯是這麼解釋的,技術的誕生同樣是為了人類的生存,而且是為了讓人生活得更好。汽車讓人跑得更快,飛機讓人飛得更高,網際網路讓人懂得更多,手機讓人通訊更快,一旦這些技術成了規模,就要併入社會秩序,然後下一個階段就是娛樂,別看手機現在就是個打電話的工具,但是很快會進入娛樂階段……(12 年後的今天,手機已經徹頭徹尾變成了一個娛樂工具,打電話反而成了附屬功能。)

林納斯說:“一切事物都將從生存走向娛樂,但這並不意味著在某個區域性地區沒有倒退的現象,而且毫無疑問許多地方都有這種情況。有時事物的發展往往是分裂的。”

從這些內容我們可以看出,林納斯有自己的一套理論,而且能自圓其說,其實每個人都有自己的理論,一件事做或者不做,都是自己說服自己,每一次進步,要麼是推翻自己的理論,要麼是完善自己的理論。林納斯在很小的時候就建立了自己的理論領地,那就是數學、物理、邏輯,最後是計算機,所以他絕不是自己描述的 Nerd,而是一個大智若愚的牛娃,就像射鵰裡的郭靖一樣,看著傻,其實比誰都精,腦子裡裝的都是十年二十年後的事兒。而且林納斯比郭靖牛的地方是,就一個啟蒙老師,還是自己的外公,和郭靖一比,高下立判!林納斯基本上就是個自學成才的典範。

林納斯的外公是赫爾辛基大學的一位統計學教授,數學家。他有一臺Commodore VIC-20 計算機(Commodore 是與蘋果公司同時期的個人電腦公司,曾經創造過一系列輝煌,1994 年破產),這臺電腦的主要功能就是沒有功能,你唯一能做的事情就是用 Basic 語言在上面編寫自己的程式,老爺子當年就是這麼做的,比如做一些數學運算和公式計算等。但是老爺子年老眼花,也不願意打字,於是就把自己的外孫林納斯放在腿上,讓他幫助錄入寫在紙片上的程式。這種很有場面感的場景一再出現後,林納斯除了對數學有了初步的認識,同時也把計算機玩得嫻熟,很快他就在外公的指導下開始編寫自己的程式。

評:很多大師級的人物,很小的時候就能在某個領域內頭角崢嶸,展現出一些東西,然後經過長期的練習和創作,最終成為一代傳奇。在這個過程裡,環境是很重要的,逆境出人才基本上是個偽命題,這句話唯一的作用就是遇到困難時給自己打打雞血。林納斯就是個高知子弟,10 歲人家就開始玩計算機了,我們10 歲在幹什麼,打沙包嗎?甩方寶嗎?即使你在計算機方面有出眾的天賦,但18 歲以前連計算機的面兒都沒見過,你就只能默默地牛逼了。等你真正開始展現出自己才華的時候,人家作業系統已經開發出來了,一入世就差別人十年的身位,除了冷冷的絕望,你還能感受到什麼?所以現在人們沒事就北上廣深杭,不是喜歡人多嘴雜空氣差,而是在這些一線城市可以接觸更多的人和事物,見更高的山,渡更寬的河。不是為了情懷,而是擁有格局。見都沒見過,還同一個起跑線呢,一跑就得趴窩。所以,無論這些地方環境多惡劣,競爭多激烈,來的永遠多過走的,不為別的,只是為了緩解些許絕望的感覺……

林納斯用外公的計算機學會了 Basic 語言,並開始編寫各種簡單有趣的遊戲,然後他又發現了 Basic 並不是計算機唯一能理解的語言,在它的下面,還有一種語言是由0 和1 組成,可以直接被計算機識別,於是林納斯又開始用機器碼程式設計,這次他可以控制更多計算機的細節,他與機器變得更加親密。然後林納斯就開始上中學了,中學的幾年於他而言,其實沒有太大變化,因為那些年他幾乎都是坐在電腦前面度過的,在這個階段,他熟練地掌握了組合語言。

終於有一天,林納斯向程式設計世界挺進的步伐變得緩慢下來,因為他上大學了,原因之一是他必須集中精力讀書,原因之二是找不到什麼專案去做。還有一件事,林納斯開始服兵役了,那段時光對他來說是如此特殊:

所以當我扛著武器上完了11 個月的“體育課”之後,我覺得我餘下幾十年完全有資格平靜快樂、一動不動地度過,以後我唯一的體力活就是敲鍵盤寫程式碼,或者是抓著一瓶比爾森啤酒享受,這樣才叫公平。

Linus(三)——改變一生的書籍

終於,讓林納斯痛苦不堪的兵役結束了,除了敲鑼打鼓歡慶重生之外,他開始繼續拓展自己的程式設計之路,這時候,生命中最重要的一本書出現了,書的名字叫做《作業系統:設計和實現》,作者是安德魯·坦尼鮑姆。用林納斯的原話表述就是“這本書把我推上了生命的高峰”。

那個時代 Unix 已經開發出來了。最早 Unix 是用匯編寫的,開發過程中 Unix 的兩位創始人肯·湯普遜和丹尼斯·裡奇覺得用匯編寫程式實在是太苦逼了,男人應該對自己好一點!於是老哥倆決定用高階語言來完成下一個版本,他們首先嚐試了Fortran,失敗!然後又基於BCPL(Basic Combined Programming Lanugage)建立了 B語言,B 語言可以被認為是那個時代的解釋型語言,不能直接生成機器碼,效率上完全沒法滿足系統的需求,再次失敗!我們都知道,一再失敗的情況下總會有一位英雄人物挺身而出,這次是丹尼斯·裡奇,他從失敗的大坑中爬起來拍拍土抹抹淚,繼續對 B 語言進行改造。這次丹尼斯為 B 增加了資料型別,並讓 B 語言能夠直接編譯為機器碼,然後又為這門語言起了個極其響亮的名字——New B,讀一讀神清氣爽,念一念氣衝雲霄,從此一代語言巨星冉冉升起,40 年後依然排在兵器排名榜第一位,怎一個牛字了得!當然,丹尼斯可能考慮了十幾年後中國人民的感受,把New B 改為了C 語言,並用 C 語言重新編寫了 Unix 的核心,Unix 與 C 從此珠聯璧合,長相廝守,再也無法分離。

作業系統、Unix 和 C 語言可以說是林納斯心目中神山上的三座聖盃,為了至高無上的榮耀,他首先要攀上峰頂,把這三座聖盃捧在手中,然後再琢磨建造自己的宮殿的事兒。在那一年的夏天,林納斯開始了高強度的閱讀和學習,用他的話說就是做了兩件事:“一件事是什麼都沒做,另一件事是讀完了719 頁的《作業系統:設計和實現》。那本紅色的簡裝本教科書差不多等於睡在了我的床上。”

林納斯認為,Unix 是一個簡潔、乾淨的作業系統,在 Unix 上的大部分任務都是通過一些基本操作完成的,這些操作被稱為System Call,顧名思義,這些操作就是你對系統的呼叫,系統通過響應你的呼叫完成工作。比如 fork、clone(建立子程序),比如 open、close、read、write(檔案訪問)。這些基本的系統呼叫通過組合可以完成大部分功能。同時,Unix 還提供了極為強大的IPC(程序間通訊)方式:pipe(管道)。很多工作在GUI(圖形介面)軟體環境下的讀者,最常用的IPC 操作可能是複製、貼上、滑鼠拖拽,這些操作雖然簡單,但是必須由人來完成,想要自動化就很困難。而這些在 Unix 上實現起來就像大自然一樣自然,你只需要在程式之間開闢出一段緩衝區作為管道,然後父程序和子程序就可以通過這個管道實現程序間通訊了。舉個例子,以前給大家介紹的查詢歷史命令的指令碼,就利用了管道的功能,如下:

history | grep apache

這行命令的含義就是查詢包含 apache 的歷史命令,其中特殊字元“ | ”用來告訴命令列直譯器(shell)將前一個命令的輸出通過“管道”作為接下來的一行命令的輸入,就這樣,一個簡單的程序間通訊就完成了。

總之,林納斯在讀完這本書之後,就像郭靖修習了九陰真經全本一樣,對機器和程式碼的世界有了更為透徹的認知,接下來的事情就是等待一個打造傳奇的機會。

等待的過程中,林納斯也沒閒著,他又開始程式設計了。好的程式設計師對程式設計的喜愛是溢於言表的,以下摘錄一些林納斯的程式設計感想:

在程式設計的人看來,程式設計是世上最有意思的事情了。它要比國際象棋之類的遊戲複雜得多,你想要什麼規則都可以自己設定。按照你定下的規則,它的結果該是什麼,就會是什麼。你在電腦上創造出屬於自己的新世界,而唯一的限制就是電腦本身的效能,還有,還有一點在今天尤為重要,那就是你自己的能力。比方說造一間樹屋吧。你可以造一個帶活板門的樹屋,這樣實用而穩固。不過這樣一間僅為堅固實用而造的樸素樹屋,和一間為了外觀漂亮而巧用樹木特點來精心雕琢的樹屋比起來,人人都看得出來兩者間的差別。造樹屋可是一種將藝術和工程融合起來的活兒。程式設計也是如此,也正是因為這個原因,程式設計才得以成為一件既有魅力又有價值的活兒。程式設計時,程式設計師往往優先考慮的是趣味性、美觀性及震撼力,而非實用性。

在程式碼的世界裡,林納斯就是一個詩人!

(未完待續)

684
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 聊天被app偷窺用在商品推薦上,大資料技術如此濫用細思極恐