Effective Engineer - Optimize for Learning
July 04, 2017這篇是Effective Engineer - Optimize for learning章節的讀書筆記 我讀過不少教engineer如何成長的文章 但通常都是老生常談 看沒兩天就忘了 但這篇的建議我覺得都很好 不求全部做到 但求砥礪自己每天進步
成長型心態
作者說他剛畢業時是個比較內向的人 都不太認識新朋友 但看了金凱瑞的YesMan之後 一直參加meetup去認識人 從每一次失敗的或是尷尬的對話中去求進步 他證明了這些social skills是可以學習的 而且他在進步過程中認識的人也在未來的路上影響他很多
重點是我們的心態決定了我們能做什麼事情 世界上有兩種人
一種是fixed mindset 相信人類得能力是天生 智商決定一切 那這種人在學習新東西的時候 一遇到挫折就很容易這樣子說服自己
另一種人是growth mindset 這種心態的人相信努力就可以增加智慧習得新技能
這兩種心態的最大差別是你會不會把握機會去學習技能
學習的速度
大家都知道複利會讓本金大幅提升 (photo credit: wikipedia)
1.學習也是指數成長 好的基底才會有好的大樓 數學邏輯不好recursion就學不好 recursion學不好 你的tree跟graph都學不好 graph學不好 compiler跟計網都不會學好
2.越早optimize learning 複利起來就越大 所以第一個工作會影響第二個 第二個會影響第三個
3.一點點細微的變化 長遠的來看就會非常巨大 因為我們我們低估了長期的效果
4.你做無意義的事情的機會成本 就是未來的大量損失 因為我們我們低估了長期的效果
第3點大家都聽過 什麼每天進步1%一年進步37倍的鬼話 在天上畫大餅空談而已 但換句話說 變成第四點 整個建議就變得非常具體
結論就是越早增長你的base越好
知道growth rate很重要後 那要怎麼樣才能增加自己的growth rate呢
工作環境
當然第一個就是你一個禮拜花40小時的地方了
1.成長的夠不夠快: 一個公司能解決的問題多於手上的資源 而且成長夠快才能吸引人才 避免政治內鬥
2.訓練: onboarding program如何 看一個公司的bootcamp就知道這個公司重不重視效率 新人問老手也是需要花老手的機會成本
3.開放性: 團隊有沒有持續學習 從錯誤決策吸收經驗 對於每個團隊決定有沒有人提出質疑問題 大家是不是樂於問問題 feedback夠不夠透明
4.步調: release cycle長短 feedback cycle 使用的tool效率如何
5.周圍的人: 跟你合作的人»你正在做的事
6.自治: 自己選擇做哪個project的自由度
花時間學習技能
有了好的環境之後 並不代表忙工作上的事就好了 你要花20%的時間學新東西 作者舉耳熟能詳的Gmail跟Adsense做例子 那些都是在20%的非工作時間做出來的
最好是每天有一到兩小時 而不是一個禮拜有一天 這樣可以養成好習慣
至於進步方向 除了你原本就該專精的語言學問之外 作者建議要鑽研相近學科
這個指的是你有機會接觸的領域 特別是常常在工作上block你的東西
如果你是PM 那AD就可能是UI design, user research 自動化
如果你是web engineer那ad就是infra, machine learning等
還有十個小建議 你可以在20%時間做的事
1.讀大公司裡面的神人code 從你最近用的library開始 問自己如果是你開發 你會不會寫類似的code 了解為什麼他這麼寫 甚至去看之前的版本有沒有跟你想法一樣
2.多寫程式 不要以為你看看就懂了 去寫
3.看公司的tech talk 或是tech文件
4.精通你正在使用的語言 確保你精通至少一種script language(Python Ruby) 這像瑞士刀一樣可以隨時拿出來幫你處理雜事
5.把你的code review給很挑剃的人 提高自己的code bar而不是降低review bar 跟強者討論design 不要讓你的猛code去實作不猛的東西
6.參加你想要進步的課程的online course Coursera Udemy都很多
7.有興趣的project主動去參加discussion 不要等別人邀請你
8.Project的多樣性 不要一直用一樣的skill做一樣的事 這樣不會進步
9.確保你的team有夠強的人可以讓你學習 讓你在另外的80%裡面學習快速
10.別怕去讀一些你不熟的code. in the practice of digging into things you don’t know, you get better at coding
一直學習
除了把工作的時間分成80-20之外 工作之外的時間也應該學習
1.學新語言跟新framework
2.投資需求高的技術 看現在最常出現的job description需要什麼大概就是現在的trend
3.讀書 讀別人的人生 學習別人的錯誤經驗
4.參加討論 讀書會
5.建立network
6.follow好的教學blog
7.自己寫部落格
8.做side project