该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-21
上面写得太多了,好像重点不太突出了,我觉得是不是采用结队编程,一条关键的依据是:
判断我们代码需不需要重构,如果需要,结对编程就会提供很好的价值,包括代码正确性、严谨性、可扩展性等等,为代码的重构提供很好的基础,并且结队编程克服不想对自己代码进行重构的惰性。 如果判断我们对系统架构设计,有很成熟的经验,且需求的变更不会对设计造成太大影响,那么结队编程就消弱了存在的意义。 如果旁边有感觉不错的搭档,对于新的、陌生的问题特别是算法,我喜欢一起进行讨论。 比如有一次,对一个正方形路径遍历的算法解决问题,在正方形内,每条路径从起点(0,0)到终点(n,n)沿着从右向左,或从下到上行进,需求所有路径坐标,我考虑可以把从右向左的一步用1表示,从下向上的一步用0表示,那么一条有效路径就是n个1和n个0表示的一个字符串。 但是我考虑怎么找出这些字符串来呢,这时我的思维进入了对这些0和1如何排列组合的思维空间,很难跳出来,这时我的同事说,“有了,可以从0开始数,到二进制的1..10..0所有二进制数中,判断1的个数,如果1的个数是n岂不就是要找的路径嘛” 呵呵,就这样问题解决了。 在一个人考虑问题的时候,起初他的思维可能会放的很宽,但是随着问题的深入/进展,他的思维会越来越集中在某一部分,通常我们说陷入牛角尖了。 所以我们经常会有这样的体会,我们去趟洗手间,或在回家的路上,我们突然就找到了某个刚刚还百思不得其解的很好的解决方案。 这也就是结队编程的价值,它使我们随时都站在两个视角,一个具体微观、一个粗放宏观。 |
|
返回顶楼 | |
发表时间:2006-09-21
引用 判断我们代码需不需要重构,如果需要,结对编程就会提供很好的价值
厉害一句话改变了我的关点! |
|
返回顶楼 | |
发表时间:2006-09-23
在上面我所表述的对结对编程的看法,之后我感觉是不是有些过于强调XP的整体性了,是不是有些过于强调关键实践之间的依赖性、相关性了?他们之间真的需要那么依依不舍吗?
后来在我的blog中,有网友如下留言: 引用 提几点个人的看法:
1. 需求变化不大和时间比较充足, 应该也能够用XP, 我觉得并不矛盾. 当然对于大规模的项目, 使用XP的确会有点问题(可以分成小模块解决). 2. 结对编程对沟通价值的一个实践, 跟重构没有直接的关系吧.当然 结对编程有相互监督的作用. 我一个人写程序也经常重构, 是一个人习惯问题, 也许在些结对编程可以对此做监督. 3. 重构是对代码和设计的整理, 只要有写代码, 或多或少会做一些重构, 但我不明白"很成熟的设计,很稳定的架构"就不用写代码了吗? 除非写完就扔了的. 4. 结对编程在XP中, 也可以部分结对, 在添加新功能特性时最好是结对. 我觉得他的观点应该将我从对XP的整体强调中,稍微拉回来一些。 对XP的局部采用,比如在一个项目的关键部分先引入“结对编程”,先引入“测试先行”,必然是我们深入认识、体验、直至有效实施的一个过程,更何况我们的项目中已经存在一些XP实践的影子,比如我们很早就已经强调“代码规范”了。 下面是我回复网友的一段话,我觉得我的认识又有了一步的深入,准确的说是观点往回走了一步,眼前变得更广阔了。 引用 其实XP本身的产生也肯定不是通过理论公式一步推导得到的,而是在实践中逐步形成,如为了节省维护详细设计的不断变更所带来的开销,XP的先导们采用了“简单设计”的关键实践;当采用简单设计之后,为了适应需求的不端变化对系统结构的影响,便加强了“代码重构”的重视程度并提升到关键实践的地位;为了有效地重构,发现“结对编程”具有很大的价值;为了顺利地进行“结对编程”,发现“代码规范”不容含糊,同时发现“代码共同所有”也为结对编程带来很大的便利,因为它可以无缝地进行结对更换;等等。 此外在局部采用的时候,还是要留意其整体性,比如,如果我们忽略“小版本的短周期发布”,那么采用“计划游戏”将可能会很危险。 |
|
返回顶楼 | |
发表时间:2006-09-23
认识到上面一点,我感觉应该回到本贴的主题上了,结对编程如何实施,如何最大的发挥它的优势和控制它的劣势,如何得到项目组成员及上层的认可
|
|
返回顶楼 | |
发表时间:2006-09-23
我在实践中直接感受到的结对编程的价值是:
1、培训:结对编程是进行全方位编程培训,涉及从开发方法,思维方式直至代码风格,开发习惯等编程的方方面面。这种方式可比那些XX培训班的效果要好得多。 2、沟通:通过结对编程,可以对开发人员的编码能力、沟通交流技巧、理解能力等有一个全方位的了解。谁有什么优点,什么缺点,都能在结对编程中一览无遗。 3、监督:人都有懒惰的时候,一不小心,就将鼠标从eclipse转到了firefox,而且很长时间回不来。但结对编程时,这种现象绝不会发生。 4、效率:因人而异,每个人的效率都不同,但大家普遍认同的是一天8小时,能有效率地工作4小时就算很不错了。但结对编程时,两个人的工作时间应该能达到6小时以上。关键人的精神状态会完全不一样,一天不做什么的事的,总是无精打采的,相反工作充分的人却是神采奕奕。 |
|
返回顶楼 | |
发表时间:2006-09-24
我把楼上各位对于结对编程的价值/好处归纳如下:
引用 1、培训:结对编程是进行全方位编程培训,涉及从开发方法,思维方式直至代码风格,开发习惯等编程的方方面面。这种方式可比那些XX培训班的效果要好得多。
2、沟通:通过结对编程,可以对开发人员的编码能力、沟通交流技巧、理解能力等有一个全方位的了解。谁有什么优点,什么缺点,都能在结对编程中一览无遗。 3、监督:人都有懒惰的时候,一不小心,就将鼠标从eclipse转到了firefox,而且很长时间回不来。但结对编程时,这种现象绝不会发生。 4、效率:因人而异,每个人的效率都不同,但大家普遍认同的是一天8小时,能有效率地工作4小时就算很不错了。但结对编程时,两个人的工作时间应该能达到6小时以上。关键人的精神状态会完全不一样,一天不做什么的事的,总是无精打采的,相反工作充分的人却是神采奕奕。 5、促进规范:对于原来经常讲的代码规范,往往没有有效的推进措施而只是依靠个人的自觉性,结对之后,为了有效地沟通,为了照顾后面的一双眼睛,就会更加注重所写代码的规范性。 6、提高质量:由于随时都可以站在不同的角度,所以可以使程序更正确、更严谨、更通用、更易于扩展等等,同时结对也可以提高了成员的优化意识,促进代码重构,使程序始终保持最好状态。 7、加快成长:通过结对之后,特别是频繁的轮换结对,可以使队员广泛的扩展思维空间、取长补短,对于个人(特别是新手)的成长将有一个加倍的效果。 有了这么多让人眼花缭乱的好处,那么在实施的过程中的问题呢,我也对楼上诸位的各种看法归纳如下: 1、结对双方水平不同,很难沟通; 2、结对双方步调不一致,出现“你累了吗? 我们休息一下吧”等情况; 3、不适应,觉得后面总有一只眼盯着,感觉不自然,影响个人注意力集中; 4、领导看来,那两个家伙怎么一整天都在那边聊天啊。工作不饱和; 5、领导觉得成本高,原来只要一个人干的活现在怎么要两个人来做; 6、办公环境受限,没有开放的空间,活动不自如; 既有价值,又存在问题,我们怎么办呢,我觉得还是适度吧 |
|
返回顶楼 | |