前言#

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 的建議不一定對——他一開始就提醒你不要聽他的話。