總結概念圖

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)」
  • 僅僅複製他們的做法就能帶來顯著改善,但只有親自拜師學藝才能跟上他們持續進步的腳步

結語:尚無大師,但未來可期#

如果在書的開頭就告訴讀者「目前沒有大師」,可能會令人沮喪。但在看過這些年蒐集的模式、以及我們的工藝中有多少是可以學習的之後,作者希望讀者將這個事實視為機會,甚至是挑戰

作者期望受到本書啟發的學徒們會這樣回應:「目前沒有大師……但很快就會有了。」