前端是什么,做什么,怎么样(个人理解,希望对大家认识前端有所帮助)
本文转载自 前端是什么,做什么,怎么样(个人理解,希望对大家认识前端有所帮助) - CC98 (opens new window),著作权归原作者 MGZX (opens new window) 所有,如有侵权,请联系删除。
作为一个接触前端五年多,但还没有正式工作的人来说,目前对前端的理解是:用户体验、浏览器 和 提效。这三个词并不是一个层面的,但我认为是接触前端以来印象最深刻的。
这里就先说下我对这三个词的理解,然后再说说具体前端的技术栈、细分的工作类别等等。
# 用户体验
其实广义来看,前端,frontend,就是跟用户打交道的领域,前端和客户端一样,最根本最重要的就是优化用户体验。大家逛的各种论坛、看到酷炫的苹果官网、甚至用的腾讯文档、VSCode 浏览器,都属于前端产品,而这些产品也都是围绕用户设计的。
用户体验分为给用户看,和让用户用两种,前端的主要功能也是这两块:展示和交互。这两者之间是有权衡关系的,举个不太恰当的例子,图片展示东西很自由,但是交互很差;直接命令行操作数据库和服务器进行交互很自由,但是展示效果差;那像展示效果和交互效果都做得很好,比如游戏,那开发所花费的时间精力又是不能接受的。于是,前端考虑到一个很通用的场景:相对规则地展示内容(文本、图形、图片、视频等),同时支持相对通用的交互(点击、拖拽、悬浮等),把这一块的用户体验给抓了起来。
所以前端很多时候做的事情就是,用户需要看什么东西,用合适的方式呈现;用户需要操作什么东西,能够支持对应的交互。以一个简易的论坛举例,后端负责的大部分是:用户信息的存储,权限验证,帖子的增删查改这些。前端呢?用户需要看帖子,那就写一个好看的页面让用户看得舒服;用户需要发帖子,就写个文本编辑器让用户能够自由编辑;用户需要登陆,就写个注册登陆界面等等。
总得来看就是,没有前端,其实产品的功能是有的,但是产品的用户体验很差。我记得 cc98 火之前是飘渺水云间 88 论坛,当时某位老师说,他当年是 88 某个版主,当时大家疯狂水 88,水的方式是命令行里边敲命令看帖子,敲命令发帖子。可以想象一下,产品没有前端大概就是这样的感觉。
# 浏览器
不得不说,很多时候我们说的前端并没有那么广义,而是说的是基于浏览器的,HTML+CSS+JS 之类的狭义的前端。所以具体来看,前端技术,基本上是围绕浏览器,因此,好多时候做的事情并不是优化用户体验,而是推进前端技术,就像后端不一定是实现业务逻辑,增删查改,而是去让数据库的读取速度更快,让网络传输更高效等等。
很多人说前端的技术栈很薄,所以发展天花板很低。这句话某种程度上是对的,因为前端再怎么说,也就是在浏览器范围内玩花样,只是这其中的花样太多了。这有点类似于开发 iOS,哪天苹果倒闭了,可能就失业了(当然,用户体验的能力,技术的通用能力还是有用的,只是用的具体工具要全换了)。
了解浏览器的构造会发现,浏览器的三大核心:渲染模块、脚本运行模块、网络模块,基本上就是前端的全部了。
渲染:HTML,为了更好的表示元素,CSS,为了更好的表示样式和布局,SVG,CANVAS,WebGL,为了更好的绘制图形。
脚本运行:JavaScript,Babel,TypeScript,Web Assembly 等,都是让脚本运行效率或者开发效率不断提升。
网络:Ajax,Promise,async/await,WebSocket,这些都是让网络编程更舒适更高效。
这些技术经过一步步的发展,逐步形成今天这样成熟的东西。而随着时代发展,也有一些落后或者没必要的技术被淘汰,比如Java Applet,Flash 甚至 YUI、JQuery。
当然,现在的前端可能做了其它的看似跟浏览器不相关的事情,比如 Native 的开发,React Native,Weex 等,这些本质上是因为,前端这一套经过几十年的发展,太好用了,让人忍不住想拿来开发桌面或者客户端应用。再比如,NodeJS,这个我认为是 JS 这个脚本语言发展到现在已经足够强大了,可以和 Java,Python 掰掰手腕的时候,那么自然会有人用它做更多的事情。
小结一下,做前端,用的技术方面,基本上就围绕着浏览器了,从整个计算机来看是很薄的一层,但是里边可以玩出很多花样。
# 提效
提效本身是个很通用的词,做什么都是提效,为什么在前端里边特别提出来呢?是因为我个人感触太深了,这也是前端对我来说很有魅力的地方吧。
提效分为两个方面,一个是前端带来的提效,一个是前端开发的提效。
首先,现如今许多提效工具,都会选择用前端开发,公司更倾向于写个管理系统的网站,而不是做一个管理系统的软件。有句话叫做:“一切能用 JS 写出来的东西,终将会被 JS 写出来”。这句话说得太对了。现如今很多产品已经都是用前端技术实现的了!可以回想一下自己一天在电脑或者屏幕上用的东西,可能很多事情都是在浏览器上完成的,甚至很多管理人员的工作,就是在一个网站中操作所有内容。就算不是浏览器,那其实很多 APP,写代码用的 VSCode,听歌用的网易云音乐,各种微信小程序,甚至支付宝里的基础的账单、余额界面(其实都是个小程序)都是前端技术做的。
这都是因为,前端这一套太好用了,通过浏览器可以跨平台,再加上开发体验经过几十年的打磨已经很好了。在没什么特殊需求的情况下,前端就是最理想的选择。
另一个是,前端技术的发展,本质上是一个不断提效的过程。一开始的前端,就是用来展示数据,和接受用户的表单输入。Ajax 的崭露头角给前端带来了更多的可能。JQuery 当年的一统天下,让前端开发效率倍增。RequireJS 等打包工具的诞生,让多模块开发更加成体系。后来着,NodeJS 横空出世,一时间,前端的种种开发工具如泉涌般喷薄,格式化的、构建的、编译的、打包的,真是几天就一个新工具。此时,前端开发大工程已经毫无压力。于是,人们盯上了后端,有了 Node,那什么 Express,Koa,Nest 都来了,前后端一统完全无压力。另一头,HTML5,CSS3,ES6 等相继出现,前端的开发体验已经很好了,H5 一时成为时髦词汇。可是搞前端的这帮人不满足,原生 DOM 不够灵活,于是搞出了 React,Vue 这些框架,前端写应用的体验又提升了不少。JavaScript 弱,于是有了 TypeScript。再后来,也就是我接触前端那会,Vue 和 React 已经在野蛮生长了,TypeScript 正在飞速完善和进步,WebGL 给大家打开了新世界。然而,还没有结束,此时,伴随着移动互联网的发展,Native 技术和小程序横空出世,数据可视化、3D 图形、WASM、端智能相继涌现,前端发展的脚步从没有停歇。
这也算是前端的特点吧,因为没啥包袱,没啥对于稳定性、可靠性的需求,导致搞前端的这帮让就是能折腾,折腾出这么多新东西,不断优化了前端开发的效率,进而,再用优化后的前端开发优势,去创造更多的提效工具。我现在写这篇文章,以前可能会用 Word 写,但是,现在我用语雀的客户端这一前端技术栈打造的产品。
# 前端工程师做什么
工作个人感觉分为两大块,业务和技术。
我个人对业务和技术的理解是,业务是确定性的事情,是一个把想法翻译成代码的过程。技术是探索与优化的工作,通过结合其它领域的知识、应用更复杂的技术、设计更巧妙地架构以做创新或者优化已有的技术。所有的技术都是为业务服务,因为岗位设计的目的是为了为公司创造价值,而只有产品能给公司带来直接价值。
前端工程师说到底是工程师,因此也是做这两类事情。
业务上,就是做产品需求,也就是通常说的写页面,写交互,写动画。
技术上,比较多样,跟前端涉及的方向有关:
- 搞样式的:开发、优化组件库
- 搞交互的:交互、动画
- 搞图形的:图形引擎、3D、游戏
- 做可视化的:目前国内归类到前端
- 提效工具:编译、打包、构建等
- 搞计算的:WASM,人工智能(如 tfjs)
- 搞 Node 的:不太了解,但是目前似乎也划在前端
以我个人为例,在国内某知名前端部门实习过一段时间,业务上做的是某内部使用的分析系统的开发,为其添加一些功能;技术上做的是图形引擎开发的一些工作和可视化相关算法的优化。
# 前端工程师的成长
目前我对这方面还没有什么概念,也问过很多行业内的前辈们,他们给了我很多的建议,我试着整理一下。
首先,前端工程师也是工程师,因此,成长本质上是解决问题的能力的提升。一开始可能只是写明确的页面,考虑如何快速实现;之后可能需要写整个系统,考虑如何实现更高效,如何架构更合理;再之后遇到一个人解决不了的问题,如何和他人协作,如何组织一帮人高效的做事情;到再后边可能就是,针对存在的问题,想出一套解决方案;最后可能就是有一定的眼光,发现别人发现不了的问题、抓住风口了。(我的格局可能限制了我的想象力,目前能想到的就这么多)
其次,抛开通用的成长,前端这一块,还是可以在特定细分领域钻下去,成为某一领域的专家的。比如搞图形、搞可视化、搞计算,这些细分区域,足够一个人研究一辈子。
最后,我认为前端作为一个以用户体验为中心,和用户打交道的岗位,有很多的机会去提升自己的视觉设计、交互设计、产品设计的能力。这方面,是我在接触计算机之前的向往,可能也会是之后的向往吧。
# 我为什么选择前端
- 所做即所见,所见即所得:我终究还是喜欢做一些自己能看得到的事情,前端很符合这一点,我做出来的,便是你看到的,或许没有什么高深的东西,但确实是一个实实在在看得到用得上的东西。
- 爱折腾,适合摸鱼:前端近几年并且可以预期在未来,仍然处于一个日新月异的时代,会有很多新奇的概念,新鲜的玩意出现,很适合我这种爱捣鼓新东西,这也看看,那也看看的人。当然,希望我在工作之后仍然能保持这一特点(狗头)。
2021/11/20,研究生即将毕业,在前端岗位实习过一段时间,并确认自己的第一份正式工作也是前端岗位。前端是什么?这是我此时的回答。