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

标签: 作为 程序员 结对编程 | 发表时间:2011-08-28 22:51 | 作者:OMG! 日记 華
出处:http://www.cnblogs.com/

结对编程是什么?

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

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

 

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 刘海峰

作者: OMG! 日记 发表于 2011-08-28 22:51 原文链接

评论: 9 查看评论 发表评论


最新新闻:
· 谷歌关闭Slide内幕:总为iOS开发应用惹恼佩奇(2011-08-29 09:44)
· 传第二批支付牌照推迟发放 百度网易已递交申请(2011-08-29 09:13)
· 惠普TouchPad倾销 iPad终遇敌手(2011-08-29 09:11)
· 阿里巴巴15亿推助农服务(2011-08-29 09:09)
· 移动互联网你需要了解35家潜力企业(2011-08-29 09:08)

编辑推荐:菜鸟CLR VIA C#之旅(1):品味细节,CLR的执行模型

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [作为 程序员 结对编程] 推荐:

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

- 華 - 博客园-首页原创精华区
在此模式下,一对程序员并肩作战,平等互补进行开发工作. 两个程序员并排坐在一台电脑前,同对一台显示器,使用同一个键盘,同一个鼠标进行工作. 一起分析,一起测试,一起设计,一起编程. 那么结对编程中两个人如何扮演角色. 驾驶员是控制键盘输入的人,而领航员是起到领航,提醒的作用. 你说工程量是一定的,如果两个人编程,那么编程速度就会提高一倍,时间就会节省一半,为什么要编程.

作为程序员,不得不知道的App推广知识

- - ITeye博客
初看这个题目,大家可能就疑问,作为程序员只管做自己的产品就好了,写代码就OK了,我干嘛要知道一些推广知识,跟我没关系,不需要知道. 你是否也像我一样以后做个产品经理,项目CTO,项目CEO这样的有抱负,还是默默无闻的做个简单的程序员,从码农到码圣的升级版程序员. 你是否也像我一样以后的职业规划不仅仅局限于程序员这个角色,而不想突破垂直职业的牢笼,从剑客到武林盟主的蜕变.

作为一个程序员,数学对你到底有多重要

- knighter - 灰色的灵魂
每个计算机系毕业的人,大都学过不少数学课,而且不少学校的计算机系的数学课,通常比一般的其他工科专业的数学要难一些,比如不上高等数学,而是学数学分析,不上线性代数而去上高等代数. 但是,大部分毕业了后去做程序员的人,即使是所谓的名校计算机系毕业的,大都工作中也基本完全用不上学的那些数学,基本上,一半时间在CRUD,另一半时间在处理各类字符串、链表、Hash表,知道在面试中回答各种排序的时间复杂度是他们需要的数学的上线了.

Java面试题:多线程,作为Java程序员你不得不懂

- sun - IT程序员面试网
线程:是指进程中的一个执行流程. 线程与进程的区别:每个进程都需要操作系统为其分配独立的内存地址空间,而同一进程中的所有线程在同一块地址空间中工作,这些线程可以共享同一块内存和系统资源. 创建线程有两种方式,如下: 1、 扩展java.lang.Thread类 2、 实现Runnable接口 Thread类代表线程类,它的两个最主要的方法是: run()——包含线程运行时所执行的代码 Start()——用于启动线程.

作为程序员必须知道的编程语言编年史

- - 博客园_新闻
英文原文: History of Programming Languages Must Know . 我们都知道,编程语言是一组用来定义计算机程序的语法规则. 它是一种被标准化的交流语言,用来向计算机发出指令. 一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动.

敏捷结对编程实践

- - 技术改变世界 创新驱动中国 - 《程序员》官网
本文主要从提升项目质量、促进知识传递及减少项目风险等角度出发,讲述作者所在团队在结对编程实践中的一些经历,以及如何避免或减少其所带来的负面影响. 也许你还未曾尝试甚至还不曾了解,那么我们一起来学习和了解敏捷结对编程实践,相信对敏捷感兴趣的你会有收获. 结对编程(Pair Programming)是一种敏捷软件开发实践,指两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘和鼠标一起工作.

转:结对编程的误区

- - 膘叔
结对编程在我们现在的工作中真的没有使用这玩意. 极限编程也没有用到,我们还是安稳的在一步一步的开发. 其实,在07年的时候,那时候和一哥们就尝试过结对,效率确实上升了不少,但后来仔细想想,正由于两个人水平相近,这样的结对却没有真正带来了效率上升,反而还不如两个人单独开发,事后合并代码. 虽然有一些BUG,但总体代码却多写了很多.

结对编程——我的噩梦

- - 博客园_知识库
   英文原文: Pair Programming - My Personal Nightmare.   自从 极限编程诞生起,我就一直在听说结对编程是个 好东西. 所有的敏捷传教士们都在告诉我们:结对编程能提高代码质量,有助知识共享,甚至激发开发效率,同时,还能深度拉近程序员之间的感情关系(参看 拥抱编程).

程序员你是如何使用Nacos作为配置中心的? - 李福春 - 博客园

- -
假如你使用的是spring-cloud-alibaba微服务技术栈. 即去除应用程序的状态,配置统一外部化管理,方便进行水平的伸缩. 假如我有一个应用app-design;. nacos的命名空间,这里跟服务发现的配置一致;. 3,使用配置的方式,同本地配置文件一样. @Value @PropertyConfiguration 这些注解都是支持的;.

结对编程的价值及注意点

- - Juven Xu
结对编程( Pair Programming)可能是最受争议一项的敏捷实践,持续集成和重构基本已经普遍被大家认同了,TDD还能引发 很大的口水仗,倡导结对编程则有被狂砸砖头的风险,本文我不想说结对编程绝对有多好,我想分享的是一些有关结对编程我体验和观察到的价值,以及几个我认为特别需要注意的地方,尤其是后者, 如果以错误地方式用结对编程,弊很可能大于利.