頂級 Linux 開發者推薦的編程書籍
毫無疑問,Linux 是由那些擁有深厚計算機知識背景而且才華橫溢的程序員發明的。讓那些大名鼎鼎的 Linux 程序員向如今的開發者分享一些曾經帶領他們登堂入室的好書和技術參考資料吧,你會不會也讀過其中幾本呢?
Linux,毫無爭議的屬於 21 世紀的操作系統。雖然 Linus Torvalds 在建立開源社區這件事上做了很多工作和社區決策,不過那些網路專家和開發者願意接受 Linux 的原因還是因為它卓越的代碼質量和高可用性。Torvalds 是個編程天才,同時必須承認他還是得到了很多其他同樣極具才華的開發者的無私幫助。
就此我諮詢了 Torvalds 和其他一些頂級 Linux 開發者,有哪些書籍幫助他們走上了成為頂級開發者的道路,下面請聽我一一道來。
熠熠生輝的 C 語言
Linux 是在大約上世紀 90 年代開發出來的,與它一起問世的還有其他一些完成基礎功能的開源軟體。與此相應,那時的開發者使用的工具和語言反映了那個時代的印記,也就是說 C 語言。可能 C 語言不再流行了,可對於很多已經建功立業的開發者來說,C 語言是他們的第一個在實際開發中使用的語言,這一點也在他們推選的對他們有著深遠影響的書單中反映出來。
Torvalds 說,「你不應該再選用我那個時代使用的語言或者開發方式」,他的開發道路始於 BASIC,然後轉向機器碼(「甚至都不是彙編語言,而是真真正正的『二進位』機器碼」,他解釋道),再然後轉向彙編語言和 C 語言。
「任何人都不應該再從這些語言開始進入開發這條路了」,他補充道。「這些語言中的一些今天已經沒有什麼意義(如 BASIC 和機器語言)。儘管 C 還是一個主流語言,我也不推薦你從它開始。」
並不是他不喜歡 C。不管怎樣,Linux 是用 GNU C 語言寫就的。「我始終認為 C 是一個偉大的語言,它有著非常簡單的語法,對於很多方向的開發都很合適,但是我懷疑你會遇到重重挫折,從你的第一個『Hello World』程序開始到你真正能開發出能用的東西當中有很大一步要走」。他認為,用現在的標準,如果作為入門語言的話,從 C 語言開始的代價太大。
在他那個時代,Torvalds 的唯一選擇的書就只能是 Brian W. Kernighan 和 Dennis M. Ritchie 合著的《 C 編程語言,第二版 》,它在編程圈內也被尊稱為 K&R。「這本書簡單精鍊,但是你要先有編程的背景才能欣賞它」,Torvalds 說到。
Torvalds 並不是唯一一個推薦 K&R 的開源開發者。以下幾位也同樣引用了這本他們認為值得推薦的書籍,他們有:Linux 和 Oracle 虛擬化開發副總裁 Wim Coekaerts;Linux 開發者 Alan Cox;Google 雲 CTO Brian Stevens;Canonical 技術運營部副總裁 Pete Graner。
如果你今日還想同 C 語言較量一番的話,Samba 的共同創始人 Jeremy Allison 推薦《 C 程序設計新思維 》。他還建議,同時也去閱讀一本比較舊但是寫的更詳細的《 C 專家編程 》和有著 20 年歷史的《 POSIX 多線程編程 》。
如果不選 C 語言, 那選什麼?
Linux 開發者推薦的書籍自然都是他們認為適合今時今日的開發項目的語言工具。這也折射了開發者自身的個人偏好。例如,Allison 認為年輕的開發者應該在《 Go 編程語言 》和《 Rust 編程 》的幫助下去學習 Go 語言和 Rust 語言。
但是超越編程語言來考慮問題也不無道理(儘管這些書傳授了你編程技巧)。今日要做些有意義的開發工作的話,要從那些已經完成了 99% 顯而易見工作的框架開始,然後你就能圍繞著它開始寫腳本了, Torvalds 推薦了這種做法。
「坦率來說,語言本身遠遠沒有圍繞著它的基礎架構重要」,他繼續道,「可能你會從 Java 或者 Kotlin 開始,但那是因為你想為自己的手機開發一個應用,因此安卓 SDK 成為了最佳的選擇,又或者,你對遊戲開發感興趣,你選擇了一個遊戲開發引擎來開始,而通常它們有著自己的腳本語言」。
這裡提及的基礎架構包括那些和操作系統本身相關的編程書籍。 Garner 在讀完了大名鼎鼎的 K&R 後又拜讀了 W. Richard Steven 的《 Unix 網路編程 》。特別是,Steven 的《 TCP/IP 詳解,卷1:協議 》在出版了 30 年之後仍然被認為是必讀之書。因為 Linux 開發很大程度上和和網路基礎架構有關,Garner 也推薦了很多 O'Reilly 在 Sendmail、Bash、DNS 以及 IMAP/POP 等方面的書。
Coekaerts 也是 Maurice Bach 的《 UNIX 操作系統設計 》的書迷之一。James Bottomley 也是這本書的推崇者,作為一個 Linux 內核開發者,當 Linux 剛剛問世時 James 就用 Bach 的這本書所傳授的知識將它研究了個底朝天。
軟體設計知識永不過時
儘管這樣說有點太局限在技術領域。Stevens 還是說到,「所有的開發者都應該在開始鑽研語法前先研究如何設計,《 設計心理學 》是我的最愛」。
Coekaerts 喜歡 Kernighan 和 Rob Pike 合著的《 程序設計實踐 》。這本關於設計實踐的書當 Coekaerts 還在學校念書的時候還未出版,他說道,「但是我把它推薦給每一個人」。
不管何時,當你問一個長期從事於開發工作的開發者他最喜歡的計算機書籍時,你遲早會聽到一個名字和一本書:Donald Knuth 和他所著的《 計算機程序設計藝術(1-4A) 》。VMware 首席開源官 Dirk Hohndel,認為這本書儘管有永恆的價值,但他也承認,「今時今日並非極其有用」。(LCTT 譯註:不代表譯者觀點)
讀代碼。大量的讀。
編程書籍能教會你很多,也請別錯過另外一個在開源社區特有的學習機會:《 代碼閱讀方法與實踐 》。那裡有不可計數的代碼例子闡述如何解決編程問題(以及如何讓你陷入麻煩……)。Stevens 說,談到磨鍊編程技巧,在他的書單里排名第一的「書」是 Unix 的源代碼。
「也請不要忽略從他人身上學習的各種機會。」 Cox 道,「我是在一個計算機俱樂部里和其他人一起學的 BASIC,在我看來,這仍然是一個學習的最好辦法」,他從《 精通 ZX81 機器碼 》這本書和 Honeywell L66 B 編譯器手冊里學習到了如何編寫機器碼,但是學習技術這點來說,單純閱讀和與其他開發者在工作中共同學習仍然有著很大的不同。
Cox 說,「我始終認為最好的學習方法是和一群人一起試圖去解決你們共同關心的一些問題並從中找到快樂,這和你是 5 歲還是 55 歲無關」。
最讓我吃驚的是這些頂級 Linux 開發者都是在非常底層級別開始他們的開發之旅的,甚至不是從彙編語言或 C 語言,而是從機器碼開始開發。毫無疑問,這對幫助開發者理解計算機在非常微觀的底層級別是怎麼工作的起了非常大的作用。
那麼現在你準備好嘗試一下硬核 Linux 開發了嗎?Greg Kroah-Hartman,這位 Linux 內核穩定分支的維護者,推薦了 Steve Oualline 的《 實用 C 語言編程 》和 Samuel harbison 與 Guy Steels 合著的《 C 語言參考手冊 》。接下來請閱讀 如何進行 Linux 內核開發 ,到這時,就像 Kroah-Hartman 所說,你已經準備好啟程了。
於此同時,還請你刻苦學習並大量編碼,最後祝你在跟隨頂級 Linux 開發者腳步的道路上好運相隨。
作者:Steven Vaughan-Nichols 選題:lujun9972 譯者:DavidChenLiang 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive