CodeCraft編程匠藝:編寫卓越的代碼

CodeCraft編程匠藝:編寫卓越的代碼

CodeCraft編程匠藝:編寫卓越的代碼的內容遍及編程的各個要素,如代碼風格、變數命名、錯誤處理和安全性等。此外,本書還對一些更廣泛的編程問題進行了探討,如有效的團隊合作、開發過程和文檔編寫,等等。本書各章的末尾均提供一些思考問題,這些問題回顧了各章中的一些關鍵概念,可以促使你像專家一樣思考,從而使本書成為那些渴望作為團隊的一分子,職業並高效地編程的新手們的一本絕佳的參考書。

編輯推薦

《編程匠藝》中隨處可見與程式語言無關、但是與所有開發人員都相關的建議,其內容遍及編程的各個要素,如代碼風格、變數命名、錯誤處理和安全性等。不僅如此,它還觸及了一些更廣泛的現實世界編程問題,如有效的團隊合作、開發過程和文檔編寫,等等。《CodeCraft編程匠藝--編寫卓越的代碼》各章末尾均有一個問題和答案部分,這些部分回顧了各章中的一些關鍵概念,促使你像專家一樣思考,從而使這《CodeCraft編程匠藝--編寫卓越的代碼》成為那些渴望作為團隊的一分子、專業並高效地編程的新手們的一本絕佳的參考書。《CodeCraft編程匠藝--編寫卓越的代碼》將告訴你如何:

●在現實世界困難重重的情況下編寫出優秀的代碼;

●避免在工作場所出現災難和人心渙散的情況;

●準確地評估你的能力,並找到提高的途徑;

●採取有建設性的態度,並遵從最佳的做法。

第1章善於防守

1.1向優秀的代碼前進4

1.2構想:最壞的選擇4

1.3什麼是防禦性編程6

1.4又大又壞的世界8

1.5防禦性編程技巧8

1.5.1使用好的編碼風格和合理的設計9

1.5.2不要倉促地編寫代碼9

1.5.3不要相信任何人10

1.5.4編碼的目標是清晰,而不是簡潔10

1.5.5不要讓任何人做他們不該做的修補工作11

1.5.6編譯時打開所有警告開關11

1.5.7使用靜態分析工具12

1.5.8使用安全的數據結構12

1.5.9檢查所有的返回值13

1.5.10審慎地處理記憶體(和其他寶貴的資源)13

1.5.11在聲明位置初始化所有變數14

1.5.12儘可能推遲一些聲明變數14

1.5.13使用標準語言工具14

1.5.14使用好的診斷信息日誌工具15

1.5.15審慎地進行強制轉換15

1.5.16細則15

1.6約束16

1.6.1約束的內容17

1.6.2移除約束18

1.7總結20

1.8另請參見20

1.9思考21

1.9.1深入思考21

1.9.2結合自己22

第2章精心布局

2.1什麼是關鍵24

2.2了解你的讀者25

2.3什麼是好的樣式26

2.4使用括弧26

2.4.1K&R括弧風格27

2.4.2懸掛式的括弧風格27

2.4.3縮進的括弧風格29

2.4.4其他的括弧風格29

2.5主宰一切的風格30

2.6內部風格(以及在哪裡使用它們)31

2.7設立標準33

2.8正義的戰爭35

2.9總結35

2.10另請參見37

2.11思考37

2.11.1深入思考37

2.11.2結合自己38

第3章名正言順

3.1為什麼我們應該恰當地命名呢41

3.2我們對什麼進行命名41

3.3名字遊戲42

3.3.1描述性42

3.3.2技術上正確42

3.3.3符合語言習慣43

3.3.4恰當43

3.4具體細節44

3.4.1命名變數44

3.4.2命名函式45

3.4.3命名類型46

3.4.4命名名字空間47

3.4.5命名宏48

3.4.6命名檔案48

3.5玫瑰不叫玫瑰49

3.5.1保持前後一致50

3.5.2利用上下文51

3.5.3使用對你有利的名稱51

3.6總結52

3.7另請參見53

3.8思考53

3.8.1深入思考54

3.8.2結合自己55

第4章不言自明

4.1自文檔化的代碼59

4.2編寫自文檔化代碼的技術61

4.2.1使用好的樣式編寫簡單的代碼61

4.2.2選擇有意義的名稱62

4.2.3分解為原子函式62

4.2.4選擇描述性的類型63

4.2.5命名常量63

4.2.6強調重要的代碼64

4.2.7分組相關信息64

4.2.8提供檔案頭64

4.2.9恰當地處理錯誤65

4.2.10編寫有意義的注釋65

4.3實用的自文檔化方法66

4.3.1文學性編程66

4.3.2文檔化工具67

4.4總結69

4.5另請參見70

4.6思考71

4.6.1深入思考71

4.6.2結合自己72

第5章隨篇注釋

5.1什麼是代碼注釋74

5.2注釋看上去是什麼樣的75

5.3多少注釋是恰當的75

5.4注釋中應該有些什麼76

5.4.1解釋為什麼,而不是怎么樣76

5.4.2不要描述代碼76

5.4.3不要取代代碼76

5.4.4確保注釋有用77

5.4.5避免分心78

5.5實踐79

5.6從審美的角度看注釋80

5.6.1一致性80

5.6.2清晰的塊注釋80

5.6.3縮進的注釋81

5.6.4行章節附注釋81

5.6.5幫助你閱讀代碼81

5.6.6選擇一種維護成本較低的風格82

5.6.7分隔板82

5.6.8標誌83

5.6.9檔案頭注釋83

5.7使用注釋84

5.7.1幫助你編寫例行程式84

5.7.2錯誤修正通告85

5.7.3注釋過時85

5.7.4維護和空洞無物的注釋86

5.8總結86

5.9另請參見87

5.10思考87

5.10.1深入思考88

5.10.2結合自己88

第6章人非聖賢

6.1從何而來90

6.2錯誤報告機制91

6.2.1不報告91

6.2.2返回值92

6.2.3錯誤狀態變數93

6.2.4異常93

6.2.5信號95

6.3檢測錯誤95

6.4處理錯誤96

6.4.1何時處理錯誤97

6.4.2可能的反應98

6.4.3代碼示例100

6.5使地獄浮現104

6.6管理錯誤105

6.7總結106

6.8另請參見107

6.9思考107

6.9.1深入思考107

6.9.2結合自己108

目錄 代碼的神秘生命

第7章欲善其事,先利其器

7.1什麼是軟體工具112

7.2為什麼要在意工具114

7.3使工具發揮作用115

7.3.1了解它能做些什麼115

7.3.2學習如何駕馭它116

7.3.3了解它適合什麼任務116

7.3.4檢查它是否可用116

7.3.5找到了解更多信息的途徑117

7.3.6查明新版本何時出現117

7.4哪個工具117

7.4.1原始碼編輯工具118

7.4.2代碼構建工具120

7.4.3調試和調查工具123

7.4.4語言支持工具124

7.4.5其他工具125

7.5總結126

7.6另請參見127

7.7思考128

7.7.1深入思考128

7.7.2結合自己128

第8章測試時代

8.1反思現實131

8.2誰、是什麼、何時以及為什麼132

8.2.1我們為什麼要測試132

8.2.2誰來進行測試133

8.2.3測試的內容有些什麼133

8.2.4何時進行測試134

8.3測試並不難……135

8.4測試的類型138

8.5選擇單元測試用例142

8.6為測試而設計144

8.7看!不要用手!144

8.8面對故障該怎么辦145

8.9你能管理它嗎146

8.9.1缺陷跟蹤系統147

8.9.2bug審查148

8.10總結149

8.11另請參見150

8.12思考150

8.12.1深入思考150

8.12.2結合自己151

第9章尋找缺陷

9.1生活的真相154

9.2bug的種類155

9.2.1從遠處看155

9.2.2從近處看156

9.2.3從更近處看158

9.3消滅害蟲160

9.3.1地下之路161

9.3.2地上之路161

9.4搜尋bug162

9.4.1編譯時錯誤162

9.4.2運行時錯誤164

9.5如何修正缺陷167

9.6預防169

9.7除蜂劑、驅蟲劑、捕蠅紙169

9.7.1調試器169

9.7.2記憶體訪問校驗器170

9.7.3系統調用跟蹤170

9.7.4核心轉儲170

9.7.5日誌170

9.8總結171

9.9另請參見172

9.10思考173

9.10.1深入思考173

9.10.2結合自己173

第10章代碼構建

10.1語言障礙176

10.1.1解釋型語言177

10.1.2編譯型語言178

10.1.3位元組編譯型語言179

10.2小題大做179

10.3構建軟體版本181

10.4怎樣才算是一個優秀的構建系統184

10.4.1簡潔184

10.4.2一致184

10.4.3可重複和可靠185

10.4.4原子性186

10.4.5能夠應付錯誤187

10.5技術細節187

10.5.1目標的選擇187

10.5.2內務處理189

10.5.3依賴關係189

10.5.4自動構建190

10.5.5構建配置191

10.5.6遞歸地使用make192

10.6請發布我吧192

10.7構建大師是全能的嗎194

10.8總結195

10.9另請參見195

10.10思考196

10.10.1深入思考196

10.10.2結合自己196

第11章追求速度

11.1最佳化是什麼200

11.2是什麼使代碼不盡如人意201

11.3為什麼不進行最佳化呢202

備選方案204

11.4為什麼要進行最佳化205

11.5最佳化的具體細節206

11.5.1證明你需要進行最佳化206

11.5.2找出運行得最慢的代碼207

11.5.3測試代碼208

11.5.4最佳化代碼209

11.5.5最佳化之後209

11.6最佳化的技術210

11.6.1設計更改210

11.6.2代碼更改213

11.7編寫高效的代碼217

11.8總結219

11.9另請參見219

11.10思考220

11.10.1深入思考220

11.10.2結合自己221

第12章不安全感綜合症

12.1危險224

12.2敵人226

12.3藉口,都是藉口228

12.4感到很脆弱229

12.4.1不安全的設計和體系結構229

12.4.2緩衝溢出229

12.4.3嵌入的查詢字元串230

12.4.4競爭狀況231

12.4.5整數溢出231

12.5防範措施232

12.5.1系統安裝技術233

12.5.2軟體設計技術234

12.5.3代碼實現技術235

12.5.4規程技術236

12.6總結236

12.7另請參見237

12.8思考238

12.8.1深入思考238

12.8.2結合自己238

目錄 代碼的形成過程

第13章崇尚設計

13.1邊設計邊編程242

13.2我們要設計什麼243

13.3為什麼這么忙亂244

13.4良好的軟體設計245

13.4.1簡潔246

13.4.2優雅247

13.4.3模組化247

13.4.4良好的接口248

13.4.5可擴展性251

13.4.6避免重複251

13.4.7可移植性252

13.4.8符合語言習慣252

13.4.9良好地文檔化253

13.5如何設計代碼253

13.5.1設計方法和過程254

13.5.2設計工具255

13.6總結257

13.7另請參見258

13.8思考258

13.8.1深入思考258

13.8.2結合自己259

第14章軟體體系結構

14.1什麼是軟體體系結構262

14.1.1軟體藍圖262

14.1.2視圖263

14.1.3在何時和何處進行體系結構設計264

14.1.4用體系結構來做什麼265

14.1.5關於組件和連線266

14.2什麼是良好的體系結構268

14.3體系結構風格269

14.3.1沒有體系結構269

14.3.2分層的體系結構270

14.3.3管道和過濾器體系結構271

14.3.4客戶端/伺服器體系結構271

14.3.5基於組件的體系結構273

14.3.6框架274

14.4總結275

14.5另請參見276

14.6思考276

14.6.1深入思考276

14.6.2結合自己277

第15章改良與革命

15.1軟體腐爛281

15.2警告信號282

15.3代碼是如何成長的284

15.4相信不可能之事286

15.5對此我們可以做些什麼287

15.5.1編寫新代碼287

15.5.2維護現有代碼288

15.6總結290

15.7另請參見290

15.8思考291

15.8.1深入思考292

15.8.2結合自己292

目錄 一群程式設計師

第16章代碼猴子

16.1各種各樣的猴子296

16.1.1賣力工作的程式設計師297

16.1.2代碼猴子298

16.1.3權威299

16.1.4半權威300

16.1.5傲慢的天才300

16.1.6牛仔302

16.1.7規劃者302

16.1.8老前輩303

16.1.9狂熱者304

16.1.10單線條程式設計師305

16.1.11拖沓者306

16.1.12勉強的團隊領導306

16.1.13你307

16.2理想的程式設計師308

16.3那么該怎么辦308

16.4最愚蠢的人309

16.5總結310

16.6另請參見310

16.7行為表格311

16.8思考312

16.8.1深入思考312

16.8.2結合自己312

第17章團結就是力量

17.1我們的團隊——概覽316

17.2團隊組織318

17.2.1管理方法318

17.2.2責任劃分318

17.2.3組織和代碼結構320

17.3團隊合作工具320

17.4團隊疾病322

17.4.1巴別塔322

17.4.2獨裁制324

17.4.3民主制325

17.4.4衛星站327

17.4.5大峽谷329

17.4.6流沙330

17.4.7旅鼠332

17.5良好團隊合作的個人技巧和特點333

17.5.1溝通333

17.5.2謙虛334

17.5.3處理衝突334

17.5.4學習和適應能力335

17.5.5了解你的不足之處336

17.6團隊合作原則336

17.6.1集體代碼所有制336

17.6.2尊重別人的代碼337

17.6.3編碼準則337

17.6.4定義成功337

17.6.5定義責任338

17.6.6避免倦怠338

17.7團隊的生命周期339

17.7.1團隊的創建339

17.7.2團隊的成長341

17.7.3團隊合作342

17.7.4團隊結束343

17.8總結345

17.9另請參見346

17.10行為表格347

17.11思考348

17.11.1深入思考348

17.11.2結合自己348

第18章安全措施

18.1我們的責任350

18.2原始碼控制351

18.2.1修訂控制352

18.2.2訪問控制353

18.2.3處理代碼庫354

18.2.4在代碼樹上創建分支354

18.2.5原始碼控制簡史356

18.3配置管理356

18.4備份358

18.5發布原始碼359

18.6應該將原始碼放在哪裡360

18.7總結361

18.8另請參見362

18.9思考363

18.9.1深入思考363

18.9.2結合自己363

目錄 開發過程的組成部分第一部分

第19章注意細節

19.1規範到底是什麼368

19.2規範的類型369

19.2.1需求規範371

19.2.2功能規範373

19.2.3系統體系結構規範373

19.2.4用戶界面規範374

19.2.5設計規範374

19.2.6測試規範375

19.3規範應當包含哪些內容376

19.4規範編寫過程379

19.5我們為什麼會不編寫規範381

19.6總結383

19.7另請參見383

19.8思考384

19.8.1深入思考384

19.8.2結合自己384

第20章代碼審查

20.1什麼是代碼審查386

20.2何時進行審查387

20.2.1是否要進行審查388

20.2.2審查哪些代碼389

20.3執行代碼審查389

20.3.1代碼審查會議390

20.3.2集成審查392

20.4審查你的態度393

20.4.1作者的態度393

20.4.2審查人員的態度394

20.5完美的代碼395

20.6代碼審查之外396

20.7總結397

20.8另請參見397

20.9清單398

20.10思考399

20.10.1深入思考399

20.10.2結合自己399

第21章時間估計

21.1在黑暗中摸索402

21.2為什麼估計這么困難?403

21.3壓力之下405

21.4實用的估計方法406

21.5計畫遊戲409

21.6堅持!412

21.7總結415

21.8另請參見415

21.9思考416

21.9.1深入思考416

21.9.2結合自己416

目錄 從高處鳥瞰

第22章程式秘方

22.1編程風格420

22.1.1結構化編程421

22.1.2面向對象的程式設計422

22.1.3函式式編程423

22.1.4邏輯編程424

22.2烹飪方法:做什麼與怎樣做424

22.3開發過程425

22.3.1混亂426

22.3.2瀑布模型427

22.2.3SSADM和PRINCE429

22.3.4V模型430

22.3.5原型設計430

22.3.6疊代和增量開發432

22.3.7螺旋模型432

22.3.8敏捷的方法433

22.3.9其他開發過程434

22.4已經夠了!435

22.5選擇一種過程436

22.6總結437

22.7另請參見438

22.8思考438

22.8.1深入思考438

22.8.2結合自己439

第23章編程領域大觀

23.1應用程式編程442

23.1.1塑裝軟體443

23.1.2定製應用程式444

23.2遊戲編程445

23.3系統編程446

23.4嵌入式編程447

23.5分散式編程450

23.6網路應用程式編程451

23.7企業編程453

23.8數字編程454

23.9那又怎樣455

23.10總結456

23.11另請參見456

23.12思考457

23.12.1深入思考457

23.12.2結合自己457

第24章下一步呢

但下一步該做什麼呢?460

答案和討論463

參考書目559

索引564

……

相關詞條

相關搜尋

熱門詞條

聯絡我們