2010年2月11日(上次更新:2010年6月25日)

卓越之書

評分:4.2/5(65票)
*****
我很想看看
進入這本閃閃發光的書
進入開放的計劃中
卓越之書。

我根據我的經驗,這裡列出的書籍在程式設計社群中都備受推崇。我不會按照任何優點順序呈現它們,但我會嘗試按照涵蓋的主題和經驗水平以某種邏輯順序排列它們。

關於書籍的文字摘自書籍的封底或亞馬遜的描述。我希望這不會導致版權問題。

目錄


主題:C++

初學者書籍

程式設計:使用C++的原理與實踐 作者:Bjarne Stroustrup
C++發明者的程式設計入門
為現實世界的程式設計做準備 本書假定您的目標是最終編寫重要的程式,無論是在軟體開發領域工作還是在其他技術領域工作。

專注於基本概念和技術 本書比傳統的入門書籍更深入地解釋了基本概念和技術。這種方法將為您編寫有用、正確、可維護和高效的程式碼奠定堅實的基礎。

使用當今的C++進行程式設計 本書是對程式設計的總體介紹,包括面向物件程式設計和泛型程式設計。它也是對C++程式語言的紮實介紹,C++程式語言是現實世界軟體中使用最廣泛的語言之一。本書從一開始就介紹了現代C++程式設計技術,引入了C++標準庫以簡化程式設計任務。

適用於初學者 - 以及任何想學習新事物的人 本書主要為以前從未程式設計過的人設計,並且已經過1,000多名大學一年級學生的測試。然而,從業者和高階學生將透過看到一位公認的大師如何處理他的藝術元素來獲得新的見解和指導。

提供廣闊的視野 本書的前半部分涵蓋了廣泛的基本概念、設計和程式設計技術、語言特性和庫。這些將使您能夠編寫涉及輸入、輸出、計算和簡單圖形的程式。後半部分探討了更專業的課題,例如文字處理和測試,並提供了豐富的參考資料。原始碼和支援補充材料可從作者的網站獲得。


中級和專家書籍

C++程式語言:第三版 作者:Bjarne Stroustrup
本書由該語言的發明者撰寫,是關於該語言的權威經典文字,該語言在過去五年中已成為軟體開發的核心。第三版進行了大規模的新增和更改。特別是,新版本基於ANSI/ISO C++最終草案,其中包含許多新的語言特性 - 模板、異常、名稱空間和執行時型別識別,僅舉幾例 - 除了徹底改變C++開發的C++標準模板庫。

縱觀全文,本書不僅僅是描述了該語言的每個元素。重點在於展示如何將該語言用作設計和程式設計的工具,並教授程式設計師掌握C++所需的基本概念。透過第三版,Stroustrup使這本書對於初學者來說更容易理解,同時添加了即使是專家C++程式設計師也會覺得寶貴的資訊和技術。

Exceptional C++ 作者:Herb Sutter

Herb Sutter的ExceptionalC++面向有經驗的C++程式設計師,通過幾十個程式設計難題和解釋來測試讀者對高階C++語言特性和習慣用法的瞭解。這是一本絕對可以幫助您將C++類設計技能提升到更高水平的書。

本書基於作者的Guru of the Week Internet專欄,提出了一系列關於C++內部運作的具有挑戰性的問題,這些問題圍繞著使用標準模板庫(STL)的泛型程式設計、異常處理、記憶體管理和類設計。即使你認為你很瞭解C++,這些問題中的大多數也會教你更多關於該語言以及如何編寫更健壯的“異常安全”類的知識。不要認為這只是“語言律師”。作者的解釋強調了健全的程式設計原則(偏愛簡單)和習慣用法(例如用於類設計的Pimpl習慣用法,可以加快編譯速度並提高可維護性,或者將“智慧”auto_ptr與STL一起使用。)從這些示例的範圍和深度來看,Sutter對C++內部運作的掌握令人印象深刻,並且他出色地完成了傳達這種專業知識的工作,而沒有使用術語或大量理論。

閱讀完本書後,C++設計人員將學習一些“最佳實踐”,瞭解如何編寫健壯、高效的“異常安全”類(這意味著它們不會丟擲任何已處理的異常,也不會洩漏資源)。您很可能會更好地瞭解記憶體管理技術以及與STL一起工作。對於尋求一些使用C++的最佳方法的領先知識的經驗豐富的開發人員來說,ExceptionalC++既具有挑戰性,又是真正有價值的資訊來源。 - Richard Dragan, Amazon.com

More Exceptional C++: 40個更多的工程難題、程式設計問題和解決方案
作者:Herb Sutter

More Exceptional C++延續了Herb Sutter暢銷書Exceptional C++的篇章,提供了40個難題,這些難題闡明瞭C++最具挑戰性和最強大的方面。 More Exceptional C++提供了許多新的難題,這些難題專注於泛型程式設計和C++標準模板庫,包括諸如特徵和謂詞等重要技術,以及使用標準容器和演算法中的關鍵考慮因素 - 其中許多從未在其他地方介紹過。 More Exceptional C++包含一個關於單執行緒和多執行緒環境中最佳化的詳細新章節(和兩個附錄)。它還提供了關於Exceptional C++中首次介紹的關鍵主題的重要新見解,包括異常安全性、泛型程式設計和記憶體管理。適用於所有C++程式設計師。

Exceptional C++ Style: 40個新的工程難題、程式設計問題和解決方案
作者:Herb Sutter

軟體“風格”在於找到開銷和功能之間的完美平衡……優雅和可維護性……靈活性和過度。在Exceptional C++ Style中,傳奇的C++大師Herb Sutter提出了40個新的程式設計場景,旨在分析不僅僅是什麼,還有為什麼,並幫助您在軟體中找到合適的平衡點。

本書圍繞實際問題和解決方案組織,提供了對關鍵C++細節和相互關係的新見解,以及對當今關鍵C++程式設計技術的新策略 - 包括泛型程式設計、STL、異常安全性等。您會找到以下問題的答案
  • 你能從STL本身學到關於庫設計的什麼?
  • 如何避免使模板程式碼不必要地不通用?
  • 為什麼你不應該專門化函式模板?你應該做什麼?
  • 異常安全性如何超越try和catch語句?
  • 你應該使用異常規範,還是不應該使用?
  • 你應該何時以及如何“洩漏”類的私有部分?
  • 如何使類對於版本控制更安全?
  • 使用標準容器的真正記憶體成本是多少?
  • 如何使用const真正最佳化你的程式碼?
  • 編寫inline如何影響效能?
  • 什麼時候看起來錯誤的程式碼實際上可以完美地編譯和執行,以及你為什麼要關心?
  • std::string的設計有什麼問題?
Exceptional C++ Style將幫助你設計、構建和編寫具有風格的程式碼 - 並在你所有的C++軟體中實現更大的健壯性和效能。

C++ 編碼標準: 規則、指南和最佳實踐
作者:Herb Sutter
一致、高質量的編碼標準可以提高軟體質量、縮短上市時間、促進團隊合作、消除浪費在無關緊要的事情上的時間並簡化維護。現在,兩位世界上最受尊敬的C++專家將全球C++社群的豐富集體經驗提煉成一組編碼標準,每個開發人員和開發團隊都可以理解並用作他們自己編碼標準的基礎。

作者幾乎涵蓋了C++程式設計的每個方面:設計和編碼風格、函式、運算子、類設計、繼承、構造/析構、複製、賦值、名稱空間、模組、模板、泛型、異常、STL容器和演算法等等。每個標準都簡明扼要地描述,並附有實際示例。從型別定義到錯誤處理,本書介紹了C++最佳實踐,包括一些最近才被識別和標準化的技術 - 即使你已經使用C++多年,你可能也不知道這些技術。一路走來,你會找到以下問題的答案
  • 什麼值得標準化 - 什麼不值得標準化?
  • 進行可擴充套件性編碼的最佳方法是什麼?
  • 合理的錯誤處理策略的要素是什麼?
  • 你如何(以及為什麼)避免不必要的初始化、迴圈和定義依賴關係?
  • 你何時(以及如何)應該一起使用靜態和動態多型?
  • 你如何練習“安全”重寫?
  • 你什麼時候應該提供無故障交換?
  • 你為什麼以及如何防止異常跨模組邊界傳播?
  • 你為什麼不應該在標頭檔案中編寫名稱空間宣告或指令?
  • 你為什麼應該使用STL vector和string而不是陣列?
  • 你如何選擇正確的STL搜尋或排序演算法?
  • 你應該遵循什麼規則來確保型別安全的程式碼?
無論你是一個人工作還是與他人合作,C++編碼標準都將幫助你編寫更清晰的程式碼 - 並以更少的麻煩和更少的挫敗感更快地編寫程式碼。

C++ 在 nutshell:語言 & 庫參考 作者:Ray Lischner
C++是一種功能強大、高度靈活且適應性強的程式語言,它允許軟體工程師快速有效地組織和處理資訊。這是對C++的完整參考,它首先按主題組織,然後是按字母順序排列的語言關鍵字參考,包括語法摘要和指向主題參考的指標。庫參考按標頭檔案組織,每個庫章節和類宣告按字母順序呈現類和型別,以便於查詢。交叉引用連結相關方法、類和其他關鍵功能。這種資源對於學生和專業程式設計師都應該有用。當你程式設計時,你需要快速回答關於語言語法或庫例程所需的引數的問題。例如,定義名稱空間的別名的C++語法是什麼?你究竟是如何建立和使用迭代器來處理標準庫容器的內容的?這本書是一本簡潔的桌面參考書,它回答了這些問題,將這種靈活、適應性強(但有點難以掌握)的語言的全部功能放在每個C++程式設計師的指尖。

C++ 標準庫:教程與參考 作者:Nicolai M. Josuttis
C++標準庫提供了一組常用的類和介面,這些類和介面極大地擴充套件了核心C++語言。 Josuttis的書不僅提供了每個庫元件的全面文件,還提供了對複雜概念的清晰解釋,描述了有效使用所需的實際程式設計細節,並給出了一個又一個的工作程式碼示例。這本徹底更新的書反映了C++標準庫的最新元素,這些元素已納入完整的ANSI/ISO C++語言標準中。特別是,文字側重於標準模板庫 (STL),檢查容器、迭代器、函式物件和STL演算法。

C++ 模板:完整指南 作者:David Vandevoorde, Nicolai M. Josuttis
模板是C++中最強大的特性之一,但它們常常被忽視、誤解和濫用。 C++ 模板:完整指南為軟體架構師和工程師提供了對為什麼、何時以及如何使用模板來更有效地構建和維護更清晰、更快、更智慧的軟體的清晰理解。

C++ 模板從對基本概念和語言特性的深刻教程開始。本書的其餘部分用作綜合參考,首先側重於語言細節,然後側重於廣泛的編碼技術,最後側重於模板的高階應用程式。本書中使用的示例說明了抽象概念並演示了最佳實踐。

讀者將學習
  • 模板的精確行為
  • 如何避免與模板相關的陷阱
  • 從基本到以前未記錄的成語和技術
  • 如何在不威脅效能或安全性的情況下重用原始碼
  • 如何提高C++程式的效率
  • 如何生成更靈活和可維護的軟體
  • 本實用指南向程式設計師展示瞭如何利用C++中模板功能的全部功能。
http://www.josuttis.com/tmplbook/ 的配套網站包含示例程式碼和其他更新。

主題:演算法和資料結構

初學者書籍

演算法導論 作者:TH Cormen
該書深入涵蓋了廣泛的演算法,但使其設計和分析可供所有級別的讀者訪問。每一章都是相對獨立的,可以用作一個學習單元。這些演算法用英語和虛擬碼描述,這些虛擬碼設計成任何做過一些程式設計的人都可以閱讀。解釋保持了基本性,而沒有犧牲覆蓋的深度或數學的嚴謹性。第二版新增了關於演算法的作用、機率分析和隨機演算法以及線性規劃的章節,並對本書的幾乎每個部分進行了廣泛的修訂。在一個微妙但重要的變化中,迴圈不變式在早期被引入並在整個文字中使用,以證明演算法的正確性。在不改變數學和分析重點的情況下,作者將大部分數學基礎材料從第一部分移至附錄,並在開頭添加了額外的激勵材料。

中級和專家書籍

計算機程式設計藝術 作者:Donald E. Knuth
這套多卷作品被廣泛認為是古典計算機科學的權威描述。前三卷幾十年來一直是學生、研究人員和從業人員在程式設計理論和實踐中的寶貴資源。

所有基本演算法的聖經,也是教會了當今許多軟體開發人員他們所瞭解的關於計算機程式設計的大部分知識的作品。 --Byte,1995年9月

無數的讀者都談論過克努特的作品對他們的個人產生的深刻影響。科學家們驚歎於他分析的美麗和優雅,而普通的程式設計師則成功地將他的“菜譜式”解決方案應用於日常問題。所有人都欽佩克努特作品的廣度、清晰度、準確性和幽默感。

我簡直無法告訴你,它們給了我多少快樂的學習和娛樂時光!我曾在汽車、餐廳、工作場所、家裡,甚至在小聯盟比賽中,當我的兒子不在陣容中時,都細細研讀過它們!--Charles Long

雖然主要作為參考書編寫,但有些人仍然覺得可以而且有趣地從頭到尾閱讀每一卷。中國的一位程式設計師甚至將這種體驗比作閱讀詩歌。
如果你認為你是一個非常優秀的程式設計師!那就讀讀[克努特]的《計算機程式設計藝術》!如果你能讀完它,你絕對應該給我發一份簡歷。--Bill Gates

無論你的背景如何,如果你需要進行任何嚴肅的計算機程式設計,你都會找到自己的理由,讓本系列中的每一卷都成為你學術或專業圖書館中容易獲取的一部分。

當一個問題足夠難,以至於你不得不把克努特的書從書架上拿下來時,總是很令人愉悅。我發現僅僅開啟其中一本就對計算機產生了一種非常有用的威懾作用。--Jonathan Laventhol

20多年來,克努特首次修訂了所有三本書,以反映該領域最近的發展。他的修訂主要集中在自上一版出版以來知識已經融合的領域,已經解決的問題以及已經改變的問題上。為了與這些書的權威性相符,所有關於該領域先前工作的歷史資訊都已在必要時進行了更新。與作者對一絲不苟的完美追求的聲譽相符,在他工作中被眼光敏銳和要求嚴格的讀者發現的罕見技術錯誤都已得到糾正。增加了數百個新的練習,以提出新的挑戰。