敏捷宣言中有一条价值观是“工作的软件高于详尽的文档- Working software over comprehensive documentation”。Code Review是实现工作软件的一大利器。所谓,“物有本末,事有终始,知所先后,则近道矣”。接下来笔者将讲一讲敏捷中Code Review相关的本末始终,探究一下门道在哪儿,让我们一起玩转Code Review。
首先,Why?
为什么要Code Review?有什么目的、理念?除了类似减少缺陷等现实需要以外还有哪些更深层次更利于持久坚持下去的原因?或者是如下图,这就是程序员为什么要做 Code Review 的原因?
言归正传,接下来从哲学、管理学和企业文化三个角度来探讨下为何要做Code Review。
哲学。利他和利己,借鉴自稻盛和夫哲学。稻盛和夫说:“利他本来就是经商的原点。”对照到工作中,利他本来就是团队合作的原点。关于利己,笔者认为利己是最原始冲动,可以带来积极改变但不够持久,如果有利他保驾护航,就完美了。Code Review毋庸置疑对自己是有好处的,你坚持了,总可以有一些类似避免后面返工折腾等的受益。你坚持了,对他人也是有好处的,集体配合更顺畅,更融洽。最终还是会反馈到对个人有好处,你坚持的好,你会逐渐被认可,例如当你获得一句“这是一个靠谱的人”的评价时,你心已暖。心怀利他和利己,下次辩论(撕逼)的时候,也可以放下面子放下架子,辩(撕)的更坦荡更真诚一些。
管理学。现代管理学之父彼得·德鲁克认为知识工作者是重要的资源,也是最重要的投资。高度发达的工业社会,经济上最迫切需要的,莫过于提高知识工作者的生产力。玩转Code Review ,就是在提高产品技术人员的生产力,使得同样的时间内生产更多可用可交付的代码。
企业文化。工程师们合力打造良好的交流氛围,有气质,有修养,有技术信仰,敢于挑战,精益进取。最重要,给新人一个良好的土壤,薪火相传。笔者曾写过一篇文章,关于项目经理的骑士精神。其实,工程师才是真正的一线骑士,工程师文化是企业文化的重要组成部分,而工程师文化里,Code Review应占有一席之地。传统大团队统一开会统一培训知识经验更容易集中传播。敏捷方法多种,以Scrum为例,它是有天然劣势的,多个小团队之间很容易彼此不知道彼此有哪些更好的经验及知识,多个小团队会重复浪费学习成本等。Code Review是一个学习和分享的过程,利用这种机制,让知识和经验更好的流动碰撞,团队成长,最终企业受益。
其次,How?
怎么做Code Review?有什么具体的操作方法与措施?
笔者建议因地制宜,所谓在什么山头唱什么山歌。怎么做Code Review依赖具体团队实际情况及意愿。
最后,What?
有什么现象和成果?
Code Review可以提高代码可读性,发现缺陷,发现代码中技术逻辑(如数据库连接打开是否忘记关闭,是否正确使用线程,Exception 处理,密码是否加密存储等)错误。让系统及产品更稳健可靠。存档记录。避免只有一个人对某部分代码了解,多人共享,解决所有鸡蛋放在一个篮子的隐患。帮助新人更快成长,促进产出更规范的代码,提高注释的质量,保持代码的维护可持续性。团队成员应该参与享受这个互助、沟通、协作的过程,不断学习。
综上所述,从Why、How及What三方面探讨了在敏捷实践中如何玩转Code Review。如果你觉得Code Review没用且太教条,如果你觉得业务逼的太紧了没时间,如果你觉得主要矛盾就是倒排出来的工期和不靠谱的程序员之间的矛盾,凡此种种,但如果你还想做技术还想做的更好,更体面,那么你可以考虑看下《从Code Review 谈如何做技术》这篇文章,作者陈皓(左耳朵耗子)。
如果准备为Code Review实践提供一些奖励的话,笔者建议,奖励当面并且及时,最好是惊喜。不是很推荐事先明确奖励条件的奖励。因为这样奖励时,容易把握不好时机和程度,容易变成贿赂,最后反而让大家对奖励形成依赖,久而久之没有奖励时大家任何事情都不愿意去做,注意力放在如何赢得奖励上,忘记了本该做什么。正如开篇所提“物有本末,事有终始,知所先后,则近道矣”。
一旦下定决心要玩转Code Review,那么就请拿出勇气来行动吧!塞万提斯说过:失去财富是损失,失去朋友同样是损失,而失去勇气则是最大的损失。
与君共勉!
*彩蛋*---“黄金圈法则”
本文来自网易实践者社区,经作者吕广川授权发布。