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

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

  

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

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

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

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

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

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

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

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

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

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

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

前端要不要学数据结构&算法的更多相关文章

  1. 【前端也要学点算法】 归并排序的JavaScript实现

    前文我们了解了快速排序算法的实现,本文我们来了解下另一种流行的排序算法-归并排序算法. 我们先来回顾下快排.快排的核心是找出一个基准元素,把数组中比该元素小的放到左边数组,比该元素大的放到右边数组,如 ...

  2. 【前端也要学点算法】快速排序的JavaScript实现

    作为算法目录下的第一篇博文,快速排序那是再合适不过了.作为最基本最经典的算法之一,我觉得每个程序员都应该熟悉并且掌握它,而不是只会调用库函数,知其然而不知其所以然. 排序算法有10种左右(或许更多), ...

  3. 初转java随感(一)程序=数据结构+算法

    大学刚学编程的时候,有一句很经典的话程序=数据结构+算法 今天有了进一步认识. 场景: 1.当前局面 (1)有现成的封装好的分页组件 返回结果是page.类型为:Page.包括 page 分页信息,d ...

  4. 做acm 需要学的算法

    做acm 需要学的算法 转一个搞ACM需要的掌握的算法.  要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来.  适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...

  5. 数据结构算法集---C++语言实现

    //数据结构算法集---C++语言实现 //各种类都使用模版设计,可以对各种数据类型操作(整形,字符,浮点) /////////////////////////// // // // 堆栈数据结构 s ...

  6. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  7. 数据结构+算法面试100题~~~摘自CSDN

    数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...

  8. day40 数据结构-算法(二)

    什么是数据结构? 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表.集合与字典等都是一种数据结构. N.Wirth: “程序=数据结构+算法” 列表 列表:在其他编程语言中称 ...

  9. web前端入坑第二篇:web前端到底怎么学?干货资料! 【转】

    http://blog.csdn.net/xllily_11/article/details/52145172 版权声明:本文为博主[小北]原创文章,如要转载请评论回复.个人前端公众号:前端你别闹,J ...

随机推荐

  1. Python:解析properties文件

    在项目中遇到解析properties的情况,而Python中正好没有解析properties文件的现成模块,于是从网上找到了这个脚本,有一些小地方修改了一下 原博客: Python读写properti ...

  2. matlab实现MSER(最大极值稳定区域)来进行文本定位

    一.自然场景文本定位综述   场景图像中文本占据的范围一般都较小,图像中存在着大范围的非文本区域.因此,场景图像文本定位作为一个独立步骤越来越受到重视.这包括从最先的CD和杂志封面文本定位到智能交通系 ...

  3. python练习题(持续更新中。。。。。)

    1.检验注册用户是否合法:需要输入用户名,校验用户名是否被注册,如已注册,提示已经注册过,没注册就可以注册:用户名不能为空:用户名长度必须在6-13位之间:最多只能输入三次. users = ['aa ...

  4. Oracle优化-SQL_TRACE

    思维导图 Oracle优化10-SQL_TRACE解读 Oracle优化11-10046事件 概述 当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起 ...

  5. co.js异步回调原理理解

    co.js是基于es6的generator实现的,相当于generator函数的一个自动执行器 generator的简单介绍 function* fn(){ before() yield firstY ...

  6. 支持向量机SVM、优化问题、核函数

    1.介绍 它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解. 2.求解过程 1.数据分类—SVM引入 ...

  7. SQL Server排名函数与排名开窗函数

    什么是排名函数?说实话我也不甚清楚,我知道 order by 是排序用的,那么什么又是排名函数呢? 接下来看几个示例就明白了. 首先建立一个表,随便插入一些数据. ROW_NUMBER 函数:直接排序 ...

  8. xampp mac 版安装

    欢迎光临 XAMPP 的 Mac OS X 版 适用于 Mac OS X 的 XAMPP 是 Mac OS X 上最简单,最实用,也最完整的网络服务器解决方案.该发行版包括整合了最新的 MySQL.P ...

  9. 受限的用户shell环境

    有些特殊情况下需要实现将系统内普通用户限定在指定目录下,并且只能使用系统管理员设定的命令.lshell就是实现这样功能的一个神器. lshell提供了一个针对每个用户可配置的限制性shell,lshe ...

  10. $ 一步一步学Matlab(3)——Matlab中的数据类型

    小学时候我们就知道,数学中有自然数.整数.分数.小数等等很多种类型的数.到了中学,我们又发现了其实还有无理数.复数这些有些特殊的数.到了大学学了高等数学之后,我们又知道了其实还存在着无穷大.无穷小这样 ...