前言#
Joel 自嘲自己已經「無可救藥地過時了」,但仍然提出了給計算機系學生的 7 條免費建議(外加第 8 條)。這些建議的核心思想是:能夠以自己喜歡的事情謀生,是非常幸運的,但你需要在大學期間主動補足課堂不會教的東西。
七條建議#
1. 畢業前練好寫作#
- 表達能力是區分普通程式設計師與有影響力的程式設計師的關鍵
- 如果你能寫出清晰的註釋和技術規格說明書,其他程式設計師就能理解並重用你的程式碼
- 如果你能為最終用戶寫出清楚的使用手冊,你的程式碼才有真正的價值
去上那些被稱為「寫作密集型(writing intensive)」的課程——不管什麼學科,只要每週甚至每天都要求你寫東西,就去上。寫得越多,寫作就會變得越容易。
2. 畢業前學好 C 語言#
- 注意是 C 語言,而不是 C++
- C 語言比「現代語言」(ML、Java、Python)更接近機器,能讓你理解機器原理
- 不懂 C 語言,別人永遠不會放心把大型專案的架構設計交給你
如果你不能解釋
while (*s++ = *t++);這行程式碼的作用,那你就是在盲目無知的情況下編程——就像一個不懂基本解剖學的醫生在開處方。
3. 畢業前學好微觀經濟學#
- 經濟學中真正有用的部分是微觀經濟學,它是所有商業領域的理論基礎
- 你必須理解供給與需求、淨現值(NPV)、貼現、邊際效用等概念
- 懂得基本商業規則的程式設計師,比不懂的程式設計師更有價值
4. 不要因為枯燥就不選修非計算機專業的課程#
- GPA 很重要——人事經理和招聘人員拿到簡歷第一眼就看 GPA
- GPA 代表了許多教授在不同情境下對你表現的綜合評估
- 選修有趣的通識課程(如文化人類學),訓練你對抗枯燥的耐力
Joel 選修了文化人類學課程,內容極其無聊,但他堅持下來並拿到了 A。他把這當作「對抗無聊的免疫訓練」——如果連最無聊的課都能應付,以後天底下再無聊的東西都不怕了。
5. 選修有大量編程實踐的課程#
- 學校裡找那些課程代號中帶有 Practicum 的 400 等級課程
- 如果你喜歡程式設計,可能會覺得 lambda 演算之類的理論課難以理解,但不要因此灰心
- 計算機科學與軟體開發不是同一回事——精英學校往往不教實際的軟體開發
6. 別擔心所有工作都被印度人搶走#
- 根據一時的商業潮流決定職業選擇是愚蠢的
- 即使編程工作流向了印度和中國,學習編程仍然是一流的素質訓練
- 真正優秀的程式設計師——不管在美國還是印度——依然非常短缺
7. 找一份好的暑期實習工作#
- 聰明的招聘負責人看的是你簡歷上的編程相關經歷,不是在購物中心打工的經驗
- 如果你喜歡編程,不要隨便接受與編程無關的工作
- 到畢業時,你的簡歷上應該寫滿一堆與編程相關的經歷
第 8 條(附贈):如果你頭腦簡單到我說什麼你就做什麼,那你需要尋求專業人士的幫助,培養你的自信心。Joel 的建議不一定對——他一開始就提醒你不要聽他的話。