结对编程指南

前言

图 1

俗话说,”三个臭皮匠顶个诸葛亮“,可见组织内的团队合作并非颠覆性理念。但在普遍倾向于自由工作的编程领域,要求两个开发人员进行结对,却比较新颖了。

结对编程是一种不断发展的软件开发技术,要求两个开发者工作在同一块代码上,分别承担类似驾驶员和导航员的职责。

整个过程中,驾驶员负责编写代码,而导航员则复杂审查并专注于行动计划。

图 2

很多研究描述了高生产力及安全可靠的产品的巨大好处,但这种观点仁者见仁。

由于该技术从一开始就被看做对宝贵编程资源的浪费,因此说服某些管理者采用结对编程往往会大吃闭门羹。事实却是,结对编程虽然多花了约 15% 的时间,但却能减少 15% 的代码缺陷 (点我了解详情)。

本文的目的是给组织提供基本的结对编程指南,同时强调使用这种技术的优势以及开发人员需要克服的挑战。压制住兴奋,让我们开始探索之旅吧!

结对编程介绍

图 3

回想一下,结对编程首先是作为极限编程软件开发技术的一个完整元素被引入。而极限编程,在 90 年代 Kent Beck 的设想下,是一套能帮助开发团队开发出优秀软件的软件标准。它强调的信息交换、清晰度、响应、确定和考虑等等,都对结对编程的理念起了决定性的引导作用。

根据 Beck 的定义,”结对编程即:互相保持任务的推进; 对系统进行头脑风暴式改进;理清思路;在同伴受阻时挺身而出以降低挫败感;让对方对团队的实践负责;配对“

它是如何工作的?

前面提到,结对编程包含工作在单一系统上的两个人(开发人员),一个人输入代码,而另一个人从旁观察或指引。通常负责打字的人称为 ”驾驶员“,而另一个被称为 ”导航员“ 的人则对编写的代码进行持续的审查和修正。在他们彼此相处的整个时间里,双方应一直保持交流,使对方能够参与并协助确定编码方向。

结对编程的目标是两个结对者能够互相分担工作负载,保证持续的开发节奏,并助力于团队的知识传播。”驾驶员“ 和 ”导航员“ 应该持续交流,这有助于提升两人的知识和效率。

总而言之,结对编程绝不仅是让两个开发人员凑在一起,然后疯狂的开撸代码。在过去的几年中,专业人士设计了在各种情况下使用的方法。通过经验和适当的实践,这些方法已经被改进和完善。

结对编程技巧

在 Weblab,我们已经使用结对技术相当一段时间了。我们通常用它来进行复杂的合并请求审查、新人辅导和 Bug 修复。我们观察了那些从未与他人一起写过代码的开发人员,和那些已经结对编程了几年的人。再次,我将写下一些关于结对编程的经验和理论,以及与这种方法相关的最广泛的使用形式。

驾驶员-导航员 角色

图 4

一般来说,结对编程已经通过 ”驾驶员-导航员“ 技术得到了推广。理想情况下,两个成员应该适时转换职责以获得更好的结果。

在这种形式的结对编程中,”导航员“ 很容易失去注意力。这可能是因为负责打字的人没有交流,或者 ”导航员“ 不想打扰他。有好几次我观察到,“驾驶员” 偶尔说一声 ”等下,我有了一个想法“, 然后埋头继续,而 “导航员” 则在刷自己的社交账号或者做一些其它无关的事情。

为了有效执行这种形式的结对编程,交流是能带来显著效果的一大法宝。不过这种水平的交流一般是结对新人所不具备的。鉴于次,我认为这种形式是结对编程更为过渡的方式,不建议新手直接使用。

”强风格“ 结对法

图 5

在 ”强风格“ 结对的方法中,“驾驶员” 不会做任何 “导航员” 没有指示去做的事情。就像 Llewellyn 所解释的:“你的想法必须经由他人的手落实到计算机”。

当 “驾驶员” 需要提出想法时,他必须将系统移交给同伴,然后以 “导航员” 的角色实施控制。这种方法使 “导航员” 完全参与其中。

在传统方法中则正好相反, “导航员” 请求移交系统来进行输入或实施自己的想法。

“乒乓” 结对法

图 6

开发人员经常使用的另一个结对编程模式是 “乒乓” 结对法。在该方法中,“驾驶员” 针对行为编写一个测试,然后交由 “导航员” 实现该行为。实现完成后,轮到“导航员” 作为新的 “驾驶员”,编写下一个测试让新的 “导航员” 去实现。

这种模式最大的挑战是需要花费时间进行重构和测试。事实上,有时我投入在测试重构的时间甚至多于编码。这可能使得实现一个特性变得很复杂,也使测试复杂化。在应用属性的地方进行渐进动作较为简单,但我们还需要注意代码的简洁性,以便以后能不费力的进行维护。类似的想法也适用于测试部分。

简而言之,“乒乓” 结对法有助于专业人士同时关注代码和测试。另外,也有助于人们有效的进行 TDD。

近期统计

图 7
  • 在一项在线调查中,约有 96% 的程序员报告说,他们喜欢在结对编程的环境中工作,而不是独自工作。

  • 此外,95% 的被调查程序员声称,他们在结对工作时比独自工作更自信。

  • 结对编程对生产力和产出的影响也是积极的,因为相比个人,结对通常有更多的设计思路,还能更好的捕捉设计缺陷和错误。

  • 盐湖城犹他大学的 Laurie Williams 已经发现,结对程序员仅比两个独立的个人程序员慢 15%,但产生的错误却少 15%。

结对编程作为招聘工具

图 8

结对编程是面试中进行能力测试的最佳方式之一。其基本思想是我们在求职者遭遇编码问题时才与他们进行交互,而大多数时候让求职者自己行动,这可能与传统的结对有所不同。

这种方法的好处之一是更接近于实际的任务处理场景。此外,还有助于公司准确地了解求职者的专业水平和能力。

作为面试官,你将有机会考察求职者接受新概念的速度、与他人合作的潜力以及完成复杂编码任务的技能水平。

结对编程常用语

结对时

  • 我来写一会儿吧
  • 你从旁掠阵可好?
  • 我们一起开搞
  • 我是这么想的
  • 你是怎么想的?
  • 这块代码能 work 吗? 让我们执行下单测
  • 我有点累了,你呢?
  • 没太 get 到点,能画出你的思路吗?
  • 我们有忽略什么吗?

短暂休息

  • 我们休息下吧
  • 能换下角色吗?
  • 我们喝杯咖啡吧

注意

  • 不要强迫对方
  • 在合适的时候给你同伴写代码的机会
  • 开诚布公的交流
  • 不要忽视休息
  • 互相信任
  • 辨识自己的错误
  • 优先自我反思
  • 放缓节奏

写在最后

图 9

结对编程适用于每个人吗?答案并不单纯。人各有异,所以结果也肯定有所不同。结对编程对某些人来说成效很好,但对另一些人却可能恰恰相反。

由于这种技术应该加强双方合作的努力,所以情况可能并非总是如此。请记住,不是每个项目都适合结对或共享编程。特别对于那种只有一个有经验的开发或者全是新手处理任务的复杂项目。在这种情况下组成新手-老手组合来改善新手的技能和熟练程度可能是一个很好的选择。

在我看来,结对编程本身并没有什么坏处,只要能为特定的项目中找到合适的程序员组合。请随时留下评论让我们知道你的意见,我们很期望得到反馈。


译自:Pair Programming Guide

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,326评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,228评论 1 304
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,979评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,489评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,894评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,900评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,075评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,803评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,565评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,778评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,255评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,582评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,254评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,151评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,952评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,035评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,839评论 2 277

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,590评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,502评论 2 59
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,937评论 3 118
  • 第一次听说结对编程的时候,我觉得太反直觉了,两个人用一台电脑写代码,效率不就下降了一半吗?后来我在团队里去尝试引入...
    李浪溪_WaterLee阅读 4,874评论 8 27
  • 还记得你的上一份工作吗?你是在干什么呢?有什么收获呢?我们都慢慢的在这个喧哗的城市迷失着,渐渐忘记了自己的初衷是什...
    糖果的美滋滋阅读 169评论 0 0