阅读更多

11顶
0踩

编程语言

原创新闻 什么时候该采用结对编程?

2011-02-21 16:27 by 见习编辑 jobbole 评论(23) 有14512人浏览

  编者按:原文作者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  编译:伯乐在线 敏捷翻译组 - 高志翔

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

  • 大小: 22.3 KB
  • 大小: 24.6 KB
  • 大小: 3.8 KB
来自: www.jobbole.com
11
0
评论 共 23 条 请登录后发表评论
23 楼 zhangguobin 2011-02-24 13:27
hilly 写道
pouyang 写道
gwisoft 写道



hilly 写道
pouyang 写道
gwisoft 写道





22 楼 wezly 2011-02-23 16:06
都是那张配图惹的祸……
21 楼 qrg 2011-02-23 15:46
评论渐渐三俗了...
20 楼 zhouyuming 2011-02-23 13:52
mainlove 写道
neverforget 写道
qiukm321 写道
结对编程之前好做好相当的准备才行。

按排一个技术很不错的搭一个刚入门的,还不如叫单独培训。



如果是一刚入门的MM 故计阁下就不会有异议了


那要看那MM的质量了。。。。。。。。。。。

禽兽啊
19 楼 Frankie199 2011-02-23 11:33
俗话说的好,“男女搭配,工作不累”。如果是两个Man...
18 楼 mainlove 2011-02-23 08:46
neverforget 写道
qiukm321 写道
结对编程之前好做好相当的准备才行。

按排一个技术很不错的搭一个刚入门的,还不如叫单独培训。



如果是一刚入门的MM 故计阁下就不会有异议了


那要看那MM的质量了。。。。。。。。。。。
17 楼 lgzjw 2011-02-22 22:26
结对更是从资源的合理分配以及团队合理能力提升的方便来做的。要从大的方面来看
16 楼 elmar 2011-02-22 20:18
never
15 楼 neverforget 2011-02-22 20:15
qiukm321 写道
结对编程之前好做好相当的准备才行。

按排一个技术很不错的搭一个刚入门的,还不如叫单独培训。



如果是一刚入门的MM 故计阁下就不会有异议了
14 楼 Leon.Wood 2011-02-22 17:13
话说我们结对了一个月,开了晨会一个月,就在马上要搞taskwall的时候被叫停.
TM恶心影响效率了
13 楼 qiukm321 2011-02-22 14:23
结对编程之前好做好相当的准备才行。

按排一个技术很不错的搭一个刚入门的,还不如叫单独培训。
12 楼 java_xiaoyi 2011-02-22 13:37
ahopedog2 写道
异性结对绝对可以解决我国的大龄青年婚姻问题,

现在搞编程的女的少之又少,能够看的过去更是少的可怜啊!
11 楼 ahopedog2 2011-02-22 13:15
异性结对绝对可以解决我国的大龄青年婚姻问题,
10 楼 lqixv 2011-02-22 10:17
找一个好的结对编程的伙伴,并不比找到一个好的终身伴侣难度少多少。
9 楼 wenshao 2011-02-22 10:01
如果项目中有漂亮小姑娘,结对还是不错的。如果都是大老爷,那还提倡结对,那应该叫断背更合适一些。
8 楼 yzhw 2011-02-22 09:50
这个可以有
7 楼 xltank 2011-02-22 09:12
不谈钱行不行 写道
图片表达的很明显了,身边有美女的时候应该采用结对编程

图片的意思是: 如果你是个男性老外,就可以找个中国女性; 可是八成你是个男性中国人,所以你应该找个越南女性去结对。。。
6 楼 lijunlong 2011-02-22 09:03
5 楼 lkj107 2011-02-22 07:21
不谈钱行不行 写道
图片表达的很明显了,身边有美女的时候应该采用结对编程

4 楼 不谈钱行不行 2011-02-21 22:48
图片表达的很明显了,身边有美女的时候应该采用结对编程

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 使用java代码自动生成触发器

    使用java代码自动生成数据库触发器,需要更改表明即可。

  • mysql触发器的用法与案例(数据库与java)

    1、对于insert语句, 只有new是合法的; 对于delete语句,只有old才合法; 对于update语句,new、old可以同时使用。 2、before触发器的执行效率比after触发器高,在before触发器和after触发器都能被使用的情况下,应该优先选择before触发器。 3、补充:在mysql中写触发器时,最好使用delimiter(分隔符),具体的delimiter可自定义,这种写法是为了方便区分语句分隔符号“;”与触发器分隔符。 4、current_user(...

  • 用MSSQL触发器,跨服务器同步表数据

    用MSSQL触发器,跨服务器同步表数据

  • SQL Server(2008)中通过触发器进行数据同步的设置说明

    今天做了这个的测试,记录下来。希望对有需要的朋友有点帮助。

  • 关于java触发器的经验分享

    触发器是我们在日常中经常使用,但近来却发现了这样一个问题:触发定制时间小于程序执行时间的问题,网络上有很多相关答案,可是我执行以后结果却大相径庭,于是做一番跟踪探索,今天和大家分享一下! 工具/原料 Eclipse win7 quartz框架 方法/步骤 1 今天遇到一个问

  • 一个对远程数据库写入数据记录的触发器实例

    事件描述:  一大型煤炭企业,下属十多个矿,有一瓦斯数据上传系统和一个短信平台系统,两个系统用的都是SQL SERVER数据库,但是布署在不同的服务器上。现在想要实现如果瓦斯数据上传中断则自动给指定的手机发送短信,短信要写明矿名及中断时间和中断情况。  瓦斯数据上传系统中有一张表“实时通讯汇总显示”,为各矿通讯状态实时显示,结构如下:字段名字段类型说明矿名Char(20) 状态Int(4)正常状态...

  • sql server作业实现数据同步

    下载网站:www.SyncNavigator.CN   客服QQ1793040 ----------------------------------------------------------     关于HKROnline SyncNavigator 注册机价格的问题 HKROnline SyncNavigator 8.4.1 企业版数据同步软件 自2009年第一个版本开发...

  • Quartz简单触发器和cron触发器实例

    首先 Quartz 是一个开源的任务调度框架。为在Java应用程序中进行复杂作业调度或定时任务等提供了简单却强大的机制。 Quzrtz允许开发人员在不同的时间间隔(年、月、日、周、时等)定义触发器,到了特定的时间,触发相应的Job进行作业。 Quzrtz基本结构: 任务调度器Scheduler: scheduler是quartz的核心,管理job,trigger等。Trigger和JobD...

  • 两个数据库表数据实时同步(sql2008 触发器)

    /****** Object:  Trigger [dbo].[TR_C0T14]    Script Date: 11/01/2011 13:21:04 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Aut

  • 触发器实现跨库同步

    有两个服务器,分别装有两个SQL Server A ,B A,B的表结构a,b 相同 A,B分别都会做一些INSERT,UPDATE,DELETE操作,要求AB的数据保持一致 (即A新增一条数据,要求B也新增,A更改一条数据,B也更改相应的) 是不是可以用触发器来实现 那位高手给个例程 /* 作者:邹建 */ /*--同步两个数据库的示例 有数据 srv1.库名..author有字段:id,n...

  • 一个触发器的例子

    create or replace trigger "USREMHR".trg_sq_rule_insert  before insert on sq_rule_base  for each rowdeclare  temp_rule_id varchar2(10);  temp_rul_theme_id varchar2(10);begin  begin       temp_rule_id :

  • Java for Web学习笔记(一三五)映射(11)代码触发器

    说明 数据库是有触发器Trigger。但我们希望业务逻辑能从底层的具体数据存储抽象出来(有需要时可以更好存储机制),也就是要在应用中编写trigger,而不是依赖底层数据库来实现。 Entity内部触发器 我们随便挑选以前的某个entity,在里面加入触发器。 @Entity public class Person { ... ... // 【触发器说明】 //1...

  • Oracle触发器 当插入或者更新数据时,将数据同步更新到另外一个用户的一个表中

    1、当前oracle数据库有两个表,scott用户是系统自带的用户,里面有一个dept表,作为测试使用。同时新建一个test用户,里面也新建一个表dept。当向scott用户的dept表进行插入或者更新时,将数据也同时更新到test用户的dept表中。 2、触发器创建步骤: (1)、使用PL/SQL DEVELPTOR 登录sys或者system用户,将test用户下dept表的插入/更新/选择权限赋给scott用户: grant insert on test.dept to scott; gran

  • 触发器实现同步两个数据库

    有两个服务器,分别装有两个SQL Server A ,B  A,B的表结构a,b 相同  A,B分别都会做一些INSERT,UPDATE,DELETE操作,要求AB的数据保持一致  (即A新增一条数据,要求B也新增,A更改一条数据,B也更改相应的)  触发器来实现  /*--同步两个数据库的示例  有数据  srv1.库

  • MySQL创建触发器实现统一主机下两个数据库的表同步

    首先建立要用于测试 数据库 与 表 create database a; create database b; use a create table table1(id int, val int); use b create table table2(id int, val int); 建触发器 use a DELIMITER // CREATE TRIGGER tr_Insert_t1

  • java触发器实例_触发器运用示例---laobai

    1 触发器概念:trigger。逻辑对象的一种。当dml的增删改语句执行时,自动触发一系列动作。分类:dml触发器。ddl触发器(很少见)sql:ddl,dml,dcl按触发的时间分:语句执行前-->[行变化之前-->行变化之后]-->语句执行后update emp set sal=sal*2; //一共有5条记录。按触发的语句分:insert触发,update触发,delet...

  • MySQL —— 14、触发器

    目录 1、触发器概述 2、触发器的创建 2.1、创建触发器的语法 3、查看、删除触发器 3.1、查看触发器 3.2、删除触发器 4、触发器的优缺点 4.1、优点 4.2、缺点 4.3、注意点 5、练习 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如商品信息和库存信息分别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时在库存表中添加一条库存记录。 这样一来,我们就必须把这两个关联的操作步骤写到程序里面,而且要用事

Global site tag (gtag.js) - Google Analytics