是什么

结对编程(Pair Programming):两个人共用一台电脑(或一个共享环境),一起写代码。

两个角色:

  • 驾驶员(Driver):操作键盘,写代码;
  • 导航员(Navigator):观察、思考整体方向、指出问题、提出下一步。

关键是角色要切换(如每 15–30 分钟互换),保持双方都投入。

优点

一、实时代码评审

问题在写出来的那一刻就被发现——比事后评审快得多。

研究表明:结对能发现更多的缺陷(虽然代价是更多的时间投入)。

二、知识传播

  • 新人通过结对快速熟悉代码库和业务;
  • 避免"只有一个人懂某块代码"(巴士因子);
  • 隐性知识(如"这个系统有个历史遗留的坑")通过结对传递。

三、减少分心

两个人在场,刷手机的概率会下降——注意力更集中。

四、设计质量

两个人的讨论往往比一个人的思考更全面。

代价

一、时间成本

两个人做一件事,直接的"人时"投入翻倍。

这是最大的争议点。 支持者认为缺陷减少和返工减少能抵消这部分成本(尤其在长期和质量敏感的项目中);怀疑者认为在简单任务上,这个交换不划算。

二、疲劳

结对需要高度专注,通常一天结对 4–6 小时已经是上限。

三、性格与习惯的匹配

不是所有人都适合结对。有些人独立工作效率更高;有些组合会产生摩擦。

四、远程结对的技术要求

需要共享屏幕/代码的工具(如 VS Code Live Share、JetBrains Code With Me、Tuple)。

适合什么场景

适合:

  • 复杂的、设计密集的任务(架构决策、棘手 bug);
  • 知识传递(新人 onboarding、跨模块学习);
  • 关键的高风险代码(安全相关、支付逻辑);
  • 解决长期卡住的问题(换个视角往往能突破);
  • 建立团队共识和代码风格。

不太适合:

  • 简单的、机械性的任务(如批量改配置、写样板代码);
  • 需要深度独自思考的问题(有时一个人安静思考效率更高);
  • 纯探索性、需要大量试错的工作。

与其它实践的配合

结对编程 vs 代码评审:

两者不是替代关系。

  • 结对:实时、高强度、适合复杂任务;
  • 评审:异步、适合大多数常规改动。

很多团队的做法是:复杂任务结对,常规改动走评审。

Mob Programming(群体编程):整个团队一起写一段代码——这是结对的扩展,适合需要全员对齐的关键设计。

一个实用建议

如果团队想尝试结对:

  1. 先从复杂任务开始,不要用在所有事情上;
  2. 定期交换角色和搭档;
  3. 控制时长(一天不超过半天);
  4. 允许有人说"我想一个人静一静" —— 结对不应该是强制的;
  5. 远程结对等工具要提前配置好,避免把时间花在调试工具上。

一个诚实的看法

结对编程不是"银弹",也不是"浪费"。

它的价值高度依赖任务性质、搭档匹配度和团队文化。

最务实的态度:把它当作工具箱里的一件工具,在合适的场景下使用,而不是教条地全盘推行或全盘否定。

说明:本文为软件工程实践的知识整理。