工作两个月后,我已经慢慢习惯了结对编程(pair programming),但总是能听到很多人问:我们为什么要结对编程?上次被问到这个问题时,是在open party上,我按照我的理解给他解释了一遍。虽然他像听懂了似的点了点头,但我的直觉告诉我:他不满意我的回答。
这是为什么?我想有两个原因:1.我自己都不知道为什么要结对编程,只是被动接受而已。2.我没有足够的经验,没有合适的例子来和提问者共鸣,产生的结果就是他不认同我,因为我根本不了解他。
找到了问题,那么就开始解决吧。在网上找了找相对应的资料,并且通过迪拜王子获得到论文一篇。(The Costs and Benifits of Pair Programming)
认真阅读后,收获如下:
1.能给团队省钱
不可能吧,两个人坐在一起写代码,代码量肯定不如两个人分开写的多,怎么可能省钱呢?事实上,软件过程中最花钱的是后期维护,当一个bug出现时,修bug花的钱会比当初开发时要多很多。所以虽然结对编程会比单独开发慢一些,但因为后期的bug少,所以还是省钱的。(结对编程为什么bug少呢?我们后面来看)
2.满足感强
不可能吧,我一个人搞定一件事情肯定会更有满足感。事实上,团队合作的满足感要比个人满足感更加强烈,你一个人在牛,没人欣赏也不爽,是吧。在结对的过程中,你会有一种不是孤军奋战的感觉,更加增加自信。
3.设计质量好
不可能吧,人多嘴杂,设计这种重要工作,人越多质量肯定越差。事实上,当两人坐在一起,对一个问题有时会产生不同的想法,这就会迫使他们去尝试不同的解决方案,这就减少了坏设计出现的可能性。
4.持续检查代码
不可能吧,工作压力这么大,哪有这么多功夫持续检查代码。事实上,在代码级别的检查是成本最小的,不管是从客户、产品经理、测试人员提出的任何bug,在维修时都会成倍浪费开发人员的时间。不管是多牛的人,总会犯错误,持续检查代码可以尽可能最小化维修成本,并且促进团队形成良好编程风格,促进团队交流。这样一来,肯定是“bug去无踪”,“再也不用担心产品交付那几天”。。。
5.解决难题
不可能吧,他还不如我呢,我都不知道该怎么做,他肯定不知道。事实上,当一个人在碰到难题时,很容易产生“以后再说”的想法,这就是人的惰性。通过结对编程,营造了一种“我不是一个人”的气氛,这大大调节了悲观情绪。有时通过别人不经意得一句话,碰到的问题就引刃而解,相信大家一定深有体会,结对编程会帮助我们从他人的角度,学会另一种思考。
6.学习新知识
不可能吧,那些牛人一天到晚都那么忙,我去问他问题,他有空回答我么?事实上,通过结对编程,就可以很好的完成知识的传播,是一种高效率的学习方式。主要有学徒模式(高手在写,我在旁边观察,任何时候我有不懂的地方我都可以打断他,他也会耐心的跟我解释)、高手在身边模式(高手不是24小时的老师,安排新手在他周围工作,从他的一举一动里取其精华去其糟粕),保证少走弯路。
7.团队融合与交流
不可能吧,让我和那么闷骚的程序员沟通,太困难了。事实上,不会沟通的程序要不是好程序员,程序要必须要学会沟通,因为你需要从客户、产品经理、测试人员等不同的角色获得不同的信息。结对编程会更加促进团队的沟通与交流,最起码可以让相互不了解的人变得熟悉,这样团队才更有凝聚力。
8.人员和项目管理
不可能吧,结对编程还能帮助管理项目和人员。事实上,通过结对编程,个人的知识可以更好的传播开来,这就打破了信息壁垒。随着不断更换结对人员,团队内部才能更好的分享知识,减少人员流失后产生的知识缺损,达到全民皆兵,项目才能更健康的发展。