Dreaming In Code — 读书笔记
书籍信息
- 书名:Dreaming In Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software
- 作者:Scott Rosenberg
- 出版:Crown Publisher, 2006
- 页数:550页
- 核心主题:软件开发为何如此困难?通过Chandler开源项目的真实故事,探讨软件工程的本质困境
核心问题
本书开篇提出一个根本性问题:为什么好的软件如此难以制作?
Donald Knuth 说:“Software is hard.” 但为什么?
作者通过深入跟踪Open Source Applications Foundation(OSAF)开发的Chandler项目——一个旨在革新个人信息管理(PIM)的开源项目——来探索这个问题的答案。
关键概念与洞察
1. Brooks’s Law(布鲁克斯定律)
“Adding manpower to a late software project makes it later.”
在《人月神话》(1975)中提出。软件的复杂度意味着:
- 新增人员需要培训时间,老员工必须暂停工作来指导
- 任务无法简单分割(“The bearing of a child takes nine months, no matter how many women are assigned”)
- 沟通成本随人数平方级增长
2. “Software Time” vs “Internet Time”
- Software Time:进入”心流”状态时忘记时间流逝,或卡在问题前无法前进
- Internet Time:1990年代科技泡沫时期的 buzzword,承诺极速交付,但证明是短暂的
3. The Cathedral and the Bazaar(大教堂与集市)
Eric S. Raymond 1997年的著名论文:
- Cathedral模式:精心设计的集中式开发(传统商业软件)
- Bazaar模式:开放、分散、快速迭代的开源开发(Linux方式)
- Linus’s Law:“Given enough eyeballs, all bugs are shallow”
4. 软件工程的本质困境
Frederick Brooks 在”无银弹”(No Silver Bullet, 1987)中论证:
- 软件开发的根本困难源于其本质属性(essence),而非表面实践(accidents)
- 软件具有复杂性、一致性、可变性、不可见性
- 不可能有革命性的突破,只能有渐进式改进
5. Agenda的精神
Mitch Kapor 在Lotus 1-2-3成功后,开发了Lotus Agenda——一个个人信息管理工具。其核心理念:
- 动态灵活性:“put it in first, make decisions later”
- 用户不应被强制符合软件结构
- 数据组织应与人类思维习惯匹配
Chandler项目试图继承Agenda的精神,但面临更大挑战:开源协作、跨平台、网络同步。
本书结构
| 章节 | 内容 |
|---|---|
| Chapter 0: Software Time | 软件开发的本质困境,Brooks定律引入 |
| Chapter 1: Doomed | Chandler项目的启动与早期挣扎 |
| Chapter 2: The Soul of Agenda | Kapor的创业史与Agenda设计理念 |
| Chapter 3: Prototypes and Python | 技术选型与原型开发 |
| Chapter 4: Lego Land | 组件化开发与集成挑战 |
| Chapter 5: Managing Dogs and Geeks | 团队管理与开源文化 |
| Chapter 6: Getting Design Done | 设计决策的困境 |
| Chapter 7: Detail View | 技术细节与bug追踪 |
| Chapter 8: I Stickies on a Whiteboard | 敏捷方法与可视化管理 |
| Chapter 9: Methods | 方法论战争:XP、Scrum、CMM等 |
| Chapter 10: Engineers and Artists | 编程作为工程还是艺术? |
| Chapter 11: The Road to Dogfood | 测试文化与用户反馈 |
| Epilogue: A Long Bet | 未来展望与长期赌注 |
关键数据与事实
- 软件错误每年给美国经济造成约595亿美元损失(NIST 2002年研究)
- 2/3的软件项目严重超期、超预算或被迫取消
- Chandler项目:24名程序员,3年时间,4732个bug
- Mitch Kapor向OSAF捐赠500万美元启动资金
重要人物
| 人物 | 角色 | 背景 |
|---|---|---|
| Mitch Kapor | OSAF创始人/资助者 | Lotus 1-2-3创始人,EFF联合创始人 |
| Michael Toy | 开发经理 | Netscape老兵 |
| Andy Hertzfeld | 系统架构师 | 原始Macintosh核心开发者 |
| John Anderson | 首席程序员 | Mac word processor开发者,Next软件主管 |
| Lou Montulli | 程序员 | Netscape浏览器核心开发者 |
| Eric S. Raymond | 作家/思想家 | ”大教堂与集市”作者 |
| Linus Torvalds | Linux创始人 | ”仁慈的独裁者” |
可行动点
- 理解软件复杂性的本质:不要幻想有捷径,接受”软件很难”的现实
- 重视沟通成本:小团队往往比大团队更高效(Brooks定律)
- 尽早发布,快速迭代:Raymond的Bazaar模式优于Cathedral模式
- 设计应该适配用户思维:参考Agenda的”先放入,后组织”理念
- 诚实估算:软件估算通常是现实的1/6到1/2,预留缓冲
- dogfooding:像用户使用一样测试自己的产品
与其他书籍的关联
- 《人月神话》 — Frederick Brooks的经典著作,Brooks定律出处
- 《无银弹》 — Brooks关于软件本质的论文
- 《大教堂与集市》 — Raymond的开源开发哲学
- 《设计模式》 — Gamma等人,GoF经典
- ThoughtWorks实践集锦 — 敏捷开发实践
笔记备注
本书是一部优秀的软件工程纪实作品,通过真实项目故事展现了软件开发的复杂性与挑战性。虽然写作于2006年,但其探讨的问题至今仍然存在。对于理解软件工程的本质困境、开源开发模式的利弊、以及团队协作的复杂性具有重要参考价值。