我们都知道前端开发工程师更多偏向 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. Flask用Flask-SQLAlchemy连接MySQL

    安装 pip3 install Flask-SQLAlchemy 测试环境目录结构 settings.py DIALECT = 'mysql' DRIVER = 'pymysql' USERNAME ...

  2. 用 Python 实现每秒处理 120 万次 HTTP 请求

    用 Python 做到每秒处理上百万次 HTTP 请求,可能吗?也许不能,但直到最近,这已成为现实. 很多公司都在为了提升程序的执行性能和降低服务器的运营成本,而放弃 Python 去选择其它编程语言 ...

  3. socket编程之obj压缩加密传输

    因为需要序列化这个对象以便在网络上传输.所以POJO必需要实现java.io.Serializable接口.使用了 ObjectInputStream和ObjectOutputStream来接收和发送 ...

  4. Spark 2.0 PCA主成份分析

    PCA在Spark2.0中用法比较简单,只需要设置: .setInputCol(“features”)//保证输入是特征值向量 .setOutputCol(“pcaFeatures”)//输出 .se ...

  5. Spark2.x AFTSurvivalRegression算法

    Spark2.0的机器学习算法比之前的改变最大的是2.0基本采用了dataframe来实现的,但之前的都是用的RDD,看官网说貌似在3.0的时候RDD就不用了!还有一个就是hiveContext和sq ...

  6. Spark踩坑记:Spark Streaming+kafka应用及调优

    前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从k ...

  7. JAVA与ACM

    这两天学了一下JAVA的语法,还没有学习后面的核心地方,突然间觉得JAVA这门语言很棒,我要在接下来的时间系统的学习一下.就这么愉快地决定了. Java对于大数计算这方面的优势很大.最重要的是代码量小 ...

  8. golang在线手册汇总

    1. golang官网 https://golang.org/ 2. golang中国 http://www.golangtc.com/ http://godoc.golangtc.com/pkg/ ...

  9. Linux系统——文件系统与LVM 逻辑

    格式化命令 mkfs. mkswap mkfs格式化数据磁盘 # mkfs -t ext4 /dev/sdb1 # mkfs.ext4 /dev/sdb1 -t 指定格式化文件类型 -b 指定bloc ...

  10. vs2010 net4.0 c# 操作 sqlite

    1.百科介绍 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经 ...