October 11, 2018 · 数据结构与算法 本文字数: 1.3k 阅读时长:4 min 全站字数:344.2k

敏而好学之WHY——为什么要掌握数据结构与算法

  1. 普通攻城狮的现状——CURD BOY
  2. 为什么要掌握数据结构与算法
    1. “不变”的数据结构与算法
    2. 性能体现技术的进步的本质:提高效率、降低成本
    3. 优秀程序员的必备素质
    4. 扎实的数据结构与算法基础是大公司的敲门砖

本文是数据结构与算法之美专栏的学习笔记。

要走窄门。 ——圣经
天下难做的事情容易做成。 ——塔木德

开篇先解释一下标题中的WHY。WHY即为什么,也是黄金圈法则中的WHY。所谓黄金圈法则,一句话概括就是无论做事还是思考问题,都要从为什么开始;从内向外,而不是从外向内。第一步思考的就是为什么要做,明白了为什么,然后就要探索如何做,即HOW。最后才是WHAT,即做什么。

本系列文章是数据结构与算法系列学习笔记,也遵循黄金圈法则:WHY为什么做->HOW怎么做->WHAT做什么。本文是系列第一篇,介绍为什么要学习数据结构和算法。

Simon Sinek 黄金圈法则(图片来源:http://image.woshipm.com/wp-files/2017/08/O890z27HvZQGWdhVBxQs.png)

普通攻城狮的现状——CURD BOY

大多数程序员认为或者就是这样做,在工作中,只要懂一门语言的API,熟悉各种开放框架,如Spring,可以实现产品经理的业务需求,就可以独步天下,衣食无忧了。大部分情况下也确实如此。

大多数程序员最容易进入的恶性循环就是在学校的时候没有认真学习,觉得数据结构和算法很难,很枯燥,没有用。这个观念从此种在了你的大脑中。当工作中一旦遇到相关的内容,就会寻求绕过的方法。而由于缺乏,面试优秀公司常常败北,或者学习开源项目也因为算法而一再放弃,于是结果就是:

十年如一日的写代码

也许每个程序员都希望能够十年如一日的写代码,保持初心不变和这份热爱,但也不希望真是十年如一日的写代码。

为什么要掌握数据结构与算法

“不变”的数据结构与算法

我经常被问到一个问题:“未来十年,会有什么样的变化?”但我很少被问到:“未来十年,什么是不变的?” ——贝佐斯

不得不说,IT技术的发展可以说是日新月异,人工智能,大数据,与计算,物联网,区块链,仿佛总是在变化。但当我们在变化中去试图寻找不变时。我们发现,新的技术,其实就是大多是已有技术的重新组合。如区块链,就是密码学,P2P网络,分布式系统的组合式创新。当你把每一个模块的基本功打扎实了,学习所谓的新技术也就快了。

而在计算机科学中,数据结构与算法也是不变的那一部分。无论上层技术如何发展变化,底层的技术支撑,永远是那些经典的数据结构和算法。

这些经典的数据结构和算法,是那些计算机前辈们经验的总结和抽象,是一种解决问题的思路和方法,可以应用到工作和生活中的方方面面。

性能体现技术的进步的本质:提高效率、降低成本

程序的功能性之外,有很多非功能特性,如性能,安全性,可测试性,扩展性等。而在众多的非功能特性中,性能可以说是重中之重,当你去推广一个技术产品,高性能就是一大亮点,也代表了一个系统的水平。

写程序时考虑性能,就是要考虑使用什么样的数据结构最合适,哪一个算法最高效,代码的时间复杂度和空间复杂度又是如何。

不同性能规模下的程序员的水平可以说是天壤之别。当每天有上亿次的用户请求时,你的一个方法执行时间减少1ms,那么一天就可以节省接近 12小时的计算时间。当年选择存储某个业务数据的数据结构时,对于 ArrayList,HashMap的选择,也需要明白两者的性能差异。

优秀程序员的必备素质

掌握扎实的计算机基础,数据结构和算法的人可以说是凤毛麟角,百里挑一。优秀也体现在这一方面。

掌握了数据结构和算法,提升看待问题的深度,扩展解决问题的广度。站在巨人前辈们的肩上,编写高性能的代码。

扎实的数据结构与算法基础是大公司的敲门砖

优秀的头部头部公司面试时喜欢考验白板写代码,考察基本的数据结构与算法,一是大公司更看重长远的工作潜力;二是大公司的业务场景更复杂,需要高性能的程序来提升系统性能,降低成本,优化用户体验。

而大多数小公司的业务量增长并不是一条昂扬向上的曲线,实现业务功能需求即可应对绝大部分场景,所以对性能也并不会要求过高,因为根本用不到。