让结对编程更有效的十种方法

如果你回忆一下自己结对编程(pair programming) 的经历,有多少次你能感觉到自己效率和能力的提升呢?又有多少次你为不愉快的经历而烦恼?

结对编程为软件开发团队(不管他们是否采用敏捷过程)带来的好处已经广为人知,但是要有效的实施结对编程,不仅需要团队的成员相信结对编程的益处,更重要的是,他们要全身心的投入。

怎样才能让结对编程更有效呢?仅仅是两个人共同完成一个任务并不意味着那是一次有效的结对经历。除了完成任务,结对编程也是增进你和其他团队成员之

间关系的好机会。你们可以互相学习,不仅仅是技术,也可以多了解一下彼此国家和民族的文化。你也可以了解一下他们的追求,他们为什么充满斗志,又为什么垂
头丧气。

Marcos Brizeno,一个在巴西的ThoughtWorker,  在他的一篇博文中提到了结对编程中会碰到的挑战:

  • 编程环境:结对编程中要使用相同的硬件和软件
  • 疲劳:结对编程中每个人都要保持高度的注意力
  • 自尊心:当你的想法不被接受时,需要保持虚心,避免不必要的争吵

好吧,我也没有什么灵丹妙药能让结对成为更加神奇的体验,不过在这里我还是有几点建议,让大家可以更好的面对Marcos提到的那些挑战:

#1 -不要让一个人霸占键盘

结对编程中,对开发环境更熟悉的那个人经常会长时间掌控着键盘。另一方也觉得如果他写代码的话会拖慢进度。这样做的坏处就是,任务结束的时候,对开
发环境不熟悉的那个人没有多少进步,他依旧不熟悉这个开发环境。对此,我们的解决办法是设定闹钟,时间到了就互换,双方轮流写代码。

#2 -要共同管理注意力

出于多种原因,结对中的一个人可能会比另一个人更能集中注意力。当这种情况发生时,如果你是能集中注意力的一方,你要停下来和另一方讨论这个问题。让你的另一半自己恢复他/她的注意力可能要花很久的时间,你自己也可能因此丧失注意力。番茄工作法 之类的窍门可以帮忙提升注意力,但你最好还是和对方共同讨论来找到最佳解决办法。

#3 -不要一个人干活

有时你的另一半需要离开一会。这时,你要停下手头的活,尽量等她/他/它回来。在等待时,你可以做点其他有益于项目或公司的事情,也可以处理一下自
己的杂事。当然,有时也要看具体情况。如果情况紧急,你不能停下来,那当你的另一半回来时,你要把自己单独做的那一部分解释清楚。

#4 -要有劳有逸

干活的时候集中注意力很重要,但是过度集中注意力是有害的。毕竟我们都不是机器人,谁也不能连干八个小时不带休息。所以我们还是需要间断的休息时
间。休息的时候完全不要想工作的事情,也尽量保持两个人在一起,比如讨论个大家都关心的话题,一起打打游戏,一起喝杯咖啡之类的。

#5 -要庆祝你们的成就!

在任务每一阶段结束的时候,或者每次结对结束的时候,你们要好好回顾一下自己的成就,要给自己一点激励。好好庆祝吧!跟其他同事分享一下你们的成果也不错。

#6 -要和你的同伴保持同步

很自然的,有时一个人比另一个人对任务了解的更深入。这有可能造成两个人的节奏不同步,以至不愉快的经历。如果你了解的更多,你要及时意识到这一
点,控制你的节奏,让你的同伴跟上。必要时,停下你手头的工作,好好解释一下。同样,如果你是跟不上趟的那个人,要及时提出来。让你的同伴慢下来,好好跟
你解释他/她到底在做什么,以及为什么这么做。记住,沟通是必须的。

#7 -要使用合适的交流方式

在交流时,要使用结对编程的两个人都能理解的语言。很难想象你能准确的理解一个句子,如果你连句子里的单词都不认识。所以,请尽量用简单直白的描述。如果有帮助的话,不妨在纸上把自己的想法画出来。你也可以找别人帮忙,如果他能把问题解释得更清楚。

#8-要学会处理分歧

在结对编程的过程中,分歧是经常会有的。面对分歧时,双方都应该先仔细听取对方的观点,然后用平静和尊重对方的语气阐述自己的观点。这时侯,最忌讳

的就是盲目自信。你要试着从对方的角度看待问题,这会让你发现自己遗漏了的地方。不要把这变成一场谁对谁错的争斗,你也没必要在每次辩论时都成为获胜的那
一方。如果双方实在没有办法达成一致的观点,那就试着找别的同事帮忙做个选择。

#9 -既要作学生,也要作老师

就算你才刚刚加入一个新的项目,所知不多,你也能立刻作出自己的贡献。同样的,如果你和一个刚刚加入项目的新手结对,你也要留给他/她发挥自己能力
的空间。多问些启发式的问题,逐步的解释你们的任务,在潜移默化中让你的同伴自己找到解决方案。此时你需要扮演的是一个良师益友的角色。

#10 -要及时提供和接受反馈

在结对结束的时候,要抓紧机会给对方一些意见和建议,再拖一阵,你的印象就模糊了。不用搞得太正式,15到30分钟足够了。你可以评价一下和他/她
结对的感觉如何,他/她有什么需要继续保持或改进的地方。如果你赶时间,至少也要把自己的想法记录下来,然后等有合适的机会转达给你的同伴。



最后,值得一提的是,我在这里提供的窍门都是我以前和其他 ThoughtWorker 结对编程时收到的建议。这些不是什么金科玉律,你就当作我给你的建议好了。

那么,现在轮到你给我提建议了。你有什么更好的办法来应付结对编程中的各种挑战吗?欢迎拍砖。

来源:51CTO

时间: 2024-10-26 08:55:24

让结对编程更有效的十种方法的相关文章

《系统分析与设计方法及实践》一2.3 结对编程方法

2.3 结对编程方法 极限编程的实践中有一个非常重要的原则就是结对编程,这里所谓的结对编程并非是一个人在编程,另一个在看.另外一个人也同样起着非常重要的作用,他需要帮助编码的人找到低级失误,防止其编码出现方向性的错误,特别是在出现一个正在编码的人不擅长解决的问题的时候,他会直接替换编码的人来进行编程.这样做的好处也许只有在实践了之后才能够体会到,它不仅可以避免一些错误的发生,而且可以通过直接的讨论来更快地解决一些容易产生歧义的问题.在交流的过程中,大家的水平也会有很快的提高.结对编程的过程也是一

《系统分析与设计方法及实践》一3.7 案例6:分布式结对编程系统

3.7 案例6:分布式结对编程系统 分布式结对编程系统支持跨地域进行结对编程或学习.为了支持异地结对者能够像本地面对面结对那样自然地工作,系统通过文本.音频和视频进行交流.其问题描述如下: 与集成开发环境进行集成.与源代码编辑器集成,包括Visual C++.Eclipse等开发环境. 共享必要的文件和应用.这种工具应该支持共享程序员将用到的文件.应用或者测试工具. 支持传递"手势"."打手势"可以使合作者指向或加亮屏幕的一部分,就像合作者在同台计算机上对屏幕上做手

再认识结对编程

摘要 结对编程是敏捷软件开发中的重要实践活动,然而国内业界对结对编程如何提高软件开发效率的实现并不明确.作者根据亲身敏捷软件开发过程的经验,深入探讨了其对提高软件开发效率的实际作用.   正文 结对编程是极限编程(XP)的十二个实践之一,是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计.同一个算法以及同一段代码,并且两人的角色可以随时互换.XP认为结对编程能提高软件开发效率,很多国外软件企业都在热衷于结对编程,Facebook程序员肯特•贝克(Kent Beck)表示:"结对程序员之间的

六种不同的结对编程模式对比

专业编程领域总是产生一些相当激烈的争论.例如关于是否以及怎样对代码作注释.我们很难平息这些争论,因为科学地论证专业编程是有难度的.我们不可能真的要求大公司用一个对照组与一个实验组两次构建同一个软件.因此很多时候我们的依据是传闻或个人意见,极缺经验数据.因此,相比是否该选择结对编程,今天我更想谈谈结对编程的模式. 我先前曾从业务角度谈论过结对编程的好处,现在我以同样的方式来介绍今天这篇文章.你能从中获益,但你必须评估它对你是否有意义.要想做好评估,你就应该了解不同的结对编程模式以及它们都是如何运作

结对编程 VS 代码审查:对比开发者文化

从上一份工作到现在的这份工作,我从结对编程的开发文化过渡到同行代码审查,这个转变过程是一个非常有趣的经历.我认为我要记录下些我所注意到的变化. 你可以找到很多标题是/(结对编程|代码审查)的(利|弊)/这种样式的文章,这些文章的作者都可以给出一套清晰且有说服力执行方案.我认为只要权衡它们的利弊,这两种方案都是非常有效率的.我想就两者的权衡策略提供些相对客观的讨论. 专有名词的定义 因为"结对编程"和"代码审查"这2个名词都有很多种完全不同的解释,所以首先让我来定义下

高效的面试方式:结对编程

导读:面试是技术研发企业永恒的话题.什么样的面试方式才是最高效的?资深Java程序员Rod Hilton 5月27日在博客文章Different Kind of Technical Interview中介绍了他们公司的做法:结对编程.此文在Reddit上引起了强烈反响. 结对编程面试场景,其中两个屏幕是互为镜像的 有一定职业编程经验的人一定都知道,业界标准的面试模式大致如此:进入面试房间后,给你一个白色写字板(国内用纸卷做题应该也很常见),让你在上面写出每个问题所对应的代码. 这样的面试大家都会

学习JAVA编程思想4的好方法

问题描述 跪求大神总结学习JAVA编程思想4的好方法. 解决方案 解决方案二:Java编程思想是很好的学习Java的材料,但对初学者来说有的地方不是能够轻易明白的.因为Java涉及的概念和技术非常广泛,建议先把基础夯实,比如类,接口,继承,多态等,这些有了基础后可以再深入学习正则表达式.线程.io等,一定要动手编写代码,并确实明白代码的执行逻辑.解决方案三:1.背把那些死知识背下来,复习巩固2.敲可以按书本例子课后题敲,对没掌握的可以重复敲3.测找其他题测试掌握情况,最好找SCJP题库的题,因为

阿里内贸团队敏捷实践(三)结对编程

原文发表于<程序员>杂志2012年2月刊 本文主要从提升项目质量.促进知识传递及减少项目风险等角度出发,讲述作者所在团队在结对编程实践中的一些经历,以及如何避免或减少其所带来的负面影响. 你了解结对编程吗?你尝试过结对编程实践吗?也许你还未曾尝试甚至还不曾了解,那么我们一起来学习和了解敏捷结对编程实践,相信对敏捷感兴趣的你会有收获. 什么是结对编程 结对编程(Pair Programming)是一种敏捷软件开发实践,指两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘和鼠标一起工作

ASP.NET MVC 应用提速的十种方法

[编者按]本文作者为 DZone 社区的最具价值博主(MVB) Jonathan Danylko,主要介绍为 ASP.NET MVC 应用提速的十种方法.由国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文. 每个人都想快速掌握最新消息. 我是说,人们恨不得预知第二天的头条.没有人喜欢等待. 排队等待,遇到红灯要等待,开个网页要等待,等等等. 理所当然,没有人喜欢等待网页慢吞吞地加载,尤其是在移动端访问网站时.其实,Web 开发者敏感的神经决定了我们等待与否. 现在,快速响应不仅是来自