[The Effective Engineer 筆記] Optimize for Learning
這是 Adopt the right mindset 下的第二章,最佳化學習,可以把它想成,如何提高學習的 leverage 並持續學習。作者認為,世界上有兩種人,一種為 fixed mindset,這類人認為人的智商是天生的,無法改變的,所以當失敗的時候就會這樣說服自己。第二種為 growth mindset,這類人相信努力就可以增加智慧或學習新技能。作者提到他原本是一個內向的人,在看了Yes Man 之後,決定一直去參加meetup 認識人,並從尷尬的對話中進步,也證明了連社交技能都是可以學習的。後面提到了學習的複利,類似每天進步1% 一年之後就可以進步37倍之類的雞湯。我們都知道學習很重要,那要如何增加自己學習的 growth rate 呢?以下才是重點
工作環境
想單然爾,第一點就是選擇一個可以讓你快速成長的地方,作者列出了以下六點來判別是否是好的工作環境
- 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個建議
- 讀公司裡大神的code,可以從你使用過的library 開始。問自己會怎麼寫、了解為什麼他這麼設計、看之前的版本有沒有被重構。也可以去讀一些公司有在使用的 open source project
- 寫更多code,learning from doing
- 多讀公司的 tech talk 或是 document
- 精通你在使用的語言、多熟悉 core libraries、會使用至少一種script language (like Python or Ruby)
- 給最挑惕的人 code review、跟最強的人討論design
- 參加你想進步的課程,現在線上課程很方便,Coursera, edX, Udemy, or Udacity,或是MIT Stanford 也有online course
- 參加有興趣的project 的討論
- 做不一樣的project、確保project 的多樣性,每次做相似的project 很難學到新東西
- 確保你的團隊有更強的人可以讓你學習
- 不要害怕去讀不熟的code,當你在深入了解那些你不熟的code,你同時也在進步
除了以上的建議,作者也對於工作之外的時間另外提了10個建議
- 學習新語言和framework
- 學習需求高的技術,看看你有興趣的職位最常出現的job description 是什麼,問問自己會不會、有什麼機會可以應用在工作上
- 讀書
- 參加討論會
- 參加 talks, conferences, meetings
- 建立好的network
- 讀 blog、追蹤一些好的blogger
- 寫作、寫技術文章、寫blog
- 做 side project
- 追尋你所愛的事
本章小記
- 找到好的工作環境
- 保握每個可以在工作上學習的機會
- 工作外也可以精進自己
- 學習、學習、學習