注:本文节选自Kent Beck和Cynthia Andres所著的《解析极限编程--拥抱变化(原书第2版)》(原书名Extreme Programming Explained: Embrace Change, Second Edition)。
--------------------------------------
极限编程(Extreme Programming,XP)和社会性的变革(social change)相关。过去适用的一些习惯和模式在今天可能会妨碍我们做到最好,XP要求我们放弃这些习惯和模式,放弃那些妨碍生产率但保护我们自己的防御 行为。虽然这可能会使我们感觉到自己失去了掩蔽。
XP要求我们坦承自己有能力做什么,然后去做这些能力所及的事情。同时允许并希望其他人也这样做。放弃我们不成熟的自负——“我比其他人都懂得多, 我需要的就是让我独立行事,成为最棒的。”XP要求我们在更大的范围内,在包括商业/工作领域的团体中找到我们正确的位置;XP是关于每个人是如何成为最 好的自己,如何成为自己所能成为的最好的开发者的过程。XP探讨了如何才能写出伟大的、对业务真正有益的代码。
好的合作关系是做好事情的保证。除了编码和其他活动,我们在工作场所的人际关系也会影响到生产率和自信心。成功既需要技术又需要好的合作关系,极限编程致力于同时解决这两个问题。
为成功做好准备。不要因为踌躇退缩而与成功失之交臂。尽力而为,然后处理其结果,这就是极限(Extreme)的含义。暴露自己,对有些人来说,这不可思议,而对其他人却习以为常。这就是为什么人们对极限编程的反应会两极分化。
XP是一种软件开发的风格,专注于编程技术、清晰沟通还有团队协作的精彩实践,这些将帮助我们完成以前几乎不可想象的事情。XP包括:XP是一条可以使得一起开发软件的人们共同进步直至卓越的途径。它和其他方法的区别有:
《解析极限编程:拥抱变化(Extreme Programming Explained:Embrace Change)》第1版中对XP有一个清楚的定义:“XP 是一种轻量级方法论,适用于中小规模团队在开发软件过程中面对模糊或者快速变化的需求的时候。”这个定义介绍了XP的起源和目的,但它并不完整。第1版出 版五年来,XP比初始定义增加了很多内容。现在,XP可以表述为:
XP是我在自己的软件开发实践中协调人性和生产率并共享这个协调的一个尝试。我已经开始注意到,我越是有人情味地对待我自己和别人,我们大家的生产率就越高。成功的关键不在于自我禁欲,而在于承认我们是人,我们生活在人与人之间交往的环境中。
技术同样重要。我们是工作于技术领域的技术人员。工作方式有好坏之分,对卓越技术的追求在开发型组织中是非常重要的。技术支持信任关系的建立。如果你能准确地评估你的工作,第一时间提交有质量的工作,建立快速的反馈循环,你就能成为一个可以信赖的搭档。XP需要参与者学会高层次的技术,为团队的目标 服务。
XP意味着放弃过去的工作习惯而采用适合现实的新方法。我们过去的习惯、态度和价值观曾经有效,但可能不是我们在当前环境下团队软件开发的最好选择。良好的、安全的社会交往和优秀的技术技能对成功的XP开发都是必不可少的。
一个例子是“不设防才是真正的安全”的观念。隐瞒一些事情来保持安全的旧习惯并不能真正起作用。隐瞒20%工作量并不能保护我,当项目失败的时候, 没有尽全力的事实并不会真的让我感觉好一点,也无法消除不能让项目运作所带来的失败感。如果我尽了全力写程序而人们不喜欢,我仍然可以自我感觉很好,因为我尽力了。这种态度才让我感到安全,不管在什么环境下。如果我感觉如何的基础在于我是否尽力,我就能够通过尽全力而使自己感觉良好。
XP团队竭尽全力去取胜而且勇于承担后果。如果自尊没有跟项目联系起来,在任何情况下我们都会尽全力做到最好。在XP中我们不为失败作准备。在人际关系上保持一点距离、通过偷懒或加班来隐瞒工作量、拖延反馈导致又一次责任扩散,所有这些行为在XP团队中都没有存在的空间。
你可能有足够的时间、资金或团队技能,也可能没有。但不论如何,如果你认为自己将会有足够的资源,在这种状态下就会有最好的表现。人类学家 Colin Turnbull在《山里人(The Mountain People)》和《丛林中的人们(The Forest People)》两书中对这种“满足心理”有动人的描述。他对比了两种社会:资源紧张而导致的撒谎者、欺骗害人者的部落和资源富足产生的协作互爱的部落。 我经常问处于窘境中的开发人员一个问题:“如果有足够的时间,你会怎么做?”即使受到某些条件的约束,你也可以做到最好。对这些约束的过分忧虑会使你偏离 目标。不论这些约束是什么,你自己都可以做到最好。
如果你有6周时间去完成一个项目,你唯一能够控制的是你自己的行为。你会完成6周的活还是少干一点呢?你不能控制别人的期望,但你可以告诉他们你所 知道的关于项目的所有事情,这样他们的期望才有跟现实匹配的可能性。当我知道了这一点,我对最后期限的恐惧就消失了。“管理”其他人的期望不是我的工作, 而是他们自己需要操心的,我要做的就是尽可能沟通清楚。
XP是一个致力于解决软件开发过程中所有层次上的风险的软件开发学科。同时XP也高效产出高质量的软件,并且在XP的执行中也有许多乐趣。那么,XP如何解决开发过程中的风险呢?
XP假设你把自己看成团队的一部分,一个具有清晰目标和执行计划的理想个体。XP假设你想与别人一起工作。XP假设可以经济地应付变化。XP假设你希望成长、改善自己的技能,改善人际关系。XP假设你愿意做出改变来达成这些目标。
现在我准备回答本章提出的问题:什么是XP?
《解析极限编程--拥抱变化(原书第2版)》的其余部分探讨了实现这些改变需要做的事情,从个人和经济角度思考了为什么它们会起作用。本书分为两部分。第一部分是实践,描述了从事和思考软件开发的一种方式,这种方式假设并满足人性需要,包括对人际关系的需要。第二部分涵盖了XP的哲学和历史根源并将 XP放在今天的时代背景下。
阅读《解析极限编程--拥抱变化(原书第2版)》以及应用XP有许多种方式,就像在大热天进入一个清凉的水池一样,你可以小心翼翼地入水,也可以沿台阶稳步走下去,还可以像炮弹一样冲下去,或者像跳水比赛那样跳下去。总之,它们都达到了入水这个目的。你的选择也许基于风格、速度、效率或者恐惧。只有你能决定哪个是适合你的。我希望在阅读和应用这本书时,你能逐渐深入理解为什么你会参与软件开发以及如何从这个工作中找到成就感。