關於這個附錄#
「有事問約耳」(Ask Joel)是 Joel 部落格上的讀者問答專欄。讀者提出關於軟體開發、團隊管理、職涯規劃和技術選擇的各種問題,Joel 以他一貫的直率風格給出回答。本附錄精選了其中最具代表性的問答。
技術選擇#
該用什麼程式語言?#
Joel 的回答一如既往地務實:沒有「最好的」程式語言,只有「最適合特定任務的」程式語言。選擇語言時應該考慮的因素包括:
- 目標平台與部署環境
- 團隊現有的技術能力
- 可用的函式庫與工具生態系
- 長期維護的成本
不要因為某個語言「很酷」或「很流行」就選擇它。語言是工具,選擇工具的標準是它能否有效地完成工作。
該不該追逐最新技術?#
Joel 建議對新技術保持好奇但謹慎的態度。了解新技術是好事,但不要急著在生產環境中採用。讓早期採用者先踩坑,你從他們的經驗中學習,等技術成熟後再跟進。
團隊管理#
如何建立高效的開發團隊?#
Joel 反覆強調幾個核心原則:
- 招聘是最重要的事:寧可多花時間找到對的人,也不要將就
- 提供安靜的工作環境:程式設計師需要長時間不受打擾的專注時段
- 給予自主權:好的程式設計師不需要被微觀管理
- 使用 Joel Test 來自我評估:這 12 個問題可以快速診斷團隊的健康程度
如何處理團隊中的績效問題?#
Joel 認為績效問題通常不是透過激勵制度能解決的(參見「績效獎金有害論」一章)。更好的做法是確保招聘流程足夠嚴格,從源頭避免問題。如果某人確實不適合,盡早坦誠地處理,對雙方都好。
職涯建議#
新手程式設計師該如何提升自己?#
Joel 給新手的建議非常明確:
- 學習 C 語言:理解底層運作原理,這會讓你在使用任何高階語言時都更有洞察力
- 學習一門函數式語言:它會改變你思考問題的方式
- 閱讀經典書籍:如《The Pragmatic Programmer》、《Code Complete》等
- 建立自己的作品集:實際寫程式比讀書更重要,參與開源專案或建立自己的 side project
該加入大公司還是新創?#
Joel 認為這取決於你的職涯階段和個人目標:
- 大公司的優勢在於系統化的培訓、成熟的工程流程、以及與優秀工程師共事的機會
- 新創公司的優勢在於學習速度快、能接觸更多面向、以及可能的財務回報
Joel 建議年輕開發者在職涯初期先到一家有良好工程文化的公司(不一定是大公司)學習基本功,之後再根據自己的興趣和目標來選擇方向。
產品與創業決策#
什麼時候該自己做,什麼時候該外包?#
Joel 的「非我所創症候群辯護」(In Defense of Not-Invented-Here Syndrome)的觀點在此延伸:核心競爭力相關的功能應該自己開發,非核心的功能可以使用第三方解決方案或外包。判斷的關鍵在於:這個功能是否直接影響你的產品差異化?
如何定價?#
Joel 建議不要低估自己產品的價值。許多開發者傾向於把軟體定價過低,因為他們覺得「程式碼不過是幾行文字」。但客戶付費的不是程式碼的行數,而是軟體為他們解決問題所創造的價值。
定價的實務考量
- 考慮你的目標客群的支付能力和意願
- 提供不同的價格層級,讓不同規模的客戶都能找到合適的方案
- 不要害怕收費——免費軟體可能會讓客戶懷疑品質
- 持續提供價值,讓客戶覺得訂閱或更新費用是值得的
工程實務智慧#
如何處理技術債?#
Joel 的觀點是:技術債是不可避免的,但需要有意識地管理。定期投入時間清理技術債,就像定期維護房屋一樣。忽視它只會讓問題越滾越大,最終你會面臨「推倒重來」的誘惑——而那通常是更糟糕的選擇。
何時該重構,何時該忍受?#
- 如果你即將修改某段程式碼,順便重構它是合理的
- 如果某段程式碼運作正常且不需要修改,就別碰它
- 永遠不要進行「為了重構而重構」的大規模改寫
這些問答的共同主題是務實主義:以解決實際問題為導向,避免被理論教條或技術炒作所綁架。Joel 的建議之所以歷久彌新,正是因為它們根植於真實的軟體開發經驗,而非抽象的理想。