跳到主要内容

焦油坑-编程的乐趣与苦恼

焦油坑这个比喻说的是什么?​

  • 画面: 史前巨兽陷进焦油坑, 越挣扎陷得越紧, 最后都沉到坑底;
  • 映射: 过去几十年的大型系统开发, 大多数做出了可运行的系统, 但只有极少数满足目标、进度和预算;
  • 关键点: 没有哪一个单独问题会导致困难, 每个都能被解决; 困难来自问题相互纠缠和累积, 团队行动因此越来越慢;

编程有哪些乐趣?​

乐趣具体表现
创造的快乐从无到有地造出东西, 类似小孩玩泥巴
对他人有用内心期望别人使用自己的劳动成果
魔术般的力量把相互啮合的部件组装起来, 看它们精确运行
持续学习面临的问题总有不同, 实践上和理论上都能学到新东西
介质易于驾驭几乎只在纯粹思维中工作, 可以自由精炼和重建
  • 容易驾驭的双刃性: 介质灵活既是乐趣来源, 也是乐观主义和需求频繁变更的来源;

编程有哪些苦恼?​

  • 追求完美: 一个字符或停顿不对, 魔术就不出现; 学会"追求完美地做事"是学编程最难的部分;
  • 权威不匹配: 目标、资源和信息由他人设定, 承担的责任却大于被授予的正式权威; 实际权威只能靠一次次完成任务挣来;
  • 依赖他人的程序: 系统程序员依赖别人的程序, 而那些程序常常设计不合理、实现拙劣、不完整或没有文档;
  • 重复劳动: 概念设计有趣, 找琐碎的 bug 枯燥;
  • 收敛慢: 调试和查错常呈线性收敛, 更糟时是二次方复杂度, 找最后一个错误比第一个更费时;
  • 完成即过时: 投入大量劳动后, 产品刚完成就已显得陈旧, 可能被对手的新构思取代;

为什么先认识乐趣和苦恼很重要?​

  • 乐趣: 解释这个行业靠什么吸引人, 也是团队士气的来源;
  • 苦恼: 事先了解固有烦恼, 真正出现时才能坦然面对, 而不是误判成管理失败;
  • 结论: 乐趣远大于苦恼, 书的作用是为通过焦油坑搭桥, 而不是否认坑的存在;