题记与说明
- 日期:2026-11-06
- 主题:Robert L. Glass, *Facts and Fallacies of Software Engineering*(Addison-Wesley, 2002;Glass 自述基于约五十年从业经验),55 条 Facts + 10 条 Fallacies,逐条附讨论与出处。
- 本次核对方式:网络可用,检索并全文精读 4 个来源 + 5 组定向检索验证;来源清单见文末。
- 限制声明:未能获取原书全文(O'Reilly TOC 页返回 403,Wikipedia 条目连接被重置);55 条清单以 principal-it.eu 转述与 Coding Horror 引文交叉核对为准,个别措辞在不同转述间略有出入;Rahman et al. 2024 的 "60–70%" 数字来自检索摘要转述,未能读到原文全文验证。
1. 这本书在做什么
Glass 的定位是"是什么书"(what-is book)而非"怎么做书"。据 Coding Horror 转述其导言:
the book presents problems, not solutions — it's a "what-is book" rather than a how-to, meant to bring the facts "into the open" for free discussion and progress.
书分两部分:Part I 是 55 条"事实"(管理、生命周期、产品、研究),Part II 是 10 条"谬误"(业内流行但 Glass 认为站不住的说法)。RP Churchill(2018)转述了 Glass 自己对 55 条事实的接受度分类:
- 12 条"鲜为人知"(fundamentally important but rarely heard)
- 11 条"广为接受但无人照做"
- 8 条"接受,但对怎么改没共识"
- 6 条"几乎无人反对"
- 5 条"很多人直接反对"
- 5 条"争议很大"
Glass 还提出一个贯穿全书的量级判断(RP Churchill 转述):创新带来的改进"不超过 40%"(by no more than forty percent),而不是数量级改进——这条对 2026 年评估一切"银弹"宣称(包括 AI 编程)仍然是最好的先验。
2. 精选 Facts 核对:2026 年仍成立 vs 已过时
2.1 仍然成立(且有 2020s 新证据加固)
Fact 1 — "The most important factor in software work is the quality of the programmers."(程序员质量是最重要因素)
- 2026 判断:成立,且被 AI 时代放大。2025–2026 的共识综述("Agents Didn't Repeal the Laws of Software Engineering. They Intensified Them"、Pragmatic Engineer《Revisiting "No Silver Bullet" in the age of AI》)认为 LLM 只削意外复杂度、不削本质复杂度,人的判断力/品味更稀缺;LLM 收益"分布不均,power user 获益最大",程序员差异只是转移成"谁能用好 LLM"。
- 佐证链条:Brooks 本质/意外复杂度框架仍是对 AI 提效的主流解释。
Fact 3 / Brooks 定律 — "Adding people to a late project makes it later."(给延期项目加人会更延期)
- 2026 判断:成立。2025-10 博客《The Mythical Agent-Month》直接移植:"Adding an autonomous AI agent to a late software project makes it later"——协调与评审开销对 agent 同样存在;Google 2025-12 研究与多篇 2026 文章指出人类评审成为新瓶颈("Mythical Man-Month becomes the Mythical Agent-Minute")。存在少数反例派(Fortune 2026 称 AI "repealed" 该定律),主流是中庸派:定律成立,常数变了。
Facts 8–12 估算簇(估算差/时机错/人选错/不修正/明知不可靠仍依赖)
- 2026 判断:成立,四十多年未见改善。Moløkken & Jørgensen 综述:60–80% 的项目出现工作量/进度超支;Jørgensen (2014, IEEE Software):平均超支约 30%;Jørgensen (2016, JSS):预算平均超 20–30%、工期约 20%,且数十年调查结果稳定。Glass 说的 "we live and die by them anyway" 至今是行业写照。
Fact 21/41 维护占大头 — "Maintenance typically consumes 40 to 80 percent of software costs."
- 2026 判断:成立。Rahman, da Silva & Raza (2024, *Information and Software Technology*,DOI 10.1016/j.infsof.2024.107475) 的 SLR 仍引用维护消耗 IT 预算的 60–70%;经典出处链 Lientz & Swanson (1980) → Erlikh (2000) → Yip & Lam (1994, ~66%) 一脉相承。(注:该数字出自检索摘要,未读原文全文核对,置信度中高。)
- 细分仍然成立: enhancements ≈60% 的维护成本、修复仅 ≈17%(RP Churchill 转述)——"维护是在建新功能"这个反直觉事实没变。
Fact 44 — "Understanding the existing product is the most difficult maintenance task."(理解现有代码是最难的维护任务)
- 2026 判断:成立,且是 LLM 工具最直接的用武之地。读懂存量代码正是 2023–2026 AI 编程助手落地最有效的场景,属于"AI 先啃下的意外复杂度"。
Fact 45 — "Better methods lead to more maintenance, not less."(更好的方法导致更多维护而非更少)
- 2026 判断:成立。更快的生产速度产生更多需要维护的存量代码——这正是 2025–2026 "AI 生成代码洪水 + 人类评审瓶颈"争议的老版本。Amdahl 定律式估算(编码仅占工程师时间 ~16%,完美代码生成封顶 ~2.5x,实测 1.2–2x)与该事实逻辑同源。
Fallacy 1 — "You can't manage what you can't measure."(不能度量就不能管理——被 Glass 判为谬误)
- Glass 的论证(InformIT 原文摘录,2025-11 读到):我们一直在管理不可度量的智力创造性工作(癌症研究、软件设计);知识工作的好管理者靠定性而非定量;度量本身有成本(NASA-Goddard, Rombach 1990:度量开销仅占项目总成本 7–9%,他们觉得"很值");早期度量因采集无意义数据而声名扫地(Halstead 软件科学被比作占星术);并且这句名言是对 DeMarco 的讹传——原文是 "you can't control what you can't measure"。
- 2026 判断:比 2002 年更成立。DORA 指标、AI 代码量统计时代的核心风险正是 Goodhart 定律(指标一旦成为目标就失效);Glass 对"定性管理知识工作"的辩护是对当前"用 PR 数量/代码行数评 LLM 产出"风气的前置反驳。
Fallacy 8 — "Given enough eyeballs, all bugs are shallow."(眼球足够多,bug 都很浅——Glass 2002 年就判为谬误)
- 2026 判断:Glass 完胜。实证研究链条:Meneely & Williams《Secure open source collaboration: An empirical study of Linus' Law》、"How Many Eyeballs Does a Bug Need?"、SBQS'19 仅得部分支持、Herzig et al. 修正度量后结果"mixed";Heartbleed(在"最开放"的 OpenSSL 里潜伏约 2 年,实际维护者约 1 个全职人力)成为标准反例,Martin Fowler《Goto Fail, Heartbleed, and Unit Testing Culture》用它论证"开源≠没 bug"。共识改写为:只有真正投入的专家眼球才让 bug 变浅,名义曝光量不算。
Fallacy 6 — "To estimate cost and schedule, first estimate lines of code."(先估代码行数)
- 2026 判断:仍是谬误。LOC 在 LLM 时代作为规模代理更扭曲(AI 能瞬间生成大量低价值行);函数点/故事点/概率估算虽取代了 LOC 的"最佳实践"地位,但 Glass 对"规模→成本"线性幻觉的批评未过时。
Fact 55 — "Many researchers advocate rather than investigate."(很多研究者在做倡导而非研究)
- 2026 判断:成立,对 AI 软件工程研究同样适用(大量"我们用 X 工具感觉很好"型论文/博客)。
2.2 数字失效或方法学被推翻(定性结论部分存活)
Fact 2 — "The best programmers are up to 28 times better than the worst programmers."(最好程序员是最差者的 28 倍)
- 2026 判断:28x 这个数字已失效,"个体差异巨大"存活。
- 出处是 Sackman, Erikson & Grant (1968, CACM),方法学缺陷明确:样本极小(约 12 名职业程序员)、批处理 vs 分时环境的混杂变量主导了比值、玩具级题目、编码+调试时间混在一起(O'Reilly《Making Software》ch30、Dickey《Programmer Variability》、Understanding Nothing 博客 2003)。
- Prechelt (2000, TSE) 用 40+ 名有经验 Java 程序员重做:差异约 3–7x,远小于 28x;其原文称 Grant & Sackman 的 28:1 "both incorrect and misleading"。
- 2020 年《The End to the Myth of Individual Programmer Productivity》指出该结果"在更大规模的检验中未能复现"。
- 结论:Glass 原文带 "up to" 对冲,不算说错,但引用者应改口为 3–10x 的宽区间。
Fact 53 — "High-order language code can be about 90 percent as efficient as comparable assembler code."(高级语言代码效率约为汇编的 90%)
- 2026 判断:过时但无害。现代编译器(LLVM 系)在多数场景已接近或超过手写汇编;性能问题域已转移到内存局部性、算法与并发结构。这条作为历史快照保留即可。
2.3 形式过时(时代变了,但内核常以新形式存活)
Facts 34–35 — "Test tools are essential, but rarely used." / "Test automation rarely is. Most testing activities cannot be automated."
- 2026 判断:形式上明显过时。CI/CD、xUnit、Playwright、覆盖率门禁在 2026 年已是主流工程实践(这与本次笔记库同日相邻主题的工程常识一致),"测试工具少有人用"在成熟团队不成立。
- 残存内核:探索性测试、可用性/可访问性/安全测试仍大量依赖人工;"自动化测试很少是纯自动化的"(维护测试套件本身是持续人力投入)仍成立。未找到 2020s 对"55–60% 覆盖率"(Fact 32)的现代复测,标为未验证。
Facts 15–20 复用簇 — "Reuse-in-the-small is a solved problem" / "Reuse-in-the-large remains a mostly unsolved problem"
- 2026 判断:部分过时。npm/PyPI/Cargo 等包生态让"大规模复用第三方库"成为日常——这是 2002 年 Glass 不敢预期的发展;但 Glass 的三个限定词全部应验:复用在相关系统族内最有效(平台工程/内部组件库);改复用代码特别容易出错(供应链投毒与 breaking change:left-pad、event-stream、Log4Shell 均是注脚);可复用组件要 3 倍成本、3 个场景验证(对应 2026 年"内部平台返工"讨论)。"Holy Grail" 实现了一半:生态级复用成功了,企业级领域复用仍是难题。
Fact 30 — "COBOL is a very bad language, but all the others are so much worse."(COBOL 很糟,但其他语言更糟)
- 2026 判断:作为字面陈述过时(本就是幽默/修辞);内核"没有明显最优语言、语言之争重要性远低于人"存活。COBOL 存量系统 2026 年仍在银行核心运行,反而是"维护事实"的最佳活标本。
Fallacy 3 — "Programming can and should be egoless."(编程应该无我)
- 2026 判断:演化而非证伪。Weinberg 式"无我编程"没人再提,但它的制度后代——code review 文化、blameless postmortem、RFC 流程——已是 2026 年默认实践。Glass 反对的"消灭自我"失败了,他暗示的"社会性过程"赢了。
Fallacy 9 — "The way to predict future maintenance costs... is to look at past cost data."(用过去成本数据预测未来维护成本/替换决策)
- 2026 判断:半更新。遥测/成本数据质量远好于 2002 年,但"要不要重写"决策在 2026 年依旧频繁翻车(重写热潮),Glass 对"外推历史数据"的怀疑存活。
Fallacy 10 — "You teach people how to program by showing them how to write programs."(教编程就是教写程序)
- 2026 判断:仍有效。现代 CS 教育研究(读码先于写码、worked examples、PRIMM)与 Glass 判为谬误的旧教学法方向一致;对"人人都能 vibe coding"的 2026 宣称同样适用。
3. 核对结果小结
| 判定 | 条目 | 一句话依据 |
|---|---|---|
| 成立且加固 | Fact 1, 3, 8–12, 21/41, 44, 45;Fallacy 1, 6, 8, 10 | Rahman 2024 SLR、Jørgensen 2014/2016、Heartbleed 实证链、AI 时代综述 |
| 数字失效 | Fact 2 (28x)、Fact 53 (90% vs asm) | Sackman 1968 方法学缺陷、Prechelt 2000 复测 3–7x |
| 形式过时、内核存活 | Facts 15–20, 30, 34–35;Fallacy 3, 9 | 包生态崛起、CI/CD 主流化、评审文化制度化 |
| 未验证 | Fact 32 (55–60% 覆盖率)、inspections 90%(Fact 37 簇) | 未找到 2020s 复测数据 |
总评:10 条谬误几乎全军存活,且 Fallacy 8(眼球定律)被后续实证彻底坐实是谬误;55 条事实中约七成核心内核在 2026 年仍站得住,失效的主要是具体数字与工具语境。 Glass "创新改进不超过 40%" 的先验,恰好预言了 AI 编程 1.2–2x 的实测区间。
4. 重要原文引述
- "The most important factor in software work is NOT the tools and techniques that the programmer uses, but rather the quality of the programmers themselves."(Fact 1 的完整表述,据 Coding Horror/principal-it 转述)
- "Maintenance typically consumes 40 to 80 percent of software costs. It is probably the most important software lifecycle phase."(Coding Horror 引)
- "COBOL is a very bad language, but all the others are so much worse."(两来源一致)
- DeMarco 原句 vs 讹传(InformIT 摘录):原文 "you can't control what you can't measure";"manage" 版本是讹传,DeMarco 本人向 Glass 确认。
- Peopleware(InformIT 摘录中 Glass 引用):质量动员口号被 DeMarco & Lister 称为 "those damn posters and plaques",其效果是 "teamicide"。
- Hetzel (1993)(InformIT 摘录):用得最多的度量是发布后发现的缺陷数(61%),用得最少的是功能点(10%)——度量界自己的讽刺。
- Prechelt (2000):Grant & Sackman 的 28:1 "both incorrect and misleading"(转述)。
- Atwood (2008) 总评:这些条目读起来 "feels like a zen koan to software engineering";进步方式是 "building our shared memory and history in the field"。
5. 七维提取
核心问题:软件工程里哪些说法是被证据支撑的"事实",哪些是被广泛相信的"谬误"?从业者能否用一份经得起核对的清单替代口口相传的直觉?
主要主张:从业者经验中存在一组跨项目、跨年代稳定的经验事实(人>工具、估算天然不可靠、维护占生命周期大头、错误移除最难、质量是多属性集合);与之相对,十条流行管理信条(度量万能、质量可以口号式管理、无我编程、方法论越多越好、LOC 估算、随机测试、眼球定律……)是谬误。Glass 预言本书内容 "ageless"。
方法:非实验性经验综合——从约五十年从业经历与既有研究文献(含 Lientz & Swanson、Fagan 检查、Sackman 等)中提炼条目,每条附讨论、争议与出处;用"事实/谬误"二分制造可检验的强断言;导言声明这是 what-is 书,目的是把事实摆上台面供讨论。
数据与证据:书的证据以历史研究引用为主,多数来自 1970–1990 年代(Sackman 1968 是被后世推翻的典型);本次 2026 核对补上的新证据:维护占比 60–70%(Rahman et al. 2024 IST SLR)、超支率 60–80%/均值 30%(Moløkken & Jørgensen 系列)、28x 未复现(Prechelt 2000,3–7x)、眼球定律实证 mixed/部分支持 + Heartbleed 反例、AI 时代 1.2–2x 实测与评审瓶颈(2025–2026 多篇)。Glass 的二分是修辞策略:不少"事实"其实是高置信度归纳,不是实验定律——但作为决策先验足够可靠。
结论:约七成事实内核在 2026 年仍成立,十条谬误全部或基本仍为谬误,其中"眼球定律"被 2014 年后实证研究彻底坐实;失效集中在具体数字(28x、90% vs 汇编)与工具语境(测试工具稀缺、COBOL 修辞)。书的元结论"技术改进只有增量、人的因素压倒一切"对评估 2026 年 AI 宣称依然是最准的先验。
局限:(1) 证据时效——原书引用链大量停在 1990 年代,读者需自行补现代复测;(2) 二分法过强——"事实"实为强归纳而非定律,Glass 在正文有对冲但标题没有;(3) 样本时代局限——本书的"项目"隐含大型企业软件,与开源/个人/AI 辅助开发语境有偏差(复用、测试自动化两条已被时代部分改写);(4) 本次核对未读原书全文,55 条清单依赖两个二手转述交叉核对,个别措辞可能有出入;(5) Rahman 2024 的 60–70% 数字来自检索摘要,未验证原文。
对我的启发:(1) 建立了"条目化+带出处+带争议"的知识压缩格式,可直接用于评估任何新技术宣称(先问:这突破 40% 增量先验了吗?);(2) 对 AI 编程热的最稳判断框架:Brooks 定律移植到 agent(评审是新瓶颈)、Amdahl 封顶(编码仅占 ~16% 时间)、程序员差异转移为"会用 AI 的差异";(3) 自己项目的预算心智模型:维护/增强占大头,写新代码的消费速度永远快过维护旧代码的能力;(4) 用 Glass 核 2026、用 2026 核 Glass 的双向核对法,可复用到其他"经典 + 现代验证"主题上。
6. 来源
全文精读:
- InformIT(Glass 原文摘录,2002-11-15): https://www.informit.com/articles/article.aspx?p=30032
- Coding Horror — Atwood, "Revisiting The Facts and Fallacies of Software Engineering"(2008-03-25): https://blog.codinghorror.com/revisiting-the-facts-and-fallacies-of-software-engineering/
- Principal-IT 书评(Van Ryswyck, 2010-08-23,含 55+10 完整清单): https://principal-it.eu/2010/08/book-review-facts-and-fallacies-of/
- RP Churchill(2018-09-29,含 Glass 对 55 条的接受度分类): https://rpchurchill.com/wordpress/posts/2018/09/29/book-facts-and-fallacies-of-software-engineering/
检索验证(经搜索结果摘要阅读):
- Rahman, da Silva & Raza (2024), IST SLR, DOI 10.1016/j.infsof.2024.107475 — https://www.sciencedirect.com/science/article/abs/pii/S0950584924000806
- Prechelt (2000), TSE 方差研究 — https://page.mi.fu-berlin.de/prechelt/Biblio/variance_tse2000.pdf
- Moløkken & Jørgensen 综述 / Jørgensen (2014) IEEE Software — https://ieeexplore.ieee.org/iel7/52/6774316/06774376.pdf
- Linus' Law 实证:SBQS'19(ACM DL 10.1145/3364641.3364650)、Meneely & Williams、Fowler《Testing Culture》— https://martinfowler.com/articles/testing-culture.html
- AI 时代综述:《The Mythical Agent-Month》(forret.com, 2025-10)、Pragmatic Engineer《Revisiting "No Silver Bullet" in the age of AI》、《Agents Didn't Repeal the Laws of Software Engineering. They Intensified Them》(Medium, 2026)、Construx《The Origin of 10x》— https://www.construx.com/blog/productivity-variations-among-software-developers-and-teams-the-origin-of-10x