收到網友提問如下:

這是最近跟一個朋友聊天聊到的
朋友是寫 .net Framework 的

我剛碰Vue的時候,跟他說我看不懂Vue在背後是怎麼運作的、為什麼這樣寫會變成這樣的結果?

他跟我說,不用去在意框架背後幫你做了哪些事情
反正就是做那些制式的動作,把功能實現就好
不然工程師哪有那麼多腦力去記住程式底層都做了什麼

這樣真的是好的嗎?
工程師的等級差距並不在於是否知其所以而不知其所以然嗎?

這應該是每個年輕工程師都有的疑問,寫一篇完整、公開回答跟大家分享,給類似狀況的人參考。

我先講結論:這取決於你想不想越變越強、不斷提升競爭力,還是只想混口飯吃

如果只想混口飯吃,什麼工具都是學個用法,懶得研究,然後東西做出來交差了事,那可以永遠不去管工具背後原理

不過,這種心態,職涯成長、薪水成長空間會很有限,然後在 40 多歲的時候會有「中年危機」,會很慘、壓力很大

因為屆時新工具你跟年輕人一樣不太會用,舊有的經驗又幫不上忙,因為你從來不肯學背後通用的觀念

回到問題本身,我認為有兩件事情值得分享,有兩個觀點你需要去權衡,我們先談談「抽象」

Abstraction 抽象

軟體工程師的主要工作就是「抽象化」,把各種邏輯分不同層次「封裝為抽象」

這樣才有重用性,別人才能基於你的成果,進一步開發更豐富的東西

網路的七層架構,各種協定,程式語言,語言上面的工具、套件、框架,都是抽象

The Law of Leaky Abstractions,抽象滲漏法則:除非無關緊要,否則所有抽象都或多或少會滲漏

這是在軟體圈知名的一個理論,稍微資深的開發者都應該要知道這篇文章

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 等等,就算好幾個月不碰工具,還是能輕鬆解釋,根本不是死記硬背的,這全都是經驗&融會貫通的結果

但是過猶不及,不顧公司需求,自顧自地研究技術細節也不好

該花多少時間研究背後機制?這是一個需要權衡的問題

請從公司需求的角度,以及個人長期職涯的角度,視情況判斷

以上,簡單分享

按讚的人:

共有 0 則留言