阅读更多

11顶
0踩

编程语言

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

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

  编者按:原文作者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
图片表达的很明显了,身边有美女的时候应该采用结对编程

发表评论

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

相关推荐

  • 表同步更新的问题的触发器(SQLSERVER)

    表同步更新的问题的触发器(SQLSERVER) 2006-10-27 17:17:56  作者:佚名  来源:本站收集  浏览次数:99  网友评论0条  评分等级:0来源:服务中国(http://www.chinaser.net/)作者:Smallfish原文:表同步更新的问题的触发器(SQLSERVER)(http://data.chinaser.net/2006/1027/1

  • 用触发器实现数据简单同步

     表t1和t1_temp有同样的结构和数据:create table t1 as select * from emp where 1=0;create table t1_temp as select * from emp where 1=0;alter table t1 add constraint pk_empno1 primary key (empno);alter t

  • SQL触发器实例讲解1

    SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Update , Delete 事件。 我为什么要使用触发器?比如,这么两个表: Create Table S...

  • SQLSERVER 2000 触发器实现表的实时同步解决方案

    测试成功: 适用环境操作系统:windows 2003数据库:sql server 2000/sql server 2000 一、  问题现象在sql server 2000下收到如下错误:该操作未能执行,因为 OLE DB 提供程序 SQLOLEDB 无法启动分布式事务。[OLE/DB provider returned message: 新事务不能登

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

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

  • 通过触发器实现数据库的即时同步

    ---即时同步两个表的实例: --测试环境:SQL2000,远程主机名:xz,用户名:sa,密码:无,数据库名:test--创建测试表,不能用标识列做主键,因为不能进行正常更新--在本机上创建测试表,远程主机上也要做同样的建表操作,只是不写触发器if exists (select * from dbo.sysobjects where id = object_id(N'[test]') and O...

  • 触发器实现跨库同步

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

  • 如何通过触发器实现数据库的即时同步

    测试环境如下:SQL Sever 2000数据库,远程主机名:xz,用户名:sa,密码:无,数据库名:test 创建测试表,请注意不能用标识列做主键,因为不能进行正常的更新。 然后在本机上创建测试表,注意远程主机上也要做同样的建表操作,只是不写触发器。 if exists (select * from dbo.sysobjects where id = object_id(N[tes

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

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

  • 数据库通过触发器获取数据库内容更新来同步数据

    数据同步方式很多 1,可以在数据库中加同步标识, 2,可以通过数据库触发器来记录更新的数据, 3,可以通过最后更新的时间戳来进行同步 下面采用新建一个触发器来触发更新,将更新的数据放入中间表。 TRIGGER "GCG."USER_UPDATE_TRIGGER" BEFORE INSERT OR UPDATE OF "ORGANIZATION_ID","ORGANIZATIO...

  • 触发器 实现两台服务器的数据同步

    本文出自http://www.cnblogs.com/zdkai/archive/2012/07/17/2595327.html   第一,先配置两台电脑,具体的步骤请参见http://support.microsoft.com/kb/839279/en-us        第二,创建连接服务器,代码如下:    exec   sp_addlinkedserver  'srv2'...

  • 19、数据库实时推送(更新触发事件)

    新建一个名字为ApplyJiQiMa的数据库 往数据库中先增加四条数据,其中 ApplyDate:当前的时间戳,后面用于监听时的排序 JiQiMaS:四条数据的最后一位数分别是1,2,3,4 constdb=wx.cloud.database() constdbApplyJiQiMaCollection=db.collection('ApplyJiQiMa') dbApplyJiQiMaCollection.add({ data:{ ApplyDate:...

  • 用触发器解决不同服务器数据库同步

    有数据 srv1.库名..author有字段:id,name,phone, srv2.库名..author有字段:id,name,telphone,adress 要求: srv1.库名..author增加记录则srv1.库名..aut...

  • sql server分布式事务解决方案

    适用环境 操作系统:windows 2003 数据库:sql server 2000/sql server 2005 使用链接服务器进行远程数据库访问的情况 一、  问题现象 在执行分布式事务时,在sql server 2005下收到如下错误: 消息 7391,级别 16,状态 2,过程 xxxxx,第 16 行 无法执行该操作,因为链接服务器 "xxxxx" 的 OLE DB 访问...

  • Sqlserver使用触发器同步两个服务器上的相同数据库表中的信息

    我有两个服务器,两个服务器上有相同的数据库,相同的表结构。想在一个服务器上操作数据库以后,对数据库的操作同步到另外一个服务器的数据库上,不知道使用数据库的触发器怎么设置,请教牛人 一、镜像可以保证数据库同步,但同一时间只有一台服务器能被访问。 http://technet.microsoft.com/zh-cn/library/ms190941.aspx http://www.cnblogs...

  • mysql数据库触发器同步数据

    ENGINE=InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '表描述' ROW_FORMAT = Compact ENGINE=FEDERATED CONNECTION = 'mysql://user:password@ip:port/databaseName/tableName';source_table数据源表user库,target_table目标表user-test库。二、不同服务器不同库触发器同步,新增。

Global site tag (gtag.js) - Google Analytics