攀岩和极限编程(XP)


 

Rock Climbing and Extreme Programming

Ye Yongqing
IT department, Europeloan Bank
Gulledelle 92
1200 Brussels, Belgium
+32 2 4020120

yongqing.ye@europeloan.com

翻译:刘焱
2002
725日星期四

摘要

这篇文章以攀岩来描述 XP 的实现,作者发现极限编程的许多思想,很适合于攀岩运动,而且作者在攀岩运动中,体现了这些想法。

关键词

教练(Coach)XP(极限编程),测试优先(Test First),配对(Pair),保持稳定(Keep Stable),覆盖率(Coverage),没有加班(No overtime)

内容

布鲁塞尔(Brussels)的市中心,有一间室内攀岩场。虽然我经常想去尝试,因为我看到电视上,那些攀岩者可以很容易地爬上很高的岩壁 ,但我以前却从来没有去过。对于攀岩来说,我绝对是个新手。

不管怎样,我想我会喜欢它,而且我会从中得到很多乐趣 

Winston 是一位攀岩专家;他有 5 年的攀岩经验,他建议我们这个礼拜六去攀岩。礼拜六到了,有 4 个人参加这次活动,Winston Massimo Gifford 和我,除了 Winston 外,其它 3 位都是攀岩的新手。我们这些人都是在欧洲贷款银行(EuropeLoan Bank)搞 IT 的。

欧洲贷款银行是一家年轻、充满活力,发展迅速的全球网上银行。它于 1999 11 月在布鲁塞尔成立时,只有三个人以及一间办公室。这家公司成长非常迅速:目前已在 5 个国家开展业务,每个国家都有办公室,大约有 50名左右,直接和非直接的雇员,它的资金达到了 3 兆比利时法郎(3,000,000 million BELGIUM FRANCS)。欧洲贷款银行的主营业务,是以极具竞争力的利率,提供住抵押贷款。

因为快速用户需求变化,极限编程的方法已经成功实现大概一年了,我们都很喜欢极限编程,虽然有些人一开始对极限编程感到有点怪。我们也都很喜欢写程序,写程序是一种乐趣Winston 是我们的 CTO,有时候,他也是我们开发团队的教练

在攀岩方面,Winston是一位很好的导师和教练。他先给我们讲了一些基本知识:例如怎么打 8 字结(tire 8),怎样平稳地放绳子,当人掉下来地时候,怎样抓住保护绳。然后我们在地上做配对(pairs)练习:一个人做攀登者,另一个则充当保护(blocker)。然后我们交换角色(exchange pairs),在地上一遍又一遍地练习。我们发现我们这么多人正好,不多也不少,无论是交换角色还是交流想法都很有效率。如果我们谁忘记了什么事情,像怎么打 8 字结之类的,我们就直接问其它 3 个人,很快就可以得到反应(交流很好)。我们花了半个小时做练习。

 现在,我们已经学会了攀岩的基本知识,到了真正开始要攀爬室内岩墙(indoor-wall)的时候了。在要攀的岩墙上有许多石头,它们有不同的颜色和编号:例如,3A 的石头是绿色的,4B 是黄色的,4C 是红色的,5A 是紫色的。Winston 告诉我们颜色代表了不同的难度级别,当然了,我们首先选择了绿色,我们要从最简单和最容易的开始

 攀登者和保护者都将对方的绳子做了仔细的检查:打的结是不是一个双8字结,安全扣有没有扣好。然后攀登者爬了大概 1 米,他故意摔下来,以测试保护者是否能安全的保护他。对于安全系统,我们做了全面的测试(test everything),如果一个测试失败了,我们必须立刻把问题解决掉。当我们开始朝墙顶爬的时候,我们必须绝对确保安全系统正常工作。

 现在攀登者开始攀登了。初级水平相当容易,我们没费什么劲,就爬到了墙顶。我们又爬了一次,然后互换角色:攀登者来做保护者,保护者来做攀登者。

 我们都急于尝试更难的级别,因此我们来到了岩墙的另一边。Massimo 先爬,我做保护。很不幸,Massimo 爬到一半摔了下去。他又试了一次,但还是爬到了一半,就摔了下去。我建议地说,他之所以摔下去的原因,是因为爬得太快了。

轮到我了,我开始一步一步往上爬,这个级别要比前面那个初级水平难多了。当爬到一半的时候,有一块石头太小了,使我不能保持平衡,我摔了下来。再来一次,这一次我脑子里保持着这样一个念头:我应该总是保持一种稳定的状态。当我要向下一块石头移动时,我先试着腾出一只手来,看我是不是还能保持稳定,如果可以,我就用那只腾出来的手抓住下一块石头,然后试着提起一只脚。如果还能保持稳定,我就用那只提起的脚,踩在下一块石头上。我一次又一次的试,试着慢慢移动。有时,当我试着松开一只手或一只脚时,我不能保持稳定,我会立刻意识到,在我移动的过程中有什么错误。然后,我就平稳的调整我的位置,甚至我会向后移动到先前的位置。总是保持稳定状态的原则,使我能够平稳的移动,并且在移动到下一块石头以前,尽可能的做一些试验

此举使得教练对我留下了深刻的印象,因为这是我第一次攀岩。

我成功的到达了墙顶,我觉得有些累。当我慢慢的下到地面时,我吃了些甜点,喝了点可乐,然后坐在地上开始休息。我并没有爬上最难级别的压力,我只是在享受攀岩的乐趣

当我体力恢复以后,我试了一下那个最难的级别。哦,真是太难了…… 我只爬了一米就摔了下来。再试一次,但还是摔了下来。当我尝试第三次的时候,教练来做了一下指导,但我一开始还是失败了。

我要求教练亲自爬一次,这样我可以从他身上学到一些技巧。

我发现他先对这岩墙看了几秒钟,他的眼睛慢慢的从地面扫到墙顶,然后才开始爬,他很容易,而且很快的就爬到了墙顶。我发现在我摔下来的地方,他利用了一块很小的石头,但我在爬的时候却没发现,我询问他怎么那么容易就爬上去了。教练告诉我应该做一个简单的计划(在编码以前做一个简单的设计)

我听从了他的建议,我也看了看那面墙,试着做个简单的计划。我试着确定了一条最好的路线,还找到一些很难发现的小石头。

然后我开始爬了。瞧,我爬过刚才摔下来的地方。我试着再往上爬,但真的是太难了,我爬到两米的时候摔了下来。我又试了一次,但还是摔了下来。

我放弃了,我需要更多的体力。我不应该把自己搞得很累,所以我们离开了攀岩场。

当我离开的时候,我感觉我应该可以爬上那个最难的级别。我之所以失败,是因为我没有足够的经验,没有熟知一些应该遵循的模式(patterns)我有勇气,当我离开的时候,并没有感到相当累,因为我没有延长攀岩的时间,我感觉攀岩是那么的有趣

当我回家以后,我回顾了一下这次攀岩的经历。我想我是真的喜欢它,所以为了能爬过最难的级别,我必须努力学习一些技巧(设计模式),就像一个银幕英雄所做的那样。我还觉得攀岩不仅仅是攀岩,实际上,它是一种团队的合作(team work),我们应该有足够的计划,懂得足够的技巧,有强壮的肌肉,一个好的教练和一个好的搭档。这真的就像软件开发过程,我们应该有一种好的指导方法,好的计划,好的经验,而且要懂得一些设计模式(design patterns)