读书笔记——《程序员的职业素养》
《程序员的职业素养》(英文名: 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