編輯推薦
《代碼大全(第二版)》第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-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更新之後,它完全稱得上是軟體設計的教科書……讀過本書之後,我發現自己仍然有很多東西需要學習。強烈推薦!”