
Stradivari 的教訓:隱性知識的消亡#
17 至 18 世紀,Antonio Stradivari 的工作坊製造出史上最精美的小提琴與大提琴,至今仍以數百萬美元的價格成交。三百年來無數嘗試複製這些樂器,卻始終無法成功。Richard Sennett 在《The Craftsman》中指出:Stradivari 和 Guarneri del Gesu 等大師的秘密,已隨他們一同離世。
問題出在 隱性知識(Tacit Knowledge) 的傳承失敗:
- Stradivari 的學徒包括他的兩個兒子,他沒有任何隱瞞的動機
- 他確實教了他們所有他認為重要的東西
- 但那些他自己都沒有意識到屬於技能一部分的微妙知識連結,卻從未被記錄下來
- 隨著 Stradivari 年老、無法親自參與學徒的日常工作,工作坊的品質便開始下滑
- 他的工作坊「圍繞著一個人的非凡才能運轉」,最終隨他而亡
Stradivari 的失敗告訴我們:大師應該被「逼迫」去解釋自己,把沉默中累積的線索與手法挖掘出來,讓隱性知識變為顯性。沒有積極主動、甚至近乎「煩人」的學徒,軟體工藝就只會以孤立的小群體形式存在。
軟體開發是一門工藝#
軟體開發之所以是工藝(Craft),正是因為我們對它的理解還不夠深,無法將其系統化為像科學或工程那樣的標準化學科。儘管軟體工程學會(SEI)和敏捷聯盟(Agile Alliance)做了大量努力,這個領域中個人技能仍然是決定專案成敗最重要的因素。
這裡所說的「技能」並非單指:
- 你懂多少電腦科學知識
- 你的開發流程有多高效
- 你有多少年經驗
而是指交付可運作軟體所需的一切能力的總和,包含但不限於本書所有模式中的教訓。
技能如此重要,是因為我們還無法將軟體開發寫成一套「任何人照做都能得到相同結果」的標準程序。客戶希望軟體專案能像科學實驗一樣可重複,但現實是他們只能組建團隊、然後祈禱這個團隊能勝任。
技能分布的殘酷現實#
軟體開發中的技能差距極為懸殊:最優秀的開發者能輕鬆完成多數人認為不可能的事。
更令人不安的是,大多數程式設計師認為自己高於平均水準。但由於技能分布的偏態(Skewed Distribution),多數人其實低於平均值。這就像 Dave 和 Ade 坐在桌邊,Bill Gates 加入後,桌上大多數人的薪資就低於平均值了。

程式設計師技能分布曲線
結合 Dunning-Kruger 效應(無意識的無能,Unconscious Incompetence),我們就不難理解為什麼這麼多軟體專案以失敗告終:
- 我們的技能水準與問題所需的技能水準之間往往存在錯配
- 再好的流程也無法告訴你「你試圖做的事情是 NP-Complete 的」
- 正規表達式、HTTP、Unix 等領域的深層知識,在專案需要時沒有替代品
沒有任何方法論(無論多敏捷或精實)能彌補技能的不足。流程改善有其極限,個人技能的成長才是根本。
Semmelweis 的悲劇:正確但失敗#
Atul Gawande 在《Better》中講述了醫師 Ignac Semmelweis 的故事。1847 年,Semmelweis 發現醫生不洗手是產婦死亡的主因。他引入簡單的氯水洗手措施,將死亡率從 20% 降到 1%。
然而,在取得卓越成果的過程中,他得罪了整個醫學界:
- 同事們開始故意不洗手來對抗他
- 他最終失去了工作
- 他的發現被忽視了整整 20 年,直到 Joseph Lister 獨立發現同樣的概念
- Gawande 的評語:「Semmelweis 是個天才,但也是個瘋子,這讓他成為一個失敗的天才。」
本書中的許多模式和想法同樣會引發衝突與抵抗。我們必須從 Semmelweis 的失敗中學習:清楚地解釋想法、說服他人嘗試我們的方法,而非僅僅堅持自己是對的。同時,專注於建立歡迎正向改變的社群,尋找那些追求精通的人。
精通的本質#
在軟體開發中,我們不知道精通(Mastery)的確切定義是什麼,但我們知道它不是什麼:
- 天才、運氣、財富或名聲都不等於精通
- 這些都不是工藝的核心要素
精通的核心在於:在軟體開發各個面向的技能,以及以推動學科進步的方式傳遞這些技能的能力。
精通不是自封的#
精通不是一個人能自我宣稱的,因為人類的虛榮心限制了自我評估的準確性。如果有人自稱是大師,問問她的憑據:
- 指向作品? 評估比你更有技能的人的作品是出了名的困難。你只能判斷她比你強,但這不足以證明精通。
- 指向資歷? 畢竟沒有「軟體工藝大師」的證書。
精通的認定本質上是遞迴的:只有已經是大師的人才能認定你是大師,而你無法判斷認定你的人是否夠格,除非你自己也已經是大師。這是新興工藝無法避免的困境,我們必須忍受不完善的定義和模糊的標準,直到建立起足以明確展示從業者技能的社群與知識體系。
大師的標記:培養出超越自己的學徒#
辨識大師最好的方式是檢視她的作品品質以及她學徒的成就:
- 學徒的作品和成長凸顯的是技能而非天賦或運氣
- 單純的天才不等於精通;但如果一個人能訓練他人達到甚至超越自己的水準,那她就是潛在的大師
- 大師理解對自身權威的不質疑是危險的——Stradivari 的工作坊正是前車之鑑
作為學徒,你應該以超越你的老師為目標。而好的老師會幫助你實現這個目標。
作者的自謙:我們不是大師#
本書作者坦承自己不是大師。最多,他們是正在分享前路所見的工匠(Journeymen)。
- 在 1 到 10 的量表上,他們會給自己打 9 分
- 但他們偶爾遇到的人讓他們意識到,量表其實延伸到 100
- 軟體開發至今仍缺乏真正的大師——但這不是問題
- 軟體是一門年輕的工藝,我們建造軟體的歷史不到 70 年,不應期望已經出現大師級的軟體工匠
如何判斷大師是否存在?#
如果真正的軟體大師存在,他們的影響力會在整個產業中引起漣漪效應:
- 不僅因為他們的產品和工具更優越
- 更因為他們的學生也會同樣優秀
- 會有一股源源不斷的傑出學徒和工匠從特定來源湧出
- 這些學生的學習和改變速度會讓他們脫離人群,如同 Gawande 所說的「正向偏差者(Positive Deviants)」
- 僅僅複製他們的做法就能帶來顯著改善,但只有親自拜師學藝才能跟上他們持續進步的腳步
結語:尚無大師,但未來可期#
如果在書的開頭就告訴讀者「目前沒有大師」,可能會令人沮喪。但在看過這些年蒐集的模式、以及我們的工藝中有多少是可以學習的之後,作者希望讀者將這個事實視為機會,甚至是挑戰。
作者期望受到本書啟發的學徒們會這樣回應:「目前沒有大師……但很快就會有了。」