写点什么

通过结对编程提升开发速度、专注度和心流状态

  • 2025-07-13
    北京
  • 本文字数:1649 字

    阅读完需:约 5 分钟

大小:855.82K时长:04:52
通过结对编程提升开发速度、专注度和心流状态

伦敦 QCon 技术大会 上,Ola Hast 和 Asgaut Mjølne Söderbom 就结对编程实现持续交付的话题做了分享。他们的团队采用基于 TDD 的结对和群体编程方式,不设单独任务和独立代码审查环节。这种做法提升了代码质量、减少了浪费,还促进了知识共享。此外,频繁的休息有助于保持专注和心流状态。


该团队采用共同进行代码评审的方式,而不是来回发送拉取请求,Mjølne Söderbom 解释说:

2021 年,我和 Ola 刚加入同一个团队时,我们决定一起完成所有工作。当时并非所有人都认同这种做法,因此部分成员仍然独自工作。但如果 Ola 或我参与其中,他们别无选择——必须结对编程。


Mjølne Söderbom 指出,团队中至少有两人愿意进行结对编程,这个非常关键。仅靠一己之力说服整个团队会很困难。他们还大量运用结对编程来培训新成员。过了一段时间,大家逐渐认识到,这确实是一种正确的方式,他说。


所有任务都适合一起完成,没有人会独自负责某项任务,Mjølne Söderbom 说。一项任务始终至少有两人参与。如果其中一人不在(例如,某人要去开会时),另一人可以单独编码,然后再一起同步。


Mjølne Söderbom 的团队共有四名开发人员,他认为这是一个理想的规模。如果四人都在,他们会分成两对进行结对编程。有时也会四人一起进行群体编程,尤其是在处理新任务或需要做出重大决策时。这样,他们可以在分头行动前传播知识。如果是三人,他们总是以群体形式工作,他说。


Mjølne Söderbom 解释说,他们每 7 分钟轮换一次驾驶员和领航员的角色,结对时则是每 10 分钟轮换一次:

在办公室时,我们会用一个廉价的厨房计时器来计时。我们楼层上还有几个团队也买了同样的计时器,所以当你听到计时器频繁响起时,会觉得很有意思!当有人远程办公时,我们也会结对编程,通常只需在 Teams 上共享屏幕即可。


Mjølne Söderbom 说,如果换驾驶员时需要更换机器,他们有一些别名可以快速提交并推送到 Git。大家的键盘和按键映射设置各不相同,有时直接换到另一张桌子会更方便。他还提到,GitHub CLI 的别名也能帮助他们在完成后快速创建和批准/合并拉取请求。


Mjølne Söderbom 表示,他们对所有工作都采用了 TDD,并且非常喜欢这种方式。由于评审是整个流程的一部分,因此无需额外花时间进行单独的评审。由于他们结对编程并对所有代码进行 TDD,因此所有的评审和架构决策都是实时进行的,他解释说:

仍有人认为结对编程仅适用于某些通常较为复杂的任务。然而,我们发现事实并非如此——所有任务都适合一起完成。从长远来看,结对编程将以一种与以往截然不同的方式提升速度和促进知识共享。


Mjølne Söderbom 表示,他一直对整洁代码和代码质量非常感兴趣,而结对编程与之相辅相成。他想不出还有其他方法或工具能比一起工作提供更高的质量,他总结道。


InfoQ 采访了 Ola HastAsgaut Mjølne Söderbom,了解他们团队的工作方式。


InfoQ:你们如何衡量和减少浪费?

Ola Hast:结对工作的妙处在于,当构建或流程耗时较长时,大家会开始讨论。第一次通常没问题,但如果连续多次耗时过长,就会成为问题。我们随后会开始讨论解决方案和变通办法。

通常,耗时过长是一种直觉,而交接问题往往只有亲身体验后才被注意到。如果你无法在不涉及团队外人员的情况下重复执行某项任务,或者团队中的特定任务依赖特定人员,那么这就是导致延迟和浪费的根源。

我们发现,当人们单独工作时,他们对等待、缓慢的构建等情况的容忍度会更高,而结对工作确实能自然地推动我们减少这种浪费。


InfoQ:代码在进入生产环境前需要审批吗?

Asgaut Mjølne Söderbom:任何形式的单独工作都意味着你需要他人来审查和批准代码。大多数公司将审查作为合规要求。而在结对编程时,这部分工作已经在开发过程中完成了。


InfoQ:休息有多重要?

Hast:一起工作,尤其是当你全神贯注时,会很紧张。因此,适当的休息很重要,要离开屏幕和键盘。

去街区走走,呼吸些新鲜空气。无论你做什么,都不要尝试做其他事情,比如查看邮件或 Slack。


原文链接

https://www.infoq.com/news/2025/07/pair-programming-speed-flow/

2025-07-13 17:255348

评论

发布
暂无评论

大数据培训:Hadoop HDFS 实现原理

@零度

hadoop 大数据开发

Client-go源码分析之SharedInformer及实战| 社区征文

雪雷

Kubernetes Informer 新春征文

四款你必须知道的前端开发工具

编程江湖

动态加载不适合数组类?那如何动态加载一个数组类?

华为云开发者联盟

Java 数组 动态加载 数组类

Kafka消息存储机制

编程江湖

Springboot中,如何读取配置文件中的属性

华为云开发者联盟

数据库 springboot 映射 配置文件

上市商业银行推进智慧银行建设,全方位赋能零售业务数字化转型

易观分析

商业银行 智慧银行

程序员必知的8个Java开源IDE工具

编程江湖

ide

等保级别最高为几级?市面上常见吗?

行云管家

网络安全 等保 等级保护 过等保

百度智能云开物再收“一个奖状”

百度大脑

一文详解Kafka API

华为云开发者联盟

kafka API 拦截器 Consumer API Producer API

Worktile 权限设计

阿杰

权限控制 rbac 权限设计

天数智芯携手龙蜥社区,以高性能算力助力开源发展

OpenAnolis小助手

Linux 开源 芯片

一站式交付体验:云效+Kubernetes

阿里云云效

阿里云 Kubernetes 云原生 持续交付 一站式平台

加入科学计算SIG,挑战最前沿的AI+Science研发与创新

百度大脑

聚焦业务价值:分众传媒在 Serverless 上的探索和实践

Serverless Devs

阿里云 Serverless 运维管理 分众传媒 2月月更

Linux中Shell重定向

入门小站

Linux

在线脑图思维导图生成工具

入门小站

工具

PingCode Wiki 权限设计之ACL

阿杰

权限系统 权限控制 acl 权限设计

你会写java脚本吗?-JShell

蜜糖的代码注释

Java 后端开发 2月月更

netty系列之:channel,ServerChannel和netty中的实现

程序那些事

Java Netty nio 程序那些事 2月月更

美景本天成,妙笔偶得之——“妙笔”是怎样炼成的?

百度大脑

SENSORO基于TDengine助力基层政府打造数字化应用标杆

TDengine

数据库 tdengine 开源 物联网

Apsara Stack 技术百科 | 可运营的行业云,让云上资源跑起来

阿里云 科技 混合云

Java培训:封装的含义及实现方式

@零度

JAVA开发 封装

虎符交易所Hoo研究院:Open Sea上大火的NFT项目—Azuki

区块链前沿News

NFT Hoo 虎符交易所 Azuki

IAST 最佳实践 | 利用洞态做开源组件的安全治理

火线安全

做好云管理一定要云管平台吗?云管理平台应具备什么功能?

行云管家

云服务 云管平台 云资源 云管理

这个Dubbo注册中心扩展,有点意思

捉虫大师

dubbo 注册中心

前端培训:3 个可能有用JavaScript 类

@零度

JavaScript 前端开发

移动办公时代,政企为何首选私有化的即时通讯平台?

BeeWorks

通过结对编程提升开发速度、专注度和心流状态_研发效能_Ben Linders_InfoQ精选文章