2019年下半年即将到来,上半年狂风骤雨般的裁人浪潮让每一位从业者背脊发凉,在经历了五六年黄金发展期以后,前端开发这个行业彷佛也进入了转折点。前端
我一边听开发者在网络上抱怨工做难找,前端开发早已经饱和了,又在另外一边听大厂的朋友们抱怨,招了好久的人,四处出击却填不满HC,前端人才市场就是这么充满了矛盾与反常。vue
其实仔细想一想,出现上述的状况很容易理解,实际上前端开发单纯从数量上已经饱和了,因此大量的初级前端工程师找不到活干,可是从另外一方面,高级前端工程师依然是百里挑一,高级岗的HC永远是不饱和的。node
前不久民工叔发的动态:react
目前前端人员的分布是金字塔形的,并且是底部比较长的金字塔形状:git
因此进阶是大部分前端开发必需要面对的事情,如今已经不是能写几个页面就能找到工做的时代了,只有往上进阶才能保持职业竞争力,不然咱们谁都不能保证下次裁人潮来临的时候,咱们会不会成为沙滩上裸泳的人。github
前端社区是很是活跃的社区,几乎每过一段时间都会有新的技术或者新的开发方式变成了热点,所以前端开发者才会有了『学不动了』的梗,以及毕竟丢人的Deno留言事件。web
以我本身为例,由于想本身开发一个APP,因此面临技术选型,也面临未来要投入大量时间选择学习的技术,摆在我面前的有三个选项:编程
到底选择哪个技术既能知足开发APP的需求,又值得投入时间进行学习呢?小程序
若是你去知乎或者其余技术类的社区去问,绝大多数的回答是Flutter(虽然从回答来看不少答主彷佛都没用过Flutter),Flutter做为正式发布才刚刚半年的新技术已经席卷了整个大前端圈子,成为了当之无愧的第一热点,真是佩服谷歌的布道能力。后端
关于Flutter的事情我思考了好久,也用它快速开发了一个demo,它有很吸引人的地方:
这门技术确实很吸引人,加上社区各个会Flutter不会Flutter的人义务宣传下,我甚至快决定好好学习一下Flutter了。
可是,你们有没有想过,经过学习Flutter,你的技术就提高了吗?
不少人第一反应是『固然了,学了一门新技术,学了一门新语言,难道技术不是提高了吗?』。
可是我以为并无,我其实依然在原地打转,一个Java开发者学会了用Ruby增删改查并不能表明能力提升了,一个前端开发者用RN或者Flutter开发了简单的APP也不能说明水平提升了,只不过是用另外一种语言再写了一遍UI而已,会用三种框架写页面,并非什么高技术含量的事情,会三种不如深刻一种。
Flutter跟RN同样,想玩得转必须深刻到原生开发中,由于这两个技术都不是真正的跨平台,他们仅仅是UI跨平台,若是你仅仅学一个Flutter写写UI,意义不大,也不存在能力的提高。
咱们或者再功利一点地思考,就算你学会了用Flutter写UI又怎么样呢?大家公司内部有Flutter项目吗?即便有轮获得你施展拳脚吗?毕竟你没有原平生台的知识储备,仅仅写个UI又有什么呢?
其实,这个例子说了这么久,我只是在说两件事情:
我以这种思考模式仔细研究了近一段时间热点的技术,有几门技术我能够比较确信在将来会在前端开发领域大展拳脚。
我从2017年就开始使用TypeScript了,能够说正当时,在使用过程当中踩了不少坑,也总结出不少经验,知乎上的问题『你为何不使用TypeScript?』中的最高票回答就是笔者本人。
在2019年的年中,我能够很是确信TypeScript会在一年内大规模流行,怎么定义大规模流行?
超过30%基于前端框架的新项目会以TypeScript为主要语言开发。
缘由我总结了三点。
大量重量级前端开源项目采用TypeScript开发,包括不限于:Angular、VScode、Vue3.0、Rxjs、TypeScript(对,它自举)、Mobx、deno、Antd,并且这个趋势愈来愈明显,包括Facebook自家的Jest也宣布从flowType转向TypeScript。
这些重量级的开源项目有很是强得带动做用,我不止一次见过有的前端开发者说,为了看懂Antd的源码,特意学了TypeScript。
能够说,TypeScript的开源生态已经很是完善了,公司彻底能够放心大胆得进行TypeScript化开发。
请问前端开发中,引发错误的最多的三种报错是什么?
你不会想到,是:
竟然是三种很是很是低级的错误,缘由就是JavaScript是动态语言,只有运行时才会报错,这些低级错误在类型定义完整的TypeScript中不会发生,这就是TypeScript的优点之一,编码时就能规避大量的类型错误。
TypeScript完整定义接口,能够减小很是多的沟通成本和文档编写成本,最好的文档就是类型,除此以外,有了TypeScript的支持先后端的协做也会很是方便,有了TypeScript咱们彻底能够开发一个工具把后端Java Swagger的信息映射到TypeScript中,方便咱们取数并最大程度规避错误。
如今已经有了这么一款前端取数库pont.
总而言之,TypeScript解决了前端的两大问题,规避错误和提高效率。
阿里 MidwayJs Team的负责人在GMTC上就说到过『 TypeScript,来帮助咱们解决这些质量,习惯,方法上的问题,就拿 midway 团队来讲,自从使用了 TypeScript,质量提高的很是明显,日常须要测试好久的代码,几乎不会出现低级的问题,反而暴露出的大多都是逻辑问题。』并提到『而今年,咱们但愿新应用全量使用 TS。』
Vue3.0将在下半年的发布,虽然尤雨溪确认Vue3.0支持JavaScript和TypeScript两种语言,可是vue2.x那种残疾级别的支持到如今原生支持TypeScript,势必会引发大量以vue为技术栈的公司进行TypeScript化运动。
届时三大框架均可以完美支持TypeScript,甚至其中有两个是由TypeScript直接开发的,而vue在国内的用户量最多,也最能影响TypeScript在国内的走势。
而据我所知美团、饿了么等一大批vue技术栈的前端团队也已经大量实践了TypeScript,至少在大厂层面,TypeScript已经开始大规模普及了。
图形技术不会在短期内席卷前端,也永远不可能成为前端的热门技术,可是倒是前端开发者进阶必学的技术。
为何说图形技术不会在前端大火?
要火早就火了,今年年内都要发布webGPU了,绝大部分前端连webgl1.x都搞不清楚,归根究竟是技术栈不匹配,前端开发和移动端开发虽然很大一部分工做是实现UI,可是这个实现方式几乎都是调用宿主内置组件,极少有用图形接口画UI的状况。
为何又说是进阶必备?
图形技术多是仅有的与前端有密切联系的计算机底层技术了,由于所谓的UI就是靠图形接口调用GPU绘制而成的,这样就意味着掌握图形技术就能更深度地定制UI。
将来的前端UI不只仅是简单的Input、Table、List等粗颗粒的组件构成的,而是更加多元化、更加细粒度,就拿笔者最近研究的可视化大屏项目来讲,它几乎用不到任何传统的前端组件,一部分2D组件是调用Canvas绘图接口,一部分3D组件是靠webgl绘制而成。
今年下半年5G开始在国内大面积铺开,广泛的一个观点是认为5G的到来会让AR、VR等虚拟技术从新焕发生机,这些技术也无一例外不与图形技术相关联,毕竟你总不会认为在AR中绘制一个input组件吧。
从去年开始关注图形技术,我也惊喜的发现跟一些前端专家们的观点不谋而合。
一个是年初奇舞团的leader月影在知乎的回答:
另外一个也是年初winter的前端技术预测:
这里的编辑器指的是各类编辑器的总称,例如:代码编辑器(WebIDE)、图形编辑器(在线的3d建模或者ps)、文本编辑器等。
编辑器领域技术不会像TypeScript同样蔓延到几乎全部的前端团队,可是必定是会在局部火起来的技术。
为何说只会在局部火起来?
这是个很是小众的领域,可是复杂度和重要性却与日俱增,首先绝大部分公司的绝大部分业务场景中对编辑器的需求很小,其次,编辑器的通用性很大,每一个网站的具体业务场景的实现千差万别,可是说到用户输入的文本编辑器,那可能用的都是同一款开源软件。
说完了局部,咱们在谈谈为何会火,最重要的一点就是云端开发的普及,大量的开发者服务被移植到云上,包括最近比较火的FaaS、小程序服务等等,云厂商一方面为了给开发者提供更好的服务,好比开发FaaS的调试服务,因此须要定制符合本身业务的webIDE,另外一方面也更重要,一个开发者的开发环境轻易是不会变的,webIDE就是这个环境,webIDE就是云厂商开发者争夺战的入口。
另外一个缘由就是,大规模的团队十分须要将各个团队的能力整合在一块儿,而整合开发的钥匙就是IDE。
虽然不少公司招编辑器相关的工程师都是挂着前端的Title,可是普通的前端工程师若是没有相关经验,彻底拿不下这种场景,这就形成了虽然这是个小众领域,可是人才却很缺失的状况。
下图为圆心在GMTC上展现的阿里前端委员会布局的四大方向:
Serverless确定会火,并且也是生产力上的直接提高,前端能够不考虑部署、运维、环境等场景,直接编写函数来实现后端逻辑,可能之后人人都是所谓的全干工程师了。
可是为何没有重点拿来将,首先serverless的适用场景还比较轻量,他不是银弹,如今的serverless热在必定程度上夸大了它的实际做用。
还有一点,对于前端而言Serverless实际上是工具,你只能拿来用,自己的开发须要云原生的专业开发者,因此前端根本没法深度参与,他反而把前端对node的要求下降了(由于只要会代码,不须要后端知识),可是对于企业和团队是好事,对于我的而言并非很是有助于成长的一门技术。
5G来临,万物互联的说法又随之而来,IOT会不会在5G时代火,我并不肯定,可是前端在IOT上想大展身手我以为这几年内看不到进展。
有人会说不是有人把js移植到嵌入式领域了吗?是的,甚至三星还为IOT设备定制了js虚拟机。
IOT是低性能低功耗低内存的设备,越是在这种场景下,低运行时高性能偏底层的编程语言越强大,惋惜js与此偏偏相反,这门语言天生不适合IOT,而C语言却如鱼得水。
ps:我以前听过一个专门搞IOT的技术专家说过,js最大的问题就是功耗,不少便携式的IOT设备上js根本没办法商用(充电五分钟,待机5秒钟)
那为何还有那么多人在炒js in IOT这个话题?
感兴趣的能够听Ruff的做者郑晔的电台采访。
缘由就是js开发者多。。。有技术难度的底层技术都会被专业的嵌入式开发者搞定,js开发者只须要写业务便可,因此又回到关于Flutter的问题了,你在IOT写业务比浏览器写业务有啥技术提高呢?
固然了,从职场角度搞IOT仍是有前途的,一旦IOT火起来,先进入这个领域的人能够更轻松地摘桃子,可是我我的不推荐如今就入坑,风险远大于收益,若是真的对js in any感兴趣,不如去研究js runtime,好比node和deno,这是真正有助于提高能力的技术。
GraphQL已经被炒了好几年了,可是依旧动静不大,不是技术自己又有问题,是这门技术严重损害了后端开发利益。
GraphQL对于前端开发者是真的好用,今后不用求后端大哥搞新接口了,彻底能够自给自足,可是这个让前端开发爽到天的技术,付出的代价就是大量的改造工做须要后端来作,后端团队累死累活搞了GraphQL,得利最大的倒是前端,出了错锅得后端背,这种技术推进的阻力可想而知。
这门技术考验的是跨团队沟通协做能力,不是技术自己,固然不少时候前者比后者更重要,可是与本文主题不符,按下不表。
这几年炒的最火的技术就是AI,虽然这个领域跟前端能够说没有任何交集,可是依然有不少人想往这方面靠。
先说tfjs
的问题,基于浏览器的深度学习框架,其实应用范围很是很是窄,笔者在调研的时候没有发现什么有商业价值的案例,在浏览器中跑深度学习原本就很小众,再加上js自己的性能问题和浏览器没有支持GPU加速的API,致使tfjs
更像是个残次品,实际上一些前端团队虽然在开发AI应用,可是基本用的都是正宗TensorFlow。
目前算是比较靠谱的前端+AI的场景就是自动化UI,将设计师的设计稿自动生成UI组件,还原UI是很是机械重复性的工做,早日干掉还原设计稿能够充分解放前端,目前闲鱼的大前端团队已经有相关的成果了。
前端就算涉及AI,也最可能是停留在工具使用阶段,也就是所谓的『调包侠』,固然,即便这样你能帮助团队解决生产力问题,那么已是大功一件了,建议有能力的同窗能够布局一下这方面的技术,可是对于绝大多数人而言,玩转深度学习即便是调参也是很遥远的事情。
这是笔者看完圆心的分享以后的一点感觉,圆心的格局很高,谈到的都是技术形态、技术影响力和技术生态,本文格局还很小,只停留在技术成长上,只不过对于当下的笔者这种小格局彷佛更实用。
这就是笔者站在2019年年中对将来前端技术发展的思考。