我理解的前端

3,645 阅读10分钟

背景

想来自己从大二开始接触前端,在学校各种乱混,到去年研究生毕业,正式成为一名前端工程师已经有五六年时间了,即使作为正式工作只有一年时间,我也有了一些自己对于前端工程师的自我思考和定义,技术方向或者业务方向,这里想和各位社区的朋友一起讨论

自我介绍下吧!

我的昵称是“鲍师傅的铜锣烧”,不是因为我喜欢吃铜锣烧,是因为我女朋友喜欢吃鲍师傅的甜点
喜欢前端,更喜欢JS,自我反省来说,我不是一个称职的,纯粹的前端,在学校时时候写的最多的是python,因为要做各种实验
211末流本硕,在学校“养猪”,主要是将CV用在🐖身上的识别,瞎搞积累了些目标识别的经验,也有一些自己对AI的思考想法
研究生时候,不太听话,背离整体路线,看了一年多国内外区块链论文,对区块链的整体有了一些底层认知,也写过一个自己的COIN
额,因为我在AI和区块链上的瞎搞,我想把JS搞在这两方面上,让我看到了端侧计算性能的问题,无论是webworker,wasm,还是还在提案阶段就被three.js实现的webgpu,其实可以看到未来会对js计算性能要求越来愈高
扯远了,我现在是阿里的一名前端工程师大头兵,也在团队内搞些UI相关的算法模型
之前在腾旭和爱奇艺待过,对这三家公司算是有些体感 我的博客:鲍师傅的铜锣烧
我的公众号:QC的黑板报

说点基础的,前端怎么学!

学前端,我就是个混子,没有系统学过,平时东搞搞,西搞搞,也不知道自己搞了个啥,当我把一些经验东拼西凑起来后,我貌似看到了前端的整个大图

0基础的你要怎么自学

1.HTML+CSS+JS 这三是前端的祖宗,得学
2.上面三个你学的很溜了后,我指的是你至少熟读了MDN文档后。你可以学下现在流行的框架,国内Vue,React而选一。框架的学习最好就是直接看官方文档,很多时候你遇到问题解决不了其实就是你的学习路径是些乱七八糟的,一些重要的特性被你忽略了
3.讲道理,上面两点哪怕你每个都学个50%,找工作是没问题的,据我了解现在国内有1000多万前端,我滴妈呀。我觉得把这个时候要学下Node了,学什么尼,跑下server,毕竟每个前端都有一个服务端情节,学习下一些用的比较多的api,能够知道你npm start或者npm run dev在干啥,那我觉得可以了

有点基础了想进阶了

1.不同版本的HTML,CSS,JS(ECMAScript)得会,为什么会有版本升级,带来了什么新的标准和api,解决了什么问题,这对你了解整个前端发展,语言的演进,标准的制定流程等都会有一个明确的体感,对你解决工作中不同的问题也会有很大的帮助
2.Vue和react(hooks)总会了一个了吧,八股文中的各种原理是要去看的,这不仅对面试有好处,对代码的调优和解决问题都是有很大帮助的
3.讲道理,这个时候,前端模块化和打包工具你也是有些见解了,相应的发展路线也应该略知不少了,深入一下webpack和gulp是由必要的,不是有个职位叫做“webpack打包工程师”么,😄

进阶成功了想能够独立cover项目了

1.技术选型,没有更好的语言或者框架,只有适合当前需求的语言和框架,你在知晓不同框架及工具的基础原理后,培养自己对项目技术选型的能力是有必要的,这好像是架构师的角角了,有点感觉了
2.工程化,前端工程化是一个方向,随着前端的不断发展,变得越来越复杂,使得前端不得不以工程化的方式来管理,尤其是前后端分离后,前端就更工程体系化了

项目会做了是时候到深水区了

想来前端发展也就最近10年把,最初是没有前端工程师的,那个时候叫UI,UI把界面(html+css)写好,交给后端组装(各类** P,例如:JSP),后来js慢慢变得复杂出现了重构工程师,专门写页面,随着技术,各类设备的不断发展,网页的可操作性变多,这个时候出现了前端工程师的角色。随着js的不断发展,各种初版库的出现,使得前端程序员在操作dom上面获得了便捷,说到这里,你是否有体感,各种库框架的发展,都是在不断优化开发者的体验上,也就是说是开发者体验优先的,这里是否是未来框架层面的一个发展方向,更加的兼容用户体验优先,而不是把用户体验留给业务来解,这是值得讨论的。那么我们说前端现在的深水区是什么,我理解有以下几个方向
1.框架层面的优化发展
开发者体验优先做到极致的前提下,是否应该考虑用户体验优先
2.工程化
工程化搞得比较久了,但可以接着搞
3.低代码和无代码
这两东西应该在整个产研流程上来看,或者产品生命周期里面来看,受众应该绝大部分是非开发同学,之前throughtwork的中国区CTO在infoq上一顿吐槽这俩对程序员没有用,挺无语的
4.前端智能化,端智能
以ui设计稿自动生成代码为例,为了实现研发提效,训练算法模型来自动出码,我认为这是一个方向,但是是短期悲观,长期乐观的
5.serverless
serverless可以看下我的这篇博客随笔
6.web3.0
可以搞,但是你得有相关基础,区块链就是其中一环

QA一下子

Q:前端是不是必须学Node?
A1:是的,前端工程化得益于Node,以js作为基础编程语言,使得前端很容易上手,其具有的操作系统可交互的API使得其成为了前端工程化的基建,其他语言也不是不可,但同种语言会减少比不要的麻烦
A2:Node的异步I/O设计使得其很适合做高I/O的工作,这种优秀的设计我相信后端更有体感,redis,nginx等具备。在大型网站系统中,Node可承担的作用更多,能够做页面的ssr直出,BFF层,为整个服务抗掉部分非数据计算行为(如:鉴权)等
A3:前端总是有全栈憧憬的,在研发流程上可能就比测试靠前一些,学会Node可能会让前端更自信???这点我自己不是很理解

Q:框架重要么?
A1:重要,极其重要,框架解决的是开发效率的问题,并且框架能帮你解决掉大部分的问题
A2:不是必须的,最近在开发一个新的页面的时候,尝试了放弃react,使用w3c标准的webcomponents来写,才发现自己已经深受框架所禁锢,好在就是喜欢强迫自己改变

Q:前端现在水深了么?
A1:没有,前端最多就最近10年,现在正处于框架,轮子乱飞的时代,所谓乱世出英雄
A2:类比后端几十年的发展,属于是已经没有轮子可以造了,所以革了自己的命,发明新的语言,再继续造轮子。而现在的前端框架多在借鉴后端的设计思维
A3:不是没人革JS的命,MASM就再虎视眈眈,在一些要求极致计算性能的场景下就革掉了JS的命了

Q:前端3D,webGL是未来么?
A1:我觉得是的,至少在现在看来是有一定未来的,各种社区内容化,3D化都是对前端,或者说端侧计算能力的考验

Q:业务同学应该怎么去做 A1:我自己就是一个典型的业务同学,可能有些公司并不分技术和业务,我觉得大差不差,我觉得业务同学更因该注重业务在你负责的页面上给用户带来的体验,我说的体验不是只是优化各种指标,例如:首屏时间,performance的各种指标,而是你站在用户的视角来看你的产品,作为业务前端,应该更有产品视角,有本书叫做《增长黑客》是产品必看的一本书,我觉得前端也应该看下 A2:心态放平,技术的输出一定是要有业务承接的,否者就是费的,如今大环境再像以前盛大创新研究院那样,养一批人来搞各种研究的好事几乎没有了,就算是阿里的达摩院,一样要求再业务上得到产出

Q:node能替代php么?
A1:这我不知道,但我看到了腾讯的一些之前写php的哥们儿都在转GO

Q:ssr是在倒退么?
A1:我觉得不是,说倒退的人我想可能是与以前的JSP等化了等号,我理解ssr是现在csr的一种优化手段,毕竟各种框架也支持serverRender,如虎添翼的感觉

Q:前端有必要学习V8么?
A1:当然,知晓V8的原理,对你编写出高性能的代码有好处,你知道V8的编译解析过程,知道GC的优化方式,才能更好的编写JS
A2:说到V8,浏览器是多进程架构的,不知道有多少前端同学是知晓的,从导航栏输入一个url到呈现出来页面这中间发生了什么,我相信很多同学八股文被的特别六但也特别浅,一般可能就知道网络的DNS解析,握手建立,数据传输,DOM Parse,structure tree,style model parse,render tree,n*(reflow+repaint)等到界面呈现,但知道浏览器的进程各自负责哪块么?之间又是怎么相互依赖和消息通信的?style是怎么计算并形成渲染树的?等等

Q:进培训班可以么?
A1:当然不可以,无论你是哪个学历的同学,我都不赞成进培训班,我搞不懂为什么要进培训班,是,短时间你可以快速成长,并能找到工作,但我觉得会成为你往上走的阻碍,我说的阻碍是你的自学能力,自驱能力
A2:当然,我也有朋友进过培训班,现在也很厉害,工作也很好,但,他们都是有很强的自驱的,并且对前端保持热爱与极客情怀,举个例子:我本科时候有个同学参加了培训学习了前端,但现在在网易做游戏后端JAVA,但一直在维护自己的一些前端开源库,所以,我理解在学习无门的时候,实在找不到路子的时候,可以报名培训班,入下行,但,重要的,还是持续的学习与投入

总结一波

我是觉得前端的水还浅,能做的事还是很多的,如果有极客情怀的,可以玩出很多花样,大家加油