『前端技术』相比后端是否只能打辅助?
问题来源于知乎提问,截图如下:
1.前后端如何定义
2.前端生存现状
3.前端的下半场
4.前端的机遇
1. 前后端如何定义?
论坛上人们经常会为前后端的问题展开撕 x 大战,很多时候问题的根源是没有定义好前后端的概念.
因为这两个词本身就很笼统,就我个人而言我是这样理解的
狭义前端: 就是纯粹的 Web 前端,基于浏览器技术是前端应用
狭义后端: 就是纯粹的 Web 后端,基于服务器为前端提供接口的后端应用
所以在理清这些概念后我们才可以正常讨论问题,一些后端把大数据和人工智能跟后端联系在一起是很扯淡了,大数据开发有专门的数据工程师操盘,人工智能也有对应的算法工程师操盘,除了同样运行在后端,跟web 后端是邻居以外,没有太大关系.
同样,前端也不能把什么游戏开发跟自己扯到一起,web 端游戏除了跟前端同样运行在浏览器以外,也没啥太大关系.
2.国内前端生存现状
目前的现状也很明显,以阿里为首的淘系技术(类电商)其难点就是在于后端,前端仅仅是薄薄的展示层,
通常一家公司,后端人数远远多于前端,后端项目的复杂度也远高于前端,这是国内很现实的情况.
同样还有一个常见的说法,前端转后端隔层山,后端转前端隔层窗户纸,很多后端程序员表示转到前端发现工作轻松了很多,框架学得很快,两天就上手工作了,其实这不是吹牛,这确实是当前的现状.
那么是否可以做下定论了,前端确实只是负责渲染的展示层,作为后端辅助是很正常的?
是的,在当前环境下这个说法无疑是成立的,可是我们忽略了一个基本情况,目前国内绝大部分企业都是面向 C 端企业,比如美团、滴滴、知乎、淘宝、百度、头条等等,能数得上的巨头企业无疑服务于 c 端用户,如果你业余对产品有一定研究就应该知道一个基本理念,c 端产品的设计必须越简单越好,c 端产品必须基于一个基本假设--用户都是傻子
举个例子,即使如今淘宝注册已经如此方便了,在 2017 年淘宝赞助的春晚当夜淘宝的客服炸了,原因不是服务器顶不住,而是下沉到三四线甚至县城的淘宝新用户疯狂打电话问淘宝客服如何绑定银行卡?
所以在这种产品设计理念下,前端根本不可能做出什么花样来,因为前端产品的复杂度永远不能超过 c 端用户理解能力的下限。
而且巨头们的产品形态也决定了其不可能有复杂的前端交互,美团、淘宝这种电商性质的网站本身就是展示商品的,其最复杂的点也不过是购物车的逻辑和下单逻辑,而知乎、头条这种社区、新闻类的应用则更简单,几乎就是展示文章。
我们可以看到,目前巨头们的产品性质和用户群体决定了前端的复杂度,在这种情况下前端的的确确是打辅助的,后端承接了巨大的业务逻辑,而且又因为面向 C 端,其用户量巨大、用户敏感度极高,越是这种情况下越要保证服务器的高可用和高并发,这个时候服务端的架构设计几乎是决定了产品的生死,而前端是够用就行。
所以,可以给前端判死刑了?
居然有以前端为核心的商业产品?前端怎么可能为核心技术,而且是厚厚的一层?
一年多以前我曾经做过一个项目,里面有一个需求就是在前端读取本地 excel 文件渲染到浏览器里,并且通过浏览器可以做一定程度的计算、修改、排序等操作,这是我目前做过最复杂的前端项目了,虽然具体的技术细节早已经忘记了,但是我还记得当时急的挠头的状态,最终我也没有做的很漂亮,从 github 搜罗了各种开源项目拼凑成了一个可用的功能。
在那之前我个人对自己的技术能力还是有一定信心的,但是那个功能把我搞得很狼狈,首先得分析一下这个需求:
从本地读取 excel,这个时候就需要一个 excel 解析器,把 excel文件解析成 js 相关的数据结构。
渲染 excel,这个时候需要一个 excel-like 的前端组件,能将 js 相关的数据结构渲染成 table 表格。
操作 excel,这就得保证这个组件不仅仅只是渲染,还得保证可编辑。
有人会说,这还不简单,github 上搜相关开源项目组装就完事了,可是问题就在于这个需求不是简单的组装,我们还得考虑现实情况。
本地 excel 可能会很大,有几万条数据,js 相关的 excel 解析器会在解析过程中产生浏览器假死的情况。
大量数据的 excel 在渲染过程中会产生卡顿,不仅如此,对上万行数据进行排序也会产生卡顿。
如何保证数据安全,在编辑表格过程中出现了断网、浏览器闪退,数据怎么办?
你一定想知道我是如何解决这个复杂问题的。。。
其实我没有解决得很优雅,因为这个需求的复杂度过高,如果完美解决甚至可以单独做一个创业项目了,最终我在web worker 中解析 excel,浏览器假死的情况就迎刃而解了,排序和计算的卡顿我分了两种情况,在数据量低于 5000 的时候直接有主线程计算,超过这个数字同样开启 web worker,毕竟主副线程通信也是要开销的,表格储存则更粗暴,直接在本地全量保存,每隔 10 秒钟同步一次,上传之后再在本地清除.
我们试想下如果上述的需求不是一个简单的功能需求,而是一个产品呢?如果把微软 office 系列、Adobe 全家桶、ide 搬到浏览器里会怎么样?
当然,我知道已经有公司做出类似产品了,这些产品就是所谓的前端核心技术产品,这些产品也有一个共同特点,用户是专业人员或者 B 端用户,这个时候产品的设计理念是尽可能把功能做强大来满足专业人士的需求,而非 c 端尽可能简单来保证用户能理解。
除此之外,这种形式的产品与 c 端产品还有一个巨大不同,那就是用户数量,由于面对专业人士这种小众群体,其用户量在中前期并不会太多,甚至做到后面的用户量可能都跟今日头条差个数量级,这个时候后端的高并发似乎并不是最棘手的,而产品的核心卖家反而在前端的功能开发上。
3. 前端的下半场
讨论到这里我们是不是可以达成一个共识?面对普通消费者的流量应用以淘宝、头条为首,其产品形态和用户群体导致其前端不可能做出太复杂的应用,而前端为核心卖点的应用集中在类似于在线office这种面向专业人士的产品上。
那么为什么现在的现状是展示类的流量应用占据绝对主导?
互联网人口红利效应,过去十年是互联网人口红利的十年,搞个APP ,靠砸广告、砸补贴获取廉价用户,然后忽悠投资人融资上市圈钱,在获取用户如此方便如此廉价的年代,很少有人会静下心来去经营那些面向专业人士的复杂应用。
浏览器技术的不成熟,过去十年我们基本上消灭了 IE,但是不可否认在过去很长一段时间 IE 占据很多份额,也不可否认前端技术也是最近几年才发展起来,像 Gmail 那种应用放在当年也就谷歌那种超级巨头 hold 住,即使现在如果没有 WebAssembly 的加持我们也很难开发出媲美photoshop的浏览器应用.
前端从业者的不成熟,不仅指一线开发者更指一线管理人员,前端从业者从刀耕火种到现在温饱奔小康也就这几年的功夫,出个 vue3这种专为降低框架使用门槛的框架都有喊学不动的,面对 Adobe 全家桶那种超级应用很难想象依靠目前的开发者来开发,这种级别的产品需要强大的软件工程管理能力和扎实的软件开发技能,从这一点上前端从业者显然没做好准备.
但是这个现状不会维持太久,BS 架构迟早会进入这些超级应用的法眼,浏览器+云会是这种产品的常态,会有越来越多的超级应用进入浏览器,前端这个年轻的行业也会正式进入下半场.
我是基于以下判断:
互联网人口红利已经开始逐渐消失,当然拼多多这种将战场下沉到四五线城市甚至农村的企业仍然可以获得成功,但是目前来看拼多多已经一沉到底了,不可能再有新的红利了,没有了流量加持,c 端的机会越来越少.
一个产业成熟的标志是出现了大量 B 端企业,当初的美国兴起、日本兴起都是从开始的代工厂(富士康)到组装厂(联想),但是真正在产业中占据上游,占据主导地位都是B 端厂商的大量出现,比如目前绝大多数国产手机的核心零部件都是受制于美日韩的 B 端巨头,IT 产业不能只有头条、淘宝、美团,也得有中国的微软、Adobe 和Autodesk,但是目前来看还没有.
浏览器技术已经趋于成熟,目前浏览器还有两个大招没放出来,一个是还没有成熟的 WebAssembly,性能直逼 native,据说 office 编译成 WebAssembly 之后体验丝毫不逊于原生,一个是今年下半年即将出场的 webgpu,他的出现可以将浏览器的图形计算提升到另一个高度
所以,下半场的前端可能要求会越来越高,比如需要更好的基本功(算法功底),比如需要一门 native 语言(c/c++),比如需要良好的图形技术(webgl、webgpu)。
4. 前端的机遇
到现在为什么只看到了前端越来越重要,技术要求越来越高,不见涨工资?
目前前端职场其实也处于一个平衡期,因为前端红利其实也在这两年消失了,前端 leader 升职最快的那几年恰好是前端工程化运动最热烈的那几年,2011-2016也正是三大框架先后发布,ES2015 逐渐普及,Babel、webpack 这些事实标准诞生的时间段,那个时候把项目从 JQuery 重构到 React 就是大功一件,足以在升职答辩上赚足了眼球,那个时候在项目里用上 Webpack 就叫工程化也是拿绩效的利器,目前大部分前端 leader 就是靠着一波红利走上个管理岗或者高 P,所以红利期不仅对于商业公司,对于职场人士也是适用的。
2016 年之后 IT 职场的红利已经转移到区块链和人工智能领域,毕竟用 TensorFlow 调个参当调参小王子也能拿 50w 年薪的年代没过去多久,这么看 AI 的红利可比前端大多了。
是不是可以判断,前端的职场新人空间已经被红利期的老人们挤压没了?
在固定的产品需求下其实是这样的,一个企业一旦不扩大,你负责的业务也不增长,当前的产品形态也不变化的情况下却是机会并不多,毕竟升职加薪的前提是得有坑,并且你得有成绩,在红利期结束后虽然你还有机会,但是机会确实很小了,因为需要做出更有价值的事情。
但是大部分公司不可能一成不变,随着我们上节提到的前端下半场的到来,比如云计算公司需要把开发者牢牢绑定在自己的云端环境上,那么他们就需要云端的 WebIDE,这种 B端面向专业人士的复杂前端项目是不是就是个挑战同时也是机遇?没有一定技术储备的前端根本 hold 不住这种项目,就如同我面对 excel 需求时那样无力,同样是写新闻展示页面大家的差距都不大,这个时候技术不重要,但是随着项目复杂度的上升技术其实越来越重要了,这就是机遇。
总结
前端在面对 B 端专业用户形态的产品下往往能起到核心技术的作用,但是同时对前端的技能要求也会更高,互联网 c 端产品的红利期即将结束,前端的下半场即将到来,我们能做的是什么?
深挖洞,广积粮,缓称王。