编辑 | 闫园园
采访嘉宾 | 程邵非(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 从设计图直接变成代码,我个人觉得它已经不能叫低代码,这个系统和我刚才说到的低代码起源的概念里的低代码已经差了太多了。
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。也就是说,我们看起来最难的那条路反而是最简单的,那些看起来简单的路,它有可能反而是更绕。
你想往山顶上走,肯定选择最陡峭的,你想走下坡路,肯定选择最远的那条路。这个道理是是我想今天传达给大家的,原因还是在于看到太多的同学们想走捷径,或者说想走简单的路,结果反而越走越远,最后绕回来的话反而消耗更大。
小程序算前端吗?
程劭非(winter):其实我们总讲大前端,但是其实是没有任何一个岗位叫做大前端的,我很少见有一个岗位同时做前端和客户端的,那么为什么说搞大前端?其实很多时候是因为我们认为这两个技术之间有互通之处,互相借鉴的东西比较多。
其实大部分搞小程序的工程师跟前端的团队都是合在一起的,基本上算是同一个岗,同一个岗的两种工作内容,当然知识上面会有不同要求。本身小程序设计的目标也是希望能让前端工程师去开发小程序,很难找到小程序开发工程师跟前端之间一个明确的界限,而且我觉得搞小程序的人比大前端里面的人更接近于传统意义上的 Web 前端工程师,所以总的来说,小程序毫无疑问是在前端开发里面的。
如果想成为像 antfu 一样的开源作者,哪些基础知识是必要掌握和精通的?
程劭非(winter):这个问题我要来讲讲,如果你想成为 antfu 一样的开源作者,首先要有决心把自己的时间投入到开源社区里面去。今天刚好跟朋友吃饭聊到了 antfu,antfu 是在上学时期就加入了 Vue 的核心组织,他当时发帖子说库没有人维护,我想拿过来维护可不可以,然后就拿过来了,还得到了 Vue 一些资金上的资助,后边靠着自己的一些优秀的开源作品和对 Vue 的贡献,成为一个靠着开源社区的捐赠、不依赖公司收入的开源作者,当然他其实还有一份全职的工作。
所以说如果大家想成为一个开源作者,首要要把自己的时间贡献上去,至于技术上面哪里欠缺,我觉得是可以弥补的,没有参与开源社区,有什么技术都是不可能的,对吧?最重要的还是要参与进去。
请老师说说微前端的趋势?
程劭非(winter):微前端我觉得它其实没有太多的趋势。首先微前端就不是一个大家都要用的。微前端沾了微服务的光,但是微服务是所有后端基本上都要往架构上迁, 微前端很明显不是这样的。
它更多的是单页应用并有多框架隔离的需求,然后做出微前端这样一个技术方案。我觉得说实话,微前端就不该这么热,包括很多学生都会问我微前端,我反问你有没有看过微前端解决什么样的内容?如果非要往这上边靠的话,就相当于没有困难创造困难也要上,举个例子,公司一共有四五个前端,就非要用微前端架构,四五个人都可以用不同框架,这其实是没必要的。