读书笔记 · 约 11,143 字 · 预计推送 2 部分

精读:Glass《Facts and Fallacies of Software Engineering》精选核对——2026 年仍成立与已过时的条目 未开始

目录

题记与说明


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 条事实的接受度分类:

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."(程序员质量是最重要因素)

Fact 3 / Brooks 定律 — "Adding people to a late project makes it later."(给延期项目加人会更延期)

Facts 8–12 估算簇(估算差/时机错/人选错/不修正/明知不可靠仍依赖)

Fact 21/41 维护占大头 — "Maintenance typically consumes 40 to 80 percent of software costs."

Fact 44 — "Understanding the existing product is the most difficult maintenance task."(理解现有代码是最难的维护任务)

Fact 45 — "Better methods lead to more maintenance, not less."(更好的方法导致更多维护而非更少)

Fallacy 1 — "You can't manage what you can't measure."(不能度量就不能管理——被 Glass 判为谬误)

Fallacy 8 — "Given enough eyeballs, all bugs are shallow."(眼球足够多,bug 都很浅——Glass 2002 年就判为谬误)

Fallacy 6 — "To estimate cost and schedule, first estimate lines of code."(先估代码行数)

Fact 55 — "Many researchers advocate rather than investigate."(很多研究者在做倡导而非研究)

2.2 数字失效或方法学被推翻(定性结论部分存活)

Fact 2 — "The best programmers are up to 28 times better than the worst programmers."(最好程序员是最差者的 28 倍)

Fact 53 — "High-order language code can be about 90 percent as efficient as comparable assembler code."(高级语言代码效率约为汇编的 90%)

2.3 形式过时(时代变了,但内核常以新形式存活)

Facts 34–35 — "Test tools are essential, but rarely used." / "Test automation rarely is. Most testing activities cannot be automated."

Facts 15–20 复用簇 — "Reuse-in-the-small is a solved problem" / "Reuse-in-the-large remains a mostly unsolved problem"

Fact 30 — "COBOL is a very bad language, but all the others are so much worse."(COBOL 很糟,但其他语言更糟)

Fallacy 3 — "Programming can and should be egoless."(编程应该无我)

Fallacy 9 — "The way to predict future maintenance costs... is to look at past cost data."(用过去成本数据预测未来维护成本/替换决策)

Fallacy 10 — "You teach people how to program by showing them how to write programs."(教编程就是教写程序)


3. 核对结果小结

判定条目一句话依据
成立且加固Fact 1, 3, 8–12, 21/41, 44, 45;Fallacy 1, 6, 8, 10Rahman 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. 重要原文引述


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. 来源

全文精读:

  1. InformIT(Glass 原文摘录,2002-11-15): https://www.informit.com/articles/article.aspx?p=30032
  2. 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/
  3. Principal-IT 书评(Van Ryswyck, 2010-08-23,含 55+10 完整清单): https://principal-it.eu/2010/08/book-review-facts-and-fallacies-of/
  4. RP Churchill(2018-09-29,含 Glass 对 55 条的接受度分类): https://rpchurchill.com/wordpress/posts/2018/09/29/book-facts-and-fallacies-of-software-engineering/

检索验证(经搜索结果摘要阅读):

  1. Rahman, da Silva & Raza (2024), IST SLR, DOI 10.1016/j.infsof.2024.107475 — https://www.sciencedirect.com/science/article/abs/pii/S0950584924000806
  2. Prechelt (2000), TSE 方差研究 — https://page.mi.fu-berlin.de/prechelt/Biblio/variance_tse2000.pdf
  3. Moløkken & Jørgensen 综述 / Jørgensen (2014) IEEE Software — https://ieeexplore.ieee.org/iel7/52/6774316/06774376.pdf
  4. Linus' Law 实证:SBQS'19(ACM DL 10.1145/3364641.3364650)、Meneely & Williams、Fowler《Testing Culture》— https://martinfowler.com/articles/testing-culture.html
  5. 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
← 资料库今日播报 →