导读:对那些刚入门前端的开发者来说,前端是一个“令人畏惧”的领域,尤其是在你看到前端的技能图谱时,你会发出这样的感叹,前端怎么有那么多的东西要学?我应该从何处学起?我又该如何应对千变万化的前端技术?
如何选择?
俗话说,“男怕入错行,女怕嫁错郎”。其实前端开发也一样,从开发工具到前端框架,开发者都面临着选择,选对了技术方向,对个人的职业发展有着举足轻重的作用。由于每个公司在一段时间内可能会固定选用某个框架,如果你刚好没有那个框架的实践经验或学习经历,就会失去一个进阶机会。 再者,不管是在 GitHub、Medium 还是在知乎、掘金上,我们对一个技术或项 目的判断会被点赞数或评论影响,很容易让开发者随波逐流,选择一些跟自己无关或者没用的技术。 因此,开发者在选择框架时,应该从企业需求和个人的爱好找准自己的目标,而不是人云亦云,尽可能选用能提供大面积功能、不需要很多插件来提高生产力的框架来开始你的项目,并根据开发环境的变化,随机应变,而不是广撒网盲目去学。确定学习的目标之后,就开始学习了,你可能在网上看了很多“名人”写的博客,买了很多书,也看了很多教程,在这个过程中,你觉得很充实,但你只是为了学习而学习,你学了,似乎看懂了,但没有真正地记住和消化,但如果你是因为在项目中遇到了问题,然后再去读那些教程,你会比想象中得到的更多。
关于变化
前些天,Node 之父 ry 发布新项目 deno 时,很多开发者都在抱怨——求别再更新了,学不动了。众所周知,历史本来就是不断地以优胜劣汰的方式向前发展,地球也不会因为任何人的不满而停止转动。虽然 Node 很优秀,但我们要明白,一山更比一山高的道理,新技术的出现并不代表旧技术“无能”,而是新技术更能适应生态圈的发展环境,提高开发效率。如果我们一直沉浸在过去取得的成就而停滞不前的话,那么人类就永远不会进步了。 对开发者来说,逆水行舟,不进则退,与其去埋怨别人进步得太快,不如去反省一下是不是自己走得太慢了。最后,祝愿开发者们都找到一条适合自己的路去实现自我价值,甚至改变世界。
前端工程师如何抉择
不想成为全栈的前端不是好程序员。数年以前,全栈工程师的理念忽然风靡墙内外,成为开发者们津津乐道的话题。数年过去,关于全栈工程师的争议不多了,教你速成全栈工程师的视频课程多 了起来,说明大家对于这个理念慢慢接受了。但我发现,鼓吹前端往全栈转型做的有点走火入魔,有的说前端应该成为 K 型人才,甚至部分招聘前端工程师的要求都 写着:熟悉后端至少一门语言和框架,熟悉数据库。过分了啊。 诚然,有了 Node,再加上 JavaScript 大杀四方,前端转型全栈的确是非常顺理成章,但各个语言在各自领域耕耘多年,别说取代,就连取得一席之地都非常难。如果不靠一门语言通打天下,去学习其它领域知识、熟悉领域整个技术生态依然是艰难而缓慢的过程,这难度不亚于转职为其它领域的程序员了。 所以,全栈虽好,也不能贪心啊。
全栈工程师很吊?
对于全栈工程师,社会上的要求真的不高。就像某些人调侃的那样:会一门前端和一门后端就自称是全程工程师了。没错,真的可以。 为什么呢?随着现代大型互联网应用架构越趋复杂,一个人是很难同时精通很多领域的,但如果只是开发小型应用,应对不多的流量,借助开源软件和工具, 一个人也可以办到,这是导致全栈工程师出现的根本原因。 全栈工程师从最开始就是为小型应用而诞生的,想让它解决一切只不过是幻想。
说一说 node 全栈?
Node 现在真的什么都能干,从服务端开发到人工智能、区块链,到处都可以见到 Node 和 JavaScript 的身影。只靠 Node,你似乎都能完成全栈开发了,事实上有些全栈招聘的后端技能就是 Node。但这只是表面现象。 就像上面我说过,各种语言都有他们适合的场景,在追求性能的服务端基础组件、追求高并发高可用的大型系统开发上,Node 还非常稚嫩。比如,最近 OpenResty 的创始人就在微博上对 Node 启动之慢表示惊讶,而这是因为 Node 启动时要加载很多 JS 代码造成的,算是先天缺陷,难以克服。 所以,要想真正开发靠谱的大型系统,Node 还得靠边站。但是,靠着前端的飞速发展,Node 在这种大型系统中也取得了一席之地。 其中,SSR 和 BFF 都需要在后端开发一个中间层,而且这个中间层多半由前端开发和维护,于是使用 Node 成为顺理成章的选择。 其次,在现代的微服务架构中,Node 可以用来开发部分服务,利用在异步 IO 上的优势,在性能上可以满足需求。 除此之外,桌面应用开发上基于 Node 的跨平台方案渐成主流,一些新兴领域也都等待探索,Node 的应用场景还是很丰富的。 所以,我认为的 Node 全栈,是部分优势领域的开发+新兴领域探索,Node 本身并不是一个完整的全栈方案。
K 型人才?
前美团点评的刘平川老师曾写过一篇文章,说前端开发可以一专多能,又叫 T 型人才,这个词其实在职场提的挺多,大家都比较认同。放到前端领域来说, 就是在不同的侧重点、不同的平台上都有开发能力,但同时对某个子领域扎的很深,他们欢迎这样的人才。 然而,前段时间看到这样一段话: ……到了今年,企业开始更注重前端工程师的技术广度。一个优秀的前端,要做到的不仅仅是「T 字型」,而应该努力成为精通前后端至少两门语言的「K 字型」人才。
在大厂,前端晋升靠啥?
在大厂里,工作高度分工,工程师的全栈其实很少有用武之地,晋升要看他们的工作对业务的帮助。 是的,公司要的是业绩,技术的最终价值就应该体现在提升业绩上,这其实是放在任何职业都适合的说辞,只是我们很多时候都忘了。 在对新技术的追逐上,在对采用何种技术的选型上,很多时候我们为了技术而技术,为了让自己不落伍而学习使用新技术,而并没有从是否适合公司业务的角度去考虑。举个例子,去年以来,前后端分离非常火,很多前端打着首屏直出或者 SSR 的理由要做前后端分离。但是你想过吗?增加一个中间层,必然会让响应时间增加,即使需要渲染的页面简单,最少也要增加几十毫秒。另外,如果不能保证中间层的可用性,就变相的增加了系统挂掉的风险。所以,不能盲目的采用新技术。 还有人说,前端离业务太远,根本联系不起来。有的公司可能是这样,前端接触不到业务数据,不知道自己所做的工作给业务带来的影响,更不知道如何去衡量。但前端是数据采集端,其实离数据很近,PV/UV、应用性能数据等至少是可以接触到的吧,通过这些数据,也可以衡量工作的效果。 另外,提升工程效率,制定规范,打造持续集成工作流,也都是能帮助业务的地方。 从提升业务数据的角度去看新技术,才能既让工作获得肯定,也能保持技术上的成长。 当然,这里的新技术要在你负责的岗位职责之内,逾越本分,抢别人的活干,干好了别人不会感激你,活儿干差了则是铁定背锅。
大前端的边界到底在哪里?
端上的开发,Web、移动端、PC 端,这些平台上的开发现在大家基本都认同是大前端的职责了,虽然在具体的工作中会按平台来划分。 工程化,提升工程效能,现在都 DevOps 一体了,其中端上的工作也被认为是大前端的事情。 服务端的开发,Node 全栈,有人认为也是大前端,因为都是用的 JS 嘛。但我 认为不是。因为这样的话,前后端的划分就没有意义了,全栈是全栈,前端是前端。那么,在服务端上,大前端可以做什么? 我认为这要看具体的系统架构,拿现在越来越流行的微服务架构来说,API 网关看似和前端有关,API 的内容是由前端的需求驱动而来,但分析网关需要做的事情,流控、鉴权、熔断、报文转换等等,完全是后端的职责。 但在 API 网关之外,Sound Cloud 的 Phil Calçado 提出的 BFF 架构,其实是可以由前端来负责的,而且也刚好和平台、岗位对应起来,可以当做前端的自留地。在上面 SSR,或者像是由手 Q 开源的 Vas Sonic 框架里的代码 buffer 化这样的骚操作都可以实现。当然,这里一定会遇到高并发、高可用、性能的问题,是需要前端去拓展自己的地方。