收到網友提問如下:
這是最近跟一個朋友聊天聊到的
朋友是寫 .net Framework 的
我剛碰Vue的時候,跟他說我看不懂Vue在背後是怎麼運作的、為什麼這樣寫會變成這樣的結果?
他跟我說,不用去在意框架背後幫你做了哪些事情
反正就是做那些制式的動作,把功能實現就好
不然工程師哪有那麼多腦力去記住程式底層都做了什麼
這樣真的是好的嗎?
工程師的等級差距並不在於是否知其所以而不知其所以然嗎?
這應該是每個年輕工程師都有的疑問,寫一篇完整、公開回答跟大家分享,給類似狀況的人參考。
我先講結論:這取決於你想不想越變越強、不斷提升競爭力,還是只想混口飯吃
如果只想混口飯吃,什麼工具都是學個用法,懶得研究,然後東西做出來交差了事,那可以永遠不去管工具背後原理
不過,這種心態,職涯成長、薪水成長空間會很有限,然後在 40 多歲的時候會有「中年危機」,會很慘、壓力很大
因為屆時新工具你跟年輕人一樣不太會用,舊有的經驗又幫不上忙,因為你從來不肯學背後通用的觀念
回到問題本身,我認為有兩件事情值得分享,有兩個觀點你需要去權衡,我們先談談「抽象」
軟體工程師的主要工作就是「抽象化」,把各種邏輯分不同層次「封裝為抽象」
這樣才有重用性,別人才能基於你的成果,進一步開發更豐富的東西
網路的七層架構,各種協定,程式語言,語言上面的工具、套件、框架,都是抽象
這是在軟體圈知名的一個理論,稍微資深的開發者都應該要知道這篇文章
https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/
我簡單說明一下,抽象滲漏法則就是在說:所有抽象都一定會在某些情境下失效,此時便是滲漏。
你只要工作時間夠久就會知道,長遠來說,你還是要花時間去研究它抽象背後的東西。
你本以為只是前端隨便寫一寫交差,卻發現有一天需要認真去看 HTTP 協定、CORS 在講什麼,否則無法處理資安問題
你本以為只是後端 CRUD 隨便寫一寫交差,卻發現有一天需要認真去看 database 索引機制、記憶體管理,否則無法處理效能問題
結論:「抽象」幫助我們省下一些工作的時間,但關於技術細節的學習時間,無法省下來。
我認為工程師常常在另一個方面犯錯,就是鑽研自己喜歡的細節,不去管對於公司的商業產值與個人生產力
我曾遇過公司要求協助更換一張網頁圖片,某工程師居然兩個星期還沒更換完成
問他原因,原來是他看圖片尺寸不順眼,在研究分割、壓縮、整個網頁的整合機制,以及相關工具的導入
問題是,那個網頁跟圖片並不重要,此時專案還沒進到效能優化的階段,此功能應該盡快上線,視情況決定下一步
這完全是沒搞清楚優先順序,只顧著研究自己爽的東西,也沒跟相關人士確認任務目標
回到原 po 的描述
不然工程師哪有那麼多腦力去記住程式底層都做了什麼
這是大錯特錯,隨便找一個優秀的資深工程師,從 Vue 到 React 到各種工具,背後原理、相關機制,都能深入淺出跟你說明
什麼 shadow DOM / virtual DOM / pure function / fiber tree / proxy / immutable 等等,就算好幾個月不碰工具,還是能輕鬆解釋,根本不是死記硬背的,這全都是經驗&融會貫通的結果
但是過猶不及,不顧公司需求,自顧自地研究技術細節也不好
該花多少時間研究背後機制?這是一個需要權衡的問題
請從公司需求的角度,以及個人長期職涯的角度,視情況判斷
以上,簡單分享