軟體工程師無法逃避的宿命:持續學習、大量練習
"
前幾天在 Hacker News 上有人詢問要如何持續改進:How do you keep improving? 就軟體工程師來說,工作一段時間後會感到事情變得有規律,你累積的經驗及知識足夠完成日常工作所需,就算有新的技術沒有學習,你使用舊有方式也可以完成任務。
但軟體工程是個很特殊的行業,其他眾多行業的人從大學以來累積的知識能力,一般不會過時的太快,工作累積經驗後越來越輕鬆。軟體業則是各種技術百花齊放,從新的語言、新的框架(framework)、新的協定、每一個新事物都有其解決問題的獨到之處,如果你連續幾年都沒有學習,可能很快你就會被市場淘汰也找不到下一份工作。
如果持續終身學習那麼重要,那首先,要如何判斷你有在學習呢?這篇文章 Learning without a mentor: how to become an expert programmer on your own 提到一個很好的判斷方法:如果你在煩惱、困惑,如果你感到笨拙及一切事物都比想像中難,那麼你就有在學習了。 (If you're irritated and a little confused, if you feel clumsy and everything seems harder than it should be: now you're learning.)
有學習是一個開始,那麼你需要學習什麼呢?撰寫 Effective Engineer 的 Edmond Lau有一篇好建議:Master Adjacent Disciplines,文中提到許多人會困惑不知道是要通才般的學習各種技能還是把一項能力學到極度專精對職業生涯發展比較好?他的建議是首先找你有熱情想要學的領域,如果你沒有特別對哪個方向有熱情,他建議學習和你最專精才能相近的技能。像是前端工程師除了網頁端的技術外,可能可以學習一些產品設計、API設計及實踐等等。學習相近技能的好處是你可以在工作上更不用依賴別人而自給自足。
學習的方向有了,接下來要如何有效率學習?很多人推薦的方式是:教學。只有當你需要教學了,你才會好好的檢視你所知的內容並內化你所知道的知識。如果你沒有好的教學機會,也可以像我一樣寫部落格。:)
在同公司不同部門轉換、或是換公司都是很好的方式讓你走出舒適圈並逼你學習。很多人常會被當下火熱的新鮮技術吸引而學習,但其實很多技術都是新瓶裝舊酒,核心概念都沒有差很多,我們學習的重點應該不是技術,而是技能,以前端領域舉例,技術是像各種前端框架 Angular、React、Vue.js 等等,而技能則是測試、除錯、架構、最佳實踐。有好的技能後,許多技術都是可以觸類旁通的。
學習貴在實踐,當你學了一樣技能後,除了教學幫助你內化,大量練習,用你新學到的知識來開發新產品則讓你更加掌控技能。 Build as much as you can 提到要把你的技能提昇層次,最好的方法就是用大量練習磨練你的技巧,文中舉陶藝課老師把學生分成兩組,一組用陶器的品質打分數,一組用陶器的總量來打分數,而成果是用總量來打分數的那組不僅做出更多的陶器,陶器的品質也更好。總結來說,用質來打分數那組花太多時間想如何做好,而用總量打分數的學生則是在每次錯誤中學習成長,下次做的更快更好。
之前我問了一位 Facebook Engineering Director 軟體工程師如何成長,他的回答很簡單,就是 code, code, code。持續寫程式、用更有效率方法寫程式、寫出更好更高品質的程式,從做中學,從錯誤中學,你才可以持續改進變成更好的軟體工程師。
...
"
https://brianhsublog.blogspot.com/2017/05/blog-post.html
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...