数据结构算法有用吗?

本文转自「开发者圆桌」一个10年老猿原创文章传播开发经验,尤其适合初学者或刚入职场前几年程序猿的微信公众号。

数据结构算法有什么用?

 

当你用着Java里面的集合类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。

 

校招会发现大公司考的就是这类的题目,刚开始不会考你Java的线程,集合,多态什么的特性,考的就是你的基础,你的这些基础扎实,学其他不是问题。

 

每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的存储,我们还能方便地查询到所需要的数据吗。而算法,在这么多的数据中如何做到最快的插入,查找,删除,也是在追求更快。

 

对待数据结构算法的态度

 

如果说 Java 是自动档轿车,C就是手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子从 A 开到 B,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。如果你对这两件事都不感兴趣也就罢了,数据结构懂得用就好。但若你此生在编程领域还有点更高的追求,数据结构是绕不开的课题。

 

Java 替你做了太多事情,那么多动不动还支持范型的集合类,加上垃圾收集,会让你觉得编程很容易。但你有没有想过,那些集合类是怎么来的,以及它存在的意义是什么?最粗浅的,比如 ArrayList 这个类,你想过它的存在是多么大的福利吗——一个可以随机访问、自动增加容量的数组,这种东西C是没有的,要自己实现。但是,具体怎么实现呢?如果你对这种问题感兴趣,那数据结构是一定要看的。

 

甚至,面向对象编程范式本身,就是个数据结构问题:怎么才能把数据和操作数据的方法封装到一起,来造出 class / prototype 这种东西?

 

此外,很重要的一点是,数据结构也是通向各种实用算法的基石,所以学习数据结构都是提升内力的事情。

 

符合自身职业规划

 

这里辩证分析一下,并不是所有搞程序的都要钻研数据结构和算法,而是要根据自身的职业规划和兴趣来。在之前的文章中也提到过什么是真正的编程能力,整体来说分两类:一类是理论:算法,数据结构,复杂度,机器学习,模式识别,等等等。一类是系统:操作系统,网络系统,分布式系统,存储系统,游戏引擎,等等等。

 

第一类理论走的是深度,是在追问在给定的计算能力约束下如何把一个问题解决得更快更好。而第二类系统走的是广度,是在追问对于一个现实的需求如何在众多的技术中设计出最多快好省的技术组合。

 

这两类能力是相互依存的,不可或缺的,在自身职业规划中有所偏重是可以的,但是两类能力必须要有一定的了解和积累。

 

扩展阅读

 

什么才是真正的编程能力?

为什么看起来简单的服务,却需要大量顶尖高手来开发?

转载于:https://my.oschina.net/zgl2008/blog/895582

你可能感兴趣的:(数据结构算法有用吗?)