
本章探討軟體工匠如何在漫長的職涯中保持方向、動力與熱情。作者以 Dave 的親身經歷開場:他曾經把一疊認證證書堆在桌上,以此安慰自己「已經受過訓練」。然而當他開始接觸 PerlMonks 社群中那些真正卓越的駭客時,才驚覺自己不過是剛踏入門檻。那些頂尖高手仍在持續學習,而且學得飛快。Dave 的認證證書逐漸被草稿紙和技術文件淹沒,他開始將自己投入到學習的過程中。
本章的核心訊息是:卓越的軟體開發者都走在同一條路上,差別只在於有人走得更前面。這條路沒有捷徑,但只要你願意走,前方的可能性無限寬廣。
The Long Road – 漫漫長路#
情境#
我們活在一個崇尚「一夜成名」、追求快速成果與物質財富的文化中。軟體開發領域很少有人能告訴你「過去是怎麼回事」,世代之間的知識傳承少之又少,同樣的錯誤不斷被重複。
問題#
你渴望成為一位軟體大師(master software craftsman),但這個志向與主流期待衝突。傳統智慧告訴你:拿最高薪的工作、盡快升遷、別再寫程式了,去做「更重要」的事。
解法#
首先,接受一個事實:你的追求在別人眼中可能有點「怪」。其次,將目光放在長期。在學徒階段,重視學習與長期成長機會,而非薪水或傳統的領導角色。
- 這條漫長卻光明的旅程會帶給你豐富的能力:學習的技巧、解決問題的能力、與客戶建立深厚關係的本事
- 當你繪製自己的地圖時,要預期自己到中年仍然是一位活躍的軟體開發者
- 如果你還要工作 20 年,那麼沒有什麼是不可能的。沒有任何人遙不可及,沒有任何技術領域是封閉的
- 以整個職涯投入手藝,超越 Donald Knuth 或 Linus Torvalds 這樣的人物便不再是空想(當然,他們也不會原地等你)
這個模式不是為了成為 CIO 或專案經理而設計的。權力、財富可能是旅途的副產品,但不應該是主要動機。真正的工匠不會倒數退休日,而是心甘情願地工作到最後。
如果說 Accurate Self-Assessment 是成功學徒期的基石,那麼 The Long Road 就是地基。從學徒到旅人(journeyman)的轉變只是通往精通之路上的第一步。軟體開發者是幸運的:我們的道路本質上不斷變化,摩爾定律持續推進,新平台不斷開啟探索機會。然而,許多變化只是表面的——新技術取代舊技術,但解決的是同樣的根本問題。The Long Road 教導工匠更深層的真理,讓大師能夠超越特定技術,直抵問題核心。
行動#
閉上眼睛,想像 10 年後你可能扮演的最不尋常的角色。然後想想 20 年、30 年、40 年後。想像 40 年後有人請你寫下職業生涯簡述與最大的影響因素——用這個思想實驗來幫助你規劃未來的職涯選擇。
Craft over Art – 工藝優先於藝術#
情境#
你被雇來為客戶解決問題,建造有用的東西。
問題#
雖然已有經過驗證的解決方案,但客戶的問題給了你一個機會去做些「真正驚豔」的事——創造出能讓同事讚嘆的美麗作品。
解法#
工匠精神建立在穩固的關係上。 專注於為客戶交付價值,而非追求個人的藝術表達或自我利益。
- 工匠首先是在為他人的需求而建造,而非沉迷於藝術表現。正如 Laurent Bossavit 所說:「工匠餓死是一種失敗——他本該靠手藝謀生。」
- 你需要將客戶的利益置於展示技巧或充實履歷的慾望之上,同時仍遵守軟體開發社群的最低品質標準
- 如果因為太過藝術家而無法在現實世界中交付作品,你就離開了手藝;如果對美的追求迫使你遠離了建造有用之物,你同樣離開了手藝
工匠重視一個讓人微笑的 50 行小遊戲,勝過一個推進計算機科學前沿但無法遊玩的百萬行遊戲。有用(utility)與美麗(beauty)不是對立的,而是相互依存的。
另一個面向是:客戶需要你在沒有靈感的時候也能產出合格品質的作品。工匠不會等到靈感降臨才交付成果。這雖然限制了藝術的自由,但帶來了即時的價值。
當你過度偏向藝術或權宜之計時,修正錯誤的方式不是從頭重寫(這可能不符合客戶利益),而是學會重構與修復。正如 Richard Sennett 在《The Craftsman》中寫道:「我們常常是在修東西的過程中理解它們是怎麼運作的。」
行動#
在接下來的 24 小時內,找一個機會做有用的事而非漂亮的事。另外,回想過去一年中你選擇了藝術性而非實用性的情境,結果如何?如果當時做了不同的選擇,會怎樣?
Sustainable Motivations – 持續性動力#
情境#
身為學徒,你必須發展技術能力。這意味著你經常要在規格模糊、需求變動且相互矛盾的專案中工作。
問題#
在真實專案的戰壕中工作是嚴苛的,時而乏味、時而疲憊,經常令人沮喪,還可能過度混亂或過度受限。
解法#
確保你對工匠精神的動力能在 The Long Road 的考驗中存活並調適。
會有那些美好的日子,你寫的程式碼如行雲流水、功能與設計俱美。但那是非凡的日子,不是日常。Paul Graham 說得好:「能賺錢的軟體和寫起來有趣的軟體之間,重疊很少。」典型的程式工作會讓你面對乏味、定義模糊、不必要地複雜的問題,再加上官僚主義、難搞的同事和不穩定的領導。
當你對這份手藝產生懷疑時,關鍵在於你的動力是否與 The Long Road 對齊。單一動力來源是脆弱的,多元動力才能讓你撐過低潮。
書中舉了三個例子說明動力的互補:
- 金錢為主、聲譽為輔:你討厭目前的工作但靠聲譽撐住,直到局勢好轉
- 樂趣為主、金錢為輔:暫時失去熱愛,但因為程式是最好的收入來源而堅持,最終熱愛回歸
- 聲譽為主、信念為輔:開源專案聲譽成長停滯,但對自由軟體的信念讓你繼續,最終專案開花結果
Jerry Weinberg 描述了一種叫做 Golden Lock(黃金枷鎖) 的現象:「我想學新東西,但我已經會的東西薪水太好了。」渴望精通的動力應該讓你對 Golden Lock 保持警覺。書中以 Obie Fernandez 為例——他放棄了穩固的 Java 專家地位去學 Ruby on Rails,避開了黃金枷鎖,最終達到了更高的成就。
同時也要注意平衡。Marten Gustafson 因為對手藝的熱情而把所有時間精力投入瀕死專案,陷入了英雄主義的陷阱。走 The Long Road 的人不是衝刺幾年就燃燒殆盡的英雄,而是以可持續的步調走數十年的人。
行動#
寫下至少 15 個激勵你的事物,稍後再寫 5 個。其中有多少是關於別人怎麼看你,而非你自己的感受?前 15 個和後 5 個的比例有差異嗎?哪些動力因素是你可以捨棄的?最後,寫下 5 個最重要的動力因素,放在你在困難時期可以看到的地方。
Nurture Your Passion – 培養你的熱情#
情境#
你被雇為「只是」一個軟體開發者。
問題#
你的工作環境壓抑了你對手藝的熱情。
解法#
採取行動來保護和培養你對軟體工匠精神的熱情。要成為旅人,你需要對軟體工匠精神懷有熱情。不幸的是,日常活動往往在消磨這份熱情——令人沮喪的企業階層制度、專案死亡行軍、虐待式管理者或憤世嫉俗的同事。
以下是幾個具體做法:
- 做你喜歡的事:在工作中找到你感興趣的事物,全力投入。如果工作時間不夠,考慮在工作之外建造一些 Breakable Toys
- 尋找志同道合的人(Kindred Spirits):加入本地使用者群組、寫部落格、參與線上論壇和郵件列表,分享你所學的東西
- 研讀經典(Study the Classics):沉浸在領域的偉大著作中,能在你的熱情受威脅時撐住你
- 繪製你自己的地圖(Draw Your Own Map):當你的需求與雇主提供的職涯路徑矛盾時,考慮轉移到更契合的組織
專案死亡行軍可能是最具破壞力的敵對條件。它耗盡你的時間和精力,讓你無法採取任何有意義的行動來保護熱情。走 The Long Road 的人不是衝刺幾年就燒光的英雄,而是以可持續步調行進數十年的人。
要讓熱情成長,就要設定清楚的邊界:
- 當團隊加班時你準時離開
- 走出已經變質的會議
- 將憤世嫉俗的對話引導到建設性話題
- 拒絕發布不符合你最低標準的程式碼
這可能讓你錯過加薪、升遷或人氣,但這些邊界是你擺脫敵對條件、維持熱情的必要條件。
Paul Graham 說:「試著保留你 14 歲時對程式設計的那種驚奇感。如果你擔心目前的工作正在腐蝕你的大腦,它很可能就是。」
行動#
在上班路上準備三個正面話題。如果對話開始消耗你的能量,就把它引導到這些話題上。下班路上回顧你的成功程度,思考其他改善環境的方法。
Draw Your Own Map – 繪製你自己的地圖#
情境#
任何一個雇主都只能提供所有可能職涯路徑的有限子集。
問題#
你的雇主提供的職涯路徑中,沒有一條適合你。
解法#
找出你職涯的下一個合理但有野心的步驟。理解這件事不是雇主、職涯顧問或教授的責任——這是你自己的責任。
- 確定下一步後,視覺化那些需要你走的較小的中間步驟
- 踏出第一步至關重要,即使它看起來微不足道。第一步會產生動能,幫助你朝目標前進
- 與其寫下高層次目標,不如定義小的、可達成的步驟。這些小步驟提供回饋讓你修正地圖,也讓 Kindred Spirits 更容易幫助你
- 如果你的自我願景與雇主的願景不一致且無法調和,就檢視其他機會
- 持續重新評估你的地圖,因為你的處境和價值觀會改變。地圖永遠是你的,你隨時可以重新繪製
使用 Sustainable Motivations 和 Use Your Title 來防止你目前的職稱和薪水限縮了地圖上的可能目的地。如果你需要轉入一個頭銜不那麼響亮的角色才能「留在地圖上」,想想 The Long Road,比較短期的頭銜與長期待在更契合目標的公司之間的相對重要性。
書中分享了 Desi McAdam 和 Chris McMahon 的故事。Desi 從系統管理員出發,經歷了多次轉換才最終進入開發角色;Chris 在被告知「不准再學更多」後選擇離開。兩人的共同點是:他們不會讓公司的期待或文化阻擋他們成為更好的程式設計師的目標。
行動#
列出你目前工作之後可以做的 3 份工作,再為每份列出 3 份後續工作。審視這 12 份工作,是否真的代表了你未來幾年的全部可能?試著擴展圖表(每 9 份再各加 3 份),然後問自己:如果放鬆某個你一直接受的限制——願意搬到另一個國家、取得新資格、學一門新語言、創業——會怎樣?可能性比你想像的多得多。
Use Your Title – 善用你的職稱#
情境#
因為你對學習的投入,你被聘用或晉升到一個頭銜中包含「senior」、「architect」或「lead」等字眼的職位。
問題#
你的職稱與你在鏡子裡看到的不符。在專業場合自我介紹時,你覺得必須為技能水準與職位描述之間的落差道歉或解釋。
解法#
不要讓職稱影響你。 它是一個應該被放在意識邊緣的干擾。用你的職稱來衡量你的組織,而非衡量你自己。
- 頭銜太響亮:不要被響亮的頭銜迷惑。你母親可能覺得你當之無愧,但響亮的頭銜和責任不代表你的學徒期結束了——它們只是提醒你,這個行業缺乏工匠
- 頭銜太低調:儘管你已經超越了同事,卻沒有得到相應的認可。同樣,用這個情境來衡量你的組織是否適合你,而非讓挫敗感拖慢你
- 非正式頭銜:你可能在團隊中長成了實質上的權威角色,但正式頭銜沒變。這些非正式頭銜可能很難忽視,因為同儕不斷強化它們。這時與導師和 Kindred Spirits 的連結將至關重要
Dave 的例子:在寫出第一支 Perl CGI 程式兩年後,他的頭銜就是「Senior Application Developer」。擁有相當準確的自我評估後,他看到了其中的幽默,並將這個頭銜視為需要繼續前行、繪製自己地圖的信號。
行動#
寫下一個冗長且描述性的版本來說明你的職稱,確保它準確反映你實際做的工作和技能水準。定期更新它,並不時想像一個陌生人擁有這份工作描述時你會怎麼看待他。
Stay in the Trenches – 留在戰壕裡#
情境#
因為你對學習的投入,你建立了能有效交付軟體的聲譽。在你的組織中,卓越的工作會被以階層晉升來獎勵。
問題#
你被提供了一個會把你從程式設計拉走的晉升機會。
解法#
晉升的邀約是對你是否擁有 Sustainable Motivations 以及是否願意走 The Long Road 的考驗。大多數人把晉升到管理層等同於成功。但立志成為工匠的人不能被騙去相信自己會長期維持「技術經理」的角色。如 Pete McBreen 所寫:「一個人一旦停止練習,精通就會褪色。」每一天不寫程式,就是離旅人之路又遠了一步。
- 與雇主合作找到其他獎勵機制:更高的薪水、非傳統的技術領導角色(如內部顧問)
- 如果組織不夠靈活,寧可另尋機會也不要允許自己被晉升到遠離手藝的位置
- 留在戰壕是培養熱情(Nurture Your Passion)的一種方式
隨著經驗增長,你可能會發現自己試圖改變工作環境,好讓其他人也能繼續做他們熱愛的事。但要小心不要讓這變成全職工作,除非你找到方法為越來越資深的程式設計師創造一個自我維持的環境。
行動#
你的雇主如何獎勵卓越表現?如果現有的獎勵不吸引你,開始思考他們可以用什麼其他方式獎勵你。考慮是否有標準限制在你的情況下可以放寬——合約中的限制性條款或需要贊助的激進想法。準備好一份替代獎勵清單,這樣當你拒絕晉升時,你能基於對自身動力的清晰理解來談判。
A Different Road – 一條不同的路#
情境#
你已經使用了 Draw Your Own Map 並忠實地遵循它。
問題#
你繪製的地圖將你引離了 The Long Road。
解法#
跟隨你自己的地圖,並記住你在學徒期學到的東西。
你可能已經在 The Long Road 上走了一段時間,但現在你發現這條路不再適合你。你找到了另一條路,其回報更符合你當前的價值觀——更多家庭時間、更多金錢,或者一個新的職業吸引了你的注意。無論是什麼,它意味著與手藝和 The Long Road 告別。這可能是暫時的,也可能是永久的。
- 即使你永遠離開,在路上培養的價值觀和原則會永遠與你同在
- Ivan Moore 在第一份 IT 工作後去希臘島嶼當了六個月的風帆衝浪教練。他發現教衝浪很有趣,但不完全滿足,因為「從來沒機會用到大腦」
- 作者們的同事有人離開軟體開發去當教師、衝浪教練或全職父母。當他們回來時,因為新的視角而受到歡迎
傳統的軟體組織可能不會那麼友善地看待這些「彎路」。他們視之為履歷中可疑的空白,要求你用他們的價值體系來解釋。但不要因此害怕做不一樣的事——嚴謹思考和自動化大量數據任務的習慣,無論你去哪裡都是有用的。你作為軟體工匠的過去會豐富你選擇的任何未來。
行動#
如果因為某種原因你不能再當軟體開發者,你會做什麼?寫下你覺得自己會喜歡的其他工作。找到正在做那些工作且熱愛它們的人,問他們喜歡什麼,並與你喜歡軟體開發的原因做比較。
Wrapping Up – 本章總結#
本章中直接支持學徒在 The Long Road 上旅程的模式可以被組合成無數種排列。它們在章節中的排序並不意味著線性的進程。書中給出了三個場景來說明:
場景一:順暢前行
你在 The Long Road 上走得相對輕鬆,工作環境沒有壓抑你,手藝熱情強烈。你表現優異,獲得了「architect」的頭銜但仍在全職寫程式。你的 Accurate Self-Assessment 建議你使用 Use Your Title 來衡量組織的水準。這可能足以讓你留在 The Long Road 上。
場景二:對抗金錢誘惑
你的組織強調金錢獎勵,潛在的壓力迫使人們追求更高薪水。你認出了這股暗流的危險,透過 Nurture Your Passion 和 Sustainable Motivations 保持方向。你對 Craft over Art 的專注讓聲譽增長,被提供了專案經理的晉升。透過 Stay in the Trenches 和 Draw Your Own Map,你與雇主合作定義了一條能讓你留在 The Long Road 上的職涯路徑。
場景三:從藝術到工藝
你從小就寫程式,動力來自於創造美麗優雅的解決方案。但在企業世界中,你面對的是不愉快的任務和不在乎優雅的客戶。你認出你的程式動機與 The Long Road 不一致,採取步驟 Nurture Your Passion,透過 Craft over Art 發展更 Sustainable Motivations。最終,你逐漸培養出與客戶建立穩固關係的動力。
這些模式的組合可能性如同學徒所處的情境一樣無限。關鍵不在於遵循固定的順序,而是根據你當下的處境,靈活地運用這些模式來保持在漫漫長路上的前行。
