頂級 Linux 開發者推薦的程式設計書籍

Steven Vaughan-nichols發表於2018-11-22

毫無疑問,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 程式語言,第二版C Programming Language, 2nd Edition》,它在程式設計圈內也被尊稱為 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 程式設計新思維21st Century C: C Tips from the New School》。他還建議,同時也去閱讀一本比較舊但是寫的更詳細的《C 專家程式設計Expert C Programming: Deep C Secrets》和有著 20 年曆史的《POSIX 多執行緒程式設計Programming with POSIX Threads》。

如果不選 C 語言, 那選什麼?

Linux 開發者推薦的書籍自然都是他們認為適合今時今日的開發專案的語言工具。這也折射了開發者自身的個人偏好。例如,Allison 認為年輕的開發者應該在《Go 程式語言The Go Programming Language》和《Rust 程式設計Rust with Programming Rust》的幫助下去學習 Go 語言和 Rust 語言。

但是超越程式語言來考慮問題也不無道理(儘管這些書傳授了你程式設計技巧)。今日要做些有意義的開發工作的話,要從那些已經完成了 99% 顯而易見工作的框架開始,然後你就能圍繞著它開始寫指令碼了, Torvalds 推薦了這種做法。

“坦率來說,語言本身遠遠沒有圍繞著它的基礎架構重要”,他繼續道,“可能你會從 Java 或者 Kotlin 開始,但那是因為你想為自己的手機開發一個應用,因此安卓 SDK 成為了最佳的選擇,又或者,你對遊戲開發感興趣,你選擇了一個遊戲開發引擎來開始,而通常它們有著自己的指令碼語言”。

這裡提及的基礎架構包括那些和作業系統本身相關的程式設計書籍。 Garner 在讀完了大名鼎鼎的 K&R 後又拜讀了 W. Richard Steven 的《Unix 網路程式設計Unix Network Programming》。特別是,Steven 的《TCP/IP 詳解,卷1:協議TCP/IP Illustrated, Volume 1: The Protocols》在出版了 30 年之後仍然被認為是必讀之書。因為 Linux 開發很大程度上和和網路基礎架構有關,Garner 也推薦了很多 O'Reilly 在 SendmailBashDNS 以及 IMAP/POP 等方面的書。

Coekaerts 也是 Maurice Bach 的《UNIX 作業系統設計The Design of the Unix Operation System》的書迷之一。James Bottomley 也是這本書的推崇者,作為一個 Linux 核心開發者,當 Linux 剛剛問世時 James 就用 Bach 的這本書所傳授的知識將它研究了個底朝天。

軟體設計知識永不過時

儘管這樣說有點太侷限在技術領域。Stevens 還是說到,“所有的開發者都應該在開始鑽研語法前先研究如何設計,《設計心理學The Design of Everyday Things》是我的最愛”。

Coekaerts 喜歡 Kernighan 和 Rob Pike 合著的《程式設計實踐The Practic of Programming》。這本關於設計實踐的書當 Coekaerts 還在學校唸書的時候還未出版,他說道,“但是我把它推薦給每一個人”。

不管何時,當你問一個長期從事於開發工作的開發者他最喜歡的計算機書籍時,你遲早會聽到一個名字和一本書:Donald Knuth 和他所著的《計算機程式設計藝術(1-4A)The Art of Computer Programming, Volumes 1-4A》。VMware 首席開源官 Dirk Hohndel,認為這本書儘管有永恆的價值,但他也承認,“今時今日並非極其有用”。(LCTT 譯註:不代表譯者觀點)

讀程式碼。大量的讀。

程式設計書籍能教會你很多,也請別錯過另外一個在開源社群特有的學習機會:《程式碼閱讀方法與實踐Code Reading: The Open Source Perspective》。那裡有不可計數的程式碼例子闡述如何解決程式設計問題(以及如何讓你陷入麻煩……)。Stevens 說,談到磨鍊程式設計技巧,在他的書單裡排名第一的“書”是 Unix 的原始碼。

“也請不要忽略從他人身上學習的各種機會。” Cox 道,“我是在一個計算機俱樂部裡和其他人一起學的 BASIC,在我看來,這仍然是一個學習的最好辦法”,他從《精通 ZX81 機器碼Mastering machine code on your ZX81》這本書和 Honeywell L66 B 編譯器手冊裡學習到了如何編寫機器碼,但是學習技術這點來說,單純閱讀和與其他開發者在工作中共同學習仍然有著很大的不同。

Cox 說,“我始終認為最好的學習方法是和一群人一起試圖去解決你們共同關心的一些問題並從中找到快樂,這和你是 5 歲還是 55 歲無關”。

最讓我吃驚的是這些頂級 Linux 開發者都是在非常底層級別開始他們的開發之旅的,甚至不是從組合語言或 C 語言,而是從機器碼開始開發。毫無疑問,這對幫助開發者理解計算機在非常微觀的底層級別是怎麼工作的起了非常大的作用。

那麼現在你準備好嘗試一下硬核 Linux 開發了嗎?Greg Kroah-Hartman,這位 Linux 核心穩定分支的維護者,推薦了 Steve Oualline 的《實用 C 語言程式設計Practical C Programming》和 Samuel harbison 與 Guy Steels 合著的《C 語言參考手冊C: A Reference Manual》。接下來請閱讀如何進行 Linux 核心開發HOWTO do Linux kernel development,到這時,就像 Kroah-Hartman 所說,你已經準備好啟程了。

於此同時,還請你刻苦學習並大量編碼,最後祝你在跟隨頂級 Linux 開發者腳步的道路上好運相隨。


via: https://www.hpe.com/us/en/insights/articles/top-linux-developers-recommended-programming-books-1808.html

作者:Steven Vaughan-Nichols 選題:lujun9972 譯者:DavidChenLiang 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章