我们都知道前端开发工程师更多偏向 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中的抽象方法

    python中的抽象方法 父类要限制1.子类必须有父类的方法2.子类实现的方法必须跟父类的方法的名字一样 import abc class A(metaclass=abc.ABCMeta): @abc ...

  2. Ubuntu apt-get更换阿里云源

    sudo vim /etc/apt/sources.list deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe ...

  3. linux 下路由配置

    转自 https://www.cnblogs.com/kevingrace/p/6490627.html 在日常运维作业中,经常会碰到路由表的操作.下面就linux运维中的路由操作做一梳理:----- ...

  4. Spring整合jdbc编程

    一.Spring对Jdbc的支持    Spring为了提供对Jdbc的支持,在Jdbc API的基础上封装了一套实现,以此建立一个 JDBC 存取框架. 作为 Spring JDBC 框架的核心, ...

  5. SQL Server 数据分页查询

    最近学习了一下SQL的分页查询,总结了以下几种方法. 首先建立了一个表,随意插入的一些测试数据,表结构和数据如下图: 现在假设我们要做的是每页5条数据,而现在我们要取第三页的数据.(数据太少,就每页5 ...

  6. 利用trigger同步Oracle数据库

    oracle不同数据库之间进行同步数据时,可以用触发器来实现,但需要数据库A访问数据库B,那么可以通过创建数据连接来实现,代码如下: CREATE DATABASE LINK dblink_test ...

  7. es6的Set和Map数据结构

    Set 和 Map 数据结构 Set WeakSet Map WeakMap Set § ⇧ 基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set ...

  8. 写几个简单用artTemplate的例子

    写几个简单的artTemplate的例子,很多框架都有自己的模板(template),没得时候,可以利用artTemplate.js完成 html文件是: <!DOCTYPE html> ...

  9. Spring自动装配Bean的五种方式

    在Spring中,支持 5 自动装配模式. no – 缺省情况下,自动配置是通过“ref”属性手动设定,在项目中最常用byName – 根据属性名称自动装配.如果一个bean的名称和其他bean属性的 ...

  10. openJudge C17K:Lying Island

    地址:http://poj.openjudge.cn/practice/C17K/ 题目: C17K:Lying Island 查看 提交 统计 提问 总时间限制:  2000ms 内存限制:  26 ...