[買起來書單] 那些最常在 Stack Overflow 被提到的 30 本工程師必備書籍

最近 Working Effectively with Legacy Code 終於有了正體中文版,才想到是該來整理一篇了。

有國外網友用爬蟲抓了超過四千萬篇 Stack Overflow 的問題,統計網友在這些解答中提到的書籍。這次的新翻譯本就是本次列表中的第一名,可見其在國外網友的重要性。雖然有些書籍看似過時,但還是有很多歷久不衰的經典書籍值得收藏。

統計結果排名如下:1
(以中文版的書籍名為主,簡介與書籍封面來自天瓏網路書店


#1 Working Effectively with Legacy Code : 管理、修改、重構遺留程式碼的藝術 (中文版)

原文書名:Working Effectively with Legacy Code
作者:Michael C. Feathers
天瓏連結

Working Effectively with Legacy Code : 管理、修改、重構遺留程式碼的藝術 (中文版)

【名家名著】19
Robert C. Martin Series

軟體工程師必讀的十大好書之一
《無瑕的程式碼》作者 Bob 大叔親自撰文推薦!

遺留程式碼是每個 coder 在職場上幾乎都會遇到的難題,
且讓本書幫助您披荊嶄棘,殺出一條軟體變更的康莊大道!

讓你更能妥善處理你的遺留程式碼:使它有更多表現、更多功能、更具可依賴性以及更易於管理

你的程式碼容易修改嗎?當你修改它的時候,可以即時得到回饋嗎?你了解它的運作嗎?如果有任何一個答案為否定,那麼你面對的就是遺留程式碼,而且它會拖垮你的開發成效,使你浪費更多寶貴的時間與金錢。

在本書中,MICHAEL C. FEATHERS 提供了許多整套的策略,使讀者能夠更有效率地使用遺留程式碼,以及未經測試的遺留 code base。這本書取材於作者為他知名的 Object Mentor 研討會所撰寫的內容。作者在指導時所提到的技巧,已經幫助數以百計的開發者、技術管理者以及測試人員,使他們的遺留系統維持在掌控之中。

本書內容包括:
☛ 了解軟體修改的機制:增加特性、修正 bug、改善設計、調整性能。
☛ 使遺留程式碼進入測試控制工具(test harness)。
☛ 編寫測試來保護你免於引入新的問題。
☛ 可用於任何語言或平台的技術 ── 以 Java、C++、C 與 C# 為範例。
☛ 正確分辨程式碼應該修改的地方。
☛ 處理非物件導向的遺留系統。
☛ 處理看來似乎沒有任何結構的應用程式。

這本書也包含 24 個解依賴技術的目錄,可協助你讓程式的要素獨立,並且使變動更加安全。


#2 物件導向設計模式-可再利用物件導向軟體之要素

原文書名:Design Patterns: Elements of Reusable Object-Oriented Software
作者:Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
天瓏連結

物件導向設計模式-可再利用物件導向軟體之要素

本書探討的是在物件導向軟體設計領域裡,用以描述對特定問題精簡優雅的解決方案:

設計模式。主要分兩個部份,

第一、它展示 patterns 在建構複雜系統時可以扮演什麼腳色模式;

第二、它提供非常實用的參考資料讓軟體開發者可以將這些精良的 patterns 運用在自己的專案上。作者以豐富的物件導向軟體設計經驗,將頻繁出現卻又非常精簡的解決方案彙編成型錄,因此書籍一出版立刻成為物件導向圈內人手一冊的聖經。


#3 無瑕的程式碼-敏捷軟體開發技巧守則

原文書名:Clean Code: A Handbook of Agile Software Craftsmanship
作者:Robert C. Martin
天瓏連結

無瑕的程式碼-敏捷軟體開發技巧守則

本書榮獲 iThome 年度百大好書推薦

本書的原文書名為《Clean Code: A Handbook of Agile Software Craftsmanship》,根據作者的說法,《無瑕的程式碼》為 Jolt 得獎著作《敏捷軟體開發:原則、樣式及實務》的前傳。
在台灣另一本銷售極佳的書籍《重構 ─ 改善既有程式的設計》,根據亞馬遜 Amazon 網站的統計,購買該書原文版《Refactoring: Improving the Design of Existing Code》,又同時購買的其他書籍第一名,正是《Clean Code: A Handbook of Agile Software Craftsmanship》這一本書。

第一章作者開宗明義說明什麼是 Clean Code,他詢問了包含 C++ 發明人 Bjarne Stroustrup、Eclipse 策略教父 Dave Thomas、極限程式設計大師 Ron Jeffries、維基與極限程式設計發明人,Ward Cunningham 等等的大師,從他們的眼光來描述什麼是 Clean Code,最後才說到作者本人認為的 Clean Code 應該長成什麼樣子,有什麼好處,以及學習撰寫 Clean Code 的基本原則。

小編只能說,能和那麼多大師對談,就已經證明了作者也是一位大師

其餘部分本書分成三部份。

第一部份

包含有許多章節,這些章節將描述撰寫 clean code 的原則、模式及實踐,這些章節包含了不少的程式碼篇幅,閱讀它們頗具有挑戰性。這些章節替你準備好閱讀第二部份所需的背景知識。

第二部份

這裡包含許多複雜性不斷增加的案例討論。在這個部分,作者會直接帶領您進行整個重構的過程,每次的修改,作者都會說明原因,重構的對象並不僅止於一般的程式,甚至還包含了著名的框架,例如 JUnit(哇!把開放原始碼框架拿來重構,真酷)。

第三部份

終於到了成果收割的時候。最後一章列出了案例討論時搜集到的程式啟發和氣味。在案例討論裡走過和清理程式碼時,紀錄了每個行為的原因,並整理成一種程式啟發或氣味,成了一個知識庫,這個知識庫可以說是整本書的精華與交互參照。


#4 Java concurrency in practice

(無中文版)
作者:Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea
天瓏連結(原文書)

Threads are a fundamental part of the Java platform. As multicore processors become the norm, using concurrency effectively becomes essential for building high-performance applications. Java SE 5 and 6 are a huge step forward for the development of concurrent applications, with improvements to the Java Virtual Machine to support high-performance, highly scalable concurrent classes and a rich set of new concurrency building blocks. In Java Concurrency in Practice, the creators of these new facilities explain not only how they work and how to use them, but also the motivation and design patterns behind them.

However, developing, testing, and debugging multithreaded programs can still be very difficult; it is all too easy to create concurrent programs that appear to work, but fail when it matters most: in production, under heavy load. Java Concurrency in Practice arms readers with both the theoretical underpinnings and concrete techniques for building reliable, scalable, maintainable concurrent applications. Rather than simply offering an inventory of concurrency APIs and mechanisms, it provides design rules, patterns, and mental models that make it easier to build concurrent programs that are both correct and performant.

This book covers:

  • Basic concepts of concurrency and thread safety
  • Techniques for building and composing thread-safe classes
  • Using the concurrency building blocks in java.util.concurrent
  • Performance optimization dos and don’ts
  • Testing concurrent programs
  • Advanced topics such as atomic variables, nonblocking algorithms, and the Java Memory Model

#5 領域驅動設計:軟體核心複雜度的解決方法

原文書名:Domain-Driven Design: Tackling Complexity in the Heart of Software
作者:Eric Evans
天瓏連結

領域驅動設計:軟體核心複雜度的解決方法

【名家名著 18】  
領域驅動設計:軟體核心複雜度的解決方法

Domain-Driven Design: Tackling Complexity in the Heart of Software

『這本書應該出現在每位軟體開發人員的書架上。』(This book belongs on the shelf of every thoughtful software developer.)
-Kent Beck
軟體大師,JUnit 的創始人,XP 與 TDD 專家

『Eric 的這本書太棒、太神奇了,他準確地告訴你如何讓軟體設計滿足你的模型需求…… 本書讀起來趣味無窮。Eric 有許多有趣的故事,而且描述起來很有一套…… 它將成為軟體開發人員必讀的經典之作。』
-Ralph Johnson
GoF 的《Design Patterns》的作者

『如果你認為自己在物件導向程式設計中的投入沒有得到回報,讀了這本書你就會知道自己漏掉什麼。』
-Ward Cunningham
設計模式和敏捷軟體開發方法的先驅

『Eric Evans 成功證明了作為開發核心的領域模型的重要性。他搭建了一個穩固的框架,並提供一套實作技術和技巧。這裡沉澱下來的是亙古不變的智慧,在流行的方法論都淪為明日黃花之後,它依然光華璀璨。』
-Dave Collins
《Designing Object-Oriented User Interfaces》的作者

『Eric 完全從實戰者的角度著手,描述了通用的語言、與使用者共享模型的好處、物件生命週期的管理、深度重構的過程和結果,這是對我們這個領域的巨大貢獻。』
-Luke Hohmann
《Beyond Software Architecture》的作者

『Eric 成功抓住了經驗豐富的物件設計師在設計過程中會使用的那一部分…… 我們從未有組織地和有系統地把建立領域邏輯的原則制度化。這是一本非常重要的著作。』
-Kyle Brown
《Enterprise Java Programming with IBM WebSphere》的作者

『講解 DDD 的書籍並不多,而這本書是當中公認最好的一本。如果您對於 DDD 有任何疑問,這本書將會提供最佳解答』
-陳錦輝
博碩文化《名家名著》總編輯


#6 JavaScript-優良部份

原文書名:JavaScript: The Good Parts
作者:Douglas Crockford
天瓏連結

JavaScript-優良部份

大多數程式語言都包含好與不好的兩類成分,但 JavaScript 的後者似乎佔了不少比例,因為它是個開發與發表都很匆促、沒有時間精雕細琢的語言。這本權威書籍刮除了 JavaScript 中最可怕的功能,為大家呈現較為可靠、較可讀解、也較可維護的部分 JavaScript - 我們能用這部分功能建立真正具擴充性、又有效率的原始碼。

本書作者 Douglas Crockford,一位獲程式開發社群中許多人公認的 JavaScript 專家,分辨出了讓 JavaScript 成為傑出物件導向程式設計語言的優良部分。但很可惜,這些優良的部分(例如函式、寬鬆型別、動態物件、富表達性的物件實字註記)都與糟糕到家的想法混在一起(例如以全域變數為基礎的程式設計模型)。

當 Java applets 失敗後,JavaScript 變成全球資訊網上的預設程式語言;它的流行程度,完全與它的程式語言品質無關。在《JavaScript:優良部分》中,Crockford 從龍蛇雜處的良好意圖與錯誤失敗中,仔細挖出 JavaScript 所有真正優雅的部分,包括:

  • 語法
  • 繼承性
  • 方法
  • 物件
  • 陣列
  • Style
  • 函式
  • 正規式
  • 漂亮的功能

一本《JavaScript:優良部分》在手,你將發現一個美麗、優雅、輕量,且高度表達性的語言,可建立有效率的程式碼;無論你在管理物件函式庫,或只是想讓 Ajax 跑得更快。如果你為全球資訊網開發網站或應用程式,一定要閱讀本書。

Douglas Crockford 是 Yahoo! 的資深 JavaScript 架構師,因為他對 JSON(JavaScript Object Notation)格式的引進與維護而相當知名。經常於 JavaScript 深度研討會上演講,也是 ECMAScript 委員會的成員。


#7 企業應用架構模式

(僅有簡體版)
原文書名:Patterns of Enterprise Application Architecture
作者:Martin Fowler
天瓏連結(簡體版)

企業應用架構模式

企業應用開發的實踐得益於多種新技術的出現,多層的面向對象平臺 (如 Java、.NET) 已經日漸平常。這些新工具和新技術有能力構建更強大的企業應用程序,但是在實現上還不太容易。由於開發人員未能充分理解有經驗的對象程序開發人員在架構方面的經驗和教訓,因此企業應用中經常存在一些共同的錯誤。

本書就是面向企業應用開發者的,可幫助他們迎接這種艱難挑戰。本書的作者 Martin Fowler 註意到,儘管技術本身存在變化 —— 從 Smalltalk 到 CORBA,再到 Java 和 .NET,但基本的設計思想並沒有太多變化,可以加以適當調整,用來解決那些共同的問題。在一組專家級合作者的幫助下,作者將 40 多種經常出現的解決方案轉化成模式,最終寫成這本能夠應用於任何一種企業應用平臺的、關於解決方案的、不可或缺的手冊。本書曾於 2002 年榮獲美國軟件開發雜誌圖書類的生產效率獎和讀者選擇獎。

本書涉及兩部分內容。第一部分是關於如何開發企業應用的簡單介紹。在閱讀這部分時,讀者可以從頭到尾通讀,以掌握本書的範圍。第二部分是本書的主體,是關於模式的詳細參考手冊,每個模式都給出使用方法和實現信息,並配有詳細的 Java 代碼或 C# 代碼的示例。此外,整本書中還用大量 UML 圖來進一步闡明有關概念。

本書是為致力於設計和構建企業應用的軟件架構師、設計人員和編程人員而寫的,同時也可作為高等院校電腦專業及軟件學院相關課程的參考教材。


#8 CODE COMPLETE:軟體開發實務指南

原文書名:Code Complete: A Practical Handbook of Software Construction
作者:Steve McConnell
天瓏連結

CODE COMPLETE:軟體開發實務指南

廣獲好評的程式設計實務指南,在過去十幾年間,由 Steve McConnell 所原創的《Code Complete》已幫助許許多多的開發者,開發出更完善的軟體。本書包含最新的更新與修訂內容,以及數百項全新的程式碼範例,充分闡明軟體建構的科學與藝術。McConnell 匯集了來自學術研究與商業實務的各項知識,歸納出最有效的工作技巧、以及最關鍵的實踐原則,轉化成一系列清晰且務實的指引。無論你的知識水準、工作環境或專案規模如何,本書都能提昇你的智慧,幫助你建構出最佳品質的程式碼。

發掘各項歷久彌新的技巧與策略,使你能夠:

  • 建構出低複雜性,但卻有高可塑性的設計。
  • 組織健全的協作式開發並從中獲益。
  • 應用防禦性程式設計技巧,消弭發生錯誤的機會。
  • 洞察合適的時機,妥善地對程式碼進行重構或演變。
  • 依專案規模選擇合適的實踐方法。
  • 快速且有效地進行除錯。
  • 及早且正確地解決重大的建構問題。
  • 從一而終保持高品質的軟體專案。

#9 重構|改善既有程式的設計

原文書名:Refactoring: Improving the Design of Existing Code
作者:Martin Fowler
天瓏連結

重構|改善既有程式的設計

完全修訂及更新:包含新的重構方法和範例程式

二十多年來,世界各地經驗豐富的程式員都使用 Martin Fowler 的《重構》來改善既有程式的設計、提升軟體的易維護性,以及讓既有的程式更容易被人瞭解。

為了反映程式設計領域的重大變化,作者全面翻新書籍內容,推出這本備受期待的新版本。《重構 第二版》提供了新的重構名錄,加入 JavaScript 範例程式以及新的實用範例來展示各種重構。

這個版本與第一版一樣,將解釋什麼是重構、為何重構、如何認出需要重構的程式,以及如何成功地重構,無論你是使用哪一種語言。

  • 瞭解重構的程序與一般原則
  • 快速運用實用的重構技術,讓程式更容易理解與修改
  • 辨認暗示有待重構的程式碼 “異味”
  • 探討重構,每一個案例都包括說明、動機、作法與簡單的範例
  • 為重構建立可靠的測試程式
  • 認識重構的取捨與障礙

本書原文網站提供免費的 web 標準版本,包含更多重構資源,書中內容將說明如何取得。


#10 深入淺出設計模式

原文書名:Head First Design Patterns
作者:Eric Freeman, Bert Bates, Kathy Sierra, Elisabeth Robson
天瓏連結

深入淺出設計模式

你不想重新發明輪子(或者更差的是,沒有充氣的輪子),所以你從設計模式中尋求協助-設計模式是過去人們面對軟體設計問題所學來的經驗。

有了設計模式,你就可以利用其他人經驗和實務的精華,省下的時間可以用在… 其他的事情上,像是:更有挑戰性的事情、更複雜的事情、 更有趣的事情。

你想要學習:

事關緊要的模式
何時使用某個模式,為何使用該模式
如何在你自己的設計中馬上採用這些模式
何時不該使用模式(如何避免對模式過度狂熱)
某個模式是依據哪些 OO 設計守則而設計出來的
更重要的是,你想在學習設計模式的過程中,不會感覺到昏昏欲睡。

如果你曾經讀過任何一本一頭栽進系列書籍, 你就會知道你能夠從本書中得到的是:透過豐富的視覺效果讓你的大腦充分地運作。

本書的編寫運用許多最新的研究, 包括神經生物學、認知科學、以及學習理論,這使得這本書能夠將這些設計模式深深地烙印在你的腦海中,不容易被遺忘。

你將會更擅長於解決軟體設計的問題,並能夠和你的團隊成員用模式的術語來溝通。


#11 C 語言程式設計

原文書名:The C Programming Language
作者:Brian W. Kernighan, Dennis M. Ritchie
天瓏連結

C 語言程式設計

  • 詳細探討 C 語言的基本資料型別、運算子和運算式
  • 內容涵蓋函數和程式結構、外變數、範圍規則等介紹
  • 指標、結構、運算符號集、及標準程式庫等重要特性說明
  • 提供完整且經過測試的程式範例
  • 內含 C 語言參考手冊及最新 C99 標準
  • 詳細探討 C 語言的基本資料型別、運算子和運算式
  • 內容涵蓋函數和程式結構、外變數、範圍規則等介紹
  • 指標、結構、運算符號集、及標準程式庫等重要特性說明
  • 提供完整且經過測試的程式範例
  • 內含 C 語言參考手冊及最新 C99 標準

#12 Effective C++ : 改善程序與設計的 55 個具體做法

原文書名:Effective C++: 55 Specific Ways to Improve Your Programs and Designs
作者:Scott Meyers
天瓏連結

Effective C++ : 改善程序與設計的 55 個具體做法

《Effective C++》前兩個版本抓住了全世界無數程式員的目光。原因十分顯明:Scott Meyers 極富實踐意義的 C++ 研討方式,描述出專家用以產出乾淨、正確、高效程式碼的經驗法則和行事法則 — 也就是他們幾乎總是做或不做的某些事。

本書一共組織 55 個準則,每一條準則描述一個編寫出更好的 C++ 的方式。每一個條款的背後都有具體範例支撐。第三版有一半以上的篇幅是嶄新內容,包括討論資源管理和模板(templates)運用的兩個新章。為反映出現代設計考量,對第二版論題做了廣泛的修訂,包括異常(exceptions)、設計範式(design patterns)和多緒(multithreading)。

《Effective C++》的重要特徵包括:

  • 高效的 classes、functions、templates 和 inheritance hierarchies(繼承體系)方面的專家級指導。
  • 嶄新的 “TR1” 標準程式庫功能應用,以及與既有標準程式庫組件的比較。
  • 洞察 C++ 和其他語言(例如 Java、#C、C)之間的不同。此舉有助於那些來自其他語言陣營的開發人員消化吸收 C++ 式的各種解法。

#13 Test-Driven Development

(無中文版)
作者:Kent Beck
天瓏連結(原文書)

Test-Driven Development

Test-driven development (TDD) is a new approach to application development that is designed to eliminate the fear often associated with building software. Admittedly, some fear is healthy (often viewed as a conscience that tells programmers to “be careful!” ), but the author believes that programmers build better software when they have the freedom to be creative. By building tests before coding begins, programmers ensure the success of their application from the outset. Students are more likely to achieve positive results with TDD. The author’s example-driven approach also teaches students to be better communicators, and encourages team members to seek out constructive criticism.


#14 演算法導論

(僅有簡體版,已絕版)
原文書名:Introduction to Algorithms
作者:Martin Fowler
天瓏連結(原文書)

演算法導論

本書深入淺出,全面地介紹了計算機演算法。對每一個演算法的分析既易於理解又十分有趣,並保持了數學嚴謹性。本書的設計目標全面,適用於多種用途。涵蓋的內容有:演算法在計算中的作用,概率分析和隨機演算法的介紹。本書專門討論了線性規劃,介紹了動態規劃的兩個應用,隨機化和線性規劃技術的近似演算法等,還有有關遞歸求解、快速排序中用到的劃分方法與期望線性時間順序統計演算法,以及對貪心演算法元素的討論。本書還介紹了對強連通子圖演算法正確性的證明,對哈密頓回路和子集求和問題的 NP 完全性的證明等內容。全書提供了 900 多個練習題和思考題以及敘述較為詳細的實例研究。

本書內容豐富,對本科生的資料結構課程和研究生的演算法課程都是很實用的教材。本書在讀者的職業生涯中,也是一本案頭的數學參考書或工程實踐手冊。


#15 精通正規表達式

原文書名:Mastering Regular Expressions
作者:Jeffrey E.F. Friedl
天瓏連結

精通正規表達式

涵蓋 Perl, PHP, Java, .NET, Ruby 以及其他語言!

理解您的資料,增進生產力

這本書將帶您熟悉一套能讓您生活輕鬆許多的生產力秘密:正規表達式 (regular expressions)。精細雕琢的正規表達式可以把數小時的勞力工作化為 15 秒搞定的解決法。現在它已經是許多語言、著名工具的標準功能 —Perl, PHP, Java, Python, Ruby, MySQL, VB.NET 與 C# (還有任何使用 .NET Framework 的語言) 都有提供這個功能。正規表達式將能讓您寫出複雜、精細的文字處理工作,這些工作可能是您以往絕不認為可以自動化的。

《精通正規表達式 第三版》納入 PHP 以及它提供的強大正規表達式功能。這個版本同時也徹底更新以反應其他語言的進展,像是擴充了深入討論 Sun 的 java.util.regex 相關內容,同時也特別提到許多 Java 1.4.2 與 Java 1.5/1.6 之間的差異。

本書涵蓋主題包括:

  • 比較各種語言與工具提供的功能
  • 正規表達式引擎如河運作
  • 最佳化 (效果明顯!)
  • 只比對您要的資料,略過您不要的部份
  • 各語言獨立的章節探討

全書以明快、有趣的風格撰寫,讓程式設計者能清楚理解這個複雜的主題,同時也充滿各種現實世界之中難解問題的解法。《精通正規表達式 第三版》提供許多有用的資訊讓您立刻發揮,為各種問題寫出優雅、節省時間的解決方案。


#16 CLR Via C

(僅有簡體版)
原文書名:CLR Via C#
作者:Jeffrey Richter
天瓏連結(簡體版)

CLR Via C#

本書針對 CLR 和 .NET Framework 4.5 進行深入、全面的探討,並結合實例介紹瞭如何利用它們進行設計、開發和調試。全書 5 部分共 29 章。第 Ⅰ 部分介紹 CLR 基礎,第 Ⅱ 部分解釋如何設計類型,第 Ⅲ 部分介紹基本類型,第 Ⅳ 部分以核心機制為主題,第 Ⅴ 部分重點介紹執行緒。

通過本書的閱讀,讀者可以掌握 CLR 和 .NET Framework 的精髓,輕鬆、高效地創建高性能應用程式。


#17 Cocoa Programming for Mac OS X

(無中文版)
作者:Aaron Hillegass, Adam Preble
天瓏連結(原文書)

Cocoa Programming for Mac OS X

If you’re developing applications for Mac OS X, Cocoa® Programming for Mac® OS X, Fourth Edition, is the book you’ve been waiting to get your hands on. If you’re new to the Mac environment, it’s probably the book you’ve been told to read first.

Covering the bulk of what you need to know to develop full-featured applications for OS X, written in an engaging tutorial style, and thoroughly class-tested to assure clarity and accuracy, it is an invaluable resource for any Mac programmer. Specifically, Aaron Hillegass and Adam Preble introduce the two most commonly used Mac developer tools: Xcode and Instruments. They also cover the Objective-C language and the major design patterns of Cocoa. Aaron and Adam illustrate their explanations with exemplary code, written in the idioms of the Cocoa community, to show you how Mac programs should be written. After reading this book, you will know enough to understand and utilize Apple’s online documentation for your own unique needs. And you will know enough to write your own stylish code.

Updated for Mac OS X 10.6 and 10.7, this fourth edition includes coverage of Xcode 4, blocks, view-based table views, Apple’s new approach to memory management (Automatic Reference Counting), and the Mac App Store. This edition adds a new chapter on concurrency and expands coverage of Core Animation. The book now devotes a full chapter to the basics of iOS development.


#18 Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library

(無中文版)
作者:Scott Meyers
天瓏連結(原文書)

Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library

C++‘s Standard Template Library is revolutionary, but learning to use it well has always been a challenge for students. In Effective STL, best-selling author Scott Meyers (Effective C++, More Effective C++) reveals the critical rules of thumb employed by the experts – the things they almost always do or almost always avoid doing – to get the most out of the library. This book offers clear, concise, and concrete guidelines to C++ programmers. While other books describe what’s in the STL, Effective STL shows the student how to use it. Each of the book’s 50 guidelines is backed by Meyers’ legendary analysis and incisive examples, so the student will learn not only what to do, but also when to do it - and why.


#19 Modern C++ Design: Generic Programming and Design Patterns Applied

(無中文版)
作者:Scott Meyers
天瓏連結(原文書)

# Modern C++ Design: Generic Programming and Design Patterns Applied

Achieve more with C++ than you ever imagined possible!

  • Introduces generic components, which offer breakthrough power for maximizing expressiveness, flexibility, and reuse of code.
  • Readers will learn exciting, powerful new C++ idioms that will help them master the most modern library writing techniques.
  • Forewords by Scott Meyers (Effective C++), one of the world’s leading C++ experts, and by John Vlissides, of the IBM T.J. Watson Research center, one of the world’s leading patterns experts.

In Modern C++ Design, Andrei Alexandrescu opens new vistas for C++ programmers. Displaying extraordinary creativity and virtuosity, Alexandrescu offers a cutting-edge approach to software design that unites design patterns, generic programming, and C++, enabling programmers to achieve expressive, flexible, and highly reusable code. The book introduces the concept of generic components, reusable design templates that enable an easier and more seamless transition from design to application code, generate code that better expresses the original design intention, and support the reuse of design structures with minimal recoding. The author then shows how to apply this approach to recurring, real-world issues that C++ programmers face in their day-to-day activity. All code is available on the Web, along with Alexandrescu’s downloadable Loki C++ library, which provides powerful out-of-the-box functionality for virtually any C++ project. For experienced C++ programmers who have at least some familiarity with the Standard Template Library (STL).


#20 大型 C++ 軟體設計

原文書名:Large-Scale C++ Software Design
作者:John Lakos
天瓏連結

大型 C++ 軟體設計

開發大型 C++ 軟體系統不只需要了解邏輯設計知識,為了專案成功,您更需要掌握實體設計的觀念,它是開發過程的技術面向,很多資深的軟體開發工程師都不一定很有這方面的經驗。坊間書籍大多是探討邏輯設計,鮮少述及實體設計。

本書是需要大量專業 C++ 開發工作如資料庫、作業系統、編譯器以及軟體框架的權威書籍,它也是教導如何開發大型系統的第一本書,更是少數幾本由 C++ 程式語言的實際面來探討物件導向設計的其中之一。

在本書中,Lakos 先生將傳授將大型系統拆解成由小型、易於維護的軟體元件所構成的實體 (不是繼承) 架構。系統本身如果不具有環形實體相依性,對它維護、測試與重複利用會比對相互緊密相依的系統容易且經濟。除了闡述好的實體設計就像好的邏輯設計一樣重要之外,作者也提供一系列技巧用以消除環形、編譯時期與連結時期相依關係。作者接著會延伸這些觀念到非常非常大型的系統,而在本書後段將探討單一元件設計常見的 top-down 方式。


#21 Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build

(無中文版)
作者:Sayed Hashimi, William Bartholomew
天瓏連結(原文書)

Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build

As software complexity increases, proper build practices become ever more important. This essential reference—fully updated for Visual Studio 2010—drills inside MSBuild and shows you how to maximize your control over the build and deployment process. Learn how to customize and extend build processes with MSBuild—and scale them to the team, product, or enterprise level with Team Foundation Build.


#22 Programming ASP.NET Core

(原始資料為 2.0 版,我替換成 Core 版本)
(無中文版)
作者:Dino Esposito
天瓏連結

Programming ASP.NET Core

Dino Esposito’s Programming ASP.NET Core is the definitive guide to practical software development with Microsoft’s exciting new ASP.NET Core technologies. Unlike competitive books that focus primarily on ASP.NET Core’s cross-platform capabilities or only what’s changed from earlier versions, Esposito offers a complete learning path for every developer who wants to build production solutions. Esposito’s expert coverage includes:

  • Applying all key ASP.NET Core components, including MVC for HTML generation, .NET Core, EF Core, ASP.NET Identity, dependency injection, and more
  • Integrating ASP.NET Core with leading client-side frameworks, including Bootstrap
  • ASP.NET Core code for implementing business logic and data transformations
  • Handling configuration, routing, controllers, views, and common tasks (including posting forms and presenting data)
  • Performing complementary tasks: error handling, logging, application design, authentication, localization, and more
  • Front-end development: ensuring responsiveness, creating mobile views, and providing advanced interactivity
  • Middleware, data access, runtime architecture, and deployment
  • Taking full advantage of the brand-new ASP.NET Core runtime

#23 xUnit Test Patterns: Refactoring Test Code

(無中文版)
作者:Gerard Meszaros
天瓏連結(原文書)

xUnit Test Patterns: Refactoring Test Code

Automated testing is a cornerstone of agile development. Testing can deliver new functionality more aggressively, accelerate user feedback, and improve quality. However, for many developers, creating effective automated tests is a unique and unfamiliar challenge.

XUnit Test Patterns is the definitive guide to writing automated tests for today’s popular XUnit test automation frameworks. Renowned testing expert Gerard Meszaros introduces more than 120 proven patterns for making tests easier to write, understand, and maintain. He then shows you how to make them more robust and repeatable, and far more cost-effective.

Drawing on his extensive experience, Meszaros illuminates the evolving role of software testing and clearly defines unit, component and system testing. He then links these concepts to the “programmer” and “customer” tests required by agile methods. You’ll learn how to optimize your test automation strategy, organize it, and implement it with XUnit. You’ll also learn three categories of recurring problems, and how to overcome each of these “test smells.”

A comprehensive reference to more than 120 testing patterns is included, and Meszaros illuminates the principles underlying each pattern, offering step-by-step usage instructions. You’ll find high-level strategy patterns, design-level patterns for testing specific functionality, and coding idioms for optimizing specific tests. In addition, an extensive library of relevant code samples is available online. Topics covered include:

  • Writing better tests–and writing them faster
  • Software testing phases: fixture setup, exercise SUT, result verification, and fixture teardown
  • Testing business logic, databases, user interfaces, and machine-to-machine interfaces
  • Isolating software to test it independently from its environment
  • Refactoring tests for greater simplicity
  • Working effectively with XUnit, NUnit, JUnit, and other implementations
  • Designing software for greater testability

This book will benefit developers, managers, and testers working with any agile or conventional development process, any testing framework, and any testing strategy–from “tests as specification” to “tests as safety net.”


#24 Concurrent Programming on Windows

(無中文版)
作者:Joe Duffy
天瓏連結(原文書)

Concurrent Programming on Windows

Author Joe Duffy has risen to the challenge of explaining how to write software that takes full advantage of concurrency and hardware parallelism. In Concurrent Programming on Windows, he explains how to design, implement, and maintain large-scale concurrent programs, primarily using C# and C++ for Windows.

Duffy aims to give application, system, and library developers the tools and techniques needed to write efficient, safe code for multicore processors. This is important not only for the kinds of problems where concurrency is inherent and easily exploitable—such as server applications, compute-intensive image manipulation, financial analysis, simulations, and AI algorithms—but also for problems that can be speeded up using parallelism but require more effort—such as math libraries, sort routines, report generation, XML manipulation, and stream processing algorithms.

Concurrent Programming on Windows has four major sections: The first introduces concurrency at a high level, followed by a section that focuses on the fundamental platform features, inner workings, and API details. Next, there is a section that describes common patterns, best practices, algorithms, and data structures that emerge while writing concurrent software. The final section covers many of the common system-wide architectural and process concerns of concurrent programming.

This is the only book you’ll need in order to learn the best practices and common patterns for programming with concurrency on Windows and .NET.


#25 編譯原理

(僅有簡體版)
原文書名:Compilers : Principles, Techniques, and Tools
作者:Monica S Lam, R. Sethi, Jeffrey D. Ullman, A.V. Aho
天龍連結(簡體版)

編譯原理

《編譯原理 (第 2 版)》全面、深入地探討了編譯器設計方面的重要主題,包括詞法分析、語法分析、語法制導定義和語法制導翻譯、運行時刻環境、目標代碼生成、代碼優化技術、並行性檢測以及過程間分析技術,並在相關章節中給出大量的實例。與上一版相比,《編譯原理 (第 2 版)》進行了全面的修訂,涵蓋了編譯器開發方面的最新進展。每章中都提供了大量的系統及參考文獻。 《編譯原理 (第 2 版)》是編譯原理課程方面的經典教材,內容豐富,適合作為高等院校計算機及相關專業本科生及研究生的編譯原理課程的教材,也是廣大技術人員的極佳參考讀物。


#26 Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries

(無中文版)
作者:Krzysztof Cwalina, Brad Abrams
天瓏連結(原文書)

Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries

Framework Design Guidelines, Second Edition, teaches developers the best practices for designing reusable libraries for the Microsoft .NET Framework. Expanded and updated for .NET 3.5, this new edition focuses on the design issues that directly affect the programmability of a class library, specifically its publicly accessible APIs.

This book can improve the work of any .NET developer producing code that other developers will use. It includes copious annotations to the guidelines by thirty-five prominent architects and practitioners of the .NET Framework, providing a lively discussion of the reasons for the guidelines as well as examples of when to break those guidelines.

Microsoft architects Krzysztof Cwalina and Brad Abrams teach framework design from the top down. From their significant combined experience and deep insight, you will learn

  • The general philosophy and fundamental principles of framework design
  • Naming guidelines for the various parts of a framework
  • Guidelines for the design and extending of types and members of types
  • Issues affecting–and guidelines for ensuring–extensibility
  • How (and how not) to design exceptions
  • Guidelines for–and examples of–common framework design patterns

Guidelines in this book are presented in four major forms: Do, Consider, Avoid, and Do not. These directives help focus attention on practices that should always be used, those that should generally be used, those that should rarely be used, and those that should never be used. Every guideline includes a discussion of its applicability, and most include a code example to help illuminate the dialogue.

Framework Design Guidelines, Second Edition, is the only definitive source of best practices for managed code API development, direct from the architects themselves.

A companion DVD includes the Designing .NET Class Libraries video series, instructional presentations by the authors on design guidelines for developing classes and components that extend the .NET Framework. A sample API specification and other useful resources and tools are also included.


#27 C++ 編程規範:101 個準則、指導方針,和最佳實踐

原文書名:C++ Coding Standards: 101 Rules, Guidelines, and Best Practices
作者:Herb Sutter, Andrei Alexandrescu
天瓏連結

C++ 編程規範:101個準則、指導方針,和最佳實踐

堅實而高品質的編程規範(coding standards)可以改善軟體品質,提早產品上市,助長團隊合作,把時間用在重要且合理的事情上,並且簡化維護。當今全球最受矚目的兩位 C++ 專家從全世界無數 C++ 社群的豐富經驗中提煉出一整組編程規範,讓每一位開發人員和團隊都能夠了解並用來做為他們自己的編程規範的基礎。
兩位作者涵蓋了 C++ 編程的幾乎每一個面向:設計和撰碼風格(design and coding style)、函式(functions)、運算子(operators)、class 設計、繼承(inheritance)、建構 / 解構(construction/destruction)、拷貝(coping)、賦值(assignment)、命名空間(namespaces)、模塊(modules)、模板(templates)、泛型(genericity)、異常(exceptions)、STL 容器和演算法(containers and algorithms),以及更多內容,並搭配實際範例。從型別定義(type definition)到錯誤處理(error handling),本書呈現 C++ 的最佳實踐,包括某些縱使你使用 C++ 多年也不一定知曉,最近才獲確認及標準化的技術。循此方向,你將發現諸如此類的問題解答:

  • 什麼東西值得被標準化?什麼不值得?
  • 什麼是寫出伸縮性程式碼(code for scalability)的最佳手段?
  • 什麼是合理的錯誤處理策略(error handling policy)的要素?
  • 如何(以及為什麼)避免非必要的初始化和循環相依(cyclic dependencies)?
  • 何時(以及如何)應該同時使用靜態和動態多型(static and dynamic polymorphism)?
  • 如何實踐安全的覆寫(“safe” overriding)?
  • 何時應該提供一個 no-fail swap?
  • 為什麼應該(以及如何)阻止異常跨模塊邊界(across module boundaries)傳播?
  • 為什麼不該在表頭檔內寫 namespace 的宣告式或指令(declarations or directives)?
  • 為什麼應該使用 STL 的 vector 和 string 來取代 arrays?
  • 如何選擇正確的 STL search 或 sort 演算法?
  • 應該遵循什麼規則來保證 type-safe 程式碼?

不論個人或團隊,本書助你寫出更乾淨的程式碼 — 而且更快寫出,帶著更少的困難和挫敗。


#28 UNIX 網絡編程

(僅有簡體版)
原文書名:Unix Network Programming, Vol. 1: The Sockets Networking API
作者:W. Richard Stevens, Bill Fenner, Andrew M. Rudoff
天瓏連結(簡體版)

UNIX 網絡編程

史蒂文斯、芬納、魯道夫編著的《UNIX 網絡編程(捲 1 套接字聯網 API 第 3 版)》是一部 UNIX 網絡編程的經典之作!書中全面深入地介紹瞭如何使用套接字 API 進行網絡編程。全書不但介紹了基本編程內容,還涵蓋了與套接字編程相關的高級主題,對於客戶 ∕ 服務器程序的各種設計方法也作了完整的探討,最後還深入分析了流這種設備驅動機制。
本書內容詳盡且具權威性,幾乎每章都提供精選的習題,並提供了部分習題的答案,是網絡研究和開發人員理想的參考書。


#29 Purely Functional Data Structures

(無中文版)
作者:Okasaki
天瓏連結(原文書)

Purely Functional Data Structures

Most books on data structures assume an imperative language such as C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures from the point of view of functional languages, with examples, and presents design techniques that allow programmers to develop their own functional data structures. The author includes both classical data structures, such as red-black trees and binomial queues, and a host of new data structures developed exclusively for functional languages. All source code is given in Standard ML and Haskell, and most of the programs are easily adaptable to other functional languages. This handy reference for professional programmers working with functional languages can also be used as a tutorial or for self-study.


#30 單元測試的藝術

原文書名:The Art of Unit Testing: with examples in C#
作者:Roy Osherove
天瓏連結

單元測試的藝術

理解如何撰寫單元測試,以及讓它們變得可維護、可讀、可被信任,是這本書的主要內容,不管你使用的是何種程式語言跟編輯器。這本書涵蓋了撰寫單元測試的基本知識,並且講解互動測試的基礎,介紹了在真實世界撰寫、管理和維護單元測試的最佳實踐。」


  1. 參考資料:Top mentioned books on stackoverflow.com ↩︎



創用 CC 授權條款
本著作由小克製作,以創用CC 姓名標示-相同方式分享 4.0 國際 授權條款釋出。