README
# 代码品质工坊 · 代码医院
这不是又一本"讲代码整洁"的书。这是一家代码医院——十四篇诊疗记录,把《代码整洁之道》《重构》《修改代码的艺术》三本经典的骨架,融进一个团队 90 天真实故事里。初级读住院医的查房、高级读主治的查房、架构师读主任的查房,同一段病灶三种深度。
# 一、为何要做代码医院
大多数关于代码质量的书,讲的是技法:如何命名、如何抽函数、如何写测试。但真正让人痛的从来不是"我不会重命名变量",而是:
- 我知道这段代码烂,但不知道从哪儿下手。
- 我知道要写测试,但这段代码根本没法测。
- 我知道有技术债,但老板不给排期。
- 我发起了 CR,但评审全是 "lgtm" 或 "nit" 级别的意见,没人指出真正的架构问题。
- 我是应届生/五年老兵/十年 TL,为什么读同一本经典,我们的收获天差地别?
代码质量问题很像医院里的病:同一个症状,主任、主治、住院医看到的东西不一样。所以我们干脆把它做成一家医院——三大科室、三级医生、每一份病案都有编号、每一次治疗都有康复曲线。
# 二、贯穿故事九十天
OrderService.submitOrder() 的 1247 行超级方法 长期把持。它承担了下单、库存、优惠、支付、物流、消息、统计七件事,圈复杂度 68,参数 14 个,被 89 个地方调用,无任何单元测试。过去半年发生过 3 次线上事故:优惠券超发 42 万、库存超卖 1300 单、大促全链路雪崩。团队新任技术负责人「老陈」立下军令状:90 天内把这个订单系统重构到可维护、可测试、可扩展——同时业务不能停。
14 篇诊疗记录就是这 90 天的完整历程。
# 三、医院三大科室
【代码医院 · 三大科室】
│
┌────────────────────┼────────────────────┐
│ │ │
[急诊科] [影像检验科] [外科与康复]
救存量代码 度量与诊断 重构与筑基
│ │ │
第 02-06 篇 第 07-09 篇 第 10-13 篇
# 一号科室急诊科
主任:老陈(后期晋升) · 主治:老陈 · 住院医:小李、小张
送来的都是"正在烧的"代码——God Class、异常吞噬、条件式失控、遗留系统改不动。急诊科的原则是"先保命、再治病"。
# 二号科室影像科
主任:沈总 · 主治:老陈 · 住院医:小李
代码得先"拍片子、抽血、做心电图",才能知道到底哪里病了。影像科负责把主观的"感觉这段代码烂"翻译成客观的度量指标——圈复杂度、覆盖率、技术债金额。
# 三号科室外科室
主任:沈总 · 主治:老陈 · 住院医:小李 + 小张
从"识别"进入"动刀"——18 种重构手法、测试兜底、CR 文化、新系统的免疫力建设。外科不只是切除病灶,更要教会团队康复。
# 四、三医生查房制
同一段病灶,从三个视角各切一刀。读者可以按自己身份选择深度,也可以"偷偷"读其它医生的部分,感受更高维度的思考。
| 视角 | 关注面 | 举例(同一段吞异常的代码) |
|---|---|---|
| 🟢 住院医查房(初级 1-3 年) | 单文件、几行代码内的可见问题 | "把 catch(Exception e){} 改成具体异常类型,加上上下文" |
| 🟡 主治查房(高级 3-8 年) | 模块、类、接口层面的设计问题 | "错误处理策略要在接口契约里明示;引入 Optional / Result 类型" |
| 🔴 主任查房(架构师 8+ 年) | 系统、团队、流程层面的根源问题 | "为什么团队会形成'先跑起来再说'的文化?错误码规范该在架构层如何统一?" |
关键规则:三视角不是深浅递进,而是关注面不同——住院医版独立自洽,架构师版独立自洽,任一读者都能只读自己那一层收获完整知识。
# 五、病案编号系统
本专栏所有坏味道 / 手法都用统一编号登记,读完 14 篇你会带走一份完整索引,遇到问题直接查表。
| 前缀 | 类别 | 编号范围 | 主要出没篇 |
|---|---|---|---|
| N | Naming · 命名类 | N01-N15 | 第 02、03 篇 |
| F | Function · 函数类 | F01-F20 | 第 02、03、10 篇 |
| C | Class · 类与对象 | C01-C18 | 第 03、10 篇 |
| E | Error · 错误处理 | E01-E10 | 第 04、11 篇 |
| T | Test · 测试类 | T01-T12 | 第 08、11 篇 |
| A | Architecture · 架构类 | A01-A15 | 第 09、13 篇 |
| D | Debt · 技术债类 | D01-D10 | 第 09、12 篇 |
| R | Review · 代码审查类 | R01-R08 | 第 12 篇 |
每次介绍一个坏味道都用统一病案卡片:主诉 / 检查 / 处方 / 出处 / 关联病案。14 篇读完,你有一份 100+ 条目的可检索索引。
# 六、专栏定位
| 维度 | 说明 |
|---|---|
| 目标读者 | 1-15 年工程师全覆盖——初级看住院医、高级看主治、架构师看主任 |
| 跨语言 | 主线 Java(承接订单案例),关键手法给 Go / Python / TypeScript 对照 |
| 与 01 卷(体系建设)的区别 | 01 教"性能体系怎么守",02 教"代码品质怎么建" |
| 与 07 卷(内功)的区别 | 07 讲底层原理,02 讲日常战术——你今天写 PR 就用得上 |
# 七、诊疗记录目录
# 序篇导读
| # | 文章 | 剧情节点 | 核心命题 |
|---|---|---|---|
| 01 | 代码医院开院首诊 | Day 0 | 为什么代码需要一家医院·三视角三科室走一遍 |
# 急诊科五篇导航
| # | 文章 | 病人 | 核心病症 | 承接经典 |
|---|---|---|---|---|
| 02 | 命名与意图的战场 | P-001 OrderMonolith | 287 处坏名字(N 系列) | 《代码整洁之道》Ch2 |
| 03 | 函数与职责大手术 | P-001 OrderMonolith | 1247 行超级方法(F、C 系列) | 《代码整洁之道》Ch3·Ch10 |
| 04 | 错误与边界的防线 | P-004 PaymentGate | 全 catch(Exception) 失血症(E 系列) | 《代码整洁之道》Ch7 |
| 05 | 条件与多态心律术 | P-002 CouponCalc | 47 个 else if 心律不齐 | 《重构》Ch10·以多态取代条件 |
| 06 | 遗留代码急救手册 | 全部 | 无测试遗留代码安全改造五步法 | 《修改代码的艺术》Feathers |
# 影像检验三篇
| # | 文章 | 检查项目 | 核心命题 | 承接经典 |
|---|---|---|---|---|
| 07 | 静态分析度量诊断 | 拍片子 | 圈复杂度/认知复杂度/耦合度的科学解读 | 《代码大全》Ch19-22 |
| 08 | 测试覆盖率的真相 | 抽血化验 | 行/分支/变异覆盖率的陷阱与真相 | 《单元测试的艺术》 |
| 09 | 技术债量化与还款 | 心电图 | 技术债的量化、四象限、还债路线图 | Kruchten《技术债务》 |
# 外科康复四篇
| # | 文章 | 手术类型 | 核心命题 | 承接经典 |
|---|---|---|---|---|
| 10 | 重构十八招式详解 | 手术台 | Fowler 18 招手法的实战演练 | Fowler《重构》 |
| 11 | 测试保命术全解析 | 麻醉保命 | 重构前的测试兜底与安全网 | 《修改代码的艺术》Ch4 |
| 12 | 代码审查文化建设 | 康复训练 | CR 卡点/评审礼仪/门禁自动化 | Google Eng Practices |
| 13 | 新系统免疫力建设 | 预防医学 | Greenfield 项目如何从 0 建立品质免疫 | 《架构整洁之道》 |
# 手册附录
| # | 文章 | 用途 |
|---|---|---|
| 14 | 医生手册总结索引 | 三视角带走清单 + 病案编号全表 + 术式总索引 |
| 61 | 写作模板 | 全 14 篇统一写作规范 |
# 八、按身份学习
🟢 初级工程师(1-3 年) **推荐路径**序 → 02(命名) → 03(函数) → 04(错误) → 11(测试保命) → 14(手册)
只看每篇的【住院医查房】+ 病案卡片,掌握"能立刻用在 PR 上"的手法
全部 14 篇顺读,重点看【主治查房】和第 05/06/09/10/13 篇
掌握"设计层面的质量、遗留代码改造、技术债量化"三大核心
序 → 07-09(度量) → 12-13(文化与筑基) → 14(手册)
+ 全篇的【主任查房】部分,关注"系统级、组织级、文化级"的思考
# 九、每篇的收获
一次学习结束,你会得到:
- 📋 一份100+ 条目的病案索引——遇到烂代码直接查表定位。
- 📈 一份可套用的"90 天重构剧本"——含每一天该做什么、卡点在哪。
- 🔧 一份60+ 条 CR 卡点清单——不是复制别人的,是从案例里逼出来的。
- 💰 一份技术债量化模板——用它去说服老板给你排还债的时间。
- 🧪 一份测试金字塔搭建 SOP——从 UT 到 E2E 的完整脚手架。
- 🎓 三份**"三医生带走清单"**——按身份对号入座的可执行动作。
- 🧠 最重要的:一种**"看见烂代码就知道怎么下刀"的直觉**。
# 十、写作方法论
沿用 10.真经 卷首约定:
- 禁止模糊表述,要求可证伪。
- 所有数据有出处(复杂度、覆盖率、事故数据),所有对比有基准(before / after 定量)。
- 跨平台对照(Java 主线 + Go/Python/TS 至少一门),不绑定单一技术栈。
- 每篇必有真实病例、必有度量数据、必有经典书出处、必有练习题。
具体写作骨架见 61. 写作模板。
开场白:现在,让我们把镜头切到公司会议室——Day 1,早上 9 点,老陈把
OrderService.java投在大屏上,一句话没说,全场安静了 30 秒。第一位病人已经躺在急诊室的推车上。14 篇诊疗记录,从这里开始。
下一篇 → 第 01 篇 · 代码医院开院首诊