您现在的位置: 主页 > 嵌入式操作系统 > Linux > 结对编程简介
本文所属标签:
为本文创立个标签吧:

结对编程简介

来源:fromnet 网络用户发布,如有版权联系网管删除 2018-08-08 

一个由聪明能干的开发者组成的敏捷团队正在努力完成交付。他们遇到了一些意料之外的缺陷,正在努力修复生产环境中发现的缺陷;前端开发的工作量比后端开发更大,因此当前端开发者挣扎着试图跟上进度时,后端开发者反而处于无所事事的状态。可能他们需要更新控制器系统,但是 Brian 是唯一一个能够看懂控制器代码的人,不幸的是他现在正在忙其他事情。这个场景是不是很熟悉?结对编程可以有效地解决这些问题并给这个煎熬中的团队带来更多好处。那么为什么很多团队不进行结对编程呢?

在《Pair Programming Illuminated》一书中,Laurie Williams 和 Robert Kessler 曾断言:

我们发现很多人不愿意采用结对编程这需要改变现有习惯并且具备更强的沟通和协作能力……我们知道,如果被强迫采用结对编程,有些人宁可选择辞职。[1]

让团队适应结对编程是一件很棘手的事情,那怎么做才能让你的团队更容易接受结对编程呢?

问题到底出在哪里?

首先我们来思考一下为什么结对编程很难落实,以下是一些原因。

1. 对于团队来说这是个很大的变化

很少有工作实践能像结对编程这样对团队造成巨大影响。在传统的工作中,开发者会“进入状态”:带上耳机打开音乐;手边就是咖啡因饮料和零食。大部分开发者都不能适应在工作中和同事进行大量沟通,他们需要一段时间来适应对话状态!

2. 精神高度集中

这是结对编程有效的秘籍之一:专注、专注、专注!如果你正在结对编程,那就不可能查看 Facebook、浏览网页或者回复收件箱中刚收到的邮件。

3. 疲惫

结对编程需要的专注和紧张程度高于大部分人的日常工作强度。结对编程会把你稍微推离舒适区并锻炼你的专注能力。但是无论你多么擅长结对编程,都会到达极限。Kent Beck 写道“绝大多数程序员每天的结对时间不能超过五或者六个小时。”[2]

4. 大部分成员都没有完全具备所需要的软技能

人类不是生来就有同理心和超强的社交技能的。如果你在工作中和同事交流很少,那你在这方面的技能可能就会弱一些。想象一下,和一个缺乏社交技能的人紧密合作一整天是什么感觉。或者,想象一下作为新手和一个不耐烦的老手一起编程的感觉。结对编程的两方都需要很高的耐心和同理心。

5. 所有的改变都很困难

所有的变更管理专家都会告诉你要求他人改变做事的方式会立刻激发恐惧反应,人们试图理解改变对他们的影响。

既然如此艰难,为什么我们还要改变呢?

接下来,我们会讨论到底是什么支撑你克服这些障碍。结对编程有很多好处,我们来看看你能获得什么回报。

读到这里,希望你已经充分意识到结对编程的价值。当你和其他人讨论结对编程的时候,可以直接引用这个列表中的内容。一定要把这个列表摆在最显眼的位置,遇到困难的时候就提醒自己回报是什么。

所以,如何进行结对编程?

下面我会介绍一些减轻痛苦的方法,能够帮助你更好地推行结对编程。当你向开发者们推行新工具或者新技术的时候,要根据实际情况选择合适的方法,结对编程也一样。首先我们来看看 Gina Green 和 Alan Hevner 的研究。

Green 和 Hevner[4]研究了为什么优秀的编程工具和技术经常会被程序员拒绝。调查了企业软件的开发者之后,他们总结出三条推行新技术或者新工具的准则:

让他们自己选择何时使用开发者希望能够自由决定结对编程的时间。千万*不要*命令或者强制他们结对编程。如果你这样做,他们会很不高兴、不爽、不理睬你,甚至会反抗你。结对编程是优秀软件开发者的思想结晶,并不是源于项目负责人或者流程控制专家。成千上万的程序员在看到结对编程的好处之后会自愿地接受它,这是唯一一种真正可行的结对编程推行方式。

指导他们正确地进行结对编程建立清晰明确的结对编程标准。结对编程并不是两个人坐在一起,一个人编写代码并偶尔问另一个人问题。结对编程的意思是两个人要非常专注于同一段代码或者同一段思想,同时只有一个人打字。你需要向团队成员介绍如何正确进行结对编程,比如:

让稍差一些的队友“主导”编程,即使他们需要很多指导。

共享控制权两个人都能控制键盘和程序设计。

意见出现分歧的时候要有礼貌地讨论。

鼓励他们(尤其是作为他们的领导!)无论你想做什么改变,都需要清楚地表达出来,并且要不断重复。即使你感觉自己像台坏掉的录音机,也必须不断重复直到完成改变。因此,要明确地表达出你想让大家进行结对编程(同时不要把它变成命令)。如果你是领导那就更有效了,只要不断重复,开发者一定会听进去。

记住这三条准则之后,我们来看一些推行结对编程的方法。

方法一)细胞分裂

这种方法适用于你已经拥有,或者可以招聘到经验丰富并且非常热情的结对编程程序员。我们叫他们结对专家。你至少需要2~3 人来推行结对编程。具体方法如下:

组建一个队伍,一半是结对专家,一半是结对新手(团队中没有结对编程经验并且愿意参与的人)

最初,所有的代码必须由一个结对专家和一个结对新手结对完成。需要频繁更换结对目标。

当新手开始适应的时候,你可以放宽专家-新手结对这个要求,但是至少要保证团队稳定发展三个月,或者直到结对新手都“转换”为结对专家。这个过程至少需要三个月,一定要有耐心。如果你很快就停止,那新手的经验无法牢固掌握。

现在你有两倍的结对专家了。如果你还有许多需要转换的结对新手,可以把团队一分为二并加入结对新手组成新团队。确保在每个团队中专家的数量都大于等于新手的数量,然后继续执行步骤2。

这个过程开始很慢,但是会呈指数增长。从一个团队开始,到第一年底你就会拥有八个团队,到第十五个月就会拥有十六个团队。到那时,你就很容易在团队中推行其他技术实践,比如测试驱动开发和持续集成。这些技能会快速传播到整个团队,因为大家都会对彼此负责。

注意:频繁更换结对目标也被称为“无序结对”。这样的好处是知识可以在整个团队中传播。此外,这样做也可以避免让两个人之间建立太深的感情,从而难以和其他人结对。Kent Beck 喜欢每隔几个小时换一次结对对象,但是一天一次就足够了。门罗创新公司会每周更换一次结对对象。

方法二)从零开始

如果你没有任何经验丰富的结对编程程序员,那就只能从零开始了。但是你还是可以遵循一个具体的方法。下面是 Laurie Williams 等人在《Pair Programming Illuminated》中推荐的方法。[5]

第一步是从团队中找出一个声望高并且愿意协助你进行改变的开发者。选择一些候选人并向他们解释你想做什么以及为什么要这么做。记住你的好处列表(上文提到过)。如果他们不能做出决定,可以让他们参考一下列表中的好处。如果他们拒绝帮助你,那也要让他们保持开放的心态,不要变成你的敌人,然后询问下一个候选人。

当你找到认同你的开发者之后我们叫他/她“结对支持者”就可以进入下一步了。在这个阶段,结对支持者开始逐渐向组织中的其他人介绍结对编程的思想。最好的方式是向其他程序员提供帮助,协助他们完成工作或者进行一对一帮助。这样,结对支持者就可以不动声色地和其他程序员建立起结对关系。如果这种关系进展顺利,结对支持者就可以和队友讨论结对编程及其好处,并评估队友对于结对编程的态度。这一阶段的目标是发现组织内和你想法相同的人。

当你有一批可以接受结对编程的人之后,下一步就是和所有人进行公开的讨论。列出一个暂时的自愿性质的结对编程计划包括最初有多少对开发者和尝试多长时间。因为需要一段时间来适应,所以最好尝试三个月或者更久。让大家公开讨论他们对于结对编程的疑虑,并探讨如何解决他们的问题。和他们讨论评价标准,什么样的结果会让大家相信结对编程是一件值得长期坚持的事情?讨论如何收集数据从而可以验证结果是否符合标准。最后询问有多少人愿意参与。如果可能的话可以加入物质奖励,从而让结对编程者在一个理想的新项目上开始工作。

其他建议

除了推行结对编程,还有一些需要思考的内容:

分布式团队

工作地点不一致的团队怎么办呢?他们能获得结对编程的好处吗?当然可以,只要他们愿意付出一些额外的努力。有许多工具可以帮助程序员共享屏幕和音/视频,从而创建一个虚拟的结对环境。可能需要一些尝试来判断哪些工具最适合你的技术栈。虽然视频是可选的,但是我很推荐视频获得肢体语言和表情反馈可以极大地帮助你理解队友的状态。比如说,他保持沉默的原因是因为感到疑惑吗?他在思考吗?还是他起身去休息了呢?经验丰富的远程结对编程者 Joe Moore 的博客是学习远程结对的好地方。让团队短期共同工作也是一个好办法比如一次或者两次冲刺这可以让他们在远程结对之前适应结对编程。

结论

结对编程对于所有软件开发公司来说都极具价值。它可以显著提高质量和速度,甚至可以提高开发者的工作满意度。为了获得这些价值,需要非常谨慎小心地把结对编程引入到你的团队中。避免命令和强制要求,要不断鼓励和奖励他们。这项强大的技能会在日复一日的练习中逐渐显现出威力,让你的团队慢慢发现它的作用并达成共识。最后,别忘了,结对编程不适合所有人,所以要想好如何回应那些拒绝结对编程的团队成员。

作者介绍

Melinda Stelzer Jacobson是一名敏捷教练,坚信生产力和成功源自快乐的成员和重视信任、尊重和沟通的团队。她的信念源自 15 年的软件开发经验,包括电信、银行、科学设备、网站和互联网程序。Melinda 住在旧金山,曾获得敏捷专家认证、敏捷开发者认证、ICAgile 专业敏捷教练认证、DAD 黄带和创新游戏合作架构师认证。在业余时间她会收养可爱的流浪兔,这样它们就不会被安乐死。



              查看评论 回复



 编程 他们 结对

"结对编程简介"的相关文章

网站地图

围观()