现在又来到了招聘跳槽季,此篇文章不是想要写如何面试的话题,而是比较发散的说一说,前端工程师该如何保持竞争力。当你拥有这样强大的power后,如何立于不败之地,想来工作还不是手到擒来。
以前的我们不再回顾,而是以后的我认为需要独立思考一下,你比较适合哪一个分类,除非你真的是特牛逼的“天才”,有大量的精力和脑容量,去消化所有,不然还是老老实实的先成为一个分类的专家吧,现在我认为前端工程师也是终端工程师,在泛GUI领域,理论上只要能运行JavaScript,都可以算前端,那么这也容易造成选择困难症,当你进入一个行业后,跳到另外一个行业,还是要付出很多其他时间的。接下来,我们一起梳理一下,如今的泛前端工程师到底能做一些什么,然后再谈一谈如何判断的问题。
传统的Web前端技术,我们不谈,因为我认为这是你必须要掌握好的。现在的前端界可谓是有两大生态:React和Vue,生态的意义就是基本面的覆盖,在主流基于浏览器的Web应用开发,移动端领域,理论上泛GUI领域的应用,它们都可以手到擒来,因为它的生态给它提供了从路由到数据处理等一系列的高质量的开源实现。
那么我们谈谈以Hybrid模式为基础,Weex,React Native,Electron为代表的移动领域或泛GUI领域。在移动互联网时代到来之后,传统的前端开发并未遭遇尴尬,反而通过Hybrid这样模式,渐渐站住了脚根,延伸出来了很多移动端上的使用场景。混合模式解决了很多Native上的痛点,这肯定是有需求的,比如跨平台代码的复用,动态化部署等。不管你的Web前端代码运行在UIWebView或者WKWebView上,还是运行在Weex这种JavaScriptCore上,其核心的本质,都是在于互相通信。但有一点不同的是,Weex和React Native在JavaScript层面上都提供了一个中间层(Virtual DOM),比如你想显示<div>icepy</div>,先要转换成了中间层定义好的某些类,“icepy”变成了这个类的属性,最终的呈现而是通过互相通信的方式,将这些发送给Native来最终呈现。理论上,这样的模式,在不同的终端上,在业务层面只需要使用Web前端技术,通过中间层,到达任何能运行JavaScript的容器中,都是可用的。
再来看看以Node.js为基础,延伸出来的服务端领域或Cli。Node.js其实提供最重要的能力是与系统之间建立了桥接,如果可以,这应该也算是一种类型的混合,其本质上还是基于互相通信的方式,只要你的JavaScript可以运行在它提供的容器中,都可以把系统处理的结果再返回给上层的JavaScript。社区里,最开始是从前后分离开始,以前模板是需要提供给后端来写逻辑的,如果页面需要修改,是极其低效率的,而且前端也失去了对页面的控制权,后端怎么处理,完全是一个黑盒。而Node.js的到来一定层度上提供了一个契机,就是将前后进行了分离,不过这种探索,目前为止还是发现了很多问题的。再想想我们用到的cli或者其他的构建工具,可以说100%都是基于Node.js,在这方面Node.js应该算是改变了前端的生产力。
其他类型的是不是也有很多?是的,这里我主要摘录了两个比较大的分类。当然,以微信平台为代表的super app领域,应该是有很多创业公司,或者个人工作室,大量的业务都是基于微信来开发,超级App也是隐性的代表了一个“操作系统”,这也是一个可以关注的领域。
昨天看了前端之巅发布的一篇文章《当我们在谈大前端的时候,我们谈的是什么》我个人比较反对提及大前端工程师的概念,为什么?这对于个人的引导是有误区的。
看起来你用Web技术完成了从移动到桌面,甚至服务端的全部工作,如果可以,我认为你这些都是在应用层面上的使用,但是对于这些在背后的技术知识点你又知道多少。就比如Hybrid桥接这种模式,你的Web前端代码运行在Native提供的容器里,通过互相通信的方式来连接Native内实现的某些特定代码。如果你只熟悉Web前端技术,说真的,有可能出现问题的话,你定位错误都很难,就别提你能否hold了这些了,最终还是需要借助Native的同事来帮忙定位。
我厂出品的Weex虽然提供了WXDevTool让前端工程师来debug,查看元素层级,这些都还是处理业务逻辑流程上的。但是在我遇到一些其他的问题时,我就需要引入Weex的源代码,在互相通信的部分打上断点了,从前端JS Framework的运行开始,一直到连接你的业务代码,才能查到问题所在,比如Service方法,最后定位到Vue仓库里最后createInstance时,没有把env传递给业务,而这个env是从哪里来的呢?是从Native初始化时 WXSDKEngine registerService注册的脚本,先到达weex仓库里的JS Framework中的createService,然后通过通信交互的方式来到达业务,谁能想到通信的方式又是Native来主动调用JS的createInstance方法呢?如果你一直在WXDevTool里调试,哪怕一万年都没法定位到问题。
如果你对于自己的专业发展只是想处理业务,那么你确实可以几个方向都尝试一下,这不是坏处,如果要精读只怕需要付出的是更多的时间,才能保持你的竞争力。同样的道理,在Web前端技术理解相差不大的情况下,企业更愿意招聘有其他背景的同学。在如此浩瀚的知识海洋里,显然我们都不可能成为每个领域的专家,大前端工程师的概念,我认为极有可能把让人产生一种误区,就是什么都能搞,但是什么都搞不精。
我认为你需要的是认真的选择一个行业,努力成为这个行业的专家,不要花太多时间在不相干的知识点上,如果你入主的行业以开发移动应用为主,那么请你花更多的时间在Native上,在桥接Runtime的实现上。说真的,你拿来一个Node.js的作品去求职,但是面试的职位是移动开发,只怕是很难有出彩的地方。更多的时候我认为应该是以领域来分类会比较好,再去扩展深入这些知识点并且好好的消化掉。如果你的团队是以工程化,前后端分离为主的,那么就可以好好深入学习一下Node.js以及它背后的实现了,相信我C/C++有的是大量的时间让你学习。
想想Node.js就应该提供Node.js工程师的职位嘛,干嘛要牵扯到前端?Hybrid其实都可以叫容器工程师,真正解决的痛点,就是这些了嘛。你要保持的竞争力,也就是如此,来到一个不同的领域中,认真的看一看,这些问题是否可以达到解决的目标。而不是什么都去看一下,更不要让大前端这样信息给吓着了。
你身边如果有朋友对混合领域(跨技术栈)或全栈感兴趣,可以转发给他们看哦,^_^先谢过啦。