背景#

2007 年 11 月 28 日,Joel 回到母校耶魯大學計算機系發表演講,分享他 16 年職業生涯中從大學課程獲得的啟發。演講分為三個部分:最有用的課程、職業經歷與教訓、以及創辦 Fog Creek 軟體公司的故事。

第一部分:大學裡最有用的課程#

CS 323(系統程式設計)#

  • 耶魯大學核心課程,每週課後作業需要 40 小時完成
  • 最大的優點:讓許多人明白自己不適合當程式設計師,這是一件好事
  • 授課老師 Stan Eisenstat 教授會讓學生認清自己的編程能力

動態邏輯(Dynamic Logic)#

  • Joel 只聽了一次課就決定放棄,卻因此決定不去讀計算機科學的研究所
  • 動態邏輯與形式邏輯相似,但真值(truth value)會隨時間發生改變
  • 課堂上 Zuck 博士的證明過程寫滿整整兩面黑板,極其艱難

這門課讓 Joel 做出了職業生涯中的重要發現:程式設計師傾向於把問題重新定義為可以用演算法解決的形式,但這只是解決了問題的外在形式,並沒有解決真正的問題。這就是所謂的「瑣碎」問題。

演算法思想(CS 115)#

  • 為人文專業學生開設的選修課,由 Roger Schank 教授設計
  • 要求學生撰寫大量關於技術內容的文章(每週一篇,共 13 篇)
  • 這門課訓練了 Joel 的技術寫作能力,成為他職業生涯中最有用的技能

第二部分:軟體品質的兩種觀點#

技術派(Geeks)vs 務實派(Suits)#

  • 技術派想用軟體自動處理品質問題:單元測試、TDD、自動化測試,目標是「證明」程式沒有錯誤
  • 務實派並不真正關心品質本身,只要有人願意花錢購買就好

務實派對「品質」有更廣義的定義:軟體能為使用者帶來多少價值、能解決多少問題、介面是否美觀易用。這個定義遠不止於「沒有 bug」。

規格說明書的困境#

  • 技術派最終會走入一個死胡同:為了用機械方法證明程式正確,規格說明書必須詳盡到等同於程式本身
  • 這意味著寫規格說明書和直接寫程式一樣困難
  • 追求軟體品質的「聖杯」,讓許多人白白走了彎路——微軟的 Windows Vista 就是一個例子

第三部分:職業經歷與創業#

內部程式設計師(In-house Programmer)的三大問題#

  1. 永遠被迫用最保險的方法做事——聘請程式設計師太貴,公司只會用 Visual Studio 拖拉控件
  2. 程式只要能用就不會再改進——沒有商業動機去打磨和優化
  3. 程式設計師不是核心業務——在非軟體公司,程式設計師永遠被邊緣化

世界上大約 80% 的程式設計師是內部程式設計師。如果從學校畢業時不夠小心,你可能會不知不覺地在內部軟體開發中耗盡職業生涯。

管理風格的教訓#

  • 在 Juno 公司,Joel 觀察到「打了就跑」的管理方式:經理對每件事都要插手決定微小的細節,然後消失不管後續
  • 好的管理應該是讓聰明人自己把事情做完,而不是事必躬親

創辦 Fog Creek 軟體公司#

  • Joel 決定創辦一家真正尊重程式設計師的公司
  • 核心理念:製造高品質的產品、不讓風險投資家或 24 歲的總經理指手畫腳、關心客戶、無條件接受退款
  • 「Joel 談軟體」部落格就是在這段時期誕生的,成為他最重要的行銷管道

Joel 的最終忠告:學校教的東西只是起點。如果你想學習如何開發軟體,就去找一份好的暑期實習——在真正的軟體公司裡,從實踐中學習。