我推薦的一些C\C++書籍

jobbole發表於2014-03-17

  人們常常問我有什麼C++和程式設計的書籍推薦,也許是因為我在PowerDNS有一個關於“編寫可讀性良好的C++程式碼”的演講。這篇博文可以作為我對上述問題的一個回答,同時也包含了一些更廣泛的筆記程式設計。如果你有任何補充或喜歡的書籍但是我沒有提到,請給留言提示,我打算一有新書就更新這個頁面。

 

  第一個注意項:如果你打算學習C++,請務必學習最新版的C++ 2011。這個版本的C++移除了許多由C++強大帶來的一些痛苦之處。另外,也不用擔心C++ 2014的書籍,大多數編譯器已經開始支援它了。

 學習程式設計

  學習程式設計包含以下幾個重要方面:

  • 瞭解語言的語法
  • 知道那些特性可以使用和何時使用
  • 寫出可讀性好的程式碼
    • 編譯器可以理解,但是下一個人是否可以閱讀呢?
  • 在一個更高層次設計結構良好的程式

  為了學習一門語言,通常我們可以找到叫《X語言程式設計》的書。這也形成了一個潛規則:當你建立一門嚴肅的語言的時候,你需要編寫這樣一本書。學習語言有點像學習作文,但這並不意味著你能夠突然變成一個著名散文作家!

  對於C++,這裡有兩本相關的書:

  • C程式設計語言》 (Brian W. Kernighan, Denis M. Ritchie, TCPL)。這本書不是關於C++的,不過所有與C有關的東西都和C++有關。例如,這本書附帶的例子都可以看作C++的例子,只是不是真正的C,因為C++比C的編譯器要求更加嚴格。但是大部分編寫良好的C程式都可以在C++下編譯通過,TCPL是一本小書,並且被譽為X語言程式設計中最好的書籍。書中每一頁都充滿智慧。
  • C++程式設計語言》(Bjarne Stroustrup),一本傑出的書,書中的每一頁同樣充滿智慧。這本書有1400頁。Verity Stob對這本書有熱烈的評論。在TCPL中,我們讀到的是“C不是一個大的語言,因此也不需要一本長篇大論的書來講解”,但是講解C++的書卻有1400頁。儘管這本書很難一頁一頁地讀下去(不過,我幾乎讀過了書中的每一頁),但是我建議每個人都擁一本。它講解了C++中的每一個方面,並且講解得非常不錯。有這本書可以作為C++的參考,你的程式設計生涯會受益良多。

  我需要宣告一點,《C程式設計語言》不是一本學習C++的入門書籍,這本書是用來指導你學習的,同時,《C程式設計語言》也單獨提取了《A Tour of C++ 》篇章。

  C++不僅是一門語言,也是指一個函式庫。在《C++程式設計語言》中也講解了C++標準庫,為了全面瞭解C++標準庫,我推薦:

  • C++標準程式庫:自修教程與參考手冊》(Nikolai Josuttis),和《C++程式設計語言》一樣,這也是一本大部頭的書。但是這本書涵蓋了C++標準庫的每一個方面(同時,也被稱作C++標準模版庫),第二版中涵蓋了C++2011標準。

  如果你之前從事高階語言比如python,perl或者java,C和C++可能讓人生畏。不像其他語言,C/C++非常接近硬體。這也有一個優點,可以充分利用硬體優勢,但也讓你需要面對現實細節。Simon Tatham (作為Putty的開發者和編寫《缺失程式碼怪味》的作者而知名,雖然他現在使用C開發)寫了一篇非常棒的文件:《The Descent to C》,這會降低你的學習難度,甚至經驗豐富的C開發者也可能受益一二。

  如果你讀了上面三本書和連結,你已經可以熟練掌握C++了,並且善用C++標準庫。不過,你還沒有學習如何使用和何時適合使用C++的特性。C++作為一門強大的語言,有句話說:“使用C,你犯錯可能砸到自己的腳,而使用C++,你犯錯可能導致你整條腿都廢了“,這說的都是真的。

  另外,C++強大之處在於你可以繼續使用你之前語言的開發方式。“我可以在任何語言中寫編寫FORTRAN程式碼”。不過這樣不利於你成為一個更好的開發者。

 用好C++

  這裡也有三本書,作者都是Scott Meyers,這將大大簡化一個立志於C++開發的人的生活:

  1. Effective C++ 》——列舉了一些常見錯誤,有用的特性和程式設計中需要注意的事項。最近更新於2005年。
  2. More Effective C++》——和上面一樣,不過講述得更多一些,同樣值得你去閱讀。
  3. Effective STL》——最後更新於2001年,和《Effective C++》一樣,不過關注於C++標準庫。

  如果你只想讀其中一本,選擇《Effective C++》,如果你想選擇兩本,再選擇《Effective STL》。

  需要注意的是,Scott正在準備一本新的書,全面覆蓋了新的C++2014標準(這可以看著是對C++2011標準的改進,並且當前大多數編譯器已經支援了C++2014)。一旦這本書出版,你應當第一時間購入,本書的預覽部分已經看起來相當棒了。

  更新:許多讀者都推薦了Stanley Lippman的《C++ Primer》,我不瞭解這本書,不過它更新了C++2011標準並且收到了很多讚譽,請告訴我你的觀點。

 編寫良好的程式碼

  下面提到的書都討論了程式碼風格,如果編寫程式碼,不過它們其實範圍更廣。指導你如何編寫可讀性好的程式碼的書有:

  1. 程式設計實踐》,(Brian W. Kernighan, Rob Pike, TPoP),這不是一本特定於C++的書,不過談論了許多關於如何組織程式碼,何時優化程式碼,何時不做優化,如果除錯和如何編寫程式碼避免除錯等等,我覺得每個開發組織都應該有這樣一本書。
  2. Linux核心程式碼規範》(Linus Torvalds),這也不是一本關於C++的書,但是在第4節“命名”,第六節“函式”和第八節“註釋”中,我們都可以學習到許多。

  每個想要提高其程式碼的程式設計師最好認真閱覽《程式設計實踐》的每一頁。

 設計大規模的程式碼

  我只知道一本書講述了這一點,我的一些思想形成也有賴於它。

  • Large-Scale C++ Software Design 》(John Lakos),儘管本書有些年頭,裡面的一些建議用於指導當初為缺乏儲存並且效能低下的機器開發程式的人們,從這本書我學習瞭如何將一個複雜系統拆解為多個有意義的模組。特別需要注意的是在迴圈中處理依賴程式碼。那些額外出現的細節,使得你的程式碼幾乎不能測試,因為每個模組都非常依賴其他模組。

  最後,祝學習C++的童鞋進步!

  原文連結: bert hubert   翻譯: 伯樂線上 - 周昌鴻

相關文章