Categories
程式開發

前端有未來嗎?


本文首發於歐雷流“。由於我會時不時對文章進行補充、修正和潤色,為了保證所看到的是最新版本,請閱讀原文“。

最近一段時間,通過各種方式與同行們交流了「前端技術」與「前端工程師」的現狀及未來發展的方向性問題,大家在一些方面有所共鳴。

下面就來說說我的一些看法——

困惑

多多少少,有人曾經或正在困惑:「前端有未來嗎?」

有此困惑的人,TA 可能是——

正在學習 web 前端技術,就是純粹的 HTML、CSS 和 JS,在用這幾樣做網頁。練習的過程中發現,或者說突然想到:「現在微信小程序風行,在其與原生客戶端應用的夾擊下,前端有未來嗎?」

一畢業就加入了看似門檻低、工資高的前端工程師行列,進入了一家業務型公司的業務部門。產品經理的需求不斷,都已經排滿接下來的一年了。做的東西,竟是些不太需要動腦子的,做得多了基本只是讓自己變得更熟練。這個功能明天上線,那個需求下週五提測,每天都疲於奔命。

上班時總在想:「如果有時間的話,我一定要好好學學技術,提升下自己!」可真難得下班早了或到休息日了,卻又想:「平時太辛苦了,還是看看動漫、電影,刷刷抖音、B 站鬼畜,玩玩遊戲,解解壓、放鬆下吧!」

周而復始,一年、兩年過去了,團隊還是那個團隊,自己還是那個自己。跟兩年前的自己相比,好像只是做需求更快了,因為手法、套路已經相當嫻熟了。這時,不禁感慨道:「前端有未來嗎?」

與上面的類似,也是一畢業就在業務部門,工作日每天為業務需求忙得焦頭爛額。不同的是,自己是個喜歡折騰的人,有自己的技術理想,就算工作日再忙再累,也願意額外投入一些時間和精力去做些自己想要做的技術產品,雖然是實驗性質的。

為了驗證自己的想法並檢驗自己的技術產品,拿到業務中是最好的方式,它們之間可以相互促進。於是會在做業務的同時推進團隊的技術及工具更新,讓開發效率提升上去。這樣一來,不僅業務迭代變快了,自己也會有更多的時間去折騰,簡直雙贏啊!

一年過去了,用自己很多業餘時間做的組件庫、UI 框架、命令行工具給團隊及公司帶來很多收益,但受環境及自身限制,能做的也基本止步於此。然而,自己還想繼續折騰,還想做更多的東西,還想進一步提升研發效率,無奈道:「前端有未來嗎?」

這些人的困惑,歸納一下,無非就兩個方面:前端技術有沒有未來?前端職業有沒有未來?

解惑

回顧過去,HTML 的出現,只是想讓知識得以在世界範圍內共享,而不只是攥在手里和與身邊人分享;CSS 也只是為了使文字排版好一些,能夠像報刊、書籍一樣容易閱讀;而JS 的誕生,改變了這一切,使web 發生了變革。

如果說只有 HTML 和 CSS 的「靜態 web」的時代叫作「web 1.0」,那麼 JS 所拉開帷幕的「動態 web」的時代就是「web 2.0」。在此之前,可以說 web 前端沒有交互,也沒有「前端工程師」這個職業。

準確地說,拉開「web 2.0」時代帷幕的還有另外一隻手——Java。要想讓 web 真正變動態,真正有交互,必須是客戶端、服務端兩頭同時抓起,不然數據怎麼流動起來?

前端職業的誕生與變革

這帶來了商機,擴展了銷售和傳播渠道,傳統企業將交易從線下搬到了線上,把實體轉為虛擬,並催生了一批服務這些企業的企業,以及服務服務這些企業的企業的企業。因此,以網頁為載體所進行的業務越來越多,涵蓋各行各業,千奇百怪,使頁面的展現與交互越來越複雜。

業務邏輯變得複雜,給後端開發也帶來了很大的挑戰。起初他們還能自己寫寫 JS 代碼,HTML 和 CSS 讓設計師或所謂的「頁面重構工程師」去寫。但在這種情況下已經自顧不暇了,哪還有空去管前端? ! 「前端工程師」這個職業應運而生。

慢慢地,「頁面重構工程師」退出歷史舞台,他們要么轉變為「前端工程師」,要么已經轉行。在做 web 應用開發時,前端工程師和後端工程師成為標準搭配。

隨著智能手機問世,移動互聯網時代來臨,又誕生了為不同智能手機開發客戶端應用的職業,如:iOS 工程師、Android 工程師等。可將他們統稱為「客戶端工程師」。

他們的出現,對後端工程師沒有任何影響,因為他們的工作不存在競爭關係,對前端工程師影響就大了。

為了搶占用戶手機裡的一點空間,很多具有互聯網基因的企業都要擁有自己的客戶端應用,招入大量客戶端工程師。原本面向用戶的功能,都改用客戶端應用而不是 web 頁面,前端工程師的工作基本只剩做做後台管理系統,前端工程師在公司中被邊緣化,並漸漸被裁減。

就是在這一時期,前端工程師開始紛紛去接觸 Node.js,想將自己往後端開發方向拓展一些邊界,給自己增加點生存空間。可以說這是「前端工程師」這個職業出現以來的最低谷、最迷茫的時期了。

接著,企業頭腦稍微冷靜了一些,發現每次要做新的功能,都得開發 feature * platform 遍,各種成本太高!就想著能不能有隻開發一遍就能在不同客戶端中運行,且體驗不要太差的方式?這就又催生了混合開發、React Native 等開發模式、工具與框架。

因為新生方式大部分是以前端技術為主,前端工程師迎來了翻身的機會,最終逆襲。客戶端工程師在公司中被邊緣化,並漸漸被裁減,最後剩餘幾個被併入「大前端團隊」。

經過這一來一去,「前端工程師」這個職業如涅槃重生般煥發新春。那段「迷茫期」向後端拓展邊界的摸索不是白做的,讓自己能夠擺正心態、端正思想——不要妄圖用JS 去取代Java,從企業、從業界的角度講,你憑什麼取代Java?

之後,前端工程師就行走在「泛客戶端」這條路線上,即使是用Node.js 在後端做點什麼,也是為了達到讓前端更好的目的,而不是試圖去分後端開發領域的一塊蛋糕。

中國互聯網發展的這二十年左右時間,產品研發流程中所參與的角色,逐漸形成了產品經理、設計師、前端工程師、後端工程師、測試工程師、運維工程師等職業。

在一家上軌道的企業中,一般會有業務部門和平台部門,每類部門中都會有自己的產品經理、前端工程師和後端工程師,其他的就看公司了。業務部門就是直接支撐公司賴以生存的商業層面的業務需求的迭代,平台部門則是為業務部門的工作提供基礎設施及技術支持。

長期以來,業務邏輯幾乎都在後端,前端基本只是一些交互邏輯,這讓後端開發無論是在基礎設施還是思想體系上都更加完善。而在近些年,前端的業務邏輯越來越重,並且由於前端工程師的職業門檻低,很多人沒受過專業訓練,軟件設計、建模等能力差,代碼的健壯性、可維護性、可擴展性極差,造成了很多工程問題和架構問題。

這十來年,Grunt、Gulp、Webpack、Backbone、Angular、React、Vue 等的出現,都是為了解決前端開發的工程問題與架構問題。前端這些年一直在「補課」,為了能扛住應接不暇的業務需求,為了能趕上後端的基礎設施與思想體系上的成熟度。

業務前端的困境與出路

業務部門的前端工程師,處在一個難以逃脫的怪圈之中——

大部分人想提升自身技術水平,卻沒時間和精力在工作時間「光明正大」地去研究技術,這在組織裡是「政治不正確」的做法,必須要業務為先,要研究只能自己的非工作時間去下苦功夫。然而在非工作時間,因為人性或其他什麼原因,自己又不會去研究技術,或者不夠深入。

平常工作中在提效方面能做的頂多就是組件庫和腳手架之類,一些應用、系統的架構設計工作,都被平台部門的人做了,直接用他們的東西就可以了。業務部門也基本不會讓其下面的前端工程師去做整體架構方面的工作,因為不符合「價值觀」,也就是「投資回報率」的問題。

大部分人在思想上存在一個誤區——前端工程師不需要懂業務。認為自己的工作就應該是根據產品需求文檔人工把設計圖轉化為頁面,再與後端工程師把數據接口調通,保證自己沒 bug 就行。

你看,就連自己都覺得自己在整個功能的迭代過程中充當「將產品需求文檔與設計圖轉化為頁面」的工具化角色,也就別怨別人把你當工具使了,可不就一個「有感情的工具人」咋的……如果前端工程師的價值如此,注定是被作為工具,作為資源呼來喚去。

前端工程師的這種行為,被稱為「面向頁面開發」;只會且整天圍著框架、庫團團轉的,被叫作「面向框架編程」。

「面向頁面開發」與「面向框架編程」的前端工程師會逐漸失去競爭力,他們的工作終將會被其他職業的人或者非人工方式取代。

為了留住飯碗,業務部門的前端工程師不應該繼續這樣下去。有兩個大體的改變方向:

如果十分熱愛技術,就是想先大大得提升並突破自己的技術水平瓶頸,那麼就要去平台部門,這樣才能得到很好的鍛煉和提升;如果更喜歡自己所做的業務所在的行業,那麼就去補充業務領域知識,自己的技術水平咋樣就不要那麼關注,只需在大腦中知道業界內大概有哪些技術和方案,遇到了什麼業務場景能解決問題,碰到了就拿來用。

也就是說,前者會建立並不斷完善自己在軟件開發方面的思想體系,修煉自己的編程哲學,探索更多的可能性;後者則成為某個業務領域的專家,運用工具和方案的能力會很強,但技術能力偏弱。

其實整體來看,無論是選擇技術方向還是業務方向,會變得和後端工程師的思想及工作方式差不多了,前端工程師與後端工程師越來越同質化,只是解決的問題域不同。

以十年為跨度,業務部門中開發人員也許不再以「端」來進行分工,直接「領域工程師」或「產研工程師」一把摟!

未來十年裡能做些什麼

總的來說,就是榨取前端技術的剩餘價值。當前最迫切的,應該是這兩個方向:

相當成熟、穩定的基礎設施,讓業務開發能夠專注於業務;足夠強大、好用的低代碼開發平台,給運營、產品賦能。

與此同時,可以探索 AI、IoT 等領域,並為下一個「十年」做準備。

總結

要清楚,在人類社會中,技術的存在是為了滿足人們的需求,讓生活更好;在企業中,技術的存在是為了服務於業務,幫企業賺錢。

前端開發,即「泛客戶端」開發的本質是「解決人機交互這個領域的問題」,從業人員的關注點應該是「如何更好地解決人機交互問題」,而不是具體所採用的手段。要解決的問題是不會變的,但解決問題的手段是不斷推陳出新的,這也就是為什麼「面向頁面開發」與「面向框架編程」的前端工程師終將會被淘汰的原因。

在入行時,​​就應該想清楚自己到底是要往技術方向發展還是往業務方向,這對自己的職業道路影響很大。如果是往業務方向,那麼工作的業務領域就不能有大的變化,如上一家公司是做在線教育的,下一家就去做電商了;選擇技術方向,也要考慮好自己所要深入研究的領域,搞基建就搞基建,搞智能就搞智能。

前端工程師在「泛客戶端」這條路上還能走多久?我認為是不需要人機交互的那一天。

前端技術還能用多久?可能是不需要 web 頁面的那一天?

歡迎關注微信公眾號以及時閱讀最新的技術文章

前端有未來嗎? 1