思維整潔之道:編寫與頭腦合拍的卓越代碼
餘晟
- 出版商: 電子工業
- 出版日期: 2024-08-01
- 定價: $654
- 售價: 8.5 折 $556
- 語言: 簡體中文
- 頁數: 324
- ISBN: 7121483084
- ISBN-13: 9787121483080
- 此書翻譯自: Code That Fits in Your Head: Heuristics for Software Engineering
-
相關翻譯:
Code That Fits in Your Head|軟體工程的啟發式方法 (繁中版)
下單後立即進貨 (約4週~6週)
商品描述
軟件開發既需要理論和科學,也需要經驗和手藝。可惜,一直以來許多圖書都只關註前一部分,而忽略了後一部分。Mark 的這本書主要關註的就是經驗和手藝的部分。本書既詳細講解了 API 設計、紅綠重構等常用技術,也演示瞭如何撰寫提交說明、如何修改單元測試,同時對故障定位、代碼閱讀、團隊合作等傳統上被認為“難以說清”的話題,也給出了實用而且精當的建議。難能可貴的是,與其他圖書提供的示例代碼庫不同,本書的示例代碼庫包含了完整的 Git 提交記錄。也就是說,讀者可以按照作者的路徑,一步一個腳印地重溫整個開發過程。如果你的經驗還不夠豐富,建議嚴格按照作者的講解,認真讀完全書,掌握軟件工程的技巧。如果你已經有足夠的開發經驗,不妨在速覽全書後,精讀自己不熟悉但感興趣的部分。對自己不認同的部分,也不妨花時間瞭解作者主張的前因後果,讓自己對許多問題有更全面的認知。全書以 C# 為示範語言,但並沒有用到太多 C# 的專屬特性。面對示例代碼,任何熟悉現代主流面向對象語言的讀者,都可以很容易地理解作者背後的思考。
目錄大綱
第1部分 由慢到快
第1章 是藝術,還是科學
1.1 蓋房子
1.1.1 項目論之誤
1.1.2 階段論之誤
1.1.3 依賴
1.2 培育花園
1.2.1 花園中的植物為何會生長
1.3 工程
1.3.1 作為手工藝品的軟件
1.3.2 實用性
1.3.3 軟件工程的早期表述
1.3.4 與軟件工程共同進步
1.4 結論
第2章 checklist
2.1 助記工具
2.2 針對新代碼庫的checklist
2.2.1 使用Git
2.2.2 自動化構建
2.2.3 顯示所有錯誤消息
2.3 為已有的代碼庫新增檢查規則
2.3.1 漸進式開發
2.3.2 在組織中“便宜行事”
2.4 結論
第3章 控制復雜性
3.1 目標
3.1.1 可持續性
3.1.2 價值
3.2 為何編程是困難的
3.2.1 人腦類比
3.2.2 讀得多、寫得少的代碼
3.2.3 可讀性
3.2.4 腦力勞動
3.3 關於軟件工程
3.3.1 與電腦科學的關系
3.3.2 人性化代碼
3.4 結論
第4章 垂直切片
4.1 從能使用的軟件開始
4.1.1 從數據入口到數據持久化
4.1.2 最小的垂直切片
4.2 活動骨架
4.2.1 特徵測試
4.2.2 預備-執行-斷言
4.2.3 靜態代碼分析的合理尺度
4.3 由外到內
4.3.1 接收JSON
4.3.2 提交預訂請求
4.3.3 單元測試
4.3.4 DTO和領域模型
4.3.5 假對象
4.3.6 Repository接口
4.3.7 Repository中的Create方法
4.3.8 配置依賴關系
4.4 完成切片
4.4.1 schema
4.4.2 SQL Repository
4.4.3 連接數據庫的配置
4.4.4 冒煙測試
4.4.5 使用Fake數據庫的邊界測試
4.5 結論
第5章 封裝
5.1 保存數據
5.1.1 代碼改動優先級的原則
5.1.2 參數化測試
5.1.3 把DTO復制到領域模型中
5.2 驗證
5.2.1 錯誤的日期
5.2.2 紅綠重構
5.2.3 自然數
5.2.4 Postel定律
5.3 保護不變量
5.3.1 恆常有效
5.4 結論
第6章 三角測量
6.1 短期記憶與長期記憶
6.1.1 遺留代碼和記憶
6.2 能力
6.2.1 超訂
6.2.2 惡魔的辯詞
6.2.3 已有的預訂記錄
6.2.4 惡魔的辯詞 vs 紅綠重構
6.2.5 多少測試才算夠
6.3 結論
第7章 分解
7.1 代碼腐化
7.1.1 閾值
7.1.2 圈復雜度
7.1.3 80/24規則
7.2 與思維合拍的代碼
7.2.1 六角花
7.2.2 內聚
7.2.3 依戀情結
7.2.4 類型轉換的代價
7.2.5 解析,而不是驗證
7.2.6 分形架構
7.2.7 清點變量
7.3 結論
第8章 API設計
8.1 API設計原則
8.1.1 默認用法
8.1.2 防錯設計
8.1.3 寫給讀者看的代碼
8.1.4 比起註釋,花更多精力在代碼的命名上
8.1.5 矇住名字
8.1.6 命令與查詢分離
8.1.7 交流的層次
8.2 API設計實例
8.2.1 領班
8.2.2 與封裝對象交互
8.2.3 實現細節
8.3 結論
第9章 團隊合作
9.1 Git
9.1.1 提交說明
9.1.2 持續集成
9.1.3 小步提交
9.2 代碼的集體所有權
9.2.1 結對編程
9.2.2 團夥編程
9.2.3 code review的延遲
9.2.4 拒絕某個變更集
9.2.5 code review
9.2.6 pull request
9.3 結論
第2部分 由快到穩
第10章 新增代碼
10.1 功能標識
10.1.1 日歷標識
10.2 絞殺榕模式
10.2.1 方法層面的絞殺榕
10.2.2 類層面的絞殺榕
10.3 版本管理
10.3.1 事先警告
10.4 結論
第11章 修改單元測試
11.1 重構單元測試
11.1.1 修改安全網
11.1.2 添加新測試代碼
11.1.3 分開重構測試代碼和生產代碼
11.2 見證測試失敗
11.3 結論
第12章 故障排除
12.1 理解
12.1.1 科學方法
12.1.2 簡化
12.1.3 橡皮鴨法
12.2 缺陷
12.2.1 通過測試重現缺陷
12.2.2 慢速測試
12.2.3 非確定性缺陷
12.3 二分法
12.3.1 用Git完成二分法
12.4 結論
第13章 關註點分離
13.1 組合
13.1.1 嵌套組合
13.1.2 順序組合
13.1.3 引用透明性
13.2 橫切麵關註點
13.2.1 日誌
13.2.2 裝飾器
13.2.3 日誌寫什麽
13.3 結論
第14章 節奏
14.1 個人節奏
14.1.1 時間段
14.1.2 休息
14.1.3 有意識地利用時間
14.1.4 盲打
14.2 團隊節奏
14.2.1 定期更新依賴項
14.2.2 安排其他事務
14.2.3 康威定律
14.3 結論
第15章 常見困惑
15.1 性能
15.1.1 歷史負擔
15.1.2 一廂情願的依托
15.2 安全
15.2.1 STRIDE
15.2.2 欺騙
15.2.3 篡改
15.2.4 否認
15.2.5 信息泄露
15.2.6 拒絕服務
15.2.7 提權
15.3 其他技術
15.3.1 基於屬性的測試
15.3.2 行為代碼分析
15.4 結論
第16章 代碼庫導覽
16.1 導航
16.1.1 看到全局圖景
16.1.2 文件組織
16.1.3 尋找細節
16.2 架構
16.2.1 單體架構
16.2.2 循環依賴
16.3 使用方法
16.3.1 從測試中學習
16.3.2 用心聆聽測試
16.4 結論
附錄A 實踐技巧列表
參考資料