1.
在我们小组,一个小版本开发结束之后,我们会抽一两天的时间,大家坐在办公室里轮流进行自己所负责的代码的讲解。
最初做这个的目的,是为了相互评估代码的逻辑,找到漏洞或者可以优化的coding方式,让大家相互借鉴学习,从而更好的coding。
后来我发现,review code的作用还不仅仅是这样。因为code本身是为了解决某个问题,所以code的背后还隐藏着一种解决方案。团队成员的思想碰撞,就不仅仅限于code的层面,而是上升到了解决方案的层面。
什么样的方案更好,有更好的扩展性和易用性?别人又是如何分析问题,抓住重点,形成解决方案的?与他们相比,我的不足在哪里,应该如何提升?
在review的过程中,做个有心人,主动思考一些问题,或可以纠正自己错误的认知,或可以找到新的学习方向,或被人一语点破思维的障碍。略有所得,就如沐春风,会心一笑。
通过review,还可以让大家相互了解各自的工作,从而对整个小组的工作有所了解。让每个人不局限于自己的一亩三分地,而是能一窥全局的面貌。
2.
但是过程并非总是那么美好。因为review包含了一层“审查”的意思,一群人看你的代码,提出各种问题,或许让人有种被针对的感觉。从一开始的略有争执,稍不注意就会演变成面红耳赤的针锋相对,整个会议的气氛也会变得比较尴尬。
所以,每一个人都应该首先摆正看待review的态度。
作为主讲人应该将review看作一次别人帮助自己检验产品的机会,如果别人对自己的代码提出了不同的观点,别马上切换到防御状态,认为别人是在攻击自己。先问自己,他们提到的点自己之前有没有想到?
如果想到了,就解释自己之所以这么选择的原因;如果没有想到,那就不妨想一下,是否确实有不当的地方。如果一时间难以决断,也可以说明会议之后再去研究下。
作为评审,则应该将自己定位为建议者。我们只是对眼前的代码提出自己的建议,接受或者不接受,都由对方决定。如果说服不了对方,那就放弃吧,毕竟如果自己确实提出了中肯的建议,而对方却置之不理,那是别人的损失。
每一个会议都应该有一个人控场,他负责控制时间和主题,把僵硬的气氛缓和下来,或者起到拍板的作用来结束冲突和争论。确保会议按照能按照计划,有序的进行下去。
比如大家在某个点讨论的时间太久,控场人需要提醒大家切换到下一个主题;如果大家思路发散导致偏离主题太远,控场人需要提醒大家回到最初的问题;如果会议上有冲突发生,控场人需要重申这次会议的目的,让大家冷静一下;如果会议上有问题难以决断,控场人需要确定一个结论,或者是另外安排机会再深化讨论,而不是阻塞后面的话题。
3.
在review的过程中,能学到的不仅仅是主讲人,因为整个review的过程,虽然讨论的对象是主讲人的代码,但是沟通却是相互的。review的评审既可以看到优秀的代码然后偷一把师,也可以在沟通的过程中对自己的技术进行印证。
但是,如果评审只是把自己定位在“帮别人发现问题”的角色上,则没有积极主动的心态,也不会有多少收获。
一群人走过一段相同的路,或有所得,或大或小,就看自己是不是一个有心人。
在review的过程中,除了技术、思维上的收获,还可以得到表达和情商上的锻炼。作为主讲人,要清晰明白的把自己的代码讲清楚,还要能很好的回答随时抛过来的问题。能做到从容淡定,见招拆招,那这个人的修养就已经很不错了。
而作为评审,面对陌生的代码,能快速抓住问题要点;面对主讲人强硬的态度,能及时摆正心态,缓解气氛,不被陷入冲突。知道哪些人“不愿意听劝”,哪些人愿意接受不同的观点,从而做到区别对待,确保会议能起到的效果虽不完美,但却已经尽力最大化了。
4.
在review中可能遇到下面的问题:
主讲人认为评审员不理解代码所解决问题的实际场景,所以提出的是虽然理想但是无用的建议。并以评审员不熟悉实际场景的情况,来攻击评审员的观点。
如:这个问题的实际情况是很复杂的,不是你想的那么简单,你知道吗?bla bla...
主讲人若认为评审员提出的观点确实不符合实际场景,应该尝试向大家阐述相关背景。事情是我们在推进,别人不清楚很正常,别人因为不清楚所以没有发言的权力就不正常了。我们应该努力让信息对等,然后再进一步讨论问题。
主讲人是资格老高,舍不下脸被别人“教导”。
茶杯要从茶壶里接水,就一定要摆在比茶壶低的位置。如果一个人无法理解这一点,那就不要期望能从别人那里学到什么。
另外,面子这种东西,有的时候是大事,有的时候真是小事。该当成小事的时候却当成了大事,往往不能成事。
主讲人不是我,评审员少我一个也不少,我还是刷手机吧。
虽然我希望每个人都能从review中有所收获,但前提还是自己要做个有心人。我也确实无法保证每个人都愿意做一个有心人,所以我一般会申明:review的会议大家可以根据自己的实际情况选择参加。
一直开,一直讲,不让人休息
不仅仅是review,所有的会议都可能会有这种问题,一直开啊开,中间没有休息的时间,导致效率越来越低下。最后大家只想尽快结束会议,又如何能认真对待问题本身?
如果会议时间长,不妨设置几个中场休息时间,大家也有讨论的机会。