最后更新于2017年11月6日星期一21:36:51 GMT

I like Pair Programming. 我断断续续地做了大约10年. Whenever I’ve pair programmed, at the end of a session, 我离开的时候总是比刚开始的时候更优秀.

然而,当编程的效率不高时,这种做法可能会代价高昂. 当涉及的两个程序员之间存在很多摩擦时, 成本可能会超过一个程序员独自解决问题的两倍. Yet, when things go smoothly, 两个程序员一起解决一个问题所花费的时间可能比一个编码员单独解决问题的时间要少.

诀窍是让事情顺利进行,而不是不必要地旋转循环. 对我来说,这是礼仪问题。 礼仪:社会上或某一特定职业或群体成员之间礼貌行为的习惯准则. 良好的礼仪转化为高效的结对编程. So, 永远是一个为软件开发世界做出贡献的人,在这个世界里编写有价值的代码, 请允许我分享一些行为规则,我认为这些规则可以使结对编程更有效. 我把这些规则称为结对编程礼仪的5条规则. These rules are:

  1. 事先就物理环境达成一致
  2. 在讨论代码时,总是引用行号和文件名
  3. 不同意的时候,从利益的角度来谈
  4. 感到不自在时,就说出来
  5. 尽可能多地赞美别人

Allow me to elaborate:

1. 事先就物理环境达成一致

当与他人一起编程时,物理环境很重要. 您可能习惯于在浅色背景上阅读深色文本. 你的伴侣可能更喜欢浅色的文字而不是黑色. 虽然听起来很奇怪,但这是一个重大的脱节. 很难谈论你看不见的代码. Your eyes become conditioned.

键盘快捷键和鼠标行为也是如此. 有些人喜欢向下滚动的鼠标滚轮,以便在页面中移动, 有些人习惯吃面包卷. 要求程序员调整他或她使用硬件的方式会产生摩擦.

In terms of mouse and keyboard, if there is a disconnect, 其中一个程序员可能必须指定一个驱动程序. 如果指定的驱动程序场景是不可能的,  您可以允许每个程序员留在他或她的工作站上,并使用TeamViewer等产品中的屏幕共享技术, Skype, GotoMeeting and Join.me.

页面配色方案格式有点难以适应, 特别是在集成开发环境中. Given enough time, 结对编程团队中的一个成员可能会同意另一个程序员的屏幕偏好. 或者,两个程序员可能会提出一个各自都能接受的颜色模式. Yet, 两个开发人员都需要能够以多种方式查看代码——变量检查, 调用堆栈和变量监视, for example.  需要确定一个公共环境. 不能快速准确地收集代码信息将导致摩擦并减慢配对速度. 事先花时间商定物理环境将为以后节省大量时间.

2.在讨论代码时,总是引用行号和文件名

看看下面的问题:

变量的值是多少?

将该问题的内容与以下问题进行比较:

在文件MyFile的第232行,变量obj的值是多少.java?”

第一个问题需要更多的跟进才能弄清楚. 第二个问题,如果有的话,也不是那么多.

Thus, when talking about code, 除非您直接指向您和您的编程伙伴可以看到的显示器, 总是提到你关注的焦点, at least by line number. 找出你或你的伴侣关注的地方需要时间, 可以用来解决问题的时间.

如果您没有在IDE中打开行号,那么就打开行号. 知道该看什么可以节省大量的劳动时间.

3. 不同意的时候,从利益的角度来谈

I have ideas. You have ideas. All programmers have ideas. That’s how we’re built. 有时候结对编程的想法是同步的. Sometimes they’re not. Disagreement is good. 这就是更好的想法被合成的方式. 然而,永远持续下去的分歧,看不到解决办法,会浪费时间.

当我与编程伙伴意见不一致时,我发现的一个技巧就是总是从利益的角度来谈论. 例如,你可以说,“我认为使用我的想法的好处是[在这里说明好处]”. An idea without a benefit ain’t. It’s an opinion. And opinions are like noses. Just about everybody has one.

在比较利益时,对一个想法做出决定要容易得多. 在意见清单上的比武一直持续到另一个人从马上摔下来. 结对编程不是通过战斗进行考验. Articulating benefit works!

4. 感到不自在时,就说出来

我总是意识到我的感觉对我的想法有多大的影响. When I am feeling assaulted, 采取防御或沮丧的态度, 我最关心的是缓和这种感觉, not to have better ideas. 试图让不好的感觉消失需要时间. And, 在结对编程的情况下, 让不好的感觉消失而不让对方意识到我的不安是适得其反的.

Look we’re all human. 有时我们会被一句冷嘲热讽所迷惑, 我们的节目合作伙伴说的一句讽刺或无意的侮辱. It happens. 大多数时候,说这种话的人并没有恶意. He or she is unaware. 所以这是有好处的.

当你不自在的时候,就说出来. 最好让信息在几分钟内流动,把事情做好,而不是从下午一直到晚上怀恨在心. 你可以这么简单地说, “伙计,我知道你可能不是故意的,但是说我的想法很差劲真的很伤人. 也许接下来你可以说我的想法有一些缺点需要解决.”

大多数人本质上是善良的. 而那些不适合结对编程的则不适合. 你最好一有不好的感觉就告诉别人. 如果这个人能适应,那就继续前进. 如果没有,请您的经理与其他人结对编程.

5. 尽可能多地赞美别人

结对编程是两个人之间一种非常特殊的亲密关系. 两个人在非常详细的层面上一起工作来解决复杂的问题.你的搭档正在分享他或她自己的一个非常特别的部分:他或她的想法. For better or worse, 它是两个人之间的关系, 也许不是你和兄弟姐妹或朋友之间的那种, 但这并不像在地铁上与他人合坐那么短暂. 通过和一个人一起工作,你可以真正了解他.

我发现,拥有良好的结对编程经验的一大好处是,当我们一起高效地前进时,我能感受到一种赋权感. 要么我觉得自己在帮助别人,要么我觉得自己在被别人帮助. It’s win-win.

我发现的增加我和我的编程伙伴之间的授权感的方法之一是,当有机会赞美时,总是给予赞美. 我坚信,还没有出生的人,并不希望自己所做的工作或思想得到赞赏. 人们希望对自己的工作感到满意. 结对编程也不例外. 我发现让人感觉良好的最快方法之一就是随时真诚地赞美别人. It doesn’t have to be a drama. 有时候一个简单的“好主意”就足够了.

当我的搭档感觉良好时,我也会感觉良好. 对于我们这些在这片土地上待了一段时间的人来说已经开始明白了, happy cows make better milk. 你赞美得越多,两人的交往就越有效率.

Putting It All Together

乍一看,结对编程似乎是一项昂贵的事业,充满了两个程序员被锁在一个房间里的风险, arguing for eternity. It’s been known to happen. However, 当涉及的两个开发人员在商定的工作环境中协作时,结对编程可以起作用, 以纯净的清晰度彼此交谈, 完全了解彼此,完全尊重彼此. 精通结对编程需要时间. 希望上面列出的5条规则能够帮助加速结对编程的过程, 减少与结对编程相关的成本,并提高结对工作的效率, collectively and individually.