焦油坑-编程的乐趣与苦恼
焦油坑这个比喻说的是什么?
- 画面: 史前巨兽陷进焦油坑, 越挣扎陷得越紧, 最后都沉到坑底;
- 映射: 过去几十年的大型系统开发, 大多数做出了可运行的系统, 但只有极少数满足目标、进度和预算;
- 关键点: 没有哪一个单独问题会导致困难, 每个都能被解决; 困难来自问题相互纠缠和累积, 团队行动因此越来越慢;
编程有哪些乐趣?
| 乐趣 | 具体表现 |
|---|---|
| 创造的快乐 | 从无到有地造出东西, 类似小孩玩泥巴 |
| 对他人有用 | 内心期望别人使用自己的劳动成果 |
| 魔术般的力量 | 把相互啮合的部件组装起来, 看它们精确运行 |
| 持续学习 | 面临的问题总有不同, 实践上和理论上都能学到新东西 |
| 介质易于驾驭 | 几乎只在纯粹思维中工作, 可以自由精炼和重建 |
- 容易驾驭的双刃性: 介质灵活既是乐趣来源, 也是乐观主义和需求频繁变更的来源;
编程有哪些苦恼?
- 追求完美: 一个字符或停顿不对, 魔术就不出现; 学会"追求完美地做事"是学编程最难的部分;
- 权威不匹配: 目标、资源和信息由他人设定, 承担的责任却大于被授予的正式权威; 实际权威只能靠一次次完成任务挣来;
- 依赖他人的程序: 系统程序员依赖别人的程序, 而那些程序常常设计不合理、实现拙劣、不完整或没有文档;
- 重复劳动: 概念设计有趣, 找琐碎的 bug 枯燥;
- 收敛慢: 调试和查错常呈线性收敛, 更糟时是二次方复杂度, 找最后一个错误比第一个更费时;
- 完成即过时: 投入大量劳动后, 产品刚完成就已显得陈旧, 可能被对手的新构思取代;
为什么先认识乐趣和苦恼很重要?
- 乐趣: 解释这个行业靠什么吸引人, 也是团队士气的来源;
- 苦恼: 事先了解固有烦恼, 真正出现时才能坦然面对, 而不是误判成管理失败;
- 结论: 乐趣远大于苦恼, 书的作用是为通过焦油坑搭桥, 而不是否认坑的存在;