写点什么

结对编程如何才能真正起作用

  • 2010-01-24
  • 本文字数:1972 字

    阅读完需:约 6 分钟

皇家信号学校的 Stuart Wray 为 IEEE 软件杂志 2010 年的一月刊撰写了一篇文章,题目是“结对编程如何才能真正起作用”。

在文章中,它举出可各种结对的方法(帮工- 学徒/ 驱动者- 导航者),并指出了工作的一般方式:

> 作为使用结对编程的开发者,我自己的的经验是这样的,它并非只是一种一个人编码,另一个人观察的技术。两个程序员会很紧密地在一起工作,总是在交谈,快速记下对要做的事儿的提醒,并且在屏幕上指出代码的片段。(结对编程的特征之一就是,如果你正确地使用了这种方法,那么在一天结束的时候,屏幕上会满是油腻的手指印。)程序员轮番使用键盘,经常会用这样的话来进行交换,“不,让我向你展示一下我是什么意思。”

以他对有效的结对编程的描述为基础(并且指出并非所有对结对编程的实现都是有效的),他提出了能够使有效的结对编程变得成功的四种机制。

机制一:结对编程者的交谈

> Brian Kernighan 和 Rob Pike 建议要大声地解释问题,即便是向毛绒玩具也要那样,John 正在研究的一种实践叫做“橡胶植物效应(rubber-plant effect)”。结对编程的一部分效力是由于持续触发这种效应而得到的:当一位程序员被卡住了,那么反复的交谈会使其突破,这种方式与单独工作的程序员大声地说出自己的问题是类似的。

他还讨论了交谈带来的更大的好处,其中应用了他所谓的“专家程序员理论”——随着需要知识的问题被更有效地解决,结对的两个人会彼此更了解对方。

> 那么这可能正是专家程序员理论起作用的地方:专家更可能会提出有深度的问题,那会对被卡住的程序员起到很大的提示作用。看起来还可能仅仅是认为你正在与一位专家交谈——或者假装——那会帮助被卡住的程序员得出那种有深度的问题,可能在之前专家曾经问过他们。

将交谈的价值累加起来,他指出:

> 这样,第一种机制让我们可以猜测,对程序谈论更多的程序员会更有生产力,而不时地互相提出有深度的问题的人会是生产力最高的。

机制二:结对编程者会注意到更多细节

“你看不到自己的错误”,这是软件开发中的(也是很多其它学科的)公理。

Wray 将这与改变视盲和无意视盲理论相关联。

> 我们所能注意到的东西取决于我们期望看到什么,以及我们无意识地认为突出的东西。所以,尽管成功的结对编程者通常更多地会关注同样的东西,但是他们也可能会注意到不同的东西。
>
> 因此,一起编程的两个人不会擅长同样的知识或者类别:一个人可能会更快地指出某个方面的问题,而另一个人对于其他方面更快一些。这样他们的工作效率就取决于他们通过观察来找到问题的速度。两个人的头脑肯定会比一个人的好。事实上,当人们开始进行结对编程的时候,最早做出的发现之一就是,不输入代码的人总是会更快地找出拼写错误:“哦,在这里你漏掉了逗号。”

接下来,他提出了关于结对疲劳现象的警告:当两个程序员进行结对,他们发现和无法发现的东西会变得越来越类似。最终,两双眼睛的优势会丧失殆尽。

> 结对疲劳使得我们经常对结对进行轮换:
>
> 有些结对编程者认为轮换是实践中可选的部分,而且在小型团队或者是没有几个程序员愿意结对的团队中,可能没有其它的选择。但是,结对疲劳意味着最终他们的生产力会降低。

机制三:与不好的实践作斗争

由于来自同侪的压力而不使用不好的实践,有人已经明确地指出这是有效的结对编程的优势。

他讨论了“编码并修正”编程的例子,并将它与老虎机赌博成瘾相关联。

> 这是交互编程特定的属性,使得我们很难做正确的事情。使用编码并修正的方式,我们会随意的修改程序,每次运行代码的时候,就像将硬币放在老虎机里面一样。老虎机是我们所知道的最容易上瘾的一种赌博形式。而来自于“编码并修正”编程会带来类似的不可预测的好处,这意味着它同样让人容易上瘾。
>
> 而结对编程比较不容易受到不好的实践的影响,因为程序员们会承诺以特定的方式编写代码,并确保两个人都信守承诺。在人们容易犯错的工作中,两人结对工作的方式变得越来越流行,这会让我们认真考虑,结对的压力也可能是我们的一种解决方案。

机制四:分享并评价专家的意见

个人的生产力之间会有巨大的不同,至少可以将其分解成十个因素来度量。这通常意味着对难度和时间的估计是不准确的。对于好的和坏的程序员都是这样——你只能通过与其紧密地工作来确定一个人的编程能力。

> 大多数程序员会解决他们自己的问题,因此没有人知道他们有多棒(或者有多糟糕)。但在结对编程中,人们持续地一起工作。因为他们会不停地交换搭档,团队中的每个人都知道对于特定的领域谁是最专业的。出于这种比较,他们也会意识到自己的专业等级。这样我们应该期望,比起单独的编程团队,通过结对编程可以对时间和难度进行更准确的估计。从我们的经验看,这的确是那样的。

- - - - - -

在你的环境中哪些技术和机制使得结对编程更加有效呢?

InfoQ 中有更多结对编程的内容,就在这里

查看英文原文: How Pair Programming Really Works

2010-01-24 23:082522
用户头像

发布了 340 篇内容, 共 129.0 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

TIKV节点数据文件误删后不更换服务器快速恢复

TiDB 社区干货传送门

管理与运维 故障排查/诊断

环路检测在风控领域的应用实践丨 Fabarta 技术专栏

Fabarta

大数据 算法 图分析 智能风控 风控算法

TiDB 源码编译之 TiUP 篇

TiDB 社区干货传送门

版本测评 新版本/特性解读 7.x 实践

探索未知,即刻搭建AI原生应用!WAVE SUMMIT Workshop等你来参加

飞桨PaddlePaddle

人工智能 百度飞桨 百度AI WAVE SUMMIT

关于MYSQL引擎在物理层面存储那些事

谐云

如何选择适合自己的文件传输工具

镭速

文件传输 文件传输工具

Placement Rules in SQL 使用案例

TiDB 社区干货传送门

新版本/特性解读 6.x 实践

安全易用的运维会诊平台选哪家?可以免费试用吗?

行云管家

运维 IT运维 运维会诊

软件研发的道德情操

阿里技术

研发 软件研发

直播|深入解析 StarRocks 存算分离--云原生湖仓 Meetup#2

StarRocks

数据库 云原生 存算分离 国产数据库 湖仓一体

Lighting web 测试使用

TiDB 社区干货传送门

迁移 管理与运维 备份 & 恢复 6.x 实践

新利好带动 POSE 持续上扬,月内几近翻倍

西柚子

INFINI Labs 产品更新 | Easysearch 支持 SQL 查询、Console 告警功能支持邮件等多渠道

极限实验室

sql console 邮件 告警 easysearch

直播源码连麦技术功能分享,你要的这里全有

山东布谷网络科技

直播源码

智慧云 打造您的商城APP,与5G时代社交电商融为一体

知者如C

情景规划与财务建模2.0,如何促进企业全面预算管理的实施

智达方通

智达方通 全面预算管理 财务建模 情景规划

性能测试最佳实践的思考

FunTester

【SOP】最佳实践之 TiDB 业务读变慢分析

TiDB 社区干货传送门

性能调优 集群管理 管理与运维 故障排查/诊断

有自动化运维功能的堡垒机有哪些?大家推荐哪款?

行云管家

高可用 堡垒机 IT运维 自动化运维

大模型时代下的我们,破茧重生探索新开发范式!|WAVE SUMMIT 开源论坛

飞桨PaddlePaddle

人工智能 百度 开发者 百度飞桨 WAVE SUMMIT

基于大模型的数据血缘异常归因分析

奇点云

元数据 黑客马拉松 奇点云 对象体系

GaussDB(DWS)函数不同写法引发的结果差异

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

MySQL char和varchar区别

java易二三

MySQL 编程 程序员 计算机

Photoshop Elements 2020 for Mac(图形处理工具) v18.0(2020.01.20)激活版

mac

苹果mac Windows软件 Photoshop Elements 2020 ps elements 2020

MySQL—修改数据库root用户密码

java易二三

Java MySQL 数据库 程序员 计算机

面试官:说说Spring中@NotEmpty、@NotBlank、@NotNull 的区别和使用

java易二三

编程 程序员 面试 计算机

2023清华博士团暑期社会实践项目圆满结束,合合信息助力科技人才发展

合合技术团队

人工智能 清华大学 博士

助力农村金融机构数字化转型,原点安全将出席“第十三届中国农村金融机构信息化发展创新大会”

原点安全

数字化转型 农村金融机构

CI+JUnit5并发单测机制创新实践 | 京东物流技术团队

京东科技开发者

测试 高并发 单元测试 并发测试 企业号 8 月 PK 榜

【华秋推荐】新能源汽车中的T-BOX系统,你了解多少?

华秋电子

新唐

微信技术分享:揭秘微信后台安全特征数据仓库的架构设计

JackJiang

网络编程 即时通讯 IM

结对编程如何才能真正起作用_研发效能_Shane Hastie_InfoQ精选文章