it-swarm.cn

配对编程何时开始工作?什么时候避免呢?

并不是一直在刻苦地配对编程,而是在团队中选择性地使用配对编程。我认为在以下情况下效果最佳:

  • 加强项目中全新的团队成员(而不是让他们自己浏览文档或代码)。
  • 初级和高级人员一起工作(有助于显示经验丰富的开发人员的一些技能和技巧,此外,它还允许老狗有时学习新的技巧)。
  • 当某人试图查找缺陷时,通常可以帮助您与另一只眼睛配对。

什么时候使用配对程序,为什么?

什么时候避免成对编程?为什么?

55
Paddyslacker

Laurie Williams汇编的研究 表示当

  • 对规范,设计和复杂编程任务-的工作表明,当成对地处理简单任务时,没有显示出质量改进,但可能速度提高。还要注意,“编程”对通常包括编写代码以外的活动。
  • 配对中的每个人都具有大约相同的专业知识-虽然配对编程非常适合训练,但是当配对大致相同时,配对就最为投入。
  • 角色定期旋转-定期旋转有助于保持当前副驾驶的接合,因为个人在驾驶或感觉即将驾驶时往往贡献最大。
  • 对定期旋转-团队对了解他们所构建的系统的不同部分表示满意。结对轮换有助于知识转移,从而减少了项目中的某些风险。在学术环境中,通常会分配对,但是在行业中,通常在站立时通常是自分配的。在两种情况下,当两个人都愿意在配对活动中看到价值时,配对最有效。

根据我的亲身经历,我发现我的XP)团队平均花费约60%的开发时间对编程。其余时间用于进行个人开发。配对以创建初始设计,在设计上单独工作几个小时,然后再回来完成一些棘手或困难的代码部分。

我还发现,结对编程在大约1.5到2.5小时内最为有效。少得多的东西往往会要求太多的设置开销,而更多的东西会使配对变得胡扯和疲倦。脾气暴躁而又疲倦的人意味着您沟通不畅,并且可能会让缺陷渗入系统中。

47
Michael

结对编程在很少情况下为我工作。

配对编程对我失败的地方

简短的说来,结对编程对我来说并不是开发软件的主要方式。我可以为一天或一个星期配对程序,尤其是如果我们专注于特定问题。但是之后呢?我受够了。吐司我不想见任何人,也不愿与任何人交谈,而且我至少需要在洞穴里待几天,直到我再次适合做人陪伴。

这是一个悲伤的故事,但有趣的是,我现在对它的结局感到非常高兴。我很高兴受雇于在家或在咖啡店工作的合同,而且我结识了新朋友,并在旧金山以外的地方进行了前所未有的探索。我有一台自行车和一台笔记本电脑,只要我按时完成任务并定期检查代码,我的时间就是我自己的时间。

我将在前面列出配对编程遇到的主要问题,稍后再提供详细信息和轶事。

  1. 分割焦点。
  2. 没有实验。
  3. 没有高音。
  4. 对所有权不感到自豪。
  5. 无法逃避...

...我问我的同事们是否看到了我所看到的东西,如果我缺少任何东西,我没有看到它如何工作,人们如何继续做下去。他们说我做的很好,只是花了一些时间适应和调整。起初,每个人都很难。

最终,我退缩了自己。在令人头疼的头痛,失眠和无法满足的编写代码需求之间,我停止了对输入的响应。我可以凝视屏幕,什么也看不到。有人可能会意外地与我交谈,而我听不到他们的声音。我满足了工作的死记硬背的要求,但是当时我不在那里。我已经用光了当天刚出现的一切。当我的另一位伙伴打字时,我开始检查iPhone。

最终-距离三个月后还差之遥,而且这是有史以来的第一次。

不是一个人

我写这篇文章不仅是为了理解它,而且也是为了谈论它。据推测,结对编程对大多数人都有效,并且比单独编程要容易和快捷得多。可能会,也可能不是,但从长远来看,结对编程对我不起作用。结对编程对许多人都不起作用。我们也很重要.

34
Will Sargent

我的团队从成立之初就开始进行结对编程,这是我在那儿工作的很早以前,它是一家以“极限编程”风格为主的商店的一部分。结对编程是默认状态;人们只有在有奇数的情况下才真正单身,或者偶尔要进行调查,尤其是那些涉及摆弄敌对设备并试图使其工作的人。

“初级/高级”不是唯一的方法。 “中级/初级”很有用;它通过迫使他与他人进行交流来帮助中级人员综合所学的知识。 “中级/中级”挑战两个人一起工作以共享他们的知识,进行交流并成为团队的一部分。即使您有两个真正的资深人士,他们也有可能拥有不同的专业领域,并且可以提出不同的方法。一旦有人含糊地“加快”项目的进度,知识共享方面就不会结束。而是,结对编程是 学习组织 的缩影。新技术和最佳实践迅速传播。

结对编程还有助于保持代码的质量(较少的缺陷)和代码的完整性(它不仅可以完成其预期的工作,还可以完成它的工作应该 ...理想情况下,无需进行任何操作在一个为期数周的兔子洞里做错了事,或者在两个不同的正确做事上会发生冲突。它可以帮助程序员保持专注:在硅谷的心脏地带,每周工作80小时,我们每周只能工作40个小时,因为我们每天要进行8个小时的密集编码,因此需要切换彼此离开。 (此外,如果您花更长的时间进行结对编程,您可能会淘汰。或者至少是精疲力尽。)这对工作/生活平衡非常有用,并且在重要的时候也可以帮助您的组织具有快速周转(尤其是低延迟周转)。

并非全部是100%桃子和奶油。我发现结对编程有时会妨碍我应用直观的大脑过程,这对某些问题很有用。最近,在执行内存泄漏任务时,我花了一些时间来配对和不配对。没有一个人,我感到很随意,可以四处闲逛并尝试实验,而不必真正地确切地知道如何解释我在任何时候所做的事情。在单例中工作还具有一些优势,能够立即切线并进行某些狂野的重构(在XP方法论中很有价值))。

但总而言之,收益远远超过成本,而配对对我们而言效果显着:从创业阶段到被一家大公司收购,以及随后的整合。 (说到这一点,结对编程已帮助我们通过扩展和很少的营业额来保持文化的连续性)。

(我们在Perl开发了一种软件设备,标价约4,000-40,000美元。)

10
user2348

我从未在“配对编程”设置中工作过,但是我可以声称这是您列出的三种情况的一部分。您提到的场景似乎更像是“常规编程”,其中包含阶段性的帮助/培训。在“成对编程”出现之前,我们是否没有完成所有这些工作?配对编程,我认为这将需要一种更加专注的方法,即团队内部的共享过程不会在您解决眼前的任务或问题的那一刻就停止。但是,这就是我“思考”而不是我“知道”的东西。

对于结对编程,我个人希望与一个团队合作,让我有机会学习和分享我的知识。一个不平衡的团队,与您一起工作的所有人都在您前方几英里远,或者远低于标准水平的团队可能很快就会变得毫无兴趣。另外,我害怕与坚定信念并难以说服的人一起工作。

4
Preets

在过去的几个月中,我们一直在我们的团队中尝试使用Pair编程。当您在开发新事物(新技术,新功能等)时,我觉得它非常有用,因为您可以与团队中的另一个人快速地提出想法并对其进行验证/验证。此外,并排的同行评审有助于防止错误发生。

另一位队友尝试使用结对编程和测试来进行ATDD,他们对结果感到非常满意(根据他的计算,开发成本增加了20%,导致测试时间减少了约50%)

2
Amit Wadhwa

晚安

我们多次讨论了极限编程和配对编程的实践。时光倒流,我们能够理解编程是一种单独的活动,因为程序员需要专注和孤立。当时的程序员处在zone的心理状态,在这里他们可以有效地专注于代码并做出具有创意的明智决定。

如果您假设一个程序员互相中断,那么结对编程似乎也有风险。另一方面,打断两个程序员一起工作更困难。例如,在Solo编程中,它会更容易被打断,因此,一个单独的程序员几乎不可能停留在“区域”中。

当死角指日可待时,代码质量是另一个。人们总是会很匆忙,无论是结对程序员还是单独程序员:他们不会采用某些最佳实践,而只会忘记单元测试。

我会坚持结对编程。因为当遇到风险时,当一名程序员离开时,您将总是有另一个人来记录该过程并向其他所有人传授该过程的工作原理。

1
Junior M

处理任何非同寻常的复杂性往往是结对编程的不错选择,因此,多个人都可以理解代码,而不是只有一个开发人员知道部分代码库。另一种情况是某人想转让一些技能。这里的一个例子可能是让一个真正擅长单元测试的人与一个不太熟悉该概念的人结对,从而有助于养成某种东西的初步习惯。

至于避免配对编程的地方,请做一些简单的工作任务,最好将工作分为两组,让每个开发人员分别完成一些工作以完成工作。有些任务可能只需要键入一些内容,但规模并不大,值得花几个小时尝试找到更好的方法来完成,因为如果每个开发人员都采用蛮力的方法,那么就可以这样做小时。

1
JB King