关于结对编程的一些问题

前言

  最近因为公司项目,有机会尝试结对编程(pair programming),实践了3个月,也有了本身的一些心得体会,本文以Martin.Fowler的《结对编程模糊概念》来展开叙述。html

1. 实践敏捷过程必定要“结对”吗?

This is utterly false. 'Agile' is a very broad term defined only in terms of values and principles, most notably in the Manifesto for Agile Software Development.编程

  正如Martin所言,敏捷宣言并未说起结对编程是必须的,敏捷只是一种思想,结对编程仅仅是实践中的一个非必须的组成部分。即便XP被强烈推崇,也不表明结对编程适用于任何公司或者项目。app

  就我的体会而言,目前项目组内会有Switch pair的过程,个人理解是pair的过程更多的注重团队成员间的知识分享以及相互之间的沟通、检查代码等,带来代码质量上以及、知识流动上的优点,要因项目或成员而异。学习

2. 极限编程迫使你结对吗?

I would say that pair-programming is usual for XP teams. I wouldn't say that a team that doesn't do pair-programming thus cannot call itself an XP team. I should also point out that to most XPers I know the question of whether a team is XP or not is uninteresting; the real issue is whether a team is effective.this

   Martin所同意的是团队开发效率或者说结对编程是否适合团队。lua

3. 若是我不喜欢结对编程,我就不必去实践它?

  Make sure you have someone who really knows how coach you, so you can be sure you're evaluating the real thing.设计

  针对这一点,我以为我仍是有切身体会的,真的很赞成Martin的观点。若是你经历过一个很差的pair体验,你就要回忆而且追问下,是否你找到了“合适”的parter来一块儿pair,而不是那种话不投机半句多、我写你看着,这种同伴。rest

  每每pair的过程当中两我的的水平会有所差距,这个问题要从下面几个角度考虑:code

  1. 若是你是low的一方,你须要一个什么样的同伴,你但愿同伴是如何回答你的各类疑问,如何正确提出问题,怎么样提问能让对方乐意回答你的问题,如何让pair的对象不以为你很low,如何找一个有耐心的同伴交流,而不是讽刺挖苦?htm

  我以为这个问题是一个很难平衡的问题,可能在大多数的状况下,要虚心请教、加速学习,努力跟上设计思路,而且提出本身的观点,让对方以为你不是一个“无用之人”,诚然,最开始老是最难熬的,“命运”是公平的,若是有一个更Nice的同伴,可能你的学习努力程度就会稍若些;若是你的同伴很自傲,说话略带讽刺,这可能会激励你更快的学习。尽量找一个适合本身的parter才是开始pair的关键。

  2. 若是你是High的一方,你是否思考过,low的一方的感觉,你应该如何帮助low的一方提升能力水平,如何能在你累的时候,low能替你完成你的思路?

  俗话说的好,授人以鱼,不如受人以之渔。可能作为能力稍强的一方如何引导同伴去融入代码,融入设计思惟,而不是我本身也行,不须要知识分享也能完成,或者你水平太low,问题太多,我不须要你这样的累赘。其实pair的一方面是分享知识的过程,若是简单简单理解为完成项目任务,则会错失不少提高本身的机会,若是是这样你要考虑你是否适合pair。

  3. 两我的水平至关,有时,你们思路一致,互相抢键盘来完成代码,而有时,甚至两我的为了一个命名争的面红耳赤?

  这是一个至关广泛的情景,而每每后者出现的次数更多。这里有一些对代码理解上的冲突,有一些实践上的规范,还有一些人心里的虚荣(不接受别人对本身的否认,即便是错误的也要坚持),这时首先要思考下本身坚持的东西是不是正确的,本身是否能认可不足(不完美),其次能够找“第三方”来决断矛盾。从实践的角度出发,若是事事都要第三方决断的话,极有可能大家两个之间的pair关系早以不存在,我以为处理pair矛盾的过程是两我的互相理解、互相包容的过程,一味最求自我,这样只能单打独斗。

  固然,若是两我的,“化学”做用比较好的话,会很是happy :)

4. 结对编程对下降工做效率?

that would be true if the hardest part of programming was typing

  一些结对编程的支持者认为,结对编程的效率会更高,他们(她们)能够持续讨论、互相review代码,这样能够保证高质量的代码。而更多时候“工做效率”是没法衡量的,特别是在解决很困难的问题时,一我的可能会陷于某种“极明显”的错误中,而不得要领,这个时候若是两个能保持独立思考的人每每效率更高。

  在个人pair中,有时个人任务是当代码开发遇到困难时梳理代码的做用,重新overview代码思路,解决困难,一我的的能力是有限的,而两个互补的人会产生1+1>2的效果。

5. 结对编程只适用于解决困难代码场合?

Except this: writing boring rote code is a smell. If I'm writing boring repetitive code it's usually a sign that I've missed an important abstraction, one that will drastically reduce the amount of rote code to write. Pairing will help you find that abstraction.

  简单并不表明没有重构机会或者说没有机会写出更完美的代码。

  在个人pair过程当中,partner老是在提醒我要重构,抽取代码段,也许这就是一种外在的推力,来开发更优质的代码。结对编程是提成代码能力的过程,你如何知道你写的代码是最最优美的呢?看看codewars上大牛们代码,你本身都会以为汗颜。

相关文章
相关标签/搜索