大家好,我是若川,點此加我微信進源碼群,一起學習源碼。同時可以進群免費看Vue專場直播,有尤雨溪分享「
Vue3 生態現狀以及展望
」
背景
最近我在公眾號的后臺收到一條留言:
言語里充滿了對前端的不屑和鄙夷,但仔細看看這條留言,里面的觀點是一點都經不起推敲。
按理說這種毫無道理的噴我是不用搭理的,但考慮到有這種想法的人可能不止他一個,而我又是一個講道理的人,因此今兒我就把這事兒放到明面上說說。
逐條反駁
前端搞模塊化、構建工具是為了刷存在感?
隨著前端的開發日益復雜,傳統的手寫 HTML、JS、CSS 的方式已經不能滿足需求,在這種背景下,才誕生出前端 MVVM 框架,組件化、模塊化開發的開發方式以及前端構建工具。
分而治之是軟件工程中的重要思想,是復雜系統開發和維護的基石,這點放在前端開發中同樣適用。而組件化,模塊化的開發方式目前是前端最流行的分治手段。
前端 MVVM 框架,比如 Vue、React、Angular,就提供了組件化的開發方式。
而構建工具的出現,是讓模塊化的開發方式得以落地。比如 Webpack 就支持了 JS 的模塊化開發方式;借助于 Loader,你甚至可以在 JS 中加載 CSS、圖片等資源。
除此之外,代碼的校驗、測試、打包、壓縮等步驟都可以通過構建工具完成,再接入 jenkins 這樣的平臺,就很好的實現了前端項目的可持續集成和代碼部署。
因此,前端做這些事情,是為了提升研發效率和代碼的可維護性。前端的重要性已經隨著需求的復雜而自然得到了提升,需要刷什么存在感?
從事前端的人總是用各種東西在證明自己很厲害,自己不簡單?
這話說的毫無邏輯。前端這些年確實發展的不錯,隨著瀏覽器和 HTML 標準的發展,前端在前端框架、構建工具、可視化、跨端框架、復雜應用開發等方面均有建樹。
但做這些事情是因為有需求才會去做,而不是要證明什么,也不需要證明什么。
只要你從事了后端,就代表你是一個敢于接受困難的人,敢于從事困難工作的人。
這話就很搞笑了。無論后端還是前端,都是寫代碼的,只不過是工作分配的內容和方向不同。工作中或多或少都會遇到困難,敢不敢于接受困難和挑戰,和人有關,和做什么工作無關。
前端的悲劇就是,要通過各種東西來證明自己的地位?
前端并不悲劇,說這話的人挺悲劇的。其實越是厲害的人越謙虛,越是覺得自己渺小,對自己不了解的領域會有敬畏心。而那些井底之蛙往往都是半桶水亂晃之人,無知而無畏。
最后,他還來了句“拋掉技術能力強弱的,僅僅從前后端職業,社會的普遍認知來說的”。
Excuse me? 這還是社會普遍認知嗎?我都被氣笑了。噴子下結論往往都是特別主觀,缺少論據。
前端的發展方向
反駁完了,我們再來聊點有用的。
最近參與了幾場校招面試,問了候選人為什么會選擇做前端,很多人回答說喜歡前端更容易得到反饋,能快速看到自己做的作品,也喜歡酷炫的交互和動畫。
他們可能不知道,前端開發除了切圖外,整個知識結構還是非常豐富的。
這張圖相信大部分前端并不陌生,它是多年前的一張老圖,大致描述了前端工程師的知識圖譜。隨著時間的遷移,雖然里面一些技術點發生了改變,但它仍然具有非常不錯的指導意義。
結合這個知識圖譜,和我多年工作經驗,我認為前端大致有以下幾個發展方向:
復雜應用開發
大部分前端工程師做的都是業務開發工作,這是很正常的現象。對于企業而言,尤其是 C 端的業務,對前端開發的需求量是很大。
對于開發者而言,能做公司的核心業務開發是非常幸運的,因為你的工作給企業帶來最直接的收益,你也能得到不錯的鍛煉和成長。
有些人可能會覺得做應用開發技術含量不大,那是因為接觸到的業務還不夠復雜。如果去開發 web im、web doc、proceeson、figma 這些重前端交互的產品,對前端的技能要求也是很高的。
因此千萬不要看不起開發業務的前端,他們能給公司帶來最直接的價值,甚至有些公司的業務還是前端主導的。
做復雜應用開發可能是大部分前端開發的發展方向。
前端框架開發
這里說的前端框架主要分為兩類,一種是比較通用前端開發框架,比如 Vue、React、Angular。大部分公司會依賴這些開源框架做業務開發,也有部分公司會 fork 它們做一些符合自己公司使用場景的魔改(比如我司)。
當然,還有一部分人力充裕的大公司會自研前端 MVVM 框架,比如百度的 san。
另一種是跨端框架的開發。很多公司都有跨端需求,write once,run everywhere。早期的跨端需求是一份代碼跑 iOS 和 Android 端,代表作有 React Native、Weex、Flutter。
隨著小程序的興起,一些跨小程序開發框架也隨之而來,代表作有 mpvue、wepy、mpx。甚至后面還出現了跨小程序、Web 和 App 的框架,代表作有 Taro、uni-app、Chameleon。
這些框架的主要思路都是把同一份源碼編譯成不同平臺的目標代碼。雖然看上去實現了 write once,run everywhere,提升了業務的研發效率。但由于不同平臺的差異,可能某些地方出錯,就要 debug everywhere 了,跨端框架本身的維護成本也很高。
跨端框架目前是一個百花齊放的狀態,各大公司基本都有自研的框架,它也確實是一個值得研究的方向。
前端工程化
前端工程化主要指的是用工程化的方式解決前端項目的初始化、開發、測試、編譯構建、上線部署等一系列問題。
通常我們會借助一些工具,如 webpack 來輔助我們實現一些前端工程中比較基礎的部分,比如腳手架、模塊化開發、自動化測試、編譯打包等。
但是前端工程是沒有銀彈的,沒有一套前端工程化方案適應于所有的業務。我們可能需要編寫一些 webpack 插件、loader 來滿足于業務開發。
現在炒的比較火的微前端,也并不是萬金油,大部分場景你可能都用不到。
如果是一個大型復雜的項目,我們還需要考慮到項目管理,是采用 multiple repo、還是 monorepo 的方式。
另外,前端工程化還包括性能優化,通過工程化的手段來解決前端性能優化的問題。
因此,對于做這部分工作的工程師,一定要從業務的角度來思考,來給團隊搭建一套合適的工程化方案。這確實也是值得研究的方向。
可視化開發
可視化開發也是前端一個垂直的領域,什么是可視化,引用月影大佬的話:
可視化是將數據組織成易于為人所理解和認知的結構,然后用圖形的方式形象地呈現出來的理論、方法和技術。實現可視化有兩個關鍵要素,一個是數據,另一個是圖形。如果要考慮在計算機上呈現,那還要加上交互。
可視化底層的技術主要是 SVG、Canvas2D 和 WebGL。
可視化領域的工具主要有四類;專業呈現各種類型圖表的圖表庫;專業處理地圖、地理位置的可視化地理庫;專業處理視覺呈現的渲染庫;以及處理數據的數據驅動框架。
可視化也是前端的一個值得發展和深耕的領域。
游戲
游戲開發也是前端一個垂直的領域,可以利用 DOM 或者是 Canvas2D 做一些 2d 小游戲,也可以基于 WebGL 做一些 3d 小游戲。
做游戲通常會一些基于框架比如 createJS、cocos2d,egret 等開發。而且隨著一些游戲框架和瀏覽器渲染引擎的深度合作,性能方面也得到了相當大的優化。
如果對開發游戲感興趣,也可以嘗試往這個領域發展。
其它
還有一些相對冷門的方向,比如做前端相關的工具鏈,開發 web IDE,編譯器等。如果有機會和興趣,也都是可以發展的方向。
因此針對上述前端深入發展的方向,我的建議是選擇一條深入下去,任何一個方向達到技術專家的級別,不管到哪里都有口飯吃。
全棧開發
有粉絲問我,對全棧開發怎么看?
誠然,這樣的人才很吃香,但是在國內,擁有真正全棧開發能力的人并不多,而且大部分大公司前后端分工明確,也沒有多少機會做全棧開發。
Facebook 的確實有一批頂尖的全棧工程師,但是你要想想,有多少人的能力能達到這家公司的入門門檻?
在我看來,想成為全棧開發人才要比成為領域的專家難的多,有些人前后端都做,最后只是成為了全干工程師。因此大部分公司還是明確了前后端開發方向,把專業的事情交給專業的人士去做。
如果你想往全棧的方向發展,我并不反對,但需要下非常大的功夫且有不錯的機會在工作中鍛煉。
總結
因此在我看來,前后端開發只是分工不同。雖然在大公司內部,后端的高 P 確實比前端多,但也不要忘了,后端開發的人也比前端多的多。
真正厲害的人,無論是做前端還是后端,都會對對方做的工作有足夠多的敬畏和尊重。
前端人有時候會自嘲自己就是個“切圖仔”,后端人有時候會調侃自己就是個 CURD 工程師。自嘲可以,嘲諷別人就不行。
如果某些別有用心的人非要挑釁,想要引戰,建議在嘲諷別人前,先掂掂自己有幾斤幾兩吧。
最后預告福利:掃下方二維碼加我微信 ruochuan12,可以拉你進群免費觀看
10月23日的前端早早聊?Vue 專場
直播,大咖云集?,更有「尤雨溪
」分享「Vue3 生態現狀以及展望
」。?另外還可以送50個錄播視頻和PPT~