首页 > 代码库 > 有关于结对编程的一些看法

有关于结对编程的一些看法

  结对编程是一个很有意思的形式,我很对这个感兴趣,因为大学的时候就是参加了ACM/ICPC,三个人,一台电脑,去共同解决几个问题。典型的结对编程。

  结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人
称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。   在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面。观察员
当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。 --维基百科
结对编程技术是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计、同一个算法、同一段代码或同一组测试。与两位程序员各自独立工作相比,结对编程往往只需花费
大约一半的时间就能编写出质量更高的代码。
                                                                  --百度百科

结对编程的特点:

  两个员工坐在一台电脑前面,一个负责编写代码(驾驶员),另一个负责阅读,核对,以及编写测试用例,思考接下来的任务(领航员)。每隔一段时间(可以一小时,或任意时间),两人互换角色。如果项目团队大,可以定期更改结对的组合,让每个人相互之间有接触的机会。结对编程可以说是一种全程参与的代码审查机制了。

 

结对编程的优势很明显:

   1)两个人一起写,代码质量可以得到很大的保证,避免犯很多小错误,细节考虑更全面,代码风格也可以保持一致。而且我相信完全可以提高工作效率,因为当有另外一个人就坐在你身边负责审查你的代码的时候,你是不可能忽略他的。

   2)同时最起码有两个人熟悉这一段代码,这对代码以后的维护,项目的运营都是很有好处的。

   3)当你在另一个开发伙伴身边坐下并一起工作的时候,你总可以从他身上学到一些诀窍和技术。这样,参与的双方都可以快速的学习进步。

   4)两个员工之间当面相互的交流,很直接,很容易碰出火花。很多人看来,程序员似乎是一个很木讷的人,但实际上很多时候,程序员只是觉得跟你没有共同语言,熟称的看不起你的智商(我认为程序员是一个很自傲又很自卑的群体,但这个跟本文没有关系)。但如果跟对方有相应的互动,程序员可以表现的很善谈,很自信。这样,世界上就有多了一对基佬。多美好的事情。

  

但我认为如果执行起来,也存在很大的隐患。

  首先,程序员都习惯了个人的编程,当另一个人出现在你的身边的时候,短时间内可以有很好的交流,但如果整整8小时都这样工作,我不敢保证不会有厌倦或是疲劳。当然,如果对方是女的就另说了。但可惜,学妹程序员太少了,这个方案几乎不可能实现,再说了,有学妹在,对程序员来说什么样的编程方式都是超高效率的啊。

  然后,程序员是一群有很强控制思维的人,这与他们长时间写代码有很大的关系,因为他们习惯了去发号命令,然后让代码表现出他们预期的效果。因为每个人都有自己的思维方式,有自己的编码风格,如果在结对编码过程中,领航员对驾驶员横加干涉,强加自己的思维到对方身上,我觉得这是绝对的灾难性的。当两个伙伴在那里因为一个很细节的问题(函数名的命名,用数组还是使用List,一个函数是定义为私有还是公有)而争论半天的时候,结对编程已经没有任何意义了。

 

  结对编程有很大的好处,但在中国很多公司,几乎大部分公司都没有推广这种模式,说明隐患还是很让主管担忧的。当然,老板不喜欢看着上班的时候两个人坐的那么近不知道在干嘛,特别是两个男的,真是的,我们公司怎么可以这样子呢,老板会觉得这是在浪费时间。

 

我觉得如果结对编程要在实际中运用近来,需要一定的改良。

  首先,还是两个人去实现一段程序这个不变,但不应该强制两人组成伙伴必须整天坐一起进行结对编程。

    1)在前期的代码设计中,两人讨论得到公论,这段代码该怎么实现,定义好数据类型和接口;

    2)然后分配任务,把相应的简单的,清楚的代码分别实现;

    3)最后把最复杂的逻辑,单独拎出来,两个人共同去解决。(在两人要去处理一个比较困难的问题的时候,细节上的差异他们就不会关注了。所以所有吵架都是闲的没事干的人做的)

    4)把程序整合,调试,然后互相review对方实现的代码。

    5)最后,把代码给架构师review,完成。

  在具体的操作中,一个项目组怎么推广这种方式呢,如果你不强制,程序员很可能就根本不理会。我觉得首先得有一人有这个习惯,而且是一个在项目团队中有威信得人(比如架构师),由他开始,跟一个人进行结对编程,然后,由一个有结对编程习惯的人带一个没有该习惯的人进行开发工作。一变二,二变四,四变八,八卦生万物,生生不息。