前端要不要学数据结构&算法

时间:2022-08-02 17:01:39

  我们都知道前端开发工程师更多偏向 DOM 渲染和 DOM 交互操作,随之 Node 的推广前端工程师也可以完成服务端开发。对于服务端开发而言大家都觉得数据结构和算法是基础,非学不可。所以正在进行 Node 开发的同学而言,这个答案跃然纸上。我们今天重点说一说纯前端开发的同学到底需不要数据结构与算法。

  我先说下结论:需要,非常需要。

  

前端要不要学数据结构&算法

  第一,只要是程序员,基本功都是数据结构与算法

  从我们接触编程的时候就知道一个理论,程序=数据结构+算法。所以,只要写的是程序,就离不开数据结构和算法。当然,有的同学会说,我就做一个纯静态的官网,交互都不多,根本不需要懂那么多。那试问:你在别人眼中还是程序员吗?你拿到的待遇还是程序员的待遇吗?你未来的竞争力还是程序员所具备的抗风险能力吗?

  数据结构的意义是易于存储、快速查找,换句话说只要涉及到数据操作,理论上都需要数据结构。打个比方吧,我们在页面中会有各种请求接口:业务的、埋点的、监控的。众所周知,浏览器是有请求并发数限制 的,如果埋点、监控的的请求太频繁会阻塞掉业务的接口请求。即使只有业务接口,随着feed流的流行,业务接口也需要控制,比如我滚动一屏需要若干个数据支撑,业务接口会频繁的发出,当我快速滚动的时候,前面发出去的接口已经没有意义了,但是前面发出的接口如果没有响应,后面的发出的接口就会被pending。从前端开发的角度,如何去管理接口?如果你知道队列、栈的数据结构,自然就知道利用这两个数据结构可以进行接口管理。如果刚才的业务场景,应该选用栈的数据结构,后进先出,保证最新的接口发出去。对于埋点和监控应该用队列,先进先出,不遗漏接口。通过这样的接口管理既能满足需要也可以避免接口的阻塞。

  算法本身也不是高深莫测,它的目的是高效解决问题。比如之前做彩票业务,会有投注和奖金计算的需求。如果前端不擅长算法,可能就会和服务端同学说:前端算不出来,把数据提交到后端,后端再把结果返回给前端吧。殊不知,这样的做法既牺牲了用户体验,也加大了服务端的开销导致公司成本的上升。

  上述两个小场景足矣说明前端开发工程师真的需要懂数据结构和算法。

  第二、精益求精,离不开数据结构与算法

  打破常规思维,让老板知道你是不可多得人才。对于很多同学来说关于算法起步排序,止于递归,只要超出这两个选项统统认为“做不到”。现在大家出行都依赖地图,对于地图一个核心需求就是能算出从起点到终点的若干路径并给出经济成本和时间成本。我们把这个问题简化下,从A点到B点的地铁有几种坐法,哪个是最快的,哪个是最短的,哪个是最便宜的?很多前端同学望而却步,“理直气壮”的告诉后端你算好通过接口传给我。凡是都靠服务端来实现,很难体现前端开发在自己岗位上的“精益求精”的探索精神。可能大家也想自己搞,苦于知识面有限,容易得出“做不到”的结论。实际上,你只要学过“动态规划”的算法,这个题目就迎刃而解,足够让你拍着胸脯说前端来就可以了(不同路径 II)。

  当很多的事情你都能拍着胸脯说:我行,我来。那你的机遇和待遇就不远了,不信试试看?

  我们做事情,“精益求精”是非常必要的职业心态,凡事不琢磨,事事不深究,慢慢我们的路就被堵死了。“精益求精”不是喊口号,是实实在在的砥砺前行。而要做的更好,没有深厚的基本功,没有一定的知识储备,很容易得出“运气不好”的借口,AI技术已经离我们越来越近了,低能的技术是首先要被新时代淘汰掉的。

  第三、持续提升,依赖数据结构与算法

  当从事前端3年以后,你会发现纯业务开发已经满足不了你了。多媒体、游戏、服务端、客户端都可以作为自己的第二个出路,正所谓技多不压身。每一个方向都是深不可测,在多媒体领域要涉及大量的音视频数据,如何做帧信息的关联计算、如何快速查询 Box 等等;对于游戏来说,物理碰撞检测是最基本的算法(“等一下,我碰!”——常见的2D碰撞检测 ),服务端就不用说了,前面所说的“前端做不到”的事情服务端要有兜底的能力(五花八门的算法设计)。其实客户端和前端没有本质的区别,无非前端是调用浏览器的能力,客户端调用系统的能力,也就说客户端的能力更大,也就有更多的算法需求:比如图像处理能力,大家能看到现在各种App都有美颜(美图)、人脸识别(支付宝),这些图形图像的处理是需要大量的算法的。