我們都看過這樣的招募啟事:「招募全端開發工程師,精通 React、Vue、Angular、Node.js、Python、Django、Ruby on Rails、PostgreSQL、MongoDB、Redis、Docker、Kubernetes、AWS、Azure、GCP、CI/CD、微服務架構,哦對了——發明的技術必須用三年以上。
坦白說,真正精通整個現代技術棧是個神話。我們該停止自欺欺人了。皇帝的新衣其實不完整,只是我們都妨礙有禮貌不好意思說出來。
二十年前,成為「全端」開發者意味著掌握 HTML、CSS、JavaScript、PHP 和 MySQL。幾年時間就能熟練這套技術棧。當時的技術堆疊就像一個簡單的三明治,簡單易懂,開發者們也樂在其中。那時,Webpack 還無人知曉。
如今?光是前端就已發展成一個規模堪比漫威電影宇宙的完整宇宙,劇情線多到無人能全部掌握:
框架:React、Vue、Angular、Svelte、Solid、Qwik(以及在你讀到這句話時發布的另外三個框架)
元框架:Next.js、Nuxt、Remix、SvelteKit、Astro(因為現在框架似乎也需要框架了)
狀態管理:Redux、Zustand、Jotai、MobX、XState、TanStack Query(因為useState還不夠讓人困惑)
樣式:CSS-in-JS、Tailwind、CSS Modules、Styled Components、Emotion(50 種讓按鈕變成藍色的方法)
建置工具:Webpack、Vite、Turbopack、esbuild、Rollup(每個都號稱「速度極快」⚡)
測試工具:Jest、Vitest、Playwright、Cypress、Testing Library(用來測試你的理智)
而這僅僅是前端的冰山一角。我們甚至還沒涉及到後端框架、資料庫、DevOps、雲端平台,以及其他如雨後春筍般湧現的數十種專業領域。這些領域如同雨後春筍般湧現,卻又極其昂貴和複雜。
殘酷的現實是:你可以對萬物略知一二,也可以精通某一方面──但二者不可兼得。這就像試圖精通47種語言一樣。當然,你可以用所有語言說“你好”和“洗手間在哪裡?”,但想用任何一種語言討論哲學,恐怕都難上加難。
真正的精通需要深入、專注的學習。這意味著不僅要了解如何使用工具,還要理解它為何有效、何時失效,以及如何建立可擴展的系統。這意味著要從生產事故中汲取經驗,並在凌晨三點一邊質疑自己的職業選擇一邊修復故障的過程中獲得智慧。
思考真正的「精通」意味著什麼:
前端高手了解瀏覽器渲染引擎、效能最佳化、無障礙標準,並且能夠除錯複雜的 React 程式碼協調問題(而不會崩潰)。
後端技術專家了解資料庫查詢最佳化、分散式系統理論、快取策略,並且能夠設計容錯架構(同時解釋為什麼「在我的機器上運作正常」不是一種部署策略)。
DevOps 高手了解基礎架構即程式碼、容器編排、安全加固和大規模監控(並且對 YAML 檔案中的製表符和空格有很強的看法)。
這些領域都需要數年才能精通。認為一個人可以同時精通所有這些領域,還能跟上瞬息萬變的步伐,這不僅是樂觀,簡直是天方夜譚。
「全端工程師」這個標籤已經變成了一種負擔,與其說是“榮譽勳章”,不如說是“恥辱的烙印”:
冒名頂替症候群盛行,因為沒有人能夠真正達到理想化的「全端」開發人員的標準(他們似乎從不睡覺、不會變老,也不需要上網搜尋)。
企業設定不切實際的期望,尋找根本不存在的獨角獸企業(即使存在,價格也可能過高)。
開發人員分散精力,結果在許多方面都平庸,而不是在少數幾方面做到卓越(樣樣通,樣樣松,但卻被期望樣樣精通)。
職涯發展會受到影響,因為當你不斷轉向下一個熱門框架時,沒有一條通往深度專業知識的清晰路徑。
我見過很多才華橫溢的開發者因為試圖面面俱到而精疲力盡。他們像打了雞血的松鼠一樣在各種技術領域間跳來跳去,從來沒有在一個領域停留足夠長的時間去真正精通它,總是感覺自己落後於人。劇透一下:終點一直在移動,因為根本沒有終點。
說實話,大多數「全端」開發人員並不是精通從像素到資料包每一層的博學家。
他們是通才,能夠勝任技術棧的各個環節,但能力水準參差不齊。他們擁有廣泛的知識,能夠理解各個部分是如何協同工作的,但通常只在一兩個領域擁有真正的專長。至於其他方面?他們能以驚人的速度和自信搜尋到答案。
那不是弱點──而是一種超能力。
具備以下能力:
了解前端效能如何影響後端負載(不僅僅是「速度慢,修復它」)。
在不同的架構方法之間做出明智的權衡(而不是僅僅選擇 Hacker News 上流行的那些)。
能夠有效地與各個專業團隊溝通(例如,能夠準確地將「按鈕不起作用」和「事件處理程序中未捕獲的 Promise 拒絕」等問題進行翻譯)。
獨立完成所有功能的原型設計(即使你花了 2 個小時在 CSS 居中上)
這些都是至關重要的技能。但它們並不等同於精通——更像是見多識廣的遊客和知道哪些小巷應該避開的當地人之間的區別。
那麼,見多識廣的遊客和真正的全端工程師之間究竟有什麼差別呢?
真正的全端開發人員理解超越框架的基本原理。
他們知道:
資料如何從使用者輸入流向資料庫,然後再返回-請求-回應循環不會消失。
為什麼事情進展緩慢以及如何加快速度——性能原則永不過時
如何跨層除錯——因為 bug 總是隱藏在你最意想不到的層中
何時該增加複雜性,何時該保持簡單——劇透:通常是保持簡單。
每一層都影響著其他層──改變 API,前端就會崩潰;這真是亙古不變的故事。
技術棧會變,但問題不會變。
用戶依然需要快速可靠的應用程式。資料庫仍然需要高效率的查詢。程式碼仍然需要易於維護。安全性仍然至關重要。這些真理與框架無關,並且會超越本週推特上的熱門話題而長存。
真正掌握 HTTP、資料庫、演算法和系統設計的開發者,無論身處哪個時代,無論使用何種技術棧,都能取得成功。他們能夠適應變化,因為他們理解事物運作的原理,而不僅僅是從 Stack Overflow 複製貼上(雖然說實話,我們也會這麼做)。
真正的全端技能不是了解所有的框架,而是知道如何學習。
不是死記硬背 API 接口,而是深入理解問題,從而選擇合適的工具來完成工作。
更準確的模型是T 型開發者(不,不是指擺出 T 字姿勢,雖然那樣會顯得很有支配力):
豎線表示你在一到兩個領域擁有深厚的專業知識(當出現問題時,人們會在 Slack 上找你)。
水平條代表在整個技術堆疊中擁有廣泛的知識(你具備足夠的實力去發揮作用)。
你或許是一位前端專家,對後端概念也瞭如指掌,足以設計出優秀的 API;又或許是一位後端專家,能夠建置功能完善的 UI,而不會讓設計師們抓狂;再或許是一位資料庫高手,精通緩存技術,能夠防止同事們誤操作導致伺服器 DDoS 攻擊。
這不僅更現實,也更有價值。 T型開發人員是專業團隊之間的橋樑,是技術術語的翻譯者,也是能夠以足夠的權威性說出「實際上,這是一個前端問題」的人。
致開發者:
不要試圖精通所有領域。選擇你的主要領域並深入鑽研(成為真正會閱讀文件的人)。
培養全端的廣泛能力,但也要重視自己的專長(坦誠地說「我不是 DevOps 工程師」是可以的,不必感到羞恥)。
在面試和履歷中要誠實地描述自己的優勢(謊報 Kubernetes 經驗只會帶來麻煩)。
對企業而言:
別再尋找獨角獸了。應該聘請技能互補的T型開發人員(組建一支復仇者聯盟團隊,而不是讓一個人包辦所有人的工作,卻只拿更少的錢)。
要認識到“全端”意味著“能夠勝任整個技術堆疊的工作”,而不是“精通所有領域”或“願意拿一份薪水做三份工作”。
組建團隊,讓團隊成員的知識深度能互相補充(新穎的概念:協作!)
對產業而言:
我們需要更貼近現實的術語(我建議用「具備相當能力的通才」)。
我們應該推崇專精,而不是要求不可能的廣度(精通一門遠勝於樣樣平庸)。
要認識到,技術的複雜性已經超過了個人的掌握能力(摩爾定律也適用於困惑)。
全端開發者並非虛構——它只是一個早已過時的神話,就像「更努力工作」或「這次會議完全可以用郵件解決」一樣。如今,光是 JavaScript 生態系統每年就會發布數百次重大更新(而且幾乎每個月都會導致你的建置崩潰),真正掌握整個技術堆疊不僅困難重重,而且在數學上根本不可能。你需要把醒著的每一分鐘都投入到學習中,即便如此,到了星期二你仍然會落後於人。
是時候放下幻想,擁抱更真實的現實了:我們都是各自領域的專家,努力保持對相關領域的實用知識。我們只是在努力維持足夠的平衡,以便在不出現問題的情況下交付功能。這不僅可以接受,而且是唯一可持續的發展道路,不會導致精疲力竭、需要心理治療,或乾脆轉行去養羊。
我們越早接受這一點,就能越早建立更健康的職業生涯,設定切合實際的期望,並透過深度專家之間的協作來創造更好的軟體,而不是透過疲憊不堪的通才之間的協作來創造更好的軟體,後者隨時可能因為一個 webpack 錯誤而崩潰。
此外,如果有人真的精通了整套現代技術棧,他們大概會昇華到更高的境界。而我們需要他們來修復我們的持續整合/持續交付(CI/CD)管線。
原文出處:https://dev.to/adamthedeveloper/a-full-stack-developer-is-a-myth-3bmk