`
魔力猫咪
  • 浏览: 107078 次
  • 来自: 北京
社区版块
存档分类
最新评论

结对编程简介

阅读更多

抱歉抱歉。猫咪在建立圈子后一直特别忙,来不及写东西。今天终于空闲了一些,可以写点东西上来啦。结对编程是敏捷开发的重要实践之一。但是一般情况下都是在敏捷开发书里略微提了一下,就没了。纯粹写如何结对编程的书猫咪就知道一本《结对编程技术》。虽然很薄,但是写得很不错,大家可以看看。

结对编程,指的是这样一种程序设计实践:两名程序员并肩工作在同一台计算机前,共同探讨设计方案、共同设计算法、共同编写程序代码、共同完成各种测试。在这两个人中,被称为“驾驶员”的那个人负责打字或写出设计方案,被称为“领航员”的另一个负责其他工作,包括随时观察驾驶员的工作情况,发现并纠正其操作性和策略性失误。操作性失误包括各种语法错误、打字错误、用错了函数,等等。策略性失误包括驾驶员偏离了正确方向--即他正在编写的代码不能让这两位搭档到达预定目标--的各种情况。领航员扮演着战略思想家的角色。我们都曾有过走错路的经历,但如果能够有一位领航员问我们一个简单的问题--“你能解释一下你为什么这么做吗?”,我们大都能够及时回到正确的路线上来。领航员对问题有着更为客观的视角和对事态发展方向有更全面的思考。另一件大好事是驾驶员和领航员能够随时交流彼此的看法。优秀结对程序员之间的交流是非常活跃的,驾驶员和领航员至少每隔45-60秒就会交流一次--有时只是一句简单的“啊?”定期交换驾驶员和领航员的角色也是非常重要的。

以上摘自《结对编程技术》第一章。

猫咪希望大家能在此把自己对结对编程的看法、尝试结对编程的经历和对结对编程的疑惑都写出来,大家讨论。看能否在国内推广,以提高大家的编程快乐,而不是每天看着乱七八糟的代码发愁。

分享到:
评论
22 楼 hansen-van 2009-03-21  
结对编程的概念是很好的,可以减少代码的出错率,而且可以及时修复随时发现的错误。提高代码质量肯定没的说。但是,真正的执行起来是很有难度的,这就相当于原来一个人干的活现在两个人去干,而且刚开始,效率不见得一定会高。一般商业项目,都是时间紧迫,你就是想,老板也不会让你这么干。
21 楼 gigix 2008-12-16  
kelph 写道
为什么我和一些同事用pp效果很好,而有些同事却不一样。



希望gigix能介绍些技巧和实践

敏捷质疑: 结对编程, 代码集体所有权
切尔斯基 写道
但实践初期, 有一个敏捷教练是有必要的. 结对涉及到人与人之间的合作, 性格的碰撞. 人的问题是最难缠的问题, 稍有不顺心, 就会夸大结对的负面效果, 比如彼此之间的争执, 互不相让等, 又或者总是由强势的人来主导, 平和的人总是被迫承担不喜欢的决定, 及它带来的后果.

敏捷教练可以发现这些问题的苗头, 并协助团队建立良好的纪律和习惯.
20 楼 kelph 2008-12-16  
gigix 写道
jackyrong 写道
严重反对结对,在中国基本上效果不好,因为文化差异和各样问题的,试过了,效果不好,不要老抄XP

我的每个客户在项目开始时都这样说,在项目结束时他们都说结对是好实践要继续坚持下去
当你说结对效果不好的时候,其实还有一种──非常大的──可能性
你尝试的时候没有做对
和别的任何事情一样,结对编程不是只要俩人坐在一块就成了,这里有很多技巧和实践
如果仅仅因为不了解这些技巧和实践、仅仅因为一次尝试没有做对,就放弃了继续了解下去的兴趣,是很可惜的

为什么我和一些同事用pp效果很好,而有些同事却不一样。



希望gigix能介绍些技巧和实践
19 楼 xixix2004 2008-12-10  
原来就这么简单,我在学习的时候跟我的PARTNER就实现过了。。。。。。。。。。。。。

当时两人都是为了把毕业设计做好。向着一个方向努力效果很好。。。毕业设计拿了第一。(我和他的水平差不多)。

但是在工作中要怎么实现。

如果对方比我厉害,我倒还愿意和他一起,学习更多的东西。

如果对方和我一样,那我就会有“比较心理”,大家做的是不是一样多?所得的薪酬是否公平?我是不是要排挤他一下,突出一下自己,来显得自己更重要?这个知识我会,他不会,我是不是要装个傻不让他有提高的机会?虽然我说的有点极端,但是类似于这样的心理是绝对会产生的。LZ能否认吗?

如果对方比我差就更憋屈了,看他玷污我写过的代码我都想抽死他,直接叫他走人吧,我自己一个人做还快点。不怕神一样的对手,就怕猪一样的队友。
18 楼 hyhongyong 2008-09-25  
XP要求有一个好的教练和服从教练指挥并能正确发挥个人能动性的人员。
17 楼 fuwang 2008-09-25  
我觉得结对编程比较适合具有工程师文化的公司。
如果某个软件公司不重视技术,开发人员都被当作苦力对待,那绝对不适合用结对。
16 楼 gigix 2008-09-21  
jackyrong 写道
严重反对结对,在中国基本上效果不好,因为文化差异和各样问题的,试过了,效果不好,不要老抄XP

我的每个客户在项目开始时都这样说,在项目结束时他们都说结对是好实践要继续坚持下去
当你说结对效果不好的时候,其实还有一种──非常大的──可能性
你尝试的时候没有做对
和别的任何事情一样,结对编程不是只要俩人坐在一块就成了,这里有很多技巧和实践
如果仅仅因为不了解这些技巧和实践、仅仅因为一次尝试没有做对,就放弃了继续了解下去的兴趣,是很可惜的
15 楼 jackyrong 2008-09-21  
<div class='quote_title'>严重反对结对,在中国基本上效果不好,因为文化差异和各样问题的,试过了,效果不好,不要老抄XP</div>
<p> </p>
<p> </p>
13 楼 roottag 2008-08-13  
敏捷CMM都没有错,错在形式主义和削足适靴。
pair programming适合在有激情的队伍,比如两个学生,或者朋友搞创业。在企业里面估计很难推行,因为我们的程序员对社会对生活对工作没有充满感激,这样那样的事情压得他们疲于奔命,大伙都很功利,社会也很功利。
反观欧美,社会是建立在诚信上面的,他们的价值观不是干一票是一票,合作满意,就很可能合作一辈子。他们也不会因为你的报价最低,你的人最多,证书越多就信任你,他们很在乎你以前的合作伙伴对你的评价。再加上国外的高工资,所以企业的利润有保障,社会和行业在良好的气氛内,人也处在平和的氛围中,pair programming很适合一些想突破的队伍,很适合一些有干劲的队伍。

没有绝对的真理

我们只能自己摸索自己的路子,放之四海皆准啊
12 楼 yh_private 2008-08-13  
kimmking 写道
没有绝对的真理

我们只能自己摸索自己的路子


的确.找到适合自己的方法.这些都是不推荐强迫的.
11 楼 yh_private 2008-08-13  
roottag 写道
人不是机器,
编程需要激情,
软件需要创造力,
pair programming太理想了,让我联想到鬼子和台湾人的血汗工厂。
看看google,看看微软吧


其实我们是花了两个小时的时间做了四个小时的事情.剩下的时间其实可以自己支配.我相信没有人可以一天都在pair(这样才是压榨).如果有相信也没有什么效果.只有两个人都精神非常专注(我相信精力集中更有可能创造好的软件)才能体验到pair的好处.
pair可以让我们更有激情,更多的头脑风暴.有的时候甚至可以让你感觉到你的打字速度跟不上你的思想.
至于MS和Google我不想多说什么.至少我还没有能力去那种地方.当有能力去了再评论.偶是Google铁杆拥护者,但没有体验过的事情不好乱讲是吧
10 楼 kimmking 2008-08-13  
没有绝对的真理

我们只能自己摸索自己的路子
9 楼 roottag 2008-08-13  
人不是机器,
编程需要激情,
软件需要创造力,
pair programming太理想了,让我联想到鬼子和台湾人的血汗工厂。
看看google,看看微软吧
8 楼 daquan198163 2008-06-24  
可以用质量换效率么?快速的生产垃圾代码 能称之为高校么?

一个人做事的时候,你能一直保持注意力集中 而不去看nba、看javaeye海阔天空、msn、qq泡妞、看股票、看小说………………………………………………
如果旁边一直坐着一个人 或者你坐在别人旁边手里没键盘,显然这些事都可以避免

如果大家在各忙各的,有个不懂的技术问题,你能毫无顾虑的找个人一起讨论么?
这还算好的,最要命的是,如果没人在旁边提示,你都不知道哪些事别人知道而你不知道
7 楼 emarket 2008-06-24  
LZ似乎对pair programming太乐观了。我一直在用pair programming(4年了)。

发现人的因素大于你用什么,而且我个人的观点pair programming 90%的情况下不能提高效率,反而会使效率降低。而代码质量则很难说,如果两个pair都很认真那还好,如果整天都是混日子,则不如code review来的好。

这里有一个围城效应没有pair的人想pair, pair的人想出来。折中的方法就是如果我没有confident去独立完成一个task则我会邀请另一个quanglified的developer来给我一起做(菜鸟没用,only越帮越忙)。
6 楼 zhaosoft 2008-06-24  
我在学校时,接到项目开发都和同学采用结对编程的方式开发,当时也是因为看了敏捷开发和结对编程的书,尝试的,感觉很不错,的确提高了编程的效率,出错率也大大的减低了。但是参加工作后,就很少采用了!
5 楼 yh_private 2008-06-06  
我想关键在于,如果你是领航员,你有足够的时间和精力去思考问题,驾驶员可以更专注的开发,如果合二为一,结果就是两个线程在一个人的脑子里来回切换,不过多数情况是代码质量线程的优先级别低于开发
也就导致了,质量低劣的代码出现在你的程序里。
4 楼 魔力猫咪 2008-06-05  
结对编程对制造垃圾和半成品的公司确实没用。不过对追求高质量的公司来说是节约时间的。两个人结对编程,虽然比一个人快,但是确实比两个人单独写代码慢。但是出来的代码的质量(运行速度和BUG数量)要比单独写好很多,而且更加容易读(毕竟边上的得读懂)。测试可以更容易通过,所以很多调试、排错的工序可以省掉。也减少了日后找BUG的成本。从这方面来看,结对其实是节约了时间的。但是对于那些只制造垃圾的公司来说,这些省掉的东西他们本来就不做,所以是浪费了时间。
3 楼 fantasybei 2008-06-05  
在现在国内的公司有几个可能这样?两个人一起,肯定能提高软件的质量,但是效率?而现在的企业,绝大多数是为了赶项目,呵呵,估计是没几个公司弄的起这个

相关推荐

    结对编程——敏捷开发.pdf

    "结对编程——敏捷开发" 结对编程(Pair Programming)是敏捷开发(Agile Development)中的一种实践方法,它是指两名开发者坐在一起,共享一台电脑,共同编写代码的过程。 结对编程的优点: 1. 提高代码质量:...

    论文研究-结对编程开发人员之间若干关系问题的探讨 .pdf

    敏捷软件开发方法中,结对编程是一种实践,它要求两名开发人员在同一台计算机上协同工作。这一方法源自于国际大学生程序设计竞赛(ACM/ICPC)中的团队合作模式。结对编程强调的是两个人的协作,与传统方式相比,它...

    XP实践结对编程demo

    **结对编程(Pair Programming)**是极限编程(XP,Extreme Programming)中的一项核心实践,旨在提高软件开发的效率和质量。在这个过程中,两位程序员坐在同一台电脑前,共同编写代码,一人为主程序员(Driver),...

    交换编程-结对编程的延伸实践

    ### 交换编程—结对编程的延伸实践 #### 一、引言 交换编程作为一种新型的软件开发模式,是对结对编程的一种延伸和发展。本文旨在深入探讨交换编程的基本概念、实施背景及其在软件开发中的应用价值,并通过实例来...

    2020级计算机系软件工程第二次结对编程作业.zip

    2020级计算机系软件工程第二次结对编程作业.zip 2020级计算机系软件工程第二次结对编程作业.zip 2020级计算机系软件工程第二次结对编程作业.zip 2020级计算机系软件工程第二次结对编程作业.zip 2020级计算机系软件...

    结对编程与应用

    是软件工程中结对编程与应用的描述与实现方法

    结对编程技术与策略pdf

    ### 结对编程技术与策略 #### 一、引言与背景 在当今快速发展的软件行业中,结对编程作为一种新兴的协作开发模式,正逐渐受到广泛关注。这种开发方式不仅改变了传统意义上的个体开发流程,而且也在软件工程领域内...

    自组织团队与松结对编程 陈勇 2011-09-18

    ### 自组织团队与松结对编程 #### 一、自组织团队的概念与特点 自组织团队是指团队成员能够自我管理并自主决定工作流程的一种团队形式。这种团队模式强调团队内部的高度自治性和协作性,旨在通过减少层级管理和...

    结对编程启示录

    结对编程,作为一种创新的软件开发实践,源自敏捷开发的理念,旨在提高代码质量和团队协作效率。"结对编程启示录"这本书深入浅出地探讨了这一主题,为小团队提供了宝贵的资源,帮助他们在有限的人力条件下产出高质量...

    结对编程方法在C语言教学中的应用.pdf

    结对编程方法在C语言教学中的应用 结对编程方法在C语言教学中的应用是计算机专业基础必修课《C语言程序设计》的教学中引入的一种新颖的教学方法。该方法的提出是为了提高学生的编程能力和兴趣,提高教学效果。结对...

    结对编程在Java Web开发课程实践教学中的应用.pdf

    "结对编程在Java Web开发课程实践教学中的应用" 结对编程是一种敏捷软件开发方法,它在Java Web开发课程实践教学中有着重要的应用价值。本文将对结对编程在Java Web开发课程实践教学中的应用进行探讨,并对其效果...

    结对编程在数据结构教学中的应用.pdf

    在数据结构的教学实践中,结对编程(Pair Programming)是一种极为有效的教学方法。结对编程是极限编程(Extreme Programming)实践中的一个环节,不仅能够帮助学生更快地掌握编程技能,还能够显著提升他们的团队...

    在复杂的项目开发中使用结对编程

    ### 结对编程在复杂项目开发中的应用 #### 一、结对编程概述 结对编程是一种极限编程(Extreme Programming, XP)技术,它要求两位开发者共同在一个工作站上合作完成编程任务。一位开发者负责编写代码(驱动者),...

    Addison Wesley - 结对编程启示录(手册)

    《结对编程启示录》是Addison Wesley出版的一本关于结对编程的实用手册,旨在帮助读者快速理解和掌握这种编程方法,以提升代码质量和开发效率。结对编程(Pair Programming)是极限编程(XP,Extreme Programming)...

    结对编程.zip

    结对编程

    结对编程软件方法的研究与应用(1).pdf

    结对编程是一种软件开发实践,源自敏捷开发方法论,它提倡两个程序员在同一台电脑上共同工作,一人编写代码,另一人则审查、建议并提供反馈。这种方法的核心理念是通过即时的同行评审和协作来提高代码质量,减少错误...

    结对编程-魔方1

    结对编程是一种有效的软件开发方法,它鼓励两人一组共同编写代码,通过互相协作、讨论和监督来提高代码质量和团队效率。在这个场景中,学生们通过结对编程的方式解决了一项关于魔方状态表示和处理的编程任务。 首先...

Global site tag (gtag.js) - Google Analytics