代碼大全

代碼大全

代碼大全(第二版)是著名IT暢銷書作者Steve McConnell十一年前的經典著作的全新演繹,該作者是兩屆Software Development Magzine Jolt Award震撼大獎得主大全是著名IT暢銷書作者Steve McConnell十一年前的經典著作的全新演繹。

基本信息

編輯推薦

代碼大全(第二版)》第3次印刷,新增中文索引及勘誤信息,增量不加價,值得收藏。

代碼大全(第二版)是著名IT暢銷書作者Steve McConnell十一年前的經典著作的全新演繹,該作者是兩屆SoftwareDevelopmentMagzineJoltAward震撼大獎得主。

兩屆震撼大獎得主,數十年軟體開發智慧,十二年前的經典,十二年後再鑄輝煌!

Amazon全五星一致推薦!開發者必讀著作!圖書館必備典藏!

《程式設計師》雜誌海量篇幅專題報導(2006年第3期)。

第二書店/噹噹網;中國互動出版網;瀋陽華儲網上書店;·北京蔚藍網上書城四大權威網上書店鼎力推薦!

“《代碼大全》第1版在我看來堪稱軟體工程領域的經典之作一而第2版則更棒!”

——Ralph Johnson,伊利諾州立大學;《設計模式》(DesignPatterns)作者之一

“無論您是新手還是經驗豐富的開發人員,《代碼大全》(第2版)都能教會您思考編程的最佳方法。”

——JeffreyRichter(),《MicrosoftNET框架實用編程》(AppfiedMicrosoft.NETFrameworkProgramming)作者

“這本書是講述軟體構建的權威指南一準備孤身前往荒島的程式設計師只要帶上這本書就足夠了。”

——DiomidisSpinellis,《代碼閱讀方法與實踐》(CodeReading:

TheOpenSourcePerspective)作者“Steve McConnell是一位既在一線實踐,又能把其中奧妙講個明白的少數人之一。”

——John Vlissides,IBM研究院;《設計模式》(DesignPatterns)作者之一

“SteveMcConnell比任何人都懂得如何構建軟體;我們十分慶幸他能把其所有的深邃見解和實踐經驗寫成這樣一本重要而新穎的圖書。”

——“Visual Basic之父”AlanCooper,《軟體觀念革命》(AboutFace2.0)作者

內容簡介

代碼大全(第二版)是著名IT暢銷書作者SteveMcConnell十一年前的經典著作的全新演繹:第二版不是第一版的簡單修訂增補,而是完全進行了重寫;增加了很多與時俱進的內容。這也是一本完整的軟體構建手冊,涵蓋了軟體構建過程中的所有細節。它從軟體質量和編程思想等方面論述了軟體構建的各個問題,並詳細論述了緊跟潮流的新技術、高屋建瓴的觀點、通用的概念,還含有豐富而典型的程式示例。本書中所論述的技術不僅填補了初級與高級編程技術之間的空白,而且也為程式設計師們提供了一個有關編程技巧的信息來源。本書對經驗豐富的程式設計師、技術帶頭人、自學的程式設計師及幾乎不懂太多編程技巧的學生們都是大有裨益的。可以說,無論你是什麼背景,閱讀本書都會讓你在更短的時間內、更容易地寫出更好的程式。

作者簡介

史蒂夫·邁克康奈爾(SteveMcConnell)被公認為軟體開發社區中的首要作者和發言人之一。他是Construx Software公司的首席軟體工程師。他所編著的圖書包括曾被《軟體開發》雜誌授予優異產品震撼大獎的《代碼大全》和《快速軟體開發》,以及《軟體項目生存指南》和《專業軟體開發》等等。

圖書目錄

前言

鳴謝

核對表目錄

目錄

目錄

第1部分打好基礎

第1章歡迎進入軟體構建的世界

1.1什麼是軟體構建

1.2軟體構建為何如此重要

1.3如何閱讀本書

關鍵點

第2章用隱喻來更充分地理解軟體開發

2.1隱喻的重要性2.2如何使用軟體隱喻

2.3常見的軟體隱喻

軟體中的書法:寫作代碼

軟體的耕作法:培植系統

軟體的牡蠣養殖觀點:系統生長

軟體構建:建造軟體

套用軟體技術:智慧工具箱

組合各個隱喻

更多資源

關鍵點

第3章三思而後行:前期準備

3.1前期準備的重要性

前期準備適用於現代軟體項目嗎

準備不周全的誘因

關於開始構建之前要做前期準備的絕對有力且簡明的論據

3.2辨明你所從事的軟體的類型

疊代開發法對前期準備的影響

在序列式開發法和疊代式開發法之間做出選擇

3.3問題定義的先決條件

3.4需求的先決條件

為什麼要有正式的需求

穩定需求的神話

在構建期間處理需求變更

3.5架構的先決條件

架構的典型組成部分

3.6花費在前期準備上的時間長度更多資源

關鍵點

第4章關鍵的“構建”決策

4.1選擇程式語言

語言描述

4.2編程約定

4.3你在技術浪潮中的位置

“深入一種語言去編程”的例子

4.4選擇主要的構建實踐方法

關鍵點

第2部分創建高質量的代碼

第5章軟體構建中的設計

5.1設計中的挑戰設計是一個險惡的問題

設計是個了無章法的過程(即使它能得出清爽的成果)

設計就是確定取捨和調整順序的過程

設計受到諸多限制

設計是不確定的

設計是一個啟發式過程

設計是自然而然形成的

5.2關鍵的設計概念

軟體的首要技術任務:管理複雜度

理想的設計特徵

設計的層次

5.3設計構造塊:啟發式方法

尋找現實世界中的對象

形成一致的抽象

封裝實現細節

當繼承能簡化設計時就繼承

隱藏秘密(信息隱藏)

找出容易改變的區域

保持鬆散耦合

查閱常用的設計模式

其他的啟發式方法

關於設計啟發的總結*****

使用啟發式方法的原則

5.4設計實踐

疊代

分而治之

自上而下和自下而上的設計方法

建立試驗性原型

合作設計

要做多少設計才夠?

記錄你的設計成果

5.5對流行的設計方法的評論

更多資源

軟體設計,一般性問題

軟體設計理論

設計模式

廣義的設計

標準

關鍵點

第6章可以工作的類

6.1類的基礎:抽象數據類型

需要用到ADT的例子

使用ADT的益處

更多的ADT示例

在非面向對象環境中用ADT處理多份數據實例

ADT和類

6.2良好的類接口

好的抽象

良好的封裝

6.3有關設計和實現的問題

包含(“有一個……”的關係)

繼承(“是一個……”關係)

成員函式和數據成員

構造函式

6.4創建類的原因

應該避免的類

總結:創建類的理由

與具體程式語言相關的問題

6.6超越類:包

更多資源

關鍵點

第7章高質量的子程式

7.1創建子程式的正當理由

似乎過於簡單而沒必要寫成子程式的操作

總結:創建子程式的理由

7.2在子程式層上設計

7.3好的子程式名字

7.4子程式可以寫多長

7.5如何使用子程式參數

7.6使用函式時要特別考慮的問題

什麼時候使用函式,什麼時候使用過程

設定函式的返回值

7.7宏子程式和內聯子程式

宏子程式在使用上的限制

內聯子程式

關鍵點

第8章防範式編程

8.1保護程式免遭無效輸入數據的破壞

8.2斷言

建立自己的斷言機制

使用斷言的指導建議

8.3錯誤處理技術

健壯性與正確性

高層次設計對錯誤處理方式的影響

8.4異常

8.5隔離程式以免遭由錯誤造成的損害

隔離區與斷言的關係

8.6輔助調試代碼

不要自動地把產品版本的限制強加於開發版本之上

儘早引入輔助調試的手段

採用冒進式編程

計畫移除調試輔助代碼

8.7確定在產品代碼中該保留多少防範式代碼

8.8防範式編程時保持防範

其他資源

關鍵點

第9章偽代碼編程過程

9.1創建類和子程式的步驟概述

創建一個類的步驟

創建子程式的步驟

9.2偽代碼

9.3通過偽代碼編程過程創建子程式

設計子程式

編寫子程式

檢查代碼

收尾工作

根據需要重複上述步驟

9.4偽代碼編程過程之外的其他方案

關鍵點

第3部分變數

第10章使用變數的一般事項

10.1數據認知

數據認知測試

有關數據類型的其他資源

10.2輕鬆掌握變數定義

隱式聲明

10.3變數初始化原則

10.4作用域

使變數引用局部化

儘可能縮短變數的“存活”時間

減小作用域的一般原則

有關縮小變數作用域的說明

10.5持續性

10.6綁定時間

10.7數據類型和控制結構之間的關係

10.8為變數指定單一用途

關鍵點

第11章變數名的力量

11.1選擇好變數名的注意事項

最重要的命名注意事項

以問題為導向

最適當的名字長度

變數名字的效果範圍

變數名字中的計算值限定詞

變數名字中的常用反義詞

11.2為特定類型的數據命名

為循環索引命名

為狀態變數命名

為臨時變數命名

為布爾變數命名

為枚舉類型命名

為常量命名

11.3命名規則的力量

為什麼要有規則?

何時採用命名規則

正式程度

11.4非正式命名規則

語言無關規則的指導原則

語言相關規則的指導原則

混合語言編程的注意事項

命名規則示例

11.5標準前綴

用戶自定義類型縮寫

語義前綴

標準前綴的優點

11.6創建具備可讀性的短名稱

一般的縮寫指導原則

語音縮寫

有關縮寫的評論

11.7應該避免的名稱

關鍵點

第12章基本數據類型

12.1使用數的普遍規則

12.2整數

12.3浮點數

12.4字元和字元串

C中的字元串

12.5布爾變數

12.6枚舉類型

如果你的語言裡沒有枚舉類型

12.7命名常量

12.8數組

12.9創建你自己的類型(類型別名)

為什麼創建自己的類型的示例是用Pascal和Ada寫的?

創建自定義數據類型的指導原則

關鍵點

第13章不常見的數據類型

13.1結構

13.2指針

用來理解指針的例子

使用指針的一般技巧

C++指針

C指針

13.3全局數據

與全局數據有關的常見問題

使用全局數據的理由

只有萬不得已時才使用全局數據

用訪問子程式來取代全局數據

如何降低使用全局數據的風險

其他資源

關鍵點

第4部分語句

第14章組織直線型代碼

14.1必須有明確順序的語句

14.2順序無關的語句

使代碼易於自上而下的閱讀

把相關的語句組織在一起

關鍵點

第15章使用條件語句

15.1if語句

簡單if-then語句

if-then-else語句串

15.2case語句

為case選擇最有效的排序

使用case語句的提示

關鍵點

第16章控制循環

16.1選擇循環的種類

什麼時候使用while循環

什麼時候用帶退出的循環

何時使用for循環

何時使用foreach循環

16.2循環控制

進入循環

處理好循環體

退出循環

檢查端點

使用循環變數

循環應該有多長

16.3輕鬆創建循環——由內而外

16.4循環和數組的關係

關鍵點

第17章不常見的控制結構

17.1子程式中的多個返回

17.2遞歸

遞歸的例子

使用遞歸的技巧

17.3goto

反對goto的論點

支持goto的觀點

關於goto的虛假辯論

錯誤處理和goto

goto和在else子句中的共享代碼

goto使用原則總結

17.4對不常見控制結構的看法

其他資源

關鍵點

第18章表驅動方法

18.1表驅動方法使用總則

使用表驅動方法的兩個問題

18.2直接訪問表

示例:一個月中的天數(Days-in-Month)

示例:保險費率

例子:靈活的訊息格式(Flexible-Message-Format)

構造查詢鍵值

18.3索引表訪問(IndexedAccessTables)

18.4階梯訪問表

18.5表查詢的其他示例

關鍵點

第19章一般控制問題

19.1布爾表達式

true和false做布爾判斷

簡化複雜的表達式

編寫肯定形式的布爾表達式

用括弧使布爾表達式更清晰

理解布爾表達式是如何求值的

按照數軸的順序編寫數值表達式

與0比較的指導原則

布爾表達式的常見問題

19.2複合語句(塊)

19.3空語句

19.4馴服危險的深層嵌套

對減少嵌套層次的技術的總結

19.5編程基礎:結構化編程

結構化編程的三個組成部分

19.6控制結構與複雜度

複雜度的重要性

降低複雜度的一般原則

其它類型的複雜度

關鍵點

第5部分代碼改善

第20章軟體質量概述

20.1軟體質量的特性

20.2改善軟體質量的技術

開發過程

設定目標

20.3不同質量保障技術的相對效能

缺陷檢測率

找出缺陷的成本

修正缺陷的成本

20.4什麼時候進行質量保證工作

20.5軟體質量的普遍原理

推薦讀物

相關標準

關鍵點

第21章協同構造

21.1協同開發實踐概要

協同構造是其他質量保證技術的補充

協同構造有利於傳授公司文化以及編程專業知識

集體所有權適用於所有形式的協同構造

在構造前後都應保持協作

21.2結對編程

成功運用結對編程的關鍵

結對編程的好處

21.3正式檢查

你期望檢查能夠帶來什麼結果

檢查中的人員角色

檢查的一般步驟

檢查中的自尊心

檢查和代碼大全

檢查總結

21.4其他類型的協同開發實踐

走查

代碼閱讀

大型演示

協同構造技術的比較

參考資料

結對編程

檢查

相關標準

關鍵點

第22章開發者測試

22.1開發者測試在軟體質量中的角色..500

構造中測試

22.2推薦的開發者測試方法

先測試還是後測試

開發者測試的局限性

22.3測試技巧錦囊

不完整的測試

結構化的基礎測試

數據流測試

等價類劃分

猜測錯誤

邊界值分析

幾類壞數據

幾類好數據

採用容易手工檢查的測試用例

22.4典型錯誤

哪些類包含最多的錯誤?

錯誤的分類

不完善的構造過程引發錯誤所占的比例

你期望能發現多少錯誤

測試本身的錯誤

22.5測試支持工具

為測試各個類構造腳手架

Diff工具

測試數據生成器

覆蓋率監視器

數據記錄器/日誌記錄器

符號調試工具

系統干擾器

錯誤資料庫

22.6改善測試過程

有計畫的測試

重新測試(回歸測試)

自動化測試

22.7保留測試記錄

個人測試記錄

推薦讀物

測試

測試腳手架

測試優先的開發

相關標準

關鍵點

第23章調 試

23.1調試概述

調試在軟體質量中所扮演的角色

調試效率的巨大差異

讓你有所收穫的缺陷

一種效率低下的調試方法

23.2尋找缺陷

科學的調試方法

尋找缺陷的一些小建議

語法錯誤

23.3修正缺陷

23.4調試中的心理因素

心理取向如何導致調試時的盲目

“心理距離”在調試中的作用

23.5調試工具——明顯的和不那么明顯的..557

原始碼比較工具

編譯器的警告訊息

擴展的語法和邏輯檢查

執行性能分析器

測試框架

調試器

其它資源

關鍵點

第24章重構

24.1軟體進化的類型

軟體進化的哲學

24.2重構簡介

重構的理由

拒絕重構的理由

24.3特定的重構

數據級的重構

語句級的重構

子程式級重構

類實現的重構

類接口的重構

系統級重構

24.4安全的重構

不宜重構的情況

24.5重構策略

推薦讀物

關鍵點

第25章代碼調整策略

25.1性能概述

質量特性和性能

性能和代碼調整

25.2代碼調整簡介

Pareto法則

一些無稽之談

何時調整代碼

編譯器最佳化

25.3蜜糖和哥斯拉

常見的低效率之源

常見操作的相對效率

25.4性能測量

性能測量應當精確

25.5反覆調整

25.6代碼調整方法總結

推薦讀物

算法和數據類型

關鍵點

第26章代碼調整方法

26.1邏輯

在知道答案後停止判斷

按照出現頻率來調整判斷順序

相似邏輯結構之間的性能比較

用查找表替代複雜表達式

使用惰性求值

26.2循環

判斷外提(Unswitching)

合併循環

展開

儘可能減少再循環內部做的工作

哨兵值

把最忙的循環放在最內層

削減強度

26.3數據變換

使用整型數而不是浮點數

數組維度儘可能少

儘可能減少數組引用

使用輔助索引

使用快取機制

26.4表達式

利用代數恆等式

削弱運算強度

編譯時初始化

小心繫統函式

使用正確的常量類型

預先算出結果

刪除公共子表達式

26.5子程式

將函式重寫為內聯

26.6用低級語言重寫代碼

26.7變得越多,事情反而更沒變

推薦讀物

關鍵點

第6部分系統考慮

第27章程式規模對“構築”的影響

27.1交流和規模

27.2項目規模的範圍

27.3項目規模對錯誤的影響

27.4項目規模對生產率的影響

27.5項目規模對開發活動的影響

活動比例和項目規模

程式、產品、系統和系統產品

方法論和規模

額外資源

關鍵點

第28章管理“構築”

28.1鼓勵良好的編碼實踐

設定標準的考慮事項

鼓勵良好的編碼實踐的技術

本書的角色

28.2配置管理

什麼是配置管理?

需求變更和設計變更

軟體代碼變更

工具版本

機器配置

備份計畫

有關配置管理的額外資源

28.3評估“構築”進度表

評估的方法

評估“構築”的工作量

對進度的影響

評估與控制

如果你落後了該怎么辦

有關軟體評估的額外資源

28.4度量

有關軟體度量的額外資源

28.5把程式設計師當人看

程式設計師們怎樣花費時間?

性能差異與質量差異

信仰問題

物理環境

有關“把程式設計師當人看”的額外資源

28.6管理你的管理者

有關管理構造的額外資源

相關標準

關鍵點

第29章集成

29.1集成方式的重要性

29.2集成頻率——階段式集成還是增量集成

階段式集成

增量集成

增量集成的益處

29.3增量集成的策略

自頂向下集成

自底向上集成

三明治集成

風險導向的集成

功能導向的集成

T-型集成

集成方法小結

29.4Daily Build與冒煙測試

哪種項目能用dailybuild過程?

持續集成

額外資源

關鍵點

第30章編程工具

30.1設計工具

30.2原始碼工具

分析代碼質量

重構原始碼

Version Control

數據詞典

30.3可執行碼工具

產生目標碼

除錯

測試

代碼微調

30.4工具導向的環境

30.5打造你自己的編程工具

項目特有的工具

腳本

30.6工具幻境

額外資源

關鍵點

第7部分軟體工藝

第31章布局與風格

31.1基本原則

布局的極端情況

格式化的基本原理

人和計算機對程式的解讀好布局有什麼用?

把布局作為一種信仰

良好布局的目標

31.2布局技術

空白區

括弧

31.3布局風格

純塊結構

模仿純塊結構

使用begin-end對(大括弧)指定塊邊界

行尾布局

哪種風格最優?

31.4控制結構的布局

格式化控制結構塊的要點

其他考慮

31.5單條語句的布局語句長度

用空格使語句顯得清楚

格式化後續行

每行僅寫一條語句

數據聲明的布局

31.6注釋的布局

31.7子程式的布局

31.8類的布局

類接口的布局

類實現的布局

檔案和程式布局

更多資源

關鍵點

第32章自說明代碼

32.1外部文檔

32.2編程風格作文檔

32.3注釋或不注釋

32.4高效注釋之關鍵

注釋種類

高效注釋

最佳注釋量

32.5注釋技術

注釋單行

注釋代碼段

注釋數據聲明注釋控制結構

注釋子程式

注釋類、檔案和程式

32.6IEEE標準

軟體質量保證標準

更多資源

關鍵點

第33章個人性格

33.1個人性格是否和本書話題無關

33.2聰明和謙虛

33.3求知慾

33.4誠實

33.5交流與合作

33.6創造力和紀律

33.7偷懶

33.8不像你想像中那樣起作用的性格

矜持

經驗

編程狂人

33.9習慣

更多資源

關鍵點

第34章軟體開發藝術的有關問題

34.1克服複雜性

34.2精選編程過程

34.3為人寫程式,其次才是為機器

34.4以所用語言編程,但思路不受其約束..843

34.5藉助規範集中注意力

34.6基於問題域編程

將程式劃分為不同層次的抽象

34.7“當心落石

34.8反覆,再反覆

34.9不要頑固不化

判斷

折中主義

試驗

關鍵點

第35章何處有更多信息

35.1關於軟體創建的信息

35.2創建之外的話題

綜述資料

軟體工程綜覽

其他注釋過的參考書目

35.3期刊

初級程式設計師雜誌

高級程式設計師雜誌

專題出版物

35.4軟體開發者的讀書計畫

入門級

熟練級

精通級

35.5參加專業組織

參考文獻

索引

媒體評論

Mike Riley,asp.netPRO,“此書的每一頁都提供了注重實效的見解,這些真知灼見是從數年的有效編碼經驗中總結而得出的,並繼而成為軟體設計者成功的主要指導。項目負責人應該從頭到尾認真閱讀此書,然後購買他們的每一項直接報告的副本。”EdSchaefer,UnixReview,“《代碼大全》已經影響了我思考軟體發展的方式,這在其他的書來說是沒有過的。我知道這樣說有些老套,但是如果有一本書應被稱作“本月傑作”的話,那就是它。我稱讚McConnell不只是因為他編纂法典--把這些知識寫下來--還因為此書涵蓋了重點與檢索目錄。”PanPantziarka,TechBookReport,“Steve McConnell的《代碼大全》獨具匠心,第一版被譽為經典之作可謂實至名歸。現在,隨著第二版的出版,更新更詳細的表述和再編內容的擴展,其傑出地位被證實......。書中包含了太多實用可靠的素材,所以要想在一篇評論中給予它公正的評價是相當困難的。對於任何想有所提高的編譯人員來說,這都是一本值得一看的好書。我們全力推薦!”SamGentile,Blog,“我敢說它甚至比第一版更好。利用“現代語言”如C++和JAVA更新之後,它完全稱得上是軟體設計的教科書……讀過本書之後,我發現自己仍然有很多東西需要學習。強烈推薦!”

《代碼大全(第二版)》的更多評論

CodeGear首席技術官(CTO) 李維——代碼大全是我早在好幾年前便已經閱讀過的好書。這幾年來我不知買過多少書籍,也清理過許多因為書房再也放不下的書籍,但是代碼大全這本書始終占據著我書架上重要的位置而不曾移開過,因為好書是經得起時光考驗的。

微軟亞洲研究院 研究員 潘愛民——在眾多的編程類書籍中,如果只讓我挑一本書來閱讀,那我一定選擇《代碼大全》,因為它是最不可或缺的。

CSDN副總經理 曾登高——《代碼大全(第2版)》是一本真正體貼開發者的經典巨著!

遊戲之旅--我的編程感悟》作者雲風—— 能把軟體做好的人很多,但是把方法總結出來卻很難。《代碼大全》做到了,它堪稱一本構建軟體的百科全書。我在閱讀過程中因無數次的共鳴而欣喜。

JUnit in Action 中文版》譯者 鮑志雲—— Code Complete曾伴我走過研習軟體開發的歲月,讀來收穫頗豐,唇齒留香,是技術書中少見的“好吃又有營養”的佳作。

程式設計師》雜誌社——Code Complete 2是最佳的軟體構建論著,在中國已經創造了軟體開發技術圖書出版的奇蹟。而我們更希望這個奇蹟能夠實實在在地推動中國軟體開發者能力的提升。 Mike Riley,asp.netPRO,“此書的每一頁都提供了注重實效的見解,這些真知灼見是從數年的有效編碼經驗中總結而得出的,並繼而成為軟體設計者成功的主要指導。 項目負責人應該從頭到尾認真閱讀此書, 然後購買他們的每一項直接報告的副本。”Ed Schaefer,Unix Review,“《代碼大全》已經影響了我思考軟體發展的方式,這在其他的書來說是沒有過的。我知道這樣說有些老套 ,但是如果有一本書應被稱作“本月傑作”的話,那就是它。我稱讚McConnell不只是因為他編纂法典--把這些知識寫下來-- 還因為此書涵蓋了重點與檢索目錄。”Pan Pantziarka,Tech Book Report,“Steve McConnell的《代碼大全》獨具匠心,第一版被譽為經典之作可謂實至名歸。 現在,隨著第二版的出版,更新更詳細的表述和再編內容的擴展,其傑出地位被證實......。 書中包含了太多實用可靠的素材,所以要想在一篇評論中給予它公正的評價是相當困難的。對於任何想有所提高的編譯人員來說,這都是一本值得一看的好書。 我們全力推薦!”Sam Gentile,Blog,“我敢說它甚至比第一版更好。利用“現代語言”如 C++和JAVA更新之後,它完全稱得上是軟體設計的教科書……讀過本書之後,我發現自己仍然有很多東西需要學習。強烈推薦!”

相關詞條

相關搜尋

熱門詞條

聯絡我們