經典代碼大全

經典代碼大全

代碼大全(第二版)是著名it暢銷書作者steve mcconnell十一年前的經典著作的全新演繹:第二版不是第一版的簡單修訂增補,而是完全進行了重寫;增加了很多與時俱進的內容。

基本介紹

  • 書名:經典代碼大全
  • 作者:(美)Steve McConnell
  • 原版名稱:CODE COMPLETE, Second Edition
  • 譯者:金戈 湯凌 陳碩 張菲
  • ISBN:7121022982
  • 頁數:960
  • 出版社:Microsoft Press;電子工業出版社
  • 出版時間:2006 年3月
  • 開本:16開
  • 版次:2-3
編輯推薦,內容簡介,作譯者,目錄,譯者序,前言,

編輯推薦

被china-pub會員評為“2007年我最喜愛的十大技術圖書”之一
被《程式設計師》等機構評選為2006年最受讀者喜愛的十大IT圖書之一
是著名IT暢銷書作者Steve McConnell十一年前的經典著作的全新演繹,該作者是兩屆Software Development Magzine Jolt Award震撼大獎得主

內容簡介

這也是一本完整的軟體構建手冊,涵蓋了軟體構建過程中的所有細節。它從軟體質量和編程思想等方面論述了軟體構建的各個問題,並詳細論述了緊跟潮流的新技術、高屋建瓴的觀點、通用的概念,還含有豐富而典型的程式示例。本書中所論述的技術不僅填補 了初級與高級編程技術之間的空白,而且也為程式設計師們提供了一個有關編程技巧的信息來源。本書對經驗豐富的程式設計師、技術帶頭人、自學的程式設計師及幾乎不懂太多編程技巧的學生們都是大有裨益的。可以說,無論你是什麼背景,閱讀本書都會讓你在更短的時間內、更容易地寫出更好的程式。
代碼大全是我早在好幾年前便已經閱讀過的好書。這幾年來我不知買過多少書籍,也清理過許多因為書房再也放不下的書籍,但是代碼大全這本書始終占據著我書架上重要的位置而不曾移開過,因為好書是經得起時光考驗的。
—— borland公司大中華首席技術官(cto) 李維
在眾多的編程類書籍中,如果只讓我挑一本書來閱讀,那我一定選擇《代碼大全》,因為它是最不可或缺的。
—— 《c++ primer中文版(第三版)》譯者 潘愛民

作譯者

Steve McConnell是Construx公司首席軟體工程師,在公司里監督軟體工程實施。他是軟體工程知識體(SWEBOK) 項目構建知識領域的領導。Steve曾為微軟公司、波音公司和西雅圖地區的公司工作過。
Steve McConnell是以下著作的作者:1996年的《快速軟體開發(Rapid Development)》、1998年的《軟體項目長存之道(Software Project Survival Guide)》和2004年的《專業軟體開發(Professional Software Development)》。他的書由於傑出,曾兩度獲得當年的《軟體開發(Software Development)》雜誌的優秀震撼大獎

目錄

第1章 歡迎進入軟體構建的世界 3
1 1 什麼是軟體構建? 3
1 2 軟體構建為何如此重要? 6
1 3 如何閱讀本書 8
關鍵點 8
第2章 用隱喻來更充分地理解軟體開發 9
2 1 隱喻的重要性 9
2 2 如何使用軟體隱喻 11
2 3 常見的軟體隱喻 13
軟體中的書法:寫作代碼 13
軟體的耕作法:培植系統 14
軟體的牡蠣養殖觀點:系統生長 15
軟體構建:建造軟體 16
套用軟體技術:智慧工具箱 20
組合各個隱喻 20
更多資源 20
關鍵點 21
第3章 三思而後行:前期準備 23
3 1 前期準備的重要性 24
前期準備適用於現代軟體項目嗎? 25
準備不周全的誘因 25
關於開始構建之前要做前期準備的絕對有力且簡明的論據 27
3 2 辨明你所從事的軟體的類型 31
疊代開發法對前期準備的影響 33
在序列式開發法和疊代式開發法之間做出選擇 35
3 3 問題定義的先決條件 36
3 4 需求的先決條件 38
為什麼要有正式的需求? 38
穩定需求的神話 39
在構建期間處理需求變更 40
3 5 架構的先決條件 43
架構的典型組成部分 45
3 6 花費在前期準備上的時間長度 55
更多資源 56
關鍵點 59
第4章 關鍵的“構建”決策 61
4 1 選擇程式語言 61
語言描述 63
4 2 編程約定 66
4 3 你在技術浪潮中的位置 66
“深入一種語言去編程”的例子 68
4 4 選擇主要的構建實踐方法 69
關鍵點 70
第5章 軟體構建中的設計 73
5 1 設計中的挑戰 74
設計是一個險惡的問題 74
設計是個了無章法的過程(即使它能得出清爽的成果) 75
設計就是確定取捨和調整順序的過程 76
設計受到諸多限制 76
設計是不確定的 76
設計是一個啟發式過程 76
設計是自然而然形成的 76
5 2 關鍵的設計概念 77
軟體的首要技術任務:管理複雜度 77
理想的設計特徵 80
設計的層次 82
5 3 設計構造塊:啟發式方法 87
尋找現實世界中的對象 87
形成一致的抽象 89
封裝實現細節 90
當繼承能簡化設計時就繼承 91
隱藏秘密(信息隱藏) 92
找出容易改變的區域 97
保持鬆散耦合 100
查閱常用的設計模式 103
其他的啟發式方法 105
關於設計啟發的總結***** 108
使用啟發式方法的原則 109
5 4 設計實踐 110
疊代 110
分而治之 111
自上而下和自下而上的設計方法 111
建立試驗性原型 114
合作設計 115
要做多少設計才夠? 115
記錄你的設計成果 117
5 5 對流行的設計方法的評論 118
更多資源 119
軟體設計,一般性問題 119
軟體設計理論 120
設計模式 120
廣義的設計 121
標準 122
關鍵點 122
第6章 可以工作的類 125
6 1 類的基礎:抽象數據類型 126
需要用到adt的例子 126
使用adt的益處 127
更多的adt示例 129
在非面向對象環境中用adt處理多份數據實例 131
adt和類 133
6 2 良好的類接口 133
好的抽象 133
良好的封裝 139
6 3 有關設計和實現的問題 143
包含(“有一個……”的關係) 143
繼承(“是一個……”關係) 144
成員函式和數據成員 150
構造函式 151
6 4 創建類的原因 152
應該避免的類 155
總結:創建類的理由 155
與具體程式語言相關的問題 156
6 6 超越類:包 156
更多資源 159
關鍵點 160
第7章 高質量的子程式 161
7 1 創建子程式的正當理由 164
似乎過於簡單而沒必要寫成子程式的操作 166
總結:創建子程式的理由 167
7 2 在子程式層上設計 168
7 3 好的子程式名字 171
7 4 子程式可以寫多長 173
7 5 如何使用子程式參數 174
7 6 使用函式時要特別考慮的問題 181
什麼時候使用函式,什麼時候使用過程 181
設定函式的返回值 182
7 7 宏子程式和內聯子程式 182
宏子程式在使用上的限制 184
內聯子程式 184
關鍵點 186
第8章 防範式編程 187
8 1 保護程式免遭無效輸入數據的破壞 188
8 2 斷言 189
建立自己的斷言機制 191
使用斷言的指導建議 191
8 3 錯誤處理技術 194
健壯性與正確性 197
高層次設計對錯誤處理方式的影響 197
8 4 異常 198
8 5 隔離程式以免遭由錯誤造成的損害 203
隔離區與斷言的關係 205
8 6 輔助調試代碼 205
不要自動地把產品版本的限制強加於開發版本之上 205
儘早引入輔助調試的手段 206
採用冒進式編程 206
計畫移除調試輔助代碼 206
8 7 確定在產品代碼中該保留多少防範式代碼 209
8 8 防範式編程時保持防範 210
其他資源 212
關鍵點 213
第9章 偽代碼編程過程 215
9 1 創建類和子程式的步驟概述 216
創建一個類的步驟 216
創建子程式的步驟 217
9 2 偽代碼 218
9 3 通過偽代碼編程過程創建子程式 220
設計子程式 225
編寫子程式 225
檢查代碼 230
收尾工作 232
根據需要重複上述步驟 232
9 4 偽代碼編程過程之外的其他方案 232
關鍵點 234
第10章 使用變數的一般事項 237
10 1 數據認知 238
數據認知測試 238
有關數據類型的其他資源 239
10 2 輕鬆掌握變數定義 239
隱式聲明 239
10 3 變數初始化原則 240
10 4 作用域 244
使變數引用局部化 245
儘可能縮短變數的“存活”時間 246
減小作用域的一般原則 249
有關縮小變數作用域的說明 250
10 5 持續性 251
10 6 綁定時間 252
10 7 數據類型和控制結構之間的關係 254
10 8 為變數指定單一用途 255
關鍵點 258
第11章 變數名的力量 259
11 1 選擇好變數名的注意事項 259
最重要的命名注意事項 260
以問題為導向 261
最適當的名字長度 262
變數名字的效果範圍 262
變數名字中的計算值限定詞 263
變數名字中的常用反義詞 264
11 2 為特定類型的數據命名 264
為循環索引命名 265
為狀態變數命名 266
為臨時變數命名 267
為布爾變數命名 268
為枚舉類型命名 269
為常量命名 270
11 3 命名規則的力量 270
為什麼要有規則? 270
何時採用命名規則 271
正式程度 271
11 4 非正式命名規則 272
語言無關規則的指導原則 272
語言相關規則的指導原則 275
混合語言編程的注意事項 276
命名規則示例 276
11 5 標準前綴 279
用戶自定義類型縮寫 279
語義前綴 280
標準前綴的優點 281
11 6 創建具備可讀性的短名稱 282
一般的縮寫指導原則 282
語音縮寫 282
有關縮寫的評論 282
11 7 應該避免的名稱 285
關鍵點 289
第12章 基本數據類型 291
12 1 使用數的普遍規則 292
12 2 整數 293
12 3 浮點數 295
12 4 字元和字元串 297
c中的字元串 299
12 5 布爾變數 301
12 6 枚舉類型 303
如果你的語言裡沒有枚舉類型 307
12 7 命名常量 307
12 8 數組 310
12 9 創建你自己的類型(類型別名) 311
為什麼創建自己的類型的示例是用pascal和ada寫的? 314
創建自定義數據類型的指導原則 315
關鍵點 318
第13章 不常見的數據類型 319
13 1 結構 319
13 2 指針 323
用來理解指針的例子 323
使用指針的一般技巧 325
c++指針 332
c指針 334
13 3 全局數據 335
與全局數據有關的常見問題 335
使用全局數據的理由 338
只有萬不得已時才使用全局數據 339
用訪問子程式來取代全局數據 339
如何降低使用全局數據的風險 342
其他資源 343
關鍵點 344
第14章 組織直線型代碼 347
14 1 必須有明確順序的語句 347
14 2 順序無關的語句 351
使代碼易於自上而下的閱讀 351
把相關的語句組織在一起 352
關鍵點 353
第15章 使用條件語句 355
15 1 if語句 355
簡單if-then語句 355
if-then-else語句串 358
15 2 case語句 361
為case選擇最有效的排序 361
使用case語句的提示 361
關鍵點 366
第16章 控制循環 367
16 1 選擇循環的種類 367
什麼時候使用while循環 368
什麼時候用帶退出的循環 369
何時使用for循環 372
何時使用foreach循環 372
16 2 循環控制 373
進入循環 373
處理好循環體 375
退出循環 377
檢查端點 381
使用循環變數 382
循環應該有多長? 385
16 3 輕鬆創建循環——由內而外 385
16 4 循環和數組的關係 387
關鍵點 389
第17章 不常見的控制結構 391
17 1 子程式中的多個返回 392
17 2 遞歸 393
遞歸的例子 394
使用遞歸的技巧 396
17 3 goto 398
反對goto的論點 398
支持goto的觀點 399
關於goto的虛假辯論 400
錯誤處理和goto 401
goto和在else子句中的共享代碼 406
goto使用原則總結 407
17 4 對不常見控制結構的看法 408
其他資源 408
關鍵點 410
第18章 表驅動方法 411
18 1 表驅動方法使用總則 411
使用表驅動方法的兩個問題 412
18 2 直接訪問表 413
示例:一個月中的天數(days-in-month) 413
示例:保險費率 415
例子:靈活的訊息格式(flexible-message-format) 416
構造查詢鍵值 423
18 3 索引表訪問(indexed access tables) 425
18 4 階梯訪問表 426
18 5 表查詢的其他示例 429
關鍵點 430
第19章 一般控制問題 431
19 1 布爾表達式 432
用true和false做布爾判斷 432
簡化複雜的表達式 434
編寫肯定形式的布爾表達式 436
用括弧使布爾表達式更清晰 438
理解布爾表達式是如何求值的 439
writing numeric expressions in number-line order 441
按照數軸的順序編寫數值表達式 441
guidelines for comparisons to 0 442
與0比較的指導原則 442
common problems with boolean expressions 443
布爾表達式的常見問題 443
19 2 compound statements (blocks) 444
19 2 複合語句(塊) 444
19 3 null statements 445
19 3 空語句 445
19 4 taming dangerously deep nesting 446
19 4 馴服危險的深層嵌套 446
summary of techniques for reducing deep nesting 454
對減少嵌套層次的技術的總結 454
19 5 a programming foundation: structured programming 455
19 5 編程基礎:結構化編程 455
the three components of structured programming 455
結構化編程的三個組成部分 455
19 6 control structures and complexity 457
19 6 控制結構與複雜度 457
how important is complexity? 458
複雜度的重要性 458
general guidelines for reducing complexity 458
降低複雜度的一般原則 458
other kinds of complexity 460
其它類型的複雜度 460
checklist: control-structure issues 460
檢查表:控制結構相關事宜 460
key points 461
關鍵點 461

譯者序

這本書講什麼
《經典代碼大全》這本書的原名叫《Classic Code Complete》,那么Classic Code Complete 在這裡是何含義呢?首先,它不代表現代集成開發環境(IDE)中的代碼自動補全功能,本書也不打算向您講解Eclipse 或Visual Studio 2005 中的代碼自動補全功能是如何實現的?。其次,Classic Code Complete 也不是真正的軟體原始碼“大全”的意思??,這本書既沒有列出連線各種資料庫的代碼、也沒有列出網頁中常用的各種JavaScript 代碼。書中的代碼示例恐怕也不能直接copy&paste 代碼到您自己的項目中。
那么Classic Code Complete 到底是什麼意思?中譯本為什麼又要取名為“代碼大全”呢?雖然從網上討論的情況看,各位網友對書名含義的理解有出入,但是譯者有充分的理由相信,Classic Code Complete 是“編碼完成”的意思,是一個軟體項目開發過程中的重要里程碑(milestone)。
軟體項目進行到這裡,表明已經完成了所有的編碼工作,即將開始系統測試。
這本書講的正是為了到達“編碼完成”這一重要里程碑所必需的軟體構建技術,確切地說,就是如何編寫高質量的代碼。作者認為,應該首先為人編寫代碼,其次才是為機器(第34 3 節);代碼主要是供人閱讀的。遍布全書的提高代碼質量的實實在在的技術和訣竅,是本書最有價值的部分。事實上,我們認為第6、7、10 至19 章這300 多頁的內容是本書的精華內容,在其他書里恐怕很難找到如此詳盡的對變數、語句、子程式等編程基本要素的討論。
十多年前,本書第1 版以《代碼大全》為名翻譯出版,在過去的10 餘年中,這本書影響了整整一代程式設計師,“代碼大全”四個字已成為一個響噹噹的名字。鑒於此,本書第2版決定保留這個無傷大雅的“錯誤”,沿用“代碼大全”作為書名,也藉此向原書第1 版各位譯者、修訂者們的辛勤勞動表示我們的敬意。無論如何,對Classic Code Complete 的理解不會影響對整本書的理解。
本書除了講如何構建高質量的軟體,還講如何成為一名優秀的程式設計師(第33 章“個人性格”、第4 3 節“你在技術浪潮中的位置”、第34 4 節“深入一門語言去編程”)。

前言

普通的軟體工程實踐與最優秀的軟體實踐差距巨大——多半比其他工程學科中的這種差距都要大。因此,傳播優秀實踐經驗的工具是十分重要的。
—— Fred Brooks
我寫這本書的首要目的,就是希望縮小本行業中一般商業實踐與大師級人物及專家們之間的知識差距。許多強大的編程技術在被編程領域的大眾接觸之前,都已在學術論文和期刊里塵封了多年。
雖然近年來前衛的軟體開發實踐迅速發展,但普通的實踐手段並沒有太大變化。
很多程式的開發仍然是漏洞百出、遲於交付並且超出預算,還有很多根本就無法滿足用戶的需求。軟體業界以及學術界的研究人員已經發現了不少行之有效的實踐經驗,足以解決自20 世紀70 年代以來編程領域中日益蔓延的大多數問題。可是這些實踐經驗很少在高度專業化的技術期刊之外對外發表,所以時至今日大多數編程的機構和組織還沒能用上這些技術。有研究表明,一項研發成果從其誕生之日起,到進入商業實踐階段,通常要經歷5 到15 年甚至更長的時間(Raghavan and Chand 1989;Rogers 1995;Parnas 1999)。這本手冊就是想縮短這一漫長的過程,讓那些關鍵性的研發成果現在就能為更多編程人員所用。
Who Should Read This Book
誰應當閱讀本書
本書中所匯集的研究成果和編程經驗,將幫助你創建更高質量的軟體,使你能更快速地進行開發,遇到的問題更少。本書將幫你弄明白過去為什麼會遇到那些問題,並告訴你如何在將來避免它們。這裡所描述的編程實踐將幫助你掌控更大型的項目,還能在項目的需求發生變動時幫助你成功地維護並修改已經開發出來的軟體。
Experienced Programmers
經驗豐富的程式設計師
對於經驗豐富的程式設計師而言,本書正是他們想要的一本翔實、易用的軟體開發指南。
本書關注的是“構建(construction)”,即整個軟體生命周期中最為人熟知的部分;本書把強大的軟體開發技術寫得讓自學的程式設計師和參加過正規訓練的程式設計師都能讀懂。

相關詞條

熱門詞條

聯絡我們