关于做前端的发展方向

2019-05-31 15:25:56 +08:00
 lamada

做前端也有时间了,或多或少迷茫在重复的页面搭建之中,那么在前端方面,除了做做网页,还有哪些进阶的方面可以发展,这里想和大家探讨一下。

先申明,这里的前端指的是常用 html、css 和 js 的开发人员,android、ios、uwp 等其他不包含在内,当然中间会有相通的地方也可以一起讨论。我根据自己的经验和知识先写几个,不做深入、可能有谬误的地方:

  1. 工程化 这个可能是比较容易造轮子的方面,我理解工程化的目的是提升开发效率、降低维护成本和及提供自测、监控及排查错误的能力,让开发人员能够从重复、繁重的劳动中解放出来。目前在各个环节或多或少都有一些较为成熟的解决方案,然而还是有很多可以挖掘的地方。

  2. 图像处理 首先是 opengl、webgl 的基础知识,建模和顶点的优化一般通过三方软件完成,需要一点基础的数学知识、如矩阵、向量、归一化的概念,理解投影矩阵、变换矩阵等原理,接着是后处理,如滤镜、识别。滤镜就是 glsl 的算法问题,关于 vertex 和 fragment 的操作,首先是顶点变换,其次是颜色处理,这其中要了解关于色彩、色域的基本知识、rgb、hsl 的应用与转换,接着可以做一些基本的 PS 图形操作,如变亮、变暗、增强对比度,这也会帮助你理解 ps 中曲线的意义。最后就是磨各种算法了...图像识别可以需要了解一些轮廓算法、聚类算法等,这个就比较专业化... 当然处理图像你不一定真的需要 webgl,css 也提供了很多 api 可以给你使用,如 mask、blend mode、filter 等,组合使用你可以获得许多意想不到的想过。 当然我个人觉得你用 canvas 2d 去实现一些 css 或者 webgl 很方面的效果能够更加加深你对这方面的理解,举个很简单的例子,用 canvas 2d 实现 css 中的 border 和 border-radius。 只有你对这些理解深刻了,你才能在项目性能遇到瓶颈的时候找到根结和优化的方法所在。 会图像处理就可以玩很多啦,譬如在 b 站你可以给视频加奇怪的效果,如果 b 站愿意存储你写的特效代码,cdn 只需要同一份视频源,就可以变出更多的视频来。

  3. 语音处理 与图像处理是通用的,数学、线代是基础,然后是通信方面的知识,至少要知道频域、时域及滤波器的概念,然后就可以通过算法针对性地对声音做处理。应用方向很多啦,可以是声音的合成、实时声音的美化,如降噪、变声等,其实就是对振幅、频率的变换。也可以做语音识别。至少自己写一个在线谱曲(当然如果你有 nb 的音源)或者后处理的软件。

  4. 视频处理 视频处理的后处理可以看作图像处理和语音处理的结合,除此之外就是视频的编码、解码,参照 ffmpeg。在对这些有一定的基础了解之后,就能理解 media source api 中的 source、decoder、destination 等含义,知道在哪里可以实现你的需求,本质上流程不会有太大的差别。

  5. webassembly 这方面比较宽泛,难以概述,你都可以在里面跑操作系统了,理论上你可以做任何事。当然现在比较应用多的场景还是针对一些有性能要求的场景,如物理引擎、加密解密、二维码识别等。webassembly 只是一个工具,在你专业领域内的任何实现都可以通过它在 web 上找到桥接的路径。

  6. 服务端 这方面做的不多,我的理解目前主要是通过 nodejs 去实现一些中间层以及服务端渲染,做一些比较轻量化的解决方案,重头部分可能还得和其他语言的解决方案做结合。说到服务端渲染,目前还是输出 html 的形式,未来的一条路径是离线“真”渲染,在 5G、6G 可能的后时代,网页、视频、3D 的渲染全部在服务端完成,前端只是提交交互的行为,与服务端的通信主要是图形数据,就像看视频一样,当然这个比较遥远,到时候甚至可能会有专门的语言去做这个事情。

  7. 客户端 这里的客户端范围比较广泛,不仅指 pc、包括手机系统如安卓、ios,还有智能眼镜、语音助手、贩卖机( yes 我做过)等各种可能的终端系统。这里面有几个点,第一个是硬件的通信、底层的部分可能是通过 c 实现,js 更多做的还是交互、逻辑和数据的处理。第二个是运行环境,在终端上必须有能够执行 js 的环境,如何通过不同的终端能够编译、部署、执行,找到一种通用的跨多端的解决方案。

  8. 游戏 这部分其实结合了上面将的几个点,而且现在一些主流的游戏引擎如 unity 等都有直接导出 html5 的方案,但是如果真要从 js 入手,从零开始手撸一个引擎,那可能要先了解譬如 sprite、scene、stage、camera、world 等通用概念,然后是考虑用 mvc,还是 ecs 架构。这方面可以先从一个流行的游戏编辑器入手,你可以从 unity 借鉴、也可以从魔兽编辑器借鉴。话说魔兽编辑器虽然是上古时代的东西,但是真的很有一些借鉴意义。关于游戏要说的太多,这方面专业的游戏从业者应该可以给到更多的借鉴意义。

  9. 其他 webrtc 等,其他可以补充。

以上都是一些概览的概览,仔细看下,其实瓶颈都不在前端,而在于其他方面的专业知识。所以在前端在技术方面有更多的技术,还是要多看、多学习,特别是其他行业和专业的知识。可能你觉得在大学或者大专学习的一些不起眼的技术在前端方面别有一番天地呢?

6246 次点击
所在节点    程序员
55 条回复
lamada
2019-05-31 22:50:59 +08:00
@attackonFourier 是的,这个因素也不可忽视
ZY2071
2019-05-31 23:08:34 +08:00
@yuanfnadi umi 是 umi dva 是 dva
tnacg
2019-05-31 23:23:24 +08:00
@lamada 我是后端转前端的,看到上面都在说转后端,有点不知所措
yuanfnadi
2019-05-31 23:58:45 +08:00
@ZY2071 同时支持 umi 和 dva。在兼容 dva 的情况下为 umi 添加了一些专属功能。
jin5354
2019-06-01 07:16:03 +08:00
什么音视频,wasm,图形学,webgl 目前落地场景极少,之前做了些 webgl 深度调优的东西,出去面试没几个面试官能听懂,对应业务也少,大厂估计只有 echarts 和 antv 团队要人,还有一些给不起钱的 3d 小厂,路越走越窄;目前前端吃香的还是如何顺滑的把业务 run 起来,比如成套的工程化和基础设施,包括构建 /埋点 /错误监控 /基础库,可视化搭建,多端统一,这些实打实的解放生产力的东西,配合扎实的基础知识,这些足够你到 p7 或者出去做 leader 了,那些研究类的方向可以自己业务玩玩,等待某个爆发点再上船,比如 webVR
lamada
2019-06-01 09:42:19 +08:00
@jin5354 你说的有一定道理,确实从目前大环境来看工程化和基建是最重要的,也是最实在的,所以我把工程化放在第一个。

至于只有 echarts 和 antv 团队要人这个我是不苟同的,机会还是有的,webgl 其实在大厂也算是很常见的落地项目,至于前三者专职可能比较少,更多的是用来解决业务中的一些问题。

当然我写这么多肯定不想把大家往坑里走,一个想走也是要花大力气的,另一个还是要跟着自己的兴趣来。

大厂的优势在于它的基建非常完善,基本覆盖了所有常用的需求,而小厂在这方面比较欠缺,也容易落地一些项目。但凡做到这个阶段的,我觉得技术肯定是过关的,更多需要的是业务上的思考。
lamada
2019-06-01 09:50:48 +08:00
@jin5354 虽然前半段我不苟同,后半段我十分赞同,也是目前前端主攻的方向。
lamada
2019-06-01 09:54:45 +08:00
@jin5354 你说的比较完整,我引用一下 append 上去
lamada
2019-06-01 10:10:54 +08:00
有一点我觉得可以说明一下,我写图形写视频并不是真的说投入这个领域一定要产出某个牛逼的算法,那是不对的。譬如了解图像处理,它可以帮助你更好的理解渲染原理,对你编写样式表也会有帮助,如你会知道为什么 transform 中各个变换的顺序不同,效果也不同。另外它在某些场景下可以为你的业务服务,你完全可以用别人现有的解决方案和算法去实现自己需要的效果。
工作上,业务是首要,具备这些能力会使你解决能力的手段也多样化。
jin5354
2019-06-01 13:08:47 +08:00
webgl 有啊,性价比比较一般,我之前一直做可视化,考虑过走 3d 这条路,出来看机会发现专职 webgl 的是某些厂无人机 /自动驾驶部门和一些数据部门(帮忙画知识图谱啥的),一般都不是直接来钱的部门,论绩效,工资,升级速度,业务前景,更换工作灵活性都不如去核心业务部门做 general 开发。

有兴趣且家里有矿想学啥学啥。但对于平凡人考虑职业生涯,当前阶段还是选 general 开发好一点。不过为了增强自己的竞争力,最好是能选一个方向先自己沉淀着,以便机会到来时及时上船。
SuperManNoPain
2019-06-01 14:39:28 +08:00
感觉前端还是挺好找工作,工资也挺高的啊,
moocean
2019-06-01 14:56:05 +08:00
前端好累哦,做了大概 8 个月了,萌新菜鸟,公司处理数据的,要在 web 处理 sql,让我扩展 monaco editor 头大,提示,报错,看的 vscode 代码毫无办法,好累哦,这样的,要你 3 周项目做完,累
lamada
2019-06-01 16:20:50 +08:00
@jin5354 嗯,你的经验可以给大家一些参考,感谢
lamada
2019-06-01 16:22:55 +08:00
@SuperManNoPain 我的感受是入门比较容易,搞业务也能有比较快的成长空间,如果是技术的话,还是需要沉淀,很容易有瓶颈
lamada
2019-06-01 16:25:48 +08:00
@moocean 哈光听你描述就感受到了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/569489

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX