程序員的制勝技 Street Coder: The Rules to Break and How to Break Them

[土耳其] 塞達特·卡帕諾格魯(Sedat Kapanoglu)

  • 程序員的制勝技-preview-1
  • 程序員的制勝技-preview-2
程序員的制勝技-preview-1

買這商品的人也買了...

商品描述

本書專註於介紹項目開發領域的實戰方法和高效範式,共 9 章,從預備理論知識開始,按照業務開發的真實流程詳細闡述了以往開發的經驗誤區,並結合實際的.NET 和 C#代碼,給出經過大量項目檢驗的解決方案。

本書絕不是市面上隨處可見的技術手冊。作者用他獨有的幽默感和數十年的軟件開發經驗,將軟件開發的實戰故事一一道來。

正如作者所言,無論你是非科班出身的開發者,還是已經入行幾年的開發“上道人”,本書都能對你有所裨益。

作者簡介

塞达特 ? 卡帕诺格鲁(Sedat Kapano?lu),一名自学成才的软件开发工程师,来自土耳其的埃斯基谢希尔。他曾入职美国华盛顿州西雅图的微软公司,担任 Windows 核心操作系统工程师。他的专业软件开发生涯长达 30 年。

塞达特创建了土耳其倍受欢迎的社交平台——酸字典(Ek?i S?zlük)。在 20 世纪 90年代,他活跃于土耳其的国际数字艺术社区 demoscence,其主题是利用代码生成图形和音乐。

目錄大綱

第 1 章 初入行當 1

1.1 在實戰中,什麽最重要? 2

1.2 誰是實戰程序員? 3

1.3 傑出實戰程序員 4

1.3.1 懂得質疑 4

1.3.2 結果驅動 5

1.3.3 高產出 6

1.3.4 接受復雜性和模糊性 6

1.4 現代軟件開發存在的問題 6

1.4.1 技術繁多 8

1.4.2 遍閱範式 8

1.4.3 科技黑箱 9

1.4.4 低估開銷 10

1.4.5 自掃門前雪 10

1.4.6 憎惡重復 11

1.5 特別說明 11

1.6 本書主題 11

本章總結 12

第 2 章 實用的理論 13

2.1 算法速成 14

2.1.1 要有好的 Big-O 16

2.2 深入數據結構 17

2.2.1 字符串 18

2.2.2 數組 21

2.2.3 列表 22

2.2.4 鏈表 23

2.2.5 隊列 24

2.2.6 字典 24

2.2.7 哈希集合 26

2.2.8 棧 26

2.2.9 調用棧 27

2.3 類型有大用 28

2.3.1 使用強類型 28

2.3.2 有效性證明 29

2.3.3 巧用框架 34

2.3.4 用類型防止打錯字 37

2.3.5 null 的可與不可 38

2.3.6 免費的更好性能 44

2.3.7 引用類型與值類型 45

本章總結 48

第 3 章 有用的反模式 50

3.1 若無損壞,亦可破壞 51

3.1.1 面對代碼剛性 51

3.1.2 快刀斬亂麻 52

3.1.3 敬畏邊界 53

3.1.4 隔離相同功能 54

3.1.5 網頁示例 56

3.1.6 不要留下技術債 57

3.2 從頭開始寫 57

推倒重寫 58

3.3 修復它,即使它沒有壞掉 59

3.3.1 奔向未來 59

3.3.2 整潔僅次於功能 60

3.4 重復你自己 62

復用還是直接復制? 66

3.5 是我所創 67

3.6 不要使用繼承 70

3.7 不要使用類 72

3.7.1 enum 太好用了! 72

3.7.2 結構體真棒! 74

3.8 寫點糟糕代碼 79

3.8.1 不要使用 If/Else 79

3.8.2 使用 goto 81

3.9 不寫代碼註釋 84

3.9.1 選個好名字 85

3.9.2 充分利用函數 86

本章總結 88

第 4 章 美味的測試 89

4.1 測試的類型 90

4.1.1 手動測試 90

4.1.2 自動化測試 91

4.1.3 執意玩火:在生產環境中測試 91

4.1.4 選擇正確的測試方法 92

4.2 如何停止抱怨,愛上測試? 94

4.3 不要使用 TDD 或其他縮寫 100

4.4 為你自己的目的寫測試 101

4.5 決定測試對象 102

4.5.1 尊重邊界 103

4.5.2 代碼覆蓋率 105

4.6 不要寫測試 107

4.6.1 不要寫代碼 107

4.6.2 不要一次寫完所有的測試 107

4.7 讓編譯器測試你的代碼 108

4.7.1 消除 null 檢查 108

4.7.2 消除範圍檢查 111

4.7.3 消除有效值檢查 113

4.8 命名測試 115

本章總結 116

第 5 章 正名重構 117

5.1 為什麽我們要重構? 118

5.2 架構修改 118

5.2.1 識別組件 121

5.2.2 評估工作量和風險 122

5.2.3 樹立威信 122

5.2.4 重構讓重構更容易 124

5.2.5 最後沖刺 130

5.3 可靠重構 130

5.4 什麽時候不重構 132

本章總結 133

第 6 章 安全審查 134

6.1 黑客之外 135

6.2 威脅模型 136

袖珍威脅模型 137

6.3 編寫安全的網絡應用程序 140

6.3.1 在設計時考慮到安全問題 140

6.3.2 隱蔽性安全的用處 141

6.3.3 不要光靠你自己去實現安全 142

6.3.4 SQL 註入攻擊 142

6.3.5 跨站腳本攻擊 148

6.3.6 跨站請求偽造 152

6.4 引發第 一次“洪水” 153

6.4.1 不要使用驗證碼 153

6.4.2 驗證碼的代替品 154

6.4.3 不要使用緩存 155

6.5 存儲機密信息 155

保存源代碼中的機密信息 156

本章總結 161

第 7 章 死磕優化 163

7.1 解決該解決的問題 164

7.1.1 簡單的基準測試 164

7.1.2 性能與響應性 167

7.2 遲緩的剖析 168

7.3 從頭開始 169

7.3.1 嵌套循環 170

7.3.2 面向字符串的編程 172

7.3.3 評估 173

7.4 打破瓶頸 174

7.4.1 不要打包數據 174

7.4.2 就地取材 175

7.4.3 將依賴性工作分開 176

7.4.4 要有可預測性 177

7.4.5 SIMD 179

7.5 I/O 的 1 秒與 0 秒 181

7.5.1 讓 I/O 更快 181

7.5.2 避免 I/O 阻塞 183

7.5.3 古老的方式 184

7.5.4 現代式 async/await 185

7.5.5 異步 I/O 的弊端 186

7.6 如果所有方法都失敗了,試試緩存吧 187

本章總結 187

第 8 章 可口擴展 188

8.1 不要使用鎖 189

雙重檢查的鎖 195

8.2 擁抱不一致 198

可怕的 NOLOCK 198

8.3 不要緩存數據庫連接 200

以 ORM 的形式 203

8.4 不要使用線程 203

8.4.1 異步代碼的問題 207

8.4.2 異步多線程 208

8.5 尊重單體 208

本章總結 209

第 9 章 與 bug 共存 210

9.1 不要修復 bug 211

9.2 錯誤恐懼 212

9.2.1 有關異常的真相 213

9.2.2 不要捕捉異常 215

9.2.3 容異性 217

9.2.4 沒有事務的容異性 221

9.2.5 異常與錯誤 221

9.3 不要調試 223

9.3.1 printf()調試法 224

9.3.2 初識轉儲 225

9.3.3 高階小黃鴨調試法 228

本章總結 228