阅读更多

11顶
0踩

编程语言

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

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

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

发表评论

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

相关推荐

  • 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库。二、不同服务器不同库触发器同步,新增。

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

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

  • 表同步更新的问题的触发器(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

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

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

  • 如何在Excel中访问WinCC变量归档数据

    第二步,在控件工具箱中选择“其它控件”,然后选择“Microsoft Date and Time Picker Control 6.0”,把控件放到合适的位置并拖拽到合适大小。WinCC变量归档数据是以压缩的形式存储在数据库中,需要通过 WinCC/Connectivity Pack提供的OLE-DB接口才能够解压并读取这些数据。WinCC激活后将作为一个标准的OPC服务器,可以在Excel中编写OPC 客户端脚本读取变量“@DatasourceNameRT”的值。

  • SQL Server多实例之间触发器同步数据

    .

  • wincc用c语言弹出确认窗口,wincc常用C动作

    1.用户注销:#pragma code ("useadmin.dll")#include "PWRT_api.h"#pragma code()PWRTLogout();2.用户登录:#pragma code ("useadmin.dll")#include "PWRT_api.h"#pragma code()PWRTLogin('c');3.关闭项目并退出wincc:ExitWinCC ();4....

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

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

  • 对远程的DB进行操作。

    2000与2005对比:在SQL Server 2000版本中也有链接远程DB的SQL,但是功能比较弱,扩展性差,支持的查询比较简单。而SQL Server 2005版本的SSMS中已经有了 服务器对象->链接服务器 的功能点,用户首先创建一个远程DB的链接对象,之后就可以像本地表一样执行表的DML了。 创建步骤:在SQL Server 2005版本打开SSMS,服务器对象->链接服务器->右

  • mysql去采用触发器来实现数据自动同步到memcached

    编译安装 首先确定你安装的mysql是5.1以上的版本,同时需要安装 mysql-devel安装memcached 首先得安装libevent,这个就不介绍了。 首先下载memcached-1.4.5-2.el5.remi.x86_64.rpm和memcached-devel-1.4.5-2.el5.remi.x86_64.rpm(这个安装libmemcached要用到) 安装执行 ...

  • java数据同步解决方案_[java实时同步数据库]一种通用的数据库同步系统与实现技术方案...

    本发明专利技术是一种通用的数据库复制框架技术。该技术分为三个模块,捕捉模块用于捕捉抓取数据库的数据变化;数据过滤模块对从捕捉模块获取到的数据进行过滤、分拣、汇总;数据同步模块,将数据过滤模块产生的数据发送的目标端数据库。Theinventionisageneraldatabasereplicationframeworktechnology.Thistechnologyisdividedintoth...

  • SqlServer触发器 应用案例Demo(数据同步场景)

    创建两张表 1 user   2 usercopy 两张表结构相同 ,如下图所示: 一: --创建触发器userinsert1,当user表执行插入操作时,向usercopy表插入同样的数据 IF (  object_id('userinsert1', 'tr') IS NOT NULL ) DROP TRIGGER userinsert1 ;go CREATE TR

  • 系统间通讯实现数据信息实时同步解决方案

            项目开发阶段遇到一个需求,描述大致就是同一个用户在A系统数据库保存的数据信息与在B系统数据库保存的数据信息要保持同步。当A系统用户修改了个人信息,A系统后台在将用户修改后的信息入库的同时也会向B系统发送消息,让B系统后台进行自动数据信息同步。        这个可以根据各企业各自的系统间通讯方式来灵活处理。这里我介绍我运用的处理方式,作为经验总结记录和分享。        深谙sp...

  • 触发器在增量同步数据的运用.

    触发器可以记录对表的添加,修改,删除,这样可以通过触发器,记录一段时间内的表的变动的记录,把这些记录存到一个变动记录表里,数据同步的时候,就可以读取这张变成的记录表,只需要同步变动过的记录,这样可以大大提高同步的速度.对原表删除的操作,可以能新表做DELETE操作对原表进行Insert 或Update操作,可以执行新建或更新操作.下面是一个触发器(SQL SERVER 2000)的例子:  1i...

  • SQL Server 如何创建触发器实现一张表数据更新时,同步增加、删除、修改另一张表的数据

    一、触发器知识点摘要: 实际应用中,我们经常会遇到在对SQLServer的某一张表进行增加、删除、修改操作时,需同步更新同一数据库或不同数据库的另一张表,此时我们可以使用SQLServer的表触发器来实现。 使用触发器时,我们会用到触发器的两个临时虚拟表:Deleted表、Inserted表,它们用于存储【创建触发器表】的记录变动信息,即发生触发事件时对应的【一条旧记录】和【一条新记录】,各触发事件对应表数据如下: 表触发事件 虚拟表Inserted 虚拟表Deleted ...

Global site tag (gtag.js) - Google Analytics