《清单革命》对程序开发的一些启示

  周末重温了一遍阿图·葛文德的《清单革命》,其副标题“如何持续、正确、安全地把事情做好”是各行各业都想实现的梦想。而对应到具体行业时,各类从业者的“清单革命”又各有不同。书中大部分描写的是医疗、建筑、餐饮、零售等传统行业上的例子。通过清单的规范,能有效地降低从业者失误从而提高效率。

  对于程序开发,经历了从《人月神话》中「没有银弹」的尴尬境地,到如今行业渐入正轨:流程规范化、功能模块化、参数配置化。程序开发的过程中各道“工序”也日渐明确。以下是《清单革命》给我带来的一些启示。

  

“无知之错”与“无能之错”

  

无知之错:犯错是因为没有掌握相关知识,可以被原谅

  无知之错,在程序开发早期有很多案例,如著名的“千年虫”,第一个蠕虫病毒、Intel奔腾浮点指数除法等等。在这些都是在探寻未知里程时开拓者们遇到的坑。如今大数据时代或许还会出现前所未闻的BUG,但相比前人这种几率势必小得多。

  

无能之错:犯错是因为未能正确使用知识,不能被原谅

  程序开发中的“无能之错”为QA部门提供了主要的工作内容。

  无论是小到文案拼写错误,还是大到死循环宕机,这些BUG都是像抗日神剧中翻来覆去出现的场景。

  或许是赶工期无法面面俱到,但一些常识和关键点对于程序开发来说也是必须要卡好的,如字段长度确认、日期格式转换、接口字段对齐、SQL索引命中、逻辑判断分路完备、页面正常渲染、避免死循环等等。不同程序员或许侧重点不同,前端同学侧重于UI交互,后端同学侧重于接口事务。

但和医疗行业相似的是,程序开发也是一个“我们所掌握的知识数量和复杂程度,已经超出了个人正确、安全和稳定地发挥出其功效的能力范围“的行业。

  

开发关键点比“大而全”更重要

  “在重压之下,人们特别容易忽视一些单调的例行事项” 和 “人们会麻痹大意,会故意跳过一些明明记得的步骤”。

  这两句或许就是程序员日常犯错的缩影。书中的例子是将通过将消毒皂的使用写入清单,大大降低感染率。显然彻底地做好消毒工作在此之前没有被重视,也是医护人员容易忽略的环节。

  对照程序员呢?或许正确理解用户需求也是极易被忽略的环节。没有理解好用户需求的细节直接开工的情况比比皆是。测试或上线后才反馈出来。当然这块也因人而异,每个人在回顾自己的BUG列表时都能大致发现自己开发过程中容易忽略的关键点

  个人总结的一些关键点:

  • 明确需求,文档落实
  • 接口对接,细化到字段格式
  • 关键业务节点打印关键日志,做好异常捕获
  • 提测之前先打包,开发环境部署验证
  • 待补充…

  

团队开发与清单

  

代码审查

  程序开发早已过了金山软件求伯君当年那种孤胆英雄的时代。绝大多数程序员不是独行侠,通常都是团队。团队中的代码Review能大大避免错误的发生。这点相比其他行业算是一大优势吧。提倡团队代码审查,加上Sonar代码扫描,保障团队代码质量。团队代码审查也能出个清单:

  • 接口方法/变量命名是否规范;
  • 代码复用率/公共方法抽取;
  • 是否符合开闭原则;
  • 异常捕获处理;
  • 注释数量及规范;
  • 待补充…
方案决策

  书中建筑团队在进行方案决策时会找来很多行业专家开会决定。“无论在设计时有多么困难,都没有犯错的余地。因为错误意味着送命和巨大的经济损失”。开发团队在遇到方案决策时,需要每个人用自己的专业知识来评估方案。也就是用每个人认知中的知识清单来判断方案的优劣,用团队的认知网络来避免个体的认知偏差。程序开发方案也需要由系统架构、安全审计、网络部署、产品开发、QA测试等部门敲定。

  

权力下放

  书中的例子是沃尔玛在“卡特里娜”飓风中救灾的例子。不是简单地分权就行,更关键地是让每个人都能担负起自己的责任。程序开发过程也是一样,个体要向团队负责,可以通过清单来确保充分沟通、互相协调、承担责任、明确自己的权力和责任。

  我也列了个清单:

  • 定时反馈负责模块开发进度;
  • 遇到阻断性问题时逐层汇报;
  • 主动进行业务系统间联调测试;
  • 及时响应和处理反馈问题;
  • 待补充…

  

总结

  综上,《清单革命》或许不能解决“没有银弹”的难题,但至少能让程序开发过程中程序化、规范化不至于“腹背受敌”。文中所列举的清单纯粹是根据个人开发经验推导所得,参考意义不大。每个人、每个团队根据自身情况归纳出自己的清单,才能更好地完成“清单革命”。

作者:麦海杰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值