Linux,毫無爭議的屬于 21 世紀(jì)的操作系統(tǒng)。雖然 Linus Torvalds 在建立開源社區(qū)這件事上做了很多工作和社區(qū)決策,不過那些網(wǎng)絡(luò)專家和開發(fā)者愿意接受 Linux 的原因還是因為它卓越的代碼質(zhì)量和高可用性。Torvalds 是個編程天才,同時必須承認他還是得到了很多其他同樣極具才華的開發(fā)者的無私幫助。
就此我咨詢了 Torvalds 和其他一些頂級 Linux 開發(fā)者,有哪些書籍幫助他們走上了成為頂級開發(fā)者的道路,下面請聽我一一道來。
熠熠生輝的 C 語言
Linux 是在大約上世紀(jì) 90 年代開發(fā)出來的,與它一起問世的還有其他一些完成基礎(chǔ)功能的開源軟件。與此相應(yīng),那時的開發(fā)者使用的工具和語言反映了那個時代的印記,也就是說 C 語言??赡蹸 語言不再流行了,可對于很多已經(jīng)建功立業(yè)的開發(fā)者來說,C 語言是他們的第一個在實際開發(fā)中使用的語言,這一點也在他們推選的對他們有著深遠影響的書單中反映出來。
Torvalds 說,“你不應(yīng)該再選用我那個時代使用的語言或者開發(fā)方式”,他的開發(fā)道路始于 BASIC,然后轉(zhuǎn)向機器碼(“甚至都不是匯編語言,而是真真正正的‘二進制’機器碼”,他解釋道),再然后轉(zhuǎn)向匯編語言和 C 語言。
“任何人都不應(yīng)該再從這些語言開始進入開發(fā)這條路了”,他補充道。“這些語言中的一些今天已經(jīng)沒有什么意義(如 BASIC 和機器語言)。盡管 C 還是一個主流語言,我也不推薦你從它開始?!?/p>
并不是他不喜歡 C。不管怎樣,Linux 是用GNU C 語言寫就的。“我始終認為 C 是一個偉大的語言,它有著非常簡單的語法,對于很多方向的開發(fā)都很合適,但是我懷疑你會遇到重重挫折,從你的第一個‘Hello World’程序開始到你真正能開發(fā)出能用的東西當(dāng)中有很大一步要走”。他認為,用現(xiàn)在的標(biāo)準(zhǔn),如果作為入門語言的話,從 C 語言開始的代價太大。
在他那個時代,Torvalds 的唯一選擇的書就只能是 Brian W. Kernighan 和 Dennis M. Ritchie 合著的《C 編程語言,第二版C Programming Language, 2nd Edition》,它在編程圈內(nèi)也被尊稱為 K&R?!斑@本書簡單精煉,但是你要先有編程的背景才能欣賞它”,Torvalds 說到。
Torvalds 并不是唯一一個推薦 K&R 的開源開發(fā)者。以下幾位也同樣引用了這本他們認為值得推薦的書籍,他們有:Linux 和 Oracle 虛擬化開發(fā)副總裁 Wim Coekaerts;Linux 開發(fā)者 Alan Cox;Google 云 CTO Brian Stevens;Canonical 技術(shù)運營部副總裁 Pete Graner。
如果你今日還想同 C 語言較量一番的話,Samba 的共同創(chuàng)始人 Jeremy Allison 推薦《C 程序設(shè)計新思維21st Century C: C Tips from the New School》。他還建議,同時也去閱讀一本比較舊但是寫的更詳細的《C 專家編程Expert C Programming: Deep C Secrets》和有著 20 年歷史的《POSIX 多線程編程Programming with POSIX Threads》。
如果不選 C 語言, 那選什么?
Linux 開發(fā)者推薦的書籍自然都是他們認為適合今時今日的開發(fā)項目的語言工具。這也折射了開發(fā)者自身的個人偏好。例如,Allison 認為年輕的開發(fā)者應(yīng)該在《Go 編程語言The Go Programming Language》和《Rust 編程Rust with Programming Rust》的幫助下去學(xué)習(xí) Go 語言和 Rust 語言。
但是超越編程語言來考慮問題也不無道理(盡管這些書傳授了你編程技巧)。今日要做些有意義的開發(fā)工作的話,要從那些已經(jīng)完成了 99% 顯而易見工作的框架開始,然后你就能圍繞著它開始寫腳本了, Torvalds 推薦了這種做法。
“坦率來說,語言本身遠遠沒有圍繞著它的基礎(chǔ)架構(gòu)重要”,他繼續(xù)道,“可能你會從 Java 或者 Kotlin 開始,但那是因為你想為自己的手機開發(fā)一個應(yīng)用,因此安卓 SDK 成為了最佳的選擇,又或者,你對游戲開發(fā)感興趣,你選擇了一個游戲開發(fā)引擎來開始,而通常它們有著自己的腳本語言”。
這里提及的基礎(chǔ)架構(gòu)包括那些和操作系統(tǒng)本身相關(guān)的編程書籍。 Garner 在讀完了大名鼎鼎的 K&R 后又拜讀了 W. Richard Steven 的《Unix 網(wǎng)絡(luò)編程Unix Network Programming》。特別是,Steven 的《TCP/IP 詳解,卷1:協(xié)議TCP/IP Illustrated, Volume 1: The Protocols》在出版了 30 年之后仍然被認為是必讀之書。因為 Linux 開發(fā)很大程度上和和網(wǎng)絡(luò)基礎(chǔ)架構(gòu)有關(guān),Garner 也推薦了很多 O'Reilly 在Sendmail、Bash、DNS以及IMAP/POP等方面的書。
Coekaerts 也是 Maurice Bach 的《UNIX 操作系統(tǒng)設(shè)計The Design of the Unix Operation System》的書迷之一。James Bottomley 也是這本書的推崇者,作為一個 Linux 內(nèi)核開發(fā)者,當(dāng) Linux 剛剛問世時 James 就用 Bach 的這本書所傳授的知識將它研究了個底朝天。
軟件設(shè)計知識永不過時
盡管這樣說有點太局限在技術(shù)領(lǐng)域。Stevens 還是說到,“所有的開發(fā)者都應(yīng)該在開始鉆研語法前先研究如何設(shè)計,《設(shè)計心理學(xué)The Design of Everyday Things》是我的最愛”。
Coekaerts 喜歡 Kernighan 和 Rob Pike 合著的《程序設(shè)計實踐The Practic of Programming》。這本關(guān)于設(shè)計實踐的書當(dāng) Coekaerts 還在學(xué)校念書的時候還未出版,他說道,“但是我把它推薦給每一個人”。
不管何時,當(dāng)你問一個長期從事于開發(fā)工作的開發(fā)者他最喜歡的計算機書籍時,你遲早會聽到一個名字和一本書:Donald Knuth 和他所著的《計算機程序設(shè)計藝術(shù)(1-4A)The Art of Computer Programming, Volumes 1-4A》。VMware 首席開源官 Dirk Hohndel,認為這本書盡管有永恒的價值,但他也承認,“今時今日并非極其有用”。(LCTT 譯注:不代表譯者觀點)
讀代碼。大量的讀。
編程書籍能教會你很多,也請別錯過另外一個在開源社區(qū)特有的學(xué)習(xí)機會:《代碼閱讀方法與實踐Code Reading: The Open Source Perspective》。那里有不可計數(shù)的代碼例子闡述如何解決編程問題(以及如何讓你陷入麻煩……)。Stevens 說,談到磨煉編程技巧,在他的書單里排名第一的“書”是 Unix 的源代碼。
“也請不要忽略從他人身上學(xué)習(xí)的各種機會。” Cox 道,“我是在一個計算機俱樂部里和其他人一起學(xué)的 BASIC,在我看來,這仍然是一個學(xué)習(xí)的最好辦法”,他從《精通 ZX81 機器碼Mastering machine code on your ZX81》這本書和 Honeywell L66 B 編譯器手冊里學(xué)習(xí)到了如何編寫機器碼,但是學(xué)習(xí)技術(shù)這點來說,單純閱讀和與其他開發(fā)者在工作中共同學(xué)習(xí)仍然有著很大的不同。
Cox 說,“我始終認為最好的學(xué)習(xí)方法是和一群人一起試圖去解決你們共同關(guān)心的一些問題并從中找到快樂,這和你是 5 歲還是 55 歲無關(guān)”。
最讓我吃驚的是這些頂級 Linux 開發(fā)者都是在非常底層級別開始他們的開發(fā)之旅的,甚至不是從匯編語言或 C 語言,而是從機器碼開始開發(fā)。毫無疑問,這對幫助開發(fā)者理解計算機在非常微觀的底層級別是怎么工作的起了非常大的作用。
那么現(xiàn)在你準(zhǔn)備好嘗試一下硬核 Linux 開發(fā)了嗎?Greg Kroah-Hartman,這位 Linux 內(nèi)核穩(wěn)定分支的維護者,推薦了 Steve Oualline 的《實用 C 語言編程Practical C Programming》和 Samuel harbison 與 Guy Steels 合著的《C 語言參考手冊C: A Reference Manual》。接下來請閱讀如何進行 Linux 內(nèi)核開發(fā)HOWTO do Linux kernel development,到這時,就像 Kroah-Hartman 所說,你已經(jīng)準(zhǔn)備好啟程了。
于此同時,還請你刻苦學(xué)習(xí)并大量編碼,最后祝你在跟隨頂級 Linux 開發(fā)者腳步的道路上好運相隨。
-
Linux
+關(guān)注
關(guān)注
87文章
11332瀏覽量
210024 -
C語言
+關(guān)注
關(guān)注
180文章
7614瀏覽量
137320
發(fā)布評論請先 登錄
相關(guān)推薦
評論