《程序员的职业素养》(英文名: The Clean Coder:A Code of Conduct for Professional Programmers)是最近读的一本好书,作者是大名鼎鼎的Bob大叔。这本书里系统的讲述了作为一名“专业人士”所应有的态度及需要掌握的基本方法论。读来受益匪浅,尤其适合我等初级码农。
本书的中译版翻译的还不错,读起来比较流畅。至于准不准确,我只看过一部分原书(原书有电子版可以下载),不评判。
废话不多说,上笔记。

上篇·态度篇

承担责任,信守诺言 —— Say ‘Yes’

  • 承诺必须完成!
  • 了解自己,准确预估
  • 保证各方正确理解承诺

学会拒绝 —— Say ‘No’

  • 专业 = 不屈从权威
  • 永远不要说“试试看/我尽量”
  • 寻求对抗中达到理想状况,而不是虚伪地保持和谐

始终保持整洁、自律

  • 保持项目质量,避免压力的之道 P132
  • 不行损害之事(Do No Harm) P4
  • 不管压力多大,也要遵守一贯的编程纪律(TDD、重构) P132
  • 随时改进(所以TDD)

沟通与合作

  • 与QA
  • 与BOSS
  • 与客户
  • 与团队/其他程序员
  • 保持谦逊,互帮互助

团队协作

  • 不要为项目组建团队,而要为团队分配项目 P144

坚持学习,不断练习

  • 技术基础 P10
  • 保持“手熟”
  • 理解业务 P13
  • 雇主没有义务提升员工能力!(但是有远见的公司会) P82




下篇·方法论篇

编码

  • 结对编程

    • 应对压力/阻塞/中断等等问题
    • 提高效率,同时review
    • 分享知识
  • 避免进入“超神”状态(Flow Zone)(速度 != 质量) P53

  • 保持精力,保持节奏(否则会写出令自己后悔万分的东西) P50 P60
  • 交付压力

    • 管理他人期望
    • 避免盲目冲刺/加班
    • 定义“完成”,保证交付

TDD

  • 每个专业人员必须掌握!
  • 三项法则 P69
  • 总结:进度细分,目标牵引编写
  • 好处

    • 极大减少调试时间
    • 缺陷率显著下降
    • 确定性:方便随时重构,亦可随时交付
    • 促使优化设计
    • 心理上的鼓励

测试

  • 沟通需求 P84 P91
  • “完成” P89

    • 完成所有代码
    • 通过所有测试
    • QA和需求方认可
  • 验收测试

    • 确定需求已经完成
    • 整套自动化测试:测试通过即需求完成(自动化非常重要!)
    • 业务分析员测试正确路径,QA测试异常、边界、错误情况等
    • 研发要主动跟进,和测试协商
  • 单元测试和验收测试不同点 P96

    • 关注点和关注人员不同
    • 测试机制与路径不同
  • 单元测试和验收测试共同点

    • 首先是文档,如实描述系统的设计、结构、行为
    • 测试是附属,价值在于具体指标
  • 持续集成:非常重要!一旦失败团队必须全力处理,让CI持续进行为团队最高优先级任务
  • QA是团队一部分(不是研发的敌人!),并且应该找不出任何错误!
  • 自动化测试金字塔 P101

    • 单元测试:覆盖率100%,程序员自己编写,自己测试。用于TDD
    • 组件测试:覆盖率50%,QA和业务人员编写,专门测试环境。主要用于测试成功路径等
    • 集成测试:覆盖率20%,即模块联调,用于测试系统是否能跑的正常
    • 系统测试:覆盖率10%,架构师和技术负责人编写,确保系统正确构造,性能测试等
    • 人工探索式测试:覆盖率5%,各种人,用于探索式的测试

时间管理

  • 会议管理

    • 拒绝非必要会议 P178
    • 万一会议超时/没意义,礼貌地离席 P108
    • 寻求主管和其他同事的帮助 P108
    • 争论:5分钟内摆明道理,投票解决 P111
    • 具体会议的建议:立会,迭代计划会,迭代回顾和Demo展示 P109
  • 个人时间管理

    • 注意力点数 P112
    • 番茄工作法:拆分时间 P113
    • 正确管理优先级 P114
    • 避免死胡同与泥潭 P115

预估

  • 用合理的预估明确承诺
  • 三元预估:乐观,标程,悲观三套预估值
  • 自己预估:PERT —— 一种借助概率论进行预估的方法 P123
  • 通过他人预估: 德尔菲法及其变种 —— 数手指,规划扑克,关联预估 P125
  • 大数定律:分开预估再加总会更准 P127

面对压力

  • 保持纪律,甚至更加严格
  • 沟通,寻求帮助

不断练习

专门的练习:卡法,瓦萨等,保持手熟 P79
参与开源项目
补一个:Hackethon