展望大前端的 2022:VR 大潮來襲,大前端迎來新機遇

語言: CN / TW / HK

編輯 | 閆園園

採訪嘉賓 | 程邵非(winter)

目前,大前端領域整體上處於怎樣的階段? 2021 年,大前端領域都有哪些技術創新需要關注?2022 年,它又將走向怎樣的方向?

12 月 30 日,InfoQ 大咖說欄目特別邀請到 極客時間《重學前端》專欄作者程劭非(winter) 來與大家 展望 2022 年大前端的整體發展方向 。節目中,程劭非(winter)老師就 Flutter 會不會一統大前端、Web 3.0 的概念、以及元宇宙對大前端的影響 等具體問題與大家作了相關分享。

程劭非(winter)是前手機淘寶前端 leader,JavaScript 專家。以下內容節選自當天的分享,InfoQ 做了不改變原意的編輯:

大前端發展現狀與趨勢

InfoQ:首先請老師聊聊目前整個大前端領域處於一個怎樣的階段,今後總體發展方向和規劃是什麼?

程劭非(winter):既然說處於什麼階段,我們先整體看一下前端的發展歷程。前端其實出現的很早,從上世紀 80 年代發明全球資訊網開始,前端就已經是全球資訊網非常重要的組成部分,後來 90 年代,又有了 JavaScript 和各種各樣的瀏覽器,包括 W3C 一直在中間推出一些新的東西。

但我認為真正產生前端崗位應該是在 2005 年左右,有了前端的崗位之後,出現了一些專門去做前端的程式設計師,因此前端的崗位發展到現在其實還不是很長,大概十幾年的時間。到目前來說,前端算是一個非常年輕的崗位,它的一個特點就是變化非常快,新的東西層出不窮,所以總體上我覺得前端目前還是處在發展期。

隨著前端的發展,它可能逐漸穩定下來,當然這個事情我也沒有辦法預言的太準確,估計 20 年後這個崗位可能會變成一個較為成熟的崗位,這個時候它的技術棧應該不會發生一個較大的變化,也就是我們常說的成熟期或者平臺期,這個時期會有一個比較長的持續期,我覺得應該比發展期要長,再往後可能就進入衰退期,衰退期應該也很長,但並不意味著前端找不到工作了,舉個簡單例子,現在 Flash 也沒有說整個崗位完全崩掉,所以我們對此也無需太過於悲觀。

其實,任何一個技術都要經歷這樣的階段。現在我們也會聽到有些同學說前端新技術這麼多,學不過來會有抱怨,我反而覺得大家應該慶幸,慶幸前端還沒走下坡路,還是在成長過程中的。

InfoQ:您認為 TypeScript 使用人數增長迅速的原因是什麼?在未來,它還會保持一個較熱的關注度嗎?

程劭非(winter):TypeScript 是什麼?TypeScript 從設計的基本原則上其實已經講得很清楚了,就是帶型別的 JavaScript ,那麼它基本上也保持了很明確的策略,就是 JavaScript 的原特性都會跟,跟完之後,在上面加上型別系統。

所以說 TypeScript 不像是一門新語言。它的發展策略就是除了型別相關的東西,不會加稀奇古怪的特性,它的重點在發展自己的型別系統,所以大家可以理解為它是 JavaScript 的一個外掛或者是補丁,其實它有點像 JSS,是吧?

JSS 出來後,JavaScript 就有四個分支,JS、TS、JSS、JSX,可能未來還會有更多的出現。那麼 TypeScript 肯定是要比這種小型的邊邊角角的修補要大的多。型別系統在程式語言裡也是一個非常重要的東西,它能夠讓我們編寫大型應用的時候能夠更節約人力。

什麼算大型呢?就我個人而言,我覺得十萬行左右就已經算是中型到大型的過渡了,但其實早前前端的頁面過千行都非常少,過萬行的已經是很複雜的頁面了。所以,早年前端對型別的需求不是特別的強烈。

如果做過 C++ 的同學體會就會很深了,動不動好幾萬行的 codebase 下面,很難把一個函式的前因後果看明白,這種情況下,型別就能夠給你帶來非常重要的資訊。型別基本上就是程式和程式之間鉚合的一個約束,舉個例子,沒有型別的情況下,你在除錯的時候,調了一個函式中有一個引數叫 Config ,Config 裡邊到底有什麼,你是完全不知道的,所以說這個程式碼寫的對不對,你也沒有任何辦法去指導,除非能看到這個函式的每一個呼叫。

尤其在大量程式碼的情況下,我們做不到這個事情,因為它的呼叫太多了,掌握幾十萬行程式碼對於人來說已經是非常高的要求了,所以這時候型別非常重要,這塊也是給大家一個科普,型別到底有什麼作用。型別對於大規模程式,尤其是十萬行以上規模的程式,是不可或缺的。

TypeScript 的增長標誌著人們在使用 JavaScript 開發越來越大型的東西,當去寫萬行左右的東西的時候,使用 TypeScript 的收益在迅速上升,在這種情況下,TypeScript 有巨大的優勢。因此,越大型、越複雜的環境,TypeScript 肯定是用的越來越多。

解析跨平臺

InfoQ:目前跨平臺比較成熟的、值得推薦的框架有哪些?您認為還有哪些框架非常有潛力可能會在未來被大家熟知或者使用的?

程劭非(winter):首先跨平臺框架有兩類,第一類目標是純粹為開發者服務,像當年的 RN 和我們在淘寶做的 Weex 等,它們都是試圖為開發者服務的。這一類框架目前來看不是特別健康,Weex 現在來看,維護的人並不多。RN 最近釋出了一個新版本,但實際上它的特性也是好久沒動了,而且真正用 RN 寫出來的應用非常少,大部分都是把它當做技術解決方案的一部分在用,而不是完整在使用。

還有另一類就是商業化平臺方案,比如小程式,而且我最近看有很多這樣的趨勢,比如智慧音箱在推出自己的開發框架。可見跨平臺框架的商業成分在上升,所以如果要我來說未來哪一個框架更流行,我認為更多的是一種商業上的競爭,而不是單看技術上好用。

說白了,程式設計師的喜好可能沒有那麼重要,重要的是老闆會選哪個,因為這和商業上的東西繫結到一起的,就我自己來說,我不認為這是一個好事,但這是一個客觀的現狀,比如說微信小程式。至少在我看來,它在技術上沒有什麼特別突出的地方,當然它也解決了應該解決的所有問題,也不能說它不好,這就是在商業的場景下,它該有的都有了,該做的都做了。開發應用性拿去競爭,其實是沒有競爭力的,但是我們還要必須去學,所以我覺得大家看待這個問題的時候,不應該把眼光侷限在技術範圍內去考慮,更多的需要去看我們究竟需要不需要。

InfoQ:以 Flutter 和 uni-app 現有的發展趨勢,二者誰的後勁大,哪個會勝出?按照目前的 Flutter 發展勢頭,會不會在將來一統大前端?

程劭非(winter):首先,我覺得這兩個東西放在一起比是很奇怪的事情,Flutter 的目標是一個 UI 系統,我也聽到很多同學也都在問 Flutter 值不值得學。

Flutter 是一個獨立的 UI 系統,其實我非常希望它能在 Android 上把原來基於 Java 的系統給幹掉,但是前端的同學去學 Flutter 實則相當於轉行,不是說值不值得學,而是說要不要轉行。轉行了就去做 Flutter 工程師,這個東西其實質量很高。我覺得也是屬於在現行 UI 框架裡非常不錯的東西,但是公司做技術選型的時候,會不會因為 Flutter 特別易用而去選擇 Flutter ,我覺得大概率不會。比如淘寶會不會選擇使用 Flutter ,基本上不太可能,因為它自帶了巨大的包大小開銷,所以它不會把整個 Flutter 搞進來的。所以說 Flutter 值不值得學這個事情也非常簡單,你熱愛 Flutter ,你認為你應該轉行,那麼就去學好 Dart 語言,然後去看哪些公司使用 Flutter ,就去選擇這些崗位。

如果說你要好找工作,從這個角度去考慮問題沒有意義,你選擇前端是不是因為對比了前端和後端哪個好找工作,然後選擇了前端,我覺得很多人不會是因為這個,對吧?可能有一部分同學是被誤導進來的,比如測試、運維、前端,這三個崗位就是重災區,所以我們面試也會遇到一些同學,他根本不喜歡這個東西。

別人說簡單、好找工作,這其實不是一種正常的思維,你需要先決定要去做這一行,再去找這一行的工作。如果你特別喜歡 Dart 這個語言,那麼往 Flutter 方向發展絕對沒毛病,但是如果你現在是一個前端開發工程師,問要不要去學習 Flutter ,我個人覺得沒有必要。

InfoQ:目前,各個大廠已經推出了各自的小程式,您認為小程式發展到現在面臨的最大問題是什麼?有什麼亟需在 2022 年解決的?有人稱它為端方向的下一個突破口,對此您怎麼看,為什麼?

程劭非(winter):我個人覺得小程式現在一個比較大的問題就是它的標準化做的不是特別好,前陣子 W3C 啟動了這個方向,但據我所知騰訊沒有加入,我們在私底下交流的時候,都覺得這是非常遺憾的事情,如果騰訊不加入的話,又談何標準呢?

如果站在社群的角度去看,首先,小程式在技術上不可能有問題,畢竟這麼多大廠的頂級程式設計師在搞這個事情,技術上肯定是不會有硬傷的,至於開發者體驗,大家都在努力去做,肯定也不會差到哪裡去,這就是目前小程式的現狀。

但是如果說它是未來的端方向的突破口,我不這麼認為,在我看來小程式是個純粹的商業產物,從商業上來說它很好,從技術上來說,也有一定的巧思在裡邊。最開始我看它的技術框架的時候,是用 Html 去渲染它,裡邊有很多技術做的很漂亮,所以技術上是沒有問題的,但它本身設計的目標是為商業服務的,是為了大家能把東西塞到微信裡去跑,完成了這個目標它就是好的。

所以說這種背景下,如果說為端指明瞭方向,我覺得是不對的,還是那句話,它完全是在一個商業邏輯下,如果把它當做一個技術上的信仰,是存在問題的。

InfoQ:近兩年,“低程式碼”的概念異常火爆,能否與大家聊聊低程式碼目前在前端領域的應用情況,以及您對於它未來發展的看法?

程劭非(winter):首先今天能聽到低程式碼這個詞,要歸功於國外的諮詢公司搞出來這樣一個概念,他們搞出這樣一個概念,主要是為了去做企業服務,就是將低程式碼解決方案賣給一些相對來說數字化程度沒有那麼高的企業。這其實是非常好的概念,諮詢公司也是努力了很久,才把低程式碼變成一個流行概念。

但是對於我們大部分同學來說,還是在純網際網路領域做的比較深入的,在這種情況下,低程式碼對於我們來說並不是一個新的概念。其實,這個概念對一些傳統企業還是比較新的,它買一套低程式碼解決方案回去,能節約大量成本,所以,最初講低程式碼概念的那幫人,他不是給我們這些專業工程師講的,是給做數字化轉型的企業講的。

就低程式碼來說,其實我們這些專業網際網路領域的工程師已經做了很多年了,只不過是不叫這個名字,早些年叫搭建系統、元件平臺或者類似的東西,在今天的很多技術分享上我們也會經常說做了一個低程式碼平臺,甚至這些平臺的歷史可能比低程式碼的概念都要久。

在低程式碼第一代開始流行的時候,其實我專門去研究過這個東西,也發現了它的來源。在我看來,一線網際網路企業的技術能力稍大於數字化領域的乙方公司大於數字化領域的甲方公司,大概是這麼個排序關係。所以這個概念,其實是數字化領域的乙方公司跟甲方公司去講的這樣一個概念,這個概念總結的很好,所以沒有什麼問題。

至於有些同學說它會威脅程式設計師的飯碗,這從何說起呢?這跟我們程式設計師沒有太大關係,我認為本質上網際網路領域早就開始做了,只是沒有總結成這個概念。比如,淘寶的運營系統 TMS,這個東西大概在 2006、2007 年做出來,跟淘寶歲數差不多大,很古老的一個系統,後來經過了數代的迭代,現在運營填幾個數,就可以上線頁面,那麼你說這是不是低程式碼呢?現在這個東西已經進化成讓 AI 從設計圖直接變成程式碼,我個人覺得它已經不能叫低程式碼,這個系統和我剛才說到的低程式碼起源的概念裡的低程式碼已經差了太多了。

漫聊元宇宙與 Web 3.0

InfoQ:今年,科技圈的熱詞之一就是“元宇宙”,您認為元宇宙對於大前端領域來說會帶來哪些機會同時又會帶來哪些挑戰?

程劭非(winter):我覺得元宇宙這個概念能把遊戲、VR/AR、區塊鏈數字資產等等這麼多投資人喜歡的概念弄一起去,也是一個很厲害的產品創意。但是說實話,再好的概念再好的產品 idea,也需要一些基礎技術做支撐,即便公司把名字改了也沒有太大用處,技術發展是有客觀規律的。

目前這個東西很虛,技術缺的腿太多,就算是看每個具體的技術上面,都還差很多支撐,更何況把他們融為一爐。在這種情況下,我不認為這個東西最後能做出什麼樣子來,但客觀上有一個好處,它會積極的推動這些領域的加速發展,這是積極的一方面。

比如,VR/AR 大家需要錢去做,但是沒有元宇宙這樣概念的話,很難在短期內發展出什麼,但是你看公司名字一改,大家都往那個領域裡扎推,說不定就能有技術突破。像前一陣子我收到位元組的裝置 PICO,我覺得 VR 裝置還是非常超出我對它預期的硬體能力,雖然它的軟體領域還是非常簡陋,但是我覺得它在一些基礎問題上做的比以前好多了。這就是元宇宙的積極意義,相應來說,其他方面比如數字資產區塊鏈等方面同樣也會受益。

InfoQ:近期,我們經常會看到網上討論 Web3.0 的概念,能否與大家聊聊您對 Web3.0 是怎樣的理解的?有人說它是“炒作”,有人說它是大趨勢,能否聊聊您的看法。

程劭非(winter):Web3.0 是這樣,我們要先看一下  Web3.0 本身的含義。大家都知道 UGC,UGC 是 Web 2.0 的典型標誌,全稱 User Generated Content ,使用者產生內容的網站,以論壇、微博這類東西為代表,社群型的東西或者部落格,這類使用者產生內容叫做 Web 2.0。

Web 3.0 是什麼?經歷過 10 年的前端的話,你會知道另一個版本的 Web 3.0 ,那個時候的 Web 3.0 ,大家都講和語義網相關,包括 W3C 的 CTO,也就是我們的 Web 之父 Tim Berners-Lee 對於語義網的期待是非常高的,語義網大概是什麼東西?

比如說 Facebook 上的一些使用者資料,它可以給別的網站去用,但是現在大家的私心還是比較重,大家都認為自己平臺上的資料是重要的資產,所以天下大同的夢想沒有實現,那一代的 Web3.0 自然而然就沒有人再提了。

相隔大概十年後,有人又提出了 Web3.0 ,Web3.0 基於 UOC,User Own Content ,使用者擁有內容,不免會聯想到區塊鏈、數字資產這些東西,我給他簽名,這其中儘量有公正。我覺得這裡面的聯想帶有一定的導向性。所以讓我來說這個概念的話,我百分之百認同 User Own Content 的概念,使用者應該對內容有一定的主權,但是就聯想出來的東西,我個人覺得帶了一些刻意的成分,有一些不自然的地方,所以我覺得這點值得大家警惕。

我覺得 User Own Content 有很多種方式去實現,比如說國家搞一個認證平臺,搞一個公證的東西,它跟區塊鏈一毛錢關係都沒有,但是可能也會實現我寫的文章經過一個簽名,然後別人要用的話需要付我錢。所以總的來說,我個人對 Web3.0 持有觀望態度, Web3.0 概念裡明顯是有人為製造的痕跡在裡邊,它背後真正想推的那個東西,絕對不會是 User Own Content 。

InfoQ:除了我們上述談到的,今年大前端領域還發生了哪些大事令您印象深刻,並且覺得會對未來大前端領域的技術發展產生一些影響的事與大家分享一下?

程劭非(winter):說實話,今年來看新技術不是特別多,我沒有看到技術上面有非常重大的新東西出來,這可能跟我們現在技術到了一個小的平臺期有關係。畢竟現在三大框架其實做的已經很完善了,不過也會有一些挑戰者出來,比如 Svelte ,可以說取得了一定的影響,但是它也沒有吃掉三大框架的地盤,很明顯也不是下一代東西,所以你看今年會發現它的趨勢沒有那麼猛。

回到問題,這一年產生了哪些值得關注的新技術,我覺得能明確作為下一代技術的應該是沒有。新的一年也要到了,如果說明年的話,我比較會關注前端和 VR 的關係。去年這個時間段,我曾說我會比較關注在 AI 和圖形學上。

以後我還會持續關注,但我也發現這兩個領域技術的發展沒有那麼快,2021 年也沒有出現什麼新鮮東西,今年我會更關注前端跟 VR 領域就 3D 互動上的發展。有時候和朋友閒聊就會討論這個問題:3D 互動領域滑鼠被換掉了,onclick 事件沒有了,互動可能也不是按鈕了,整個空間也變成了 3D 的空間,到時候還會持續前端現在的這一套框架嗎?

我覺得這裡面的變化應該比較大,尤其藉著元宇宙這個東西,VR 技術應該會有一個比較大的發展,可能跟我最近收了一臺 PICO 在用有關係,所以比較偏向於這個方面。在未來 3~5 年內,基於 3D 環境的前端介面必會出來,可能會出來一些很糙的東西,但這對於我們前端工程、前端核心的基礎設施,影響都是會非常大的。

所以,2022 年什麼技術會火?要押的話,我就押 VR ,因為我覺得這個東西最接近可用,剩下的概念我覺得都還沒有太大的可能性。

InfoQ:最後,新的一年馬上就到了,新年新開始,老師對正準備跨進前端的技術人或者正在前端領域“內卷”的技術人們有哪些寄語或者建議呢?

程劭非(winter):我看到評論區有個問題,順帶解答一下。有一個問題說大學學哪個專業跟前端比較相關?其實這是分幾個不同階段的。大學裡是沒有真正意義上和前端相關專業的,要學的話就是最傳統的軟體工程和電腦科學與技術,這兩個專業是大部分學校都會有的,跟前端關係比較大。

這其中所有計算機相關專業的排序依次是:軟體工程、電腦科學與技術、電子工程、數學,這幾個專業是跟計算機關係最密切的,再往上研究生到博士生有幾個方向。正巧最近跟 CCF 有合作,也研究了一下學術界的兩個方向,一個叫做圖形學方向,一個叫人機互動方向,這兩個是跟前端比較相關的,當然說實話相關度也還是不太高,但這幾個領域也是我認為在現行體系裡相對來說相關度比較高的幾個領域了。

另外,如果高中的同學要報大學專業的話,我推薦北京航空航天大學,北航是 W3C 總部所在的學校,也就是全球四大 W3C 總部之一,所以這個學校如果在你選擇的範圍內,還是可以多考慮考慮。畢竟北航計算機學院的老師們都在 W3C 總部擔任職位,肯定也是非常重視前端相關的東西。

另外說到“卷”,還是上進心導致的,對吧?真想躺的話,能躺的辦法還是挺多的。如果想要進前端的領域,從學習的角度來講,我推薦 hard way。也就是說,我們看起來最難的那條路反而是最簡單的,那些看起來簡單的路,它有可能反而是更繞。

你想往山頂上走,肯定選擇最陡峭的,你想走下坡路,肯定選擇最遠的那條路。這個道理是是我想今天傳達給大家的,原因還是在於看到太多的同學們想走捷徑,或者說想走簡單的路,結果反而越走越遠,最後繞回來的話反而消耗更大。

Q&A 環節

小程式算前端嗎?

程劭非(winter):其實我們總講大前端,但是其實是沒有任何一個崗位叫做大前端的,我很少見有一個崗位同時做前端和客戶端的,那麼為什麼說搞大前端?其實很多時候是因為我們認為這兩個技術之間有互通之處,互相借鑑的東西比較多。

其實大部分搞小程式的工程師跟前端的團隊都是合在一起的,基本上算是同一個崗,同一個崗的兩種工作內容,當然知識上面會有不同要求。本身小程式設計的目標也是希望能讓前端工程師去開發小程式,很難找到小程式開發工程師跟前端之間一個明確的界限,而且我覺得搞小程式的人比大前端裡面的人更接近於傳統意義上的 Web 前端工程師,所以總的來說,小程式毫無疑問是在前端開發裡面的。

如果想成為像 antfu 一樣的開源作者,哪些基礎知識是必要掌握和精通的?

程劭非(winter):這個問題我要來講講,如果你想成為 antfu 一樣的開源作者,首先要有決心把自己的時間投入到開源社群裡面去。今天剛好跟朋友吃飯聊到了 antfu,antfu 是在上學時期就加入了 Vue 的核心組織,他當時發帖子說庫沒有人維護,我想拿過來維護可不可以,然後就拿過來了,還得到了 Vue 一些資金上的資助,後邊靠著自己的一些優秀的開源作品和對 Vue 的貢獻,成為一個靠著開源社群的捐贈、不依賴公司收入的開源作者,當然他其實還有一份全職的工作。

所以說如果大家想成為一個開源作者,首要要把自己的時間貢獻上去,至於技術上面哪裡欠缺,我覺得是可以彌補的,沒有參與開源社群,有什麼技術都是不可能的,對吧?最重要的還是要參與進去。

請老師說說微前端的趨勢?

程劭非(winter):微前端我覺得它其實沒有太多的趨勢。首先微前端就不是一個大家都要用的。微前端沾了微服務的光,但是微服務是所有後端基本上都要往架構上遷, 微前端很明顯不是這樣的。

它更多的是單頁應用並有多框架隔離的需求,然後做出微前端這樣一個技術方案。我覺得說實話,微前端就不該這麼熱,包括很多學生都會問我微前端,我反問你有沒有看過微前端解決什麼樣的內容?如果非要往這上邊靠的話,就相當於沒有困難創造困難也要上,舉個例子,公司一共有四五個前端,就非要用微前端架構,四五個人都可以用不同框架,這其實是沒必要的。