重识数据结构-数据结构的重要性

数据结构对于CS专业的同学来说是非常熟悉的,而且是低年级必修专业课之一,这门课的第一节课一般老师就会给大家介绍数据结构的重要性,但是个人认为老师和书本上介绍的太理论话,常用的描述就是“程序 = 数据结构 + 算法”,我记得听到这句话的时候根本不能理解,程序不是一行行代码吗?怎么就等于数据结构+算法了,我相信对于大部分刚开始学计算机的同学看到这句话应该是和我一样的感受。虽然这句话听起来感觉数据结构很牛逼很重要,但是大部分同学可能只是不明觉厉的感觉,还是无法从心里体会数据结构真正的价值和魅力所在。笔者愚钝是在工作了以后才逐渐发现数据结构对于一名程序员的重要性,还好当时学的还可以,很快就能将数据结构在工作中运用起来。

下面我来自己简单说明下我理解下的数据结构的重要性。工作了以后逐渐发现计算机科班毕业的同学总是比非科班或者是培训机构出来的同学学东西要更快,而且代码写的更好,我一开始一直觉得是因为科班的同学学了4年学的多编码练习的多,其实后来发现并不简单的多学了4年,你会发现周围有很多编码编了10年的人写代码还是不能看,完全的没有思路,代码就想一坨坨的流水账,没有可读性没有可维护性,这样的人写的代码量肯定是很大的,但是细看他的代码大部分就是简单的复制粘贴加上业务逻辑,完全没有面向对象和数据结构的思路。但是科班毕业的同学在这点上还是会有比较大的差异,虽然很多计算机专业的学渣,平时上课不认真听,课后练习也是抄的,混了个毕业,但是你会发现他们在这4年的学习中耳濡目染,对数据结构也有了很深的印象,对于链表、二叉树、队列、栈这些名词也都知道是个啥,各有什么有缺点,虽然当时他们不知道这些以后会有什么用。。。工作了会发现很多优秀的框架都灵活运用了各种数据结构,包括我们常用的一些中间件也是蕴含了各类数据结构的灵活运用,对于非科班的同学,对于这些框架和中间件可能只是知道怎么使用,不知道内部具体的实现细节和原理,但是科班毕业的同学基本上有点悟性的大概看下代码一般就能知道这些框架和中间件核心部分使用到的数据结构,能够更加深刻的理解这些工具,在后续的编码过程和代码优化中能够更好的利用这些数据结构去优化程序。

数据结构对于我们日常工作有着很大的帮助,尤其对于我们设计系统架构影响很大,一个好的数据结构对于后续架构可扩展性和性能提升都有很大的帮助。数据结构的学习更像是在修炼内功,让程序员从编程思想意识上得到提升,而使用各种框架更像是练外功,目前很多初学者都更希望练外功,因为各种招聘要求里列出的也是各种框架的掌握情况,这也误导了国内很多程序员包括学生的学习方向,在基本功还没有打牢的情况下就去学习各种框架,最后导致做了几年开发只是熟练的使用各种框架,而不知道框架内部的实现细节,出了问题也不知道如何处理。但是从大型互联网公司和顶级外企的技术面试你会发现,面试官面的最多的是数据结构和算法,通过面试数据结构的问题面试官能够了解到你的编程能力和潜力,可能当前你对一些框架的使用还不了解但是你对数据结构理解的很透彻,那么学习这些框架显然不存在任何问题,很快就能够上手并掌握它。

数据结构对于我影响比较大的主要有几方面:

1)能够理解一些开源框架里的设计精髓。程序员在日常工作过程中,访问的最多的网站应该是基友网站吧(github),上面有全世界的开源代码,能快速提高我们的开发速度,但是在借鉴其它基友代码的时候我们也要去学习他们的代码,只有理解了才能为我所用,用的才安心,不然出问题搞不定就崩溃了。要看懂一些知名开源项目,必须要对数据结构非常熟悉,因为里面用到了非常多的经典数据结构,只有了解数据结构在阅读源码的时候才能无障碍,否则代码看起来是非常吃力的。

2)指导系统架构设计。在工作过程中在设计系统架构的时候,我们也要考虑到如何设计系统间交互或者系统间内部的一些模块架构。举个例子,我们系统A需要给系统B发送交易,但是我们系统A的交易量比较大,系统B处理的速度跟不上系统A的发送速度,那么我们可以通过在系统A和系统B之间建立一个队列,系统A将待处理任务发送到队列,然后系统B在队列中取任务,这样系统A只需要一直往队列中放任务就可以了,系统B只负责从队列中取任务进行处理,那么通过队列这个数据结构就很好的解决了两个系统之间处理能力不匹配的问题了。

3)指导系统总体设计。总体设计主要在负责进行类设计和功能模块设计的时候会比较考验数据结构能力,这里就细说了。

4)系统优化(通过修改数据结构从设计上优化)。在工作过程中,我们也经常会遇到系统性能问题,需要优化系统,我们进行系统优化的思路一般是先分析是在哪个阶段存在性能问题,然后找到性能点进行优化,通过单纯的编码优化可能性能很难有质的变化,但是通过对数据结构的调整可能就会有非常大的提升。举个例子,原先我们是在一个链表中进行查找数据,查找的时间复杂度是log(n),但是将数据结构调整为二叉树后,查找的时间复杂度一下子变成了log2(N),是不是从质上快了很多。

废话说了很多,下面我会每周发一两篇关于数据结构的文章,介绍的数据结构都是比较基础的,但是我会在文章中介绍这些基础的数据结构在我们日常的工作中都用在了哪些地方,能解决什么样的问题,这些是书本里没有的,也能帮助大家能从底层了解一个数据结构的作用,让大家加深对数据结构的理解。

《重识数据结构-数据结构的重要性》 2171537494627_.pic_hd

    原文作者:monkey01
    原文地址: https://www.jianshu.com/p/dce54ebef2a2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞