为何要学习数据结构(一)

一、为什么要学习数据结构与算法

二、如何高效系统的学习数据结构与算法

        1. 如何定义数据结构与算法

        2. 为啥数据结构与算法总是一起出现呢?

        3. 如何高效地学习数据结构与算法?


前言

     笔者于2015年普通本科院校毕业,在接近大四还很坚决自己不会走IT路,因此在相关专业课上算是得过且过了。没有耀眼的文凭,没有扎实的基础。

    经过一番面试,在2015年3月进入一家大公司实习。那时去面试,特别好奇工作四五年后的面试到底会是怎么样的呢?那时我的简历又会是怎么样的呢?终于,那个曾经好奇的时刻到来了。工作了四年,学了不少的工具与框架,会Java、Python、Scala,SSH、SpringBoot、Mybatis、SpringMvc、Linux... 大数据方面:hadoop、hive、hbase、spark、kettle ......可是如今回过头来看很多东西只是处于会用的程度,这几年似乎只是增长了业务知识与一些解决问题的能力。笔者自认为学习能力还算过得去,只是学习的方向似乎出了一点问题。这四年,最大的痛点莫过于忙着学习各种新技术,而忽视了原本最基础的东西。

   如今,大家都很焦虑,能静下心来安安静静地学习基础知识的人少的可怜。正如之前在一篇文章《Teach Yourself Programming in Ten Years》中看到的,如今多少小时学会C++,多少天练出腹肌这类书特别火热。

 

一、为什么要学习数据结构与算法

     在IT界对于技术人员来说,数据结构与算法意味着你能够走多远。简单点说数据结构与算法就是普通程序员与高级程序员的分割线。

    相信很多人跟笔者一样,虽然在学校一直听说:程序 = 数据结构 + 算法,可事实是出来工作了几年的我们除了用过一些简单的数组、散列表、快排、递归,其他的几乎都没用过了,在用这些的时候还是用别人已经封装好的。此时的我们也许开始怀疑数据结构与算法真值得我们付出那么多精力去学习么?不会这些不也一样可以写出很顺溜的程序么?

     在疲于应对开发业务与现实生活中,笔者发现自己似乎越来越远离这些基础了。工作四年,一共呆过三家公司,在这四年里,笔者自恋地认为自己还算是个有点追求的码农吧。两年的Java开发后觉得大数据发展前景比较好,于是利用空闲时间硬着头皮自学了几个月,然后果断地跳到另一家上市公司做了大数据开发。

    如今在这家公司呆了两年后,发现自己步入养老状态,每天按时上下班,工作简简单单,此时的我正苦恼该何去何从,技术还是管理。在经过多轮思索与利弊权衡后终究还是选择了技术,主要原因是自己的性格喜欢持续地坚持学习,还有一点是观察了跑在我前面的领导他们的工作,个人确实不太喜欢那样的工作。

    在做了决定后,立马就出来面试,这一次的面试只为了知道自己在市场中到底是什么价位。总结出,作为技术人员,时常有空就去面试下,真心挺好的。如果被打击了可以更加有动力学习,另一方面也好随时了解自己的行情价,以便自己随时调整自己的学习计划。可以说对于这次面试完全没有任何准备,因为压根就只是打算先去了解下工作四年后被面试都会问些啥,以及如何针对性的准备面试。一共面了四家公司,这一次面试给我的最大感触是,原来这两年我的成长真心少的可怜,很多东西都只是处于会用的程度,原理性的东西都也只是处于经不住深究的程度。这时才深刻的回想起来,如果再这样下去,技术路只会越走越窄。

     终于,果断选择了静下心来补补基础。需要补的基础一点都不少,数据结构与算法、计算机网络、操作系统、数据库。目前是希望能把这些知识形成自己的学习线路。

     总的来说学习数据结构与算法个人认为有几个好处:可写出好的代码、可积累内功,便于通往更高的境界、还可提升自己的思维能力。

如下为摘录课程原文:

   我认识一位原来腾讯T4的技术大牛。在区块链大潮之前,他在腾讯工作了10多年,长期负责手机QQ后台整体建设。他经历了手机QQ从诞生到亿级用户在线的整个过程。后来他去了微众银行,有一天老板让他去做区块链。他用了不到半年时间,就把区块链的整个技术脉络摸清楚了。现在,他是微众银行的区块链负责人,微众科技创新产品部的老总。你说厉害不?你可以花半年时间就能精通一个新的领域吗?为什么他就可以做到?

    我觉得这其中最重要的就是基础足够扎实。他曾经跟我说,像区块链、人工智能这些看似很新的技术,其实一点儿都不“新" 。最初学编程的时候,他就把那些基础的知识都学透了。当面临行业变动、新技术更迭的时候,他不断发现,那些所谓的新技术,核心和本质的东西其实就是当初学的那些知识。掌握了这个"规律"之后,他学任何东西都很快,任何新技术都能快速迎头赶上。这就是他快速学习并且获得成功的秘诀。

    所以说,基础知识就像是一座大楼的地基,它决定了我们的技术高度。而要想快速做出点事情,前提条件一定是基础能力过硬,“内功”要到位。

 

二、如何高效系统的学习数据结构与算法

   我个人是比较喜欢知识付费这种方式进行学习,因此我在极客时间买了《数据结构与算法之美》以及程序员小灰写的漫画算法一书。首先我是花了一天多的时间,快速看了漫画算法这本书的前四章,然后再开始看专栏的知识。

   竟然开始了学习数据结构与算法,那么就必须得清楚它们的定义了。

1. 如何定义数据结构与算法

     数据结构:简单地说数据结构就是对数据存储方式的一种定义。

     算法:是指对数据的一种操作方法,在数学领域就是解决一类问题的公式或思想。

     理论上数据结构是数据的组织、管理和存储格式,其使用的最终目的是为了更加高效的访问和修改数据。

     常见的数据结构有:线性结构、树、图,其中线性结构包含:数组、链表、队列、栈、哈希表(也叫散列表),树结构包含:二叉树、多路查找树(mysql底层索引对应的数据结构 B+树)、堆等,图结构包含:二分图、最小生成树等。

    Demo说明:图书馆对书按分门别类的方式存储于不同的楼层或书架上,并对书按照一定的规律打上标签,这种存储方式就类似于数据结构。

    当要找指定一本书时,你可以一本本地去找,也可以向管理员要到该书具体的存储位置再去缩小范围进行查找,这些查找方式就类似于算法。

2. 为啥数据结构与算法总是一起出现呢?

     狭义上来说,数据结构是数据存储的一种方式,算法是操作数据的一种方法,对于不同的数据存储方式需要不同的算法去操作,因此两者是相辅相成的。

     Demo说明:比如数组这种数据结构是基于顺序存储的,具有随机访问的特性,二分查找这种算法可以很快速地对数组进行查找,但如果是要用二分查找算法去操作链表那就不可以了,因为链表是随机存储的。

3. 如何高效地学习数据结构与算法?

首先得确定学习数据结构和算法的过程是思维训练的很好方式,在这个过程中,我们不需要贪多,需要沉下心来多思考些为什么。

个人对于技术类专栏学习的一点小心得:

1. 从一开始就带着问题去读专栏。

2. 抱着以教为学的心态去学,想着学完这个如何教给别人或如何用自己的语言总结成一篇文章,总结或教的过程尽量做到脱稿会更有意义。

3. 多动手,动手将学到的数据结构或算法通过代码实现一篇,这里有个 LeetCode平台很适合在线编码练习。这个过程不仅可以加深对于内容的理解也可以提升自己的编程能力。

下面引用学习金字塔图说明以教为学与动手为何如此重要

下一篇:数据结构之复杂度分析(二)

注:了解更多数据结构知识

注:数据结构操作可视化网站

https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

https://visualgo.net/en/list

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值