[The Effective Engineer 筆記] Optimize for Learning

Tzu-Chi Lin
5 min readJan 31, 2021

--

這是 Adopt the right mindset 下的第二章,最佳化學習,可以把它想成,如何提高學習的 leverage 並持續學習。作者認為,世界上有兩種人,一種為 fixed mindset,這類人認為人的智商是天生的,無法改變的,所以當失敗的時候就會這樣說服自己。第二種為 growth mindset,這類人相信努力就可以增加智慧或學習新技能。作者提到他原本是一個內向的人,在看了Yes Man 之後,決定一直去參加meetup 認識人,並從尷尬的對話中進步,也證明了連社交技能都是可以學習的。後面提到了學習的複利,類似每天進步1% 一年之後就可以進步37倍之類的雞湯。我們都知道學習很重要,那要如何增加自己學習的 growth rate 呢?以下才是重點

工作環境

想單然爾,第一點就是選擇一個可以讓你快速成長的地方,作者列出了以下六點來判別是否是好的工作環境

  1. Fast growth 成長的速度:所謂站在風口上,連豬都會飛。如何選擇一家快速成長的公司呢?可以問自己以下的問題
  • 公司的 weekly or monthly growth rates 是多少
  • 你在做的事是high priority 嗎?公司有給足夠的資源嗎?
  • 公司或團隊在去年招了多少人?
  • 團隊上最強的人多快升遷?

2. Training 訓練:如同上一章說的,on-boarding program 是非常high leverage 的活動,看一個公司重不重視on-boarding,就知道這個公司重不重視效率。Google 有所謂的engEDU,Facebook 也有所謂的 Bootcamp,都是在幫助新人快速的熟悉公司的開發環境

  • 公司有正式的 on-boarding program 嗎?
  • 有正式或非正式的 mentor 嗎?
  • 公司有做什麼來確保員工可以持續學習和成長嗎?
  • 組員最近學了什麼?

3. Openness 開放性:團隊有沒有持續學習、有沒有從錯誤中學習、公司文化有沒有鼓勵員工提問題、feedback 夠不夠透明、有沒有從失敗的project 中了解原因

  • 員工知道其他團隊在做什麼嗎?
  • 公司內部的wiki 完整嗎?
  • 團隊有從錯誤中學習嗎?

4. Pace 步調:團隊開發的步調、release cycle 和 feedback cycle 的長短、有沒有使用自動化工具加速開發、有沒有繁文縟節降低開發效率

  • moving fast 是公司的文化嗎?
  • 團隊用什麼工具來加速迭代?
  • 從一個 idea 的概念到同意開發要多久時間?
  • 花多少比例的時間在維護系統、花多少時間在開發新功能?

5. People 人:要跟比你更聰明的人工作

  • 面試你的人看起來比你聰明嗎?
  • 他們有什麼技能可以教你嗎?
  • 面試有很全面嗎?你想要跟這類人工作嗎?
  • 員工通常是自己做自己的 project,還是一起做一個 project?

6. Autonomy 自治:是否有自由選擇project 的權利

  • 員工可以自由選擇project嗎?
  • 員工多常換組或換project?
  • 員工在一年中可以接觸到多廣的 codebase?
  • 工程師有參與 product design 或影響 product direction 嗎?

花時間學習新技能

大家可能聽過 Google 有所謂的 20% 的自由時間可以做自己有興趣的side project,像是 Gmail 就是在這時做出來的,這也代表了額外花時間學習的重要性。最理想的方式是每天花一兩個小時,而不是一個禮拜花一整天,因為這樣可以養成學習的習慣

那麼這20% 的時間可以做什麼呢?除了專精在原本的專業之外,也可以學習相近的領域。假如你是 product engineer,相近的領域便是 product management、user research、或是 backend。假如你是 infra engineer,相近的領域可能是machine learning,database internal、或是web development。大家可以想成,在你的職務上有跟誰合作,那些人可能就是跟你比較相近的領域。作者另外提出了10個建議

  1. 讀公司裡大神的code,可以從你使用過的library 開始。問自己會怎麼寫、了解為什麼他這麼設計、看之前的版本有沒有被重構。也可以去讀一些公司有在使用的 open source project
  2. 寫更多code,learning from doing
  3. 多讀公司的 tech talk 或是 document
  4. 精通你在使用的語言、多熟悉 core libraries、會使用至少一種script language (like Python or Ruby)
  5. 給最挑惕的人 code review、跟最強的人討論design
  6. 參加你想進步的課程,現在線上課程很方便,Coursera, edX, Udemy, or Udacity,或是MIT Stanford 也有online course
  7. 參加有興趣的project 的討論
  8. 做不一樣的project、確保project 的多樣性,每次做相似的project 很難學到新東西
  9. 確保你的團隊有更強的人可以讓你學習
  10. 不要害怕去讀不熟的code,當你在深入了解那些你不熟的code,你同時也在進步

除了以上的建議,作者也對於工作之外的時間另外提了10個建議

  1. 學習新語言和framework
  2. 學習需求高的技術,看看你有興趣的職位最常出現的job description 是什麼,問問自己會不會、有什麼機會可以應用在工作上
  3. 讀書
  4. 參加討論會
  5. 參加 talks, conferences, meetings
  6. 建立好的network
  7. 讀 blog、追蹤一些好的blogger
  8. 寫作、寫技術文章、寫blog
  9. 做 side project
  10. 追尋你所愛的事

本章小記

  1. 找到好的工作環境
  2. 保握每個可以在工作上學習的機會
  3. 工作外也可以精進自己
  4. 學習、學習、學習

--

--