自打XP提出pair programming来,在学术界也不乏讨论。 今天就让我们来研读两篇pair programming的学术论文。
[1]The Costs and Benefits of Pair Programming
发表于 2000年
Proceedings of the First International Conference
on Extreme Programming and Flexible Processes in Software
Engineering, 出自
agile的先驱者(个人认为是鼓吹者) alistair cockburn的笔下 该文得出7点pair programming的好处是
- many mistakes get caught as they are being typed in rather than in QA test or in the field (continuous code reviews);
- the end defect content is statistically lower (continuous code reviews);
- the designs are better and code length shorter (ongoing brainstorming and pair relaying);
- the team solves problems faster (pair relaying);
- the people learn significantly more, about the system and about software development (lineof-
sight learning);
- the project ends up with multiple people understanding each piece of the system;
the people learn to work together and talk more often together, giving better information
flow and team dynamics;
- people enjoy their work more.
同时对于时间的cost是 15% more 而不是预期的100% more. 但这15% 会在以后的QA和后期维护中抵销掉。
我比较在同1,5 ; 怀疑2,3, 4; 对6持保留态度,彻底反对7。
2,3 是要depend on 人的智商和经验的。4. 如果两个新手pair,或是一高一低,显然速度没有高手快。6,虽然正确,但是我持保留态度,一方面原因是job security,毕竟我们都是打工的,如果把developer都当作hot swapable的component,个人觉得太残酷了,一个process不能体现人性化的一面 (你随时可以走人哦,我们这回这东西的又不只你一个)的practice是不能让people enjoy的。当然信任都是相对的, 如果一个资本家认为layoff的成本是0, 你说他会怎么做。 另一方面为了lay off cost是0 去做到multiple people understanding each piece of the system本身就是一个high cost的事情。
[2]
Are Reviews an Alternative to Pair Programming
发表于 2004年的 Empirical Software Engineering 该文得出的结论是
- A pair of developers does not produce more reliable code than a single developer whose code was reviewed.
- Although pairs of developers tend to cost more than single developers equipped with reviews, the increased cost is too small to be seen in practice
我的几个挺 XP 的朋友看了该文, 觉得是胡扯,但是它们本身是没有try过 code review的。 不过这个结论似乎也算是皆大欢喜型的。 pair == solo+review。 我个人的经验就是pair有时候缺乏review, 有时候findbug, PMD这些工具对programming的帮助比pair的更大
[3]Effects of pair programming at the development team level: an experiment
发表于 2004年的 Empirical Software Engineering该文 研究了 productivity, defects, design quality, knowledge transfer and enjoyment
of work 得出的结论是
Pair programming increased the development effort of the first tasks
considerably compared to solo programming, but later the differences
were small
.
Due to this learning time the pair programming teams had
worse overall project productivity
.
Task complexity did not affect the
effort differences between solo and pair programming
.
The pair
programming teams wrote code with fewer defects, but were less careful
in system testing, and therefore delivered systems with more defects
.
They may have relied too much on the peer review taking place during
programming.
Knowledge transfer seemed to be higher within the pair
programming teams.
Finally, we also found weak support for higher
enjoyment of work in the pair programming teams
.
[4]Evaluating Pair Programming with Respect to System Complexity and Programmer Expertise
发表于
2007
IEEE Transactions on Software Engineering 33(2):65-86 这篇文章对295个java professional做了一天的实验 最后得出的结论 do not support the hypotheses that pair programming in general reduces
the time required to solve the tasks correctly or increases the
proportion of correct solutions. 同时为了正确地完成task,需要有84 percent increase in effort。
学术界对pair programming也是褒贬不一的,有时候不同的论文和试验模型可以得出完全不同的结论, 所以很难从某种绝对的角度上讲pair programming优越于solo programming。 Pair or not pair, 我看还是取决于个人,团队和项目吧,把pp当作救命稻草只会误人子弟。 从根本上人性化的解决developer所需才是硬道理,google在这一点上做得很不错。
分享到:
相关推荐
1. a quick start to know what's pair programming 2. 我们为什么需要结对编程? 3. 我们应该如何进行结对编程?
### 配对编程(Pair Programming):对我有何益处? #### 概述 配对编程是一种软件开发实践方法,其中两名程序员共同在一个工作站上协作完成相同的设计、算法或代码编写工作。这种做法在学术界已经获得了显著的...
博文链接:https://genericbrain.iteye.com/blog/218364
根据Stuart Wray在2010年IEEE Software杂志上发表的文章《How Pair Programming Really Works》,我们可以深入了解这种合作模式的实际操作方法及其背后的理念。 配对编程可以定义为两位程序员坐在同一台电脑前共同...
在“PairProgramming-master”这个文件名中,我们可以猜测这可能是一个项目源代码库,包含了关于结对编程的示例代码、练习或教学资源。通过研究这些内容,参与者可以更深入地理解结对编程的实际操作和益处。 总之,...
标题“week2d3pairprogramming”可能指的是一个关于这一主题的课程或活动的第二周第三天的部分。在这个场景中,我们将深入探讨Pair Programming的概念以及与JavaScript编程相关的应用。 Pair Programming是指两个...
在"ThoughtWorks-Contractor-Pair-Programming.zip"这个压缩包中,我们可以推测其内容可能与ThoughtWorks的外包工程师合作模式以及配对编程(Pair Programming)的实践相关。 配对编程是敏捷开发方法中的一个重要...
PairProgramming-master这个文件名可能是指一个关于Pair Programming的项目或教程的源代码库,包含了实现Pair Programming实践的示例代码或相关资源。对于想要深入理解和实践Pair Programming的开发者来说,这是一...
我的第一次Pair(PairProgramming的简称,即结对编程。后面都是用Pair代替)是在ThoughtWorks公司面试进行的。那次,他们来自英国的项目经理Andy面试我,和我一起进行Pair。Andy问我以前是否Pair过,我说:“没有,...
英文原版,中文书名:结对编程技术 结对编程技术是一个非常简单和直观的概念:两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计。同一个算法、同一段代码或同一组测试、与两位程序员各自独立工作相比....
【标题】Florist_PairProgramming 是一个与Java编程相关的项目,它可能是一个关于协同编程或配对编程的示例。在软件开发中,配对编程是一种敏捷开发方法,两个程序员在同一台计算机上共同编写代码,一个人是“驾驶员...
JavaScript对对编程(Pair Programming)是一种软件开发实践,它鼓励两个开发者在同一台计算机上共同编写代码,一人作为“驾驶员”,实际操作键盘输入代码,另一人则作为“观察员”或“导航员”,负责审查代码质量、...
在“PairProgramming-master”这个压缩包文件中,可能包含了该课程关于结对编程的相关材料,如示例代码、练习题目、项目指南等。通过这些资源,学生可以学习如何在实践中应用结对编程技巧,进一步掌握Java编程语言。...
在IT行业中,Pair Programming是一种软件开发实践,其中两个程序员共享同一台计算机,共同编写代码。这个过程旨在提高代码质量、促进团队协作,并增强对技术问题的理解。在这个特定的场景中,"Pair_programming:练习...
在软件开发领域,结对编程(Pair Programming)是一种敏捷开发方法,它提倡两名开发人员同时在一个工作站上工作,共同编写代码,以此提高代码质量和团队协作。XPairtise 是一个专为 Eclipse 开发的开源插件,其目标...
标题"pair-copula.rar_pair copula程序_pair copula算法_pair-copula_paircopu"提及的核心元素是"Pair Copula",这是一个统计学概念,尤其在金融工程、风险管理和数据分析等领域广泛应用。"rar"通常表示这是一个压缩...
C++中的Pair类型是STL(Standard Template Library,标准模板库)中的一个模板类,用于存储一对值。每个Pair对象可以存储两个数据值,这两个数据值的类型可以相同也可以不同。Pair广泛应用于需要将两个相关数据组合...
结对编程专业