什么时候该采用结对编程?

2023-10-30

本文转载至:http://www.iteye.com/news/20082

  编者按:原文作者Andriy Solovey从事软件开发已有15年,做过开发人员、软件经理和系统架构师。关注构建优质、可靠和可用的软件。




  结对编程是构建软件系统的一种有效方法。采用结对编程,带来的显著效益:

  • 更好的想法——持续不断的头脑风暴、更大的知识库、在理解上有更少的差异、有更多的脑力解决设计问题;
  • 更好的质量——更少的漏洞、想法的即时认证、始终如一的方法并更加遵守团队会议中的要求;
  • 更全面的认识——经验共享与知识共享、对于为什么做、怎么做和做什么有更深入的理解;
  • 更高的生产率——更好地集中精力及更高的工作强度、彼此促进并激励来达到最好的结果、更少的拖延和时间浪费;
  • 更多乐趣——大多数人喜欢分小组工作并且共同解决有趣的问题。


  极限编程的领导者坚持主张所有重大的进展都应成对进行。但是我们能说在所有情况下结对编程都是最好的方法吗?



 


  程序员可以找到一些看似可行的方法来替代结对编程,这些方法不需要两个人始终都在一起工作:

  • 想法——频繁的团队头脑风暴与短期结对(或团队)编程会议相结合,来解决最复杂的任务;
  • 质量——测试人员与开发人员共事,一起编写自动化测试;
  • 认知——频繁的讨论、代码复查、培训会议;
  • 生产率——清晰的目的与务实的工作方法可以让你更集中精力、使方法更清晰并能带来更高的效率;
  • 乐趣——密切合作与相互支持


  什么时候结对编程是最有效的方法?

  最主要的因素是技术与挑战相匹配。在独自编程中,如果技能和挑战能互相匹配,最高产的模式就是流模式(Flow)。结对编程添加了一个更有效的模式——指导模式(Coaching),它能够提高全队当前与未来任务的生产率。


  成功的模式

  1.流模式(Flow)——两个程序员共同从事一个有趣又有挑战性的问题。他们会有不同的技术、遇到不同的挑战,但是它们都善于找到好的解决方法。例 如,其中一个人可能是javascript专家,另一个人可能是强大的后台程序员。他们能够结合彼此的脑力、知识及经验来共同处理复杂的AJAX任务, 从而创造出最好的解决方案。

  2.指导模式(Coaching)——老练的程序员在解决问题方面有经验和知识,可以与其他不能有效地独自解决问题的程序员分享。后来加入的程序员有足够的理论基础来理解这些解决方法和程序的实现。他会在学习中慢慢进步,成为更优秀的程序员。

  失败的模式

  3.浪费专家时间(Wasting expert time)——问题太简单,以致专家的经验无指导意义。

  4.不知所措的新手(Overwhelmed novice)——问题太过复杂或者需要太多新知识,使程序员学不到任何有用的东西。

  有疑问的模式

  5.两个专家共事一个易管理的任务——若两个程序员都了解如何实现任务并且之前都成功地解决过相似的问题,那么结对编程就没有太多的用处了。

  6.一个程序员处于流模式(Flow),另一个在一旁学习(Learning)——若另一个程序员时不时地打断他,并要求对一些基本的但与挑战性问题没有直接关系的事情做出解释,那么他很难专注于解决挑战性的问题。

  7.一个程序员处于流模式,另一个专注于指导(Coaching)——如果想让这种模式获得成功,指导者应该思想开放,避免指导过多,同时也可以给另一个程序员想出自己的(甚至是更好的)解决方法的机会。


  此外,心理问题可能会导致结对编程的失败:

  • 专家的威胁——遭到其他技术更高的程序员更具“威胁”的程序员,会担心自己被视为无能;
  • 需要时间考虑——结对编程之前,程序员需要更多时间去考虑,但他往往在仔细考虑自己的想法之前就被强迫开始结对编程了;
  • 宁可独自工作——内向的程序员喜欢独自工作(不合群的人);
  • 人员关系不融洽——程序员互相讨厌对方。


  我们能使结对编程一直有效吗?

  当然!把任务、技术和合作匹配起来。在两个生产方式中找到成对的——流(Flow)或者指导(Coaching)。若成对的程序员能够用他们自己的及从对方身上学到的技术来共同解决有趣的问题,那么这个团队将会是最高产的。

  然而,结对编程应该是自由选择或及首选方法,但它不应是强制性的实践。就像你在这篇文章中所看到的,当结对编程不太有效的时候会产生一些模式和出现一些心理状况。

  简而言之,结对编程应该是软件小组工具库中最有用的工具之一。要弄清楚什么时候及如何使用它。

  结束语

  你已经结对编程了么?如果你已经结了,欢迎在评论中和大家分享你的相关观点、经验和心得。


  译文出处:伯乐在线 - 职场博客
  译文链接:http://www.jobbole.com/entry.php/489

  原文作者:Andriy Solovey  编译:伯乐在线 敏捷翻译组 - 高志翔

  如需转载,但请注明原文/译文出处、译文超链接和译者等信息,否则视为侵权,谢谢合作!


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么时候该采用结对编程? 的相关文章

  • 正确的认识乱码与编码

    文章目录 编码的本质 乱码的几个例子及思考解决方案 浏览器输入到后端乱码 后端返回浏览器乱码 java 枚举类乱码 数据库存储乱码 Linux系统显示乱码 总结 编码的本质 编码将内存字节作用于磁盘文件或者网络文件的过程 是将磁盘文件 网络
  • [管理与领导-68]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 评估你与老板的八字(向上管理之二)

    目录 前言 一 定位你与上司的关系 二 向上管理的三种误区 三 向上管理的关键点 四 向上管理的关键 预期管理 4 1 预期管理概述 4 2 如何控制上司的预期范围 4 3 如何了解你自己的预期 五 向上管理的关键 预期管理 六 什么样的上
  • 目前支持CUDA的nVIDIA的显卡型号 驱动及其 修改过后的 inf文件

    下载169 21 forceware winxp 32bit english whql exe NVIDIA Driver for Microsoft Windows XP with CUDA Support 169 21 我们在运行它的时
  • 17、系统设计篇-技术选型

    技术选型 就是在两个或多个技术方案中选择适合当前项目情况的方案 技术选型不仅是个技术的选择 也是一个和项目情况密切相关的项目决策 技术选型 本质上是项目决策的一种 要做好技术选型 就是要做好项目决策 一 项目决策需考虑的角度 1 时间 范围
  • 软件工程第五章习题

    软件工程第五章习题 1 为每种类型的模块耦合举一个具体例子 2 为每种类型的模块内聚举一个具体例子 1 为每种类型的模块耦合举一个具体例子 只需要答出什么模块和例子即可 一共5个 数控特环内 数据耦合 两个模块之间通过参数交换信息 信息仅为
  • 个人安装与配置VMware 虚拟机过程中发现的注意事项

    1 官网下载VMware安装包 本人版本应该是16 0 0 官网地址 下载 VMware Workstation Pro CN 2 安装过程参考网上搜索到的教程VMware16的安装及VMware配置Linux虚拟机 详解版 何故的博客 C
  • 系统架构设计师-数据库系统(1)

    目录 一 数据库模式 1 集中式数据库 2 分布式数据库 二 数据库设计过程 1 E R模型 2 概念结构设计 3 逻辑结构设计 三 关系代数 1 并交差 2 投影和选择 3 笛卡尔积 4 自然连接 一 数据库模式 1 集中式数据库 三级模
  • 【论文阅读-ICSE-2021】CodeShovel: 构造方法级别上的源代码历史信息 Constructing Method-Level Source Code Histories

    CodeShovel Constructing Method Level Source Code Histories Conference ICSE 2021 Github https github com ataraxie codesho
  • 一个不错的关于CPU和GPU(CUDA)的性能比较讨论话题

    http topic csdn net u 20081027 23 67ff3857 3c71 4d5c acf6 095f3497c7a9 html这里是今天的一个论坛的一个帖子 大家可以讨论一下 1 那些程序适合用cpu来做 那些适合用
  • 软件设计(十四)-UML建模(上)

    软件设计 十三 原码 反码 补码 移码https blog csdn net ke1ying article details 129115844 spm 1001 2014 3001 5501 UML建模包含 用例图 类图与对象图 顺序图
  • JAVAWEB编程题

    1 登陆验证代码
  • CMake 教程:常用命令及其使用方法

    CMake是一个跨平台 开源的构建工具 它可以自动生成Makefile或者Visual Studio等IDE的工程文件 它能够帮助开发者更方便地管理项目的构建过程 提高项目构建的效率 在本文中 我们将介绍CMake常用的命令以及对应的用法
  • MES系统工单进度查询:提升生产控制与监控

    在MES系统中 工单进度查询是一个至关重要的功能 它为企业提供了实时 准确地追踪和监控生产工单进度的能力 一 MES系统工单进度查询的重要性 1 实时监控生产进度 通过工单进度查询 企业能够随时了解每个工单的进展情况 包括已完成的工序 正在
  • thinkphp+vue教学互动课程资源网站

    软件工程课程建设通篇文章的撰写基础是实际的应用需要 然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程 以软件工程课程建设的实际应用需要出发 架构系统来改善现软件工程课程建设工作流程繁琐等问题 不仅如此以操作者的角度来
  • git 的碎步浪荡,添加仓库子项目,迁移仓库

    1 git仓库迁移 将他人的代码仓库 xxxx 移为自己的 yyyy 仓库 先创建自己的yyyy空仓库 假设url为 yyyy git 将 xxxx 的全部数据 包括分支和 tag 都 download 到本地 git clone recu
  • ICT行业“样品”相关业务挑战及解决方案介绍

    ICT行业供应链样品相关业务介绍 在信息通信技术 ICT 行业中 研发打样 结构件打样和非0价打样是研发和产品设计过程中的重要环节 下面我会通过具体的业务场景来解释这些概念 1 研发打样 场景例子 一家手机制造公司正在开发一款新型智能手机
  • 【软件测试】学习笔记-高效提交Bug

    本篇文章介绍如何才能写出一份高效的软件缺陷报告 测试工程师需要利用对需求的理解 高效的执行力以及严密的逻辑推理能力 迅速找出软件中的潜在缺陷 并以缺陷报告的形式递交给开发团队 缺陷报告是测试工程师与开发工程师交流沟通的重要桥梁 也是测试工程
  • C 语言文件读取全指南:打开、读取、逐行输出

    C 语言中的文件读取 要从文件读取 可以使用 r 模式 FILE fptr 以读取模式打开文件 fptr fopen filename txt r 这将使 filename txt 打开以进行读取 在 C 中读取文件需要一点工作 坚持住 我
  • Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose

    Docker CLI 命令行界面 是一个强大的工具 可让您与 Docker 容器 映像 卷和网络进行交互和管理 它为用户提供了广泛的命令 用于在其开发和生产工作流中创建 运行和管理 Docker 容器和其他 Docker 资源 安装 要开始
  • 《Spring 测试指南》:JPA、MockMvc 和 @SpringBootTest 详解

    测试 Spring 提供了一组测试工具 可以轻松地测试 Spring 应用程序的各个组件 包括控制器 服务 存储库和其他组件 它具有丰富的测试注释 实用程序类和其他功能 以帮助进行单元测试 集成测试等 JPA 测试 Spring JPA J

随机推荐

  • StringBuilder的用法

    1 使用append 追加字符串 String str Hello StringBuilder builder new StringBuilder str System out println builder append World He
  • JDBC原理实现详解

    看目录 JDBC 一 JDBC是什么 二 JDBC的本质是什么 三 JDBC的意义 四 JDBC编程六步 五 JDBC注册驱动常用方式 六 从属性资源文件中读取连接数据库资源 七 处理查询结果集 八 使用IDEA开发JDBC代码配置驱动 九
  • 得知大熊哥最后一天在岗位工作今天离开有感而发

    肩负重任守城郭 熊哥超神一把梭 腾空而起扶摇上 笑看坎坷岁月多 转载于 https www cnblogs com lizhaoyao p 9155385 html
  • 列表切割,并分配给多个线程(有多少线程切割多少个列表)

    在设置多线程的时候 要先将原本待传入的参数列表进行一个平均的切割 从而达到平均分配给各个线程任务的效果 切割方法如下 def split list list thread num list total num thread num 线程数量
  • 第二章 SpringBoot2.X开发规范

    1 SpringBoot2 x 录 件结构讲解和静态资源访问 录讲解 src main java 存放代码 src main resources static 存放静态 件 如 css js image 访问 式 http localhos
  • 第十七课:集合框架(一)

    第十七课 集合框架 一 变量 可以变化的量 它是单一数据在内存中的一个表示 数组 引用数据类型 是在堆内存中存储一组相同数据类型的数据 长度不变 数据类型单一 类和对象 实体 可以用来存储一个实体的信息 public class Dog 属
  • 基于Python搭建Django后台管理系统

    一个好的项目数据库管理后台是必须的 今天教大家搭建Django网站后台 好了 开始进入正题 今天以搭建一个个人博客网站作为例子讲解网站后台的搭建 一 博客网站的创建 创建项目 生成站点 sites Model 这两步骤第一篇有介绍 这里就直
  • Windows 无法验证此设备所需的驱动程序的数字签名。某软件或硬件最近有所更改,可能安装了签名错误或损毁的文件,或者安装的文件可能是来路不明的恶意软件。(代码52)...

    由未签名驱动导致的键鼠装无法使用的问题 usb 问题失效 要是win 10的话 导致的结果就是 无线键鼠套装无法使用 解决办法是 1 按下shift 按键 点击重启按钮 重启后 2 疑难解答 gt 启动 gt f7 禁用未签名强制验证 3
  • vue引入sass并且配置全局变量

    第一步 安装 sass loader 因为在我本地安装最新的sass loader时会报错 this getResolve is not a function 查阅资料发现是sass loader版本过高导致的 所以我这里安装了7 3 1版
  • 云服务器 选择什么系统,云服务器一般选择什么系统好

    云服务器一般选择什么系统好 内容精选 换一换 整机镜像是包含云服务器操作系统 应用软件和业务数据的镜像 一般适用于云服务器数据整体搬迁 例如 将云服务器共享给其他租户将 华北 北京一 的云服务器迁移至 华南 广州 区域将老旧云服务器上的数据
  • Windows搭建kms服务器

    文章目录 使用Windows系统搭建kms服务器 前言 准备 正式开始 使用Windows系统搭建kms服务器 前言 网上有许多搭建的教程 但是使用的都是Linux系统 而我们正常使用的则是Windows系统 对Linux不熟悉的同学看着那
  • springboot整合Knife4j--token头验证

    Knife4j介绍 Knife4j其实就是增强版本的swagger 过多的介绍我就不说了 一搜一大把 直接开始吧哈哈 SpringBoot 整合Knife4j 1 引入pom依赖
  • PyTorch-10 自定义数据集实战(Load data自定义数据集、Build model创建一个模型、Train and Test、Transfer Learning迁移学习)

    PyTorch 10 自定义数据集实战 Load data自定义数据集 Build model创建一个模型 Train and Test Transfer Learning迁移学习 我们以Pokemon Dataset作为自定义数据集 数据
  • 注解和反射总结

    文章目录 一 注解 二 反射 1 静态语言 动态语言 2 Reflection 反射 3 Class类的常用方法 4 Class类的创建方式 5 所有类型的Class对象 6 类加载内存分析 1 什么时候会发生类的初始化 类的主动引用 类的
  • C ++ 多线程:条件变量、unique_lock

    目录 1 前言 2 条件变量 3 unique lock 1 前言 为了更好的理解条件变量是什么 我们还是应当先思考一下为什么需要条件变量 还是先以一段程序为例 using namespace std class MsgList 模拟消息的
  • webpack 属性配置

    const path require path module exports function entry 入口 也可以是多入口 main src main js output filename build js 指定js文件 path p
  • Android 10 静默安装与卸载(含源码)

    复制上面代码可以直接使用 package com taide launcher util import android app PendingIntent import android content Context import andr
  • 7.16 多益网络笔试

    在战盟客户端上进行的笔试 1 链表不具有的特点是 A 可随机访问任意元素 B 不必事先估计存储空间 C 插入数据元素时不需移动数据元素 D 删除数据元素时不需移动数据元素 A为顺序表的特点 2 栈的特点 后进先出 3 线性数据结构有哪些 线
  • 区块链-默克尔树(Merkle Tree)

    Merkle Tree 也被成为 Hash Tree 见名思意 这种树其实就是用来存储 hash 值的一种树 关于hash我们在之前的文章已经说过了 对于一个输入 都有一个唯一的长度的固定的输出 且以我们目前的科技状况 无法找到两个不同的输
  • 什么时候该采用结对编程?

    本文转载至 http www iteye com news 20082 编者按 原文作者Andriy Solovey从事软件开发已有15年 做过开发人员 软件经理和系统架构师 关注构建优质 可靠和可用的软件 结对编程是构建软件系统的一种有效