结对编程的意义

≠≠

正文共2270字1图,阅读时间:7分钟

在敏捷开发的学术界中,有很多专业的词汇,理解其中的词汇对提升敏捷能力都有很大助益。所有词汇的种类和关系大致分布如下:

上一篇文章详细解释了极限编程中的“可持续速度”,本篇文章将详细解释结对编程。

01. 定义

结对编程即由两个程序员共享一个工作站(一个屏幕、键盘和鼠标)组成。在键盘上操作的程序员通常被称为“驾驶员”,另一个程序员也会积极参与编程任务,但更大的方向是“领航员”,大约每隔几分钟,他们就会互换角色,这样也被称为简单的“配对”,词组“结对编程”和“成对编程”。

02. 常见陷阱

两个程序员必须在结对编程时积极沟通地参与任务,否则结对编程不会带来好处。

很容易引起异议,认为结对编程会“成本加倍”,这是一种与输入错误一样的误解,应该意识到,这是结对编程应用不佳的最坏后果。

至少“驾驶员”,亦或者两个程序员都希望能够保持被评论的状态,如果这个过程是静音的,那么“领航员”应该介入。

结对编程不能强加于人,尤其是类似人际关系、个人卫生最普通的问题阻碍了结对编程的时候,先把最基本的问题解决了,再使用结对编程。

03. 起源

很多人都试图在描述结对编程的时候引用各种各样名人的名字,以增加神圣的光环。这种做法描述的秩事令人着迷,但是有时会难以证实,但是,历史的时间轴确实可以表明,结对编程早在敏捷运动前就以现代形式出现。

1992年,“动态二人组”是拉里·康斯坦丁在访问Whitesmiths Inc.提出的术语,Whitesmiths Inc.是P.J.Plauger编译器供应商,他说:“每个终端都应该有两个程序员”。当然,肯定是只有一个程序员在打代码,其他人在背后“监视”,白人从1978年到1988年都存在这种现象。

1993年,Wilson等人的文章《与学生程序员合作的好处》,是一项早期的实证研究,明确指出了编程任务的好处。在结对编程已经通过极限编程得到普及之后,对结对编程进行“验证”的愿望推动了后验研究的增多。

1995年,吉姆·科普林的第一本书《程序设计的模式语言》,这本书中“生成开发-过程模式语言”一章,以亚历山大模式形式对“成对发展”的模式作了简要描述。

1998年,在最早的关于极限编程的文章《克莱斯勒走极端》中,配对编程被认为是C3团队的核心实践之一。它后来被正式描述为XP最初的“十二种实践”之一。

2002年,劳里·威廉姆斯和罗伯特·凯斯勒合著的《配对编程之光》是第一本专门研究这一实践的书,探讨了它迄今为止的各种理论、实践和研究。

2003年,C2 Wiki上的一篇匿名文章,描述了乒乓编程,这是一种相当流行的变体,它将测试驱动开发与结对结合在一起。

2015年,James Coplien出版的著作《两个脑袋比一个脑袋好》(Two Heads are Better Than One)对结对编程的历史进行了概述,其中回顾了结对编程的历史可以追溯到上世纪80年代中期。

04. 技能

如上所述,阻碍有效结对编程的主要问题之一是被动。当同时启动测试驱动的时候,被称为“乒乓编程”的变体鼓励频繁切换角色。例如,一个程序员编写失败的单元测试,然后将键盘给另一个编写相应代码的程序员,然后继续进行新的单元测试,这种变体可以说是纯粹以教学目的,也可以由经验丰富的程序员以“乐趣”的变体使用。

初学者:

能够以“领航员”的身份参加,特别是进行适当的干预

能够以“驾驶员”的身份参加,特别是编写代码时解释代码

发展中:

能说出放弃键盘和转换角色的正确时机

能说出“偷”键盘和转换角色的正确时机

先进的:

当另一对在使用结对编程处理任务的时候,能够“顺便访问”,并且顺利担任领航员的角色。

房间的家具、工作台的设置都是为了鼓励结对编程。

房间的噪音是可控制的。几对程序员在进行无声的结对编程交流,但是不会严重到干扰其他人工作的程度。

进入房间的时候,没有发现任何一个戴着耳机的程序员。否则,这将是一个“消极”的信号。

05. 预期收益

使用结对编程的好处有:

提高代码质量。“有声音编程”可以清晰表达编码任务中的复杂性和隐藏细节,减少出错或进入死胡同的风险。

更好地在团队中传播知识。特别是当一个不熟悉开发人员与一个更了解组件的开发人员合作的时候,结对编程的好处就会出现。

更好地技能转移。初级开发人员可以从更有经验的团队成员中学习到更广泛的技术和技能。

协调工作大幅减少。使用结对编程后,协调的是N对程序员,而不是N个程序员。

提高对中断恢复的能力。当两个开发人员中的一个必须处理外部工作的时候,另一个可以继续专注在任务上,并且可以在之后帮助另一个集中注意力。

编 辑 / Dishayen

图 片 来 源 / Pixabay

-END-

- 敏捷大解刨 第一线极限编程 -

(点击以下蓝色文字直接跳转)

2、结对编程的意义

3、参与

4、日常会议

5、迭代

6、速度

7、频繁发布

8、用户故事

9、集体所有制

10、持续集成

11、简单设计

12、重构

13、TDD

- 第三系列:精益创业方法 -

(点击以下蓝色文字直接跳转)

2、腾讯的好产品到底是怎么做出来的?

3、微信海外战略为什么失败?

4、硅谷优秀团队都恪守的狗食文化

5、如何实现产品的爆发式增长?

6、为什么8个人就能把微信做出来?

7、不懂技术如何管理好技术团队?

8、向腾讯学习产品经理培养之道

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181015A1U1FQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券