Feb. 14 11:24~12:35
有些書,每讀一次都會有不同的體驗。最近重讀Alexander的《The Timeless Way of Building》和Kent Beck《Extreme Programming Explained, 2nd》,從Alexander的「Quality、Gate、Way」對應到Beck的「Value、Principle、Practice」,突然想通了「練拳不練功,到老一場空」這句話的意思。
網路與行動計算時代,資訊發達,每天光是從Facebook接收到的動態資訊,就快要把人的感官與認知能力給淹死。一大堆酷炫、熱門的新技術語詞彙,不停打著大家的臉,也增加了大家的焦慮感。噯呀,這麼多東西,到底哪一天才學得完啊。
有了「Value、Principle、Practice」這種框架,把不同層次的知識稍微加以分類,可以發現大部分的資訊內容都屬於Practice層次,也就是「拳法招式」。屬於「內功心法」(Value、Principle)的相對不多(有些人也不願意將苦學的內功心法公開),而且較難修練。Practice不是不重要,但如果只是光顧著到處搜刮Practice,你的時間將全部被它們佔據,反倒沒有心思來淬鍊與思考Practice背後的Principle或是Value。
這樣講可能太抽象了,舉個例子。相信很多人都遇過那種「教得很好的老師,一聽就懂」以及那種「教得很爛的老師,只會照書念」。兩者的差別在於前者已經學透了知識背後的Value和Principle,因此可以靈活運用不同的例子、比喻或教法(Practice)來幫助學習。後者則是死讀書,只看到Practice,因此也只能按照字面的意義逐字地把書的內容唸給學生聽。
***
Teddy還沒有能力可以告訴鄉民們要如何修練Value、Principle,只能提醒大家「Value、Principle、Practice」的差別,不要「偏食」光顧著「練拳」(修練Practice)而不「練功」(修練背後的Principle、Value)。當然也不能只「練功」而不「練拳」,這樣就變成只會打嘴砲,「說得一口好程式」的那種「顧人怨」的人。
Teddy在2001年讀了XP第一版,2005年讀了XP第二版,後來學了RUP、PSP、Scrum、Lean、Kanban,再回頭看了XP第二版,驚覺Scrum、Lean、Kanban的實務做法,也許名稱不同或是實施方式不同,但背後許多觀念與XP其實是相通的。光從實務做法去比較,這些方法有些差異很大。從背後的Value、Principle去觀察,相似性就遠大於差異性(不知道Kent Beck有沒有偷偷去讀精實開發的書XD)。
***
對照XP第一版與第二版,Principle部分被改寫了很多。以前一直沒搞懂XP第二版為什麼要特別強調「Value、Principle、Practice」這三種層次的關係,一直覺得XP的Principle過於抽象沒什麼意義。那是當時還沒學到Scrum、Lean、Kanban這些方法,因此只能把XP的Principle對應到XP的Practice,自然覺得這種「抽象化」的意義不大。舉個物件導向設計的例子,如果每個介面(interface)都只有一種實作(implementation),你就會開始懷疑抽離介面與實作的必要性。
依據Alexander的看法,Principle(Gate)是一種「模式語言」(Pattern Language),從這個角度來看,把XP的14個Principle看成是一種「敏捷方法模式語言」(A Pattern Language for Agile Methods),這樣就講得通了。既然是「敏捷方法模式語言」,就可以用這個「模式語言」(也許需再加上其他模式)來描述Scrum、Lean或是Kanban了。而Practice則是實踐各種敏捷方法的解法(solution)之一罷了。
Teddy內心獨白:我想通了,但鄉民卻被弄糊塗了。
***
練拳不練功,到老一場空
練功不輕鬆,到老養生終
練功真的不輕鬆啊。
***
友藏內心獨白:只是要開發個軟體,需要搞到那麼麻煩嗎。
開發軟體這行飯不易吃
回覆刪除