背景#
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)的三大問題#
- 永遠被迫用最保險的方法做事——聘請程式設計師太貴,公司只會用 Visual Studio 拖拉控件
- 程式只要能用就不會再改進——沒有商業動機去打磨和優化
- 程式設計師不是核心業務——在非軟體公司,程式設計師永遠被邊緣化
世界上大約 80% 的程式設計師是內部程式設計師。如果從學校畢業時不夠小心,你可能會不知不覺地在內部軟體開發中耗盡職業生涯。
管理風格的教訓#
- 在 Juno 公司,Joel 觀察到「打了就跑」的管理方式:經理對每件事都要插手決定微小的細節,然後消失不管後續
- 好的管理應該是讓聰明人自己把事情做完,而不是事必躬親
創辦 Fog Creek 軟體公司#
- Joel 決定創辦一家真正尊重程式設計師的公司
- 核心理念:製造高品質的產品、不讓風險投資家或 24 歲的總經理指手畫腳、關心客戶、無條件接受退款
- 「Joel 談軟體」部落格就是在這段時期誕生的,成為他最重要的行銷管道
Joel 的最終忠告:學校教的東西只是起點。如果你想學習如何開發軟體,就去找一份好的暑期實習——在真正的軟體公司裡,從實踐中學習。