谈谈结对编程

什么是结对编程?

我们来看一下百度百科对结对编程的定义:

结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。

在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面。观察员当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。

以前我一直都是自己闷头敲代码,对“结对编程”这个词虽然早就听说过,但从来没有一个明确的认识或体验。而今天我跟同事一起 review 一个功能实现的时候,我们居然一起在同一台机上轮流敲上了代码,之后我才突然想:“我们这样是不是就是传说中的结对编程了呢?”

对照百度百科的定义,其实我们的实践不是真正的结对编程,只是一起写代码而已,完全没有体现出结对编程的目的。但我这并不能阻止我思考结对的一些问题和好处。

首先,说一下好处,两人一起写代码,如果大家都对功能和代码逻辑都有差不多水平的认识,是可以一起交流提高的。当某个人写出来一段很烂的代码的时候,另一个人马上就能发现问题;当遇到一个技术难点的时候,两人也可以马上就讨论出一个可行的解决方案。总体来说,对代码的质量和问题的处理效率都会得到较大的提高,而且对双方来说也是一个很好的学习机会。

那么,一起写代码又会带来什么问题呢?显而易见的,两个人做同一个功能,人力成本上就显得有点浪费了。这个问题可能也是导致结对编程没有在各大公司里盛行的原因。特别是在赶进度急着上线的项目里,公司恨不得把一人当两人用,怎么可能让两人来处理同一个功能呢?其次,程序员之间能力水平以及对功能逻辑和代码的熟悉程度不同,很容易导致两人之间的沟通不顺畅,再加上大多数程序员性格比较内向,在沟通能力方面还是比较欠缺的,因此,很可能两人一起的产出还不如让其中一个人自己做的快。

个人觉得,比起结对编程这种同步的操作,还不如异步做代码 review 更实用。当一个人做完功能后,把自己的实现逻辑都用流程图或文字描述清楚,备注在对应的需求下面,提交代码时也加上必要的注释,然后交给另一个人 review 。 reviewer 根据大家总结出来的 review 方法,弄一张 checklist 一项项检查代码提交人的功能逻辑是否符合需求,实现上有没有考虑性能、扩展性等等这些非功能性的需求,然后跟代码提交人沟通交流,互相熟悉业务和学习提高。

以上只是本人的一些浅见,如果你对这个话题有更多的见解,欢迎给我留言交流。

你可能感兴趣的:(谈谈结对编程)