作为程序员, 你结对编程过吗?(结对编程的意义,经济学价值和个人看法)

结对编程是什么?

在此模式下,一对程序员并肩作战,平等互补进行开发工作。两个程序员并排坐在一台电脑前,同对一台显示器,使用同一个键盘,同一个鼠标进行工作。一起分析,一起测试,一起设计,一起编程。

这个图很好的说明了结对编程

 

Capture

 

那么结对编程中两个人如何扮演角色?应该是驾驶员,和领航员的角色。驾驶员是控制键盘输入的人,而领航员是起到领航,提醒的作用。

为什么结对编程?(结对编程的经济学意义)

你说工程量是一定的,如果两个人编程,那么编程速度就会提高一倍,时间就会节省一半,为什么要编程?

1:首先不得不承认,每个在各自独立设计,实现软件的过程中不免要犯各种错误。在结对编程中,因为有随时的复审和交流,每个人都有强项,恰恰与木桶效应相反,最后的结果是各方面两个人的最高水平!这样,错误少了,程序的初始质量就高很多。自然省下很多修改时间(编程的人都知道,调试代码,该bug是多么费时纠结的事情)。

2:有个作者用数据,证明了结对编程的经济学意义!dollar-value-of-pair-programming(Dave Nicolette )

   感觉不错,就给大家一起分享,里面用一个例子来阐述,我就简单介绍下。

经常由于错误地认为编程主要就是打字,结对编程的经济学价值经常被误解。事实上,编程其实就是一个思考的过程,由于自己单打独斗,可能回走错路,越走越远,到最后才知错了,回头重做,这些错误如果在产品开发中必然会带来不少损失。基于此,我们便可以讨论编程的经济学价值。 结对的价值主要体现在手把手纠正,从而把错误扼杀在萌芽中。手把手纠正涉及面小,而且能跟结对编程的工作流程无缝结合起来,通常 这些甚至都感觉不到,很自然...带来的价值就是能够很方便地进行检查,从而防止在未来某个时间不得不返工的情况出现。所以,结对的价值体现在节约了未来的时间,时间就是金钱。里边的作者建立了一个粗略的计算,是基于他们的一次结对编程。 在Alistair Corkburn的早期著作中,他曾经计算过一个IT工作者的成本要每分钟2.1美元...在Dave的结对过程中,进行了2次简短的关于设计的讨论,随之做出了小的重构。根据Dave的计算,这次重构为未来的维护工作节省出了4小时。这就意味着大约2.1 x 120 = 252.00美元。如果共发现了12个小错误,平均每个错误节约了30秒的调试时间,那么这就值.5 x 2.1 x 12 = 12.60美元。总共的话,为公司每90分钟省下了276.60美元,或者说一小时省下大概180.00美元。
...

进而把结对编程运用到小IT公司,总共40个开发人员,分散在几个XP团队。假设开发人员每天结对5个小时,那么一共每周结对时间为20对 x 5小时 x 一周5天 = 500小时。假设每个结对每小时节省180美金,那么平均每周节约90000美元。如果全年都把节约率控制在这个水平线上下,那么团队一年工作50周(这 是美国,假期不长),公司就会因为开发团队的结对编程,一年节省450万美元。

450万美金呢,对一个只有40个开发人员的公司呀。但Dave也不得不承认,这只是从一次结对编程中获取的初步计算,所以并没有科学性,但这仍然可以引发大家的思考。

再谈谈我对结对编程的理解:

首先可能我和同伴的实力都不是高,我们是silverlight编程,按照以前我自己对自己的认识, 如果单纯我自己,感觉是搞不定的,因为里面好多问题,我都不是很懂,估计要花很多时间才行。但是和pair一起工作的时候,发现他走出了第一步,我很兴奋,有了信心,然后按照他的想法继续走下去。发现一步一步就走了很远,而且也知道下面怎么走。当出现bug时,我以前并没有很大耐心调bug,一旦有了bug,十分钟搞不定, 就不想搞了,但是通过和他一起调bug,发现了只要你逻辑清晰,就可以下断点,分析数据,问题便迎刃而解。虽说他也没编过多少程序,但是他总能很对找到bug,为我们进度提供了有力的保障。而且在结对编程中,感觉自己干活不是一个人在干,有了团队的计划后,效率也提高不少。脑子也处于高度集中。遇到问题, 我们就能随时讨论,思想也能达到高度一致。

感觉结对编程不仅能提高团队总进度,而且能学到好多东西。

题外话:既然结对,那么我们第一要做的是清空自己的个性,建立团队目标,以团队为大,可能团队编程更适合实力相当的人。但是我感觉,如果两个人编程能力有点悬殊,那也可以,只要两个人态度摆正,去除高傲,个性的一面,也会起到意想不到的效果。

希望更多的人能够体验结对编程的快感和收获。

参考:

邹欣:移山之道

一个博客:dollar-value-of-pair-programming

by 刘海峰

posted @ 2011-08-28 22:51  OMG! 日记  阅读(3350)  评论(13编辑  收藏  举报