攀岩和極限編程(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 爬到一半摔了下去。他又試了一次,但還是爬到了一半,就摔了下去。我建議地說,他之所以摔下去的原因,是因為爬得太快了。

輪到我了,我開始一步一步往上爬,這個級別要比前面那個初級水平難多了。當爬到一半的時候,有一塊石頭太小了,使我不能保持平衡,我摔了下來。再來一次,這一次我腦子堳O持著這樣一個念頭:我應該總是保持一種穩定的狀態。當我要向下一塊石頭移動時,我先試著騰出一隻手來,看我是不是還能保持穩定,如果可以,我就用那隻騰出來的手抓住下一塊石頭,然後試著提起一隻腳。如果還能保持穩定,我就用那隻提起的腳,踩在下一塊石頭上。我一次又一次的試,試著慢慢移動。有時,當我試著鬆開一隻手或一隻腳時,我不能保持穩定,我會立刻意識到,在我移動的過程中有什麼錯誤。然後,我就平穩的調整我的位置,甚至我會向後移動到先前的位置。總是保持穩定狀態的原則,使我能夠平穩的移動,並且在移動到下一塊石頭以前,儘可能的做一些試驗

此舉使得教練對我留下了深刻的印象,因為這是我第一次攀岩。

我成功的到達了牆頂,我覺得有些累。當我慢慢的下到地面時,我吃了些甜點,喝了點可樂,然後坐在地上開始休息。我並沒有爬上最難級別的壓力,我只是在享受攀岩的樂趣

當我體力恢復以後,我試了一下那個最難的級別。哦,真是太難了…… 我只爬了一米就摔了下來。再試一次,但還是摔了下來。當我嘗試第三次的時候,教練來做了一下指導,但我一開始還是失敗了。

我要求教練親自爬一次,這樣我可以從他身上學到一些技巧。

我發現他先對這岩牆看了幾秒鐘,他的眼睛慢慢的從地面掃到牆頂,然後才開始爬,他很容易,而且很快的就爬到了牆頂。我發現在我摔下來的地方,他利用了一塊很小的石頭,但我在爬的時候卻沒發現,我詢問他怎麼那麼容易就爬上去了。教練告訴我應該做一個簡單的計畫(在編碼以前做一個簡單的設計)

我聽從了他的建議,我也看了看那面牆,試著做個簡單的計畫。我試著確定了一條最好的路線,還找到一些很難發現的小石頭。

然後我開始爬了。瞧,我爬過剛才摔下來的地方。我試著再往上爬,但真的是太難了,我爬到兩米的時候摔了下來。我又試了一次,但還是摔了下來。

我放棄了,我需要更多的體力。我不應該把自己搞得很累,所以我們離開了攀岩場。

當我離開的時候,我感覺我應該可以爬上那個最難的級別。我之所以失敗,是因為我沒有足夠的經驗,沒有熟知一些應該遵循的模式(patterns)我有勇氣,當我離開的時候,並沒有感到相當累,因為我沒有延長攀岩的時間,我感覺攀岩是那麼的有趣

當我回家以後,我回顧了一下這次攀岩的經歷。我想我是真的喜歡它,所以為了能爬過最難的級別,我必須努力學習一些技巧(設計模式),就像一個銀幕英雄所做的那樣。我還覺得攀岩不僅僅是攀岩,實際上,它是一種團隊的合作(team work),我們應該有足夠的計畫,懂得足夠的技巧,有強壯的肌肉,一個好的教練和一個好的搭檔。這真的就像軟體發展過程,我們應該有一種好的指導方法,好的計畫,好的經驗,而且要懂得一些設計模式(design patterns)