为什么要学习算法和数据结构
算法和数据结构是程序员的基本内功,基本内功修炼不好,以后修炼一些招式,如设计模式、架构,新的技术热点如区块链,新的技术语言go等,都会感觉非常吃力。
喜欢看武侠小说的知道,张无忌正是因为内功精纯,再加乾坤大挪移加持,学习任何武功招式都如探囊取物,短时间内即可融汇贯通。程序员的内功-数据结构和算法,乾坤大挪移-设计模式。
说实话,作为一个渣渣程序员,非CS专业出身,基础本就比较薄弱。正好借着写文章的机会,把数据结构和算法及设计模式都系统的学习一遍,并且把这些以比较容易理解的形式表达出来,授人以渔,同时自己也能理解的更透彻,何乐而不为。
扯的好像有点远了,言归正传,为什么要学习数据结构和算法,我觉得有以下几个主要原因:
- 应对技术面试,面过广大的程序员们,通过层层简历筛选,然后技术面试,大家的项目经历各部相同,很难深入挖掘,那怎么甄别候选人的技术能力呢?最简单也是最直接有效的方式当然就是考考你数据结构和算法咯。
- 程序员成长之路的基石,如同高楼大厦的地基,在有了良好的数据结构和算法的基础之上,程序员的学习能力和成长潜力才更大,以后才能走的更高更远。
- 面对一些问题,根据已有的数据结构和算法经验,能够设计出比较优雅及高效的解决方法。分析和解决问题的能力也会比数据结构和算法薄弱的同学更强。随着经验的慢慢积累,可以不断的设计、实现高性能系统,向着开源代码作者和架构师之路迈进。
数据结构和算法真这么重要吗?
为什么程序员被称为码农呢?大家都知道,越是大公司,分工越精细,每个人几乎都是一颗可以随时替代的螺丝钉。每天的工作也无非就是在原有的系统之上,做一些bug修复,一些小的功能点迭代。涉及到的编码无非是一些curd操作,尤其是现在在一些优秀的框架之下,程序员的编程几乎是傻瓜式的。
那怎么才能体现你的价值?告别curd boy呢?
连一些基本的数据结构和算法都掌握不了,一些普通的算法题解法都不会,你怎么能在这近百万的程序员之中脱颖而出呢?任何群体都如金字塔,处于塔尖的人很少,不能掌握好数据结构和算法,那你就基本只能处于程序员金字塔的最底端。
任何公司,都会有一些技术讨论吧!有时候技术leader拉你们一起讨论一些问题,人家说这很简单嘛,就是背包问题,或者这个用dfs算法不就ok了嘛,你如果连这些都听不懂,那是不是觉得自己很low,根本无法同别人沟通交流。更别提在技术方面有一些自己的独到见解了,也就无从谈起去一些公开场合分享自己的观点。
世界天天在变,技术热点千变万化,但是处于最基础的数据结构和算法确是处于基本不变的。学好了数据结构和算法,你就能够很云淡风轻的笑傲不断变化的新技术及新趋势,额,这归根到底不还说xx算法么,就是封装了一下而已,在数据结构和算法的基石之上,不断提升自己的思维、逻辑分析、抽象总结能力,那你就是一个越来越逼格的程序员了。
怎么学习数据结构和算法呢?
终于到了最重要的时刻,前面废了半天话,无非是想打动你这颗如顽石般的心,让你觉得学数据结构和算法好像很有用哦,那我是应该好好学啊。如果你意识到这一点,并觉得有时候面试算法对自己像是一种折磨和煎熬,又或者感觉好像自己从来就没掌握过数据结构和算法,那么恭喜你,咱们接下来可以一起学习进步了。
怎么学呢?
看到这篇文章的估计大部分已经是大学生或者已经参加工作了吧,相信你在这么多年的不断打怪升级中,总结了不少学习方法吧?在这里,我分享一下我的学习经历。
我基础比较薄弱嘛,曾经好几次发誓要学好数据结构和算法,买了书,买了课程,每次都是看完数组和链表,顶多到了递归,后面就坚持不下去了,觉得真是太难了,跟天书一般,这都是谁设计的啊。
我觉得可能90%的人都有跟我类似的经历,人本身惰性比较强,遇到挫折容易找自我安慰,但是我们真的甘心堕落吗?真的想一辈子当一个底层curd boy?从来没想过多赚点钱,早点赢取白富美,走上人生巅峰?
咳咳咳,心里想到白富美,是不是顿时感觉浑身充满了动力,白富美舍我其谁啊,那就好好跟我一起迈过数据结构这道坎(偷偷告诉你,其实是大家一起迈,我也没迈过去呢)。
- 数据结构和算法,先有数据结构,后有算法,首先要知道有哪些数据结构,每种数据结构是干啥的,怎么用,各有什么优缺点,分别适用于解决什么问题的场景。
- 多总结,多分析。任何事情,只要你不断分析总结,付出努力,总会慢慢收获的。一遍看不懂,那就看三遍,三遍不行,那就看五遍。今天看不懂,不代表以后看不懂,说不定某天就会豁然开朗。学习贵在坚持,总结,分析。
- 多动手,多练习,多刷题。纸上得来终觉浅,绝知此事要躬行。LeetCode应该是程序员们刷题最多的网站了,但我们也要刷题有道,不要为了刷题而刷题。所谓题海无涯,而学有涯,要掌握题目的本质,解决问题的思路,而不是沉浸在大量的、枯燥的题海战术上。
数据结构和算法的知识点
为了让你对数据结构和算法能有个全面的认识,这里借用小争哥的一张图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点。
所谓按图索骥,哪里不懂学哪里,直到某一天,你闭上眼睛,这一幅脑包图可以完整的出现在你的脑子里,并且可以清晰的回忆起每个知识点,分别对应LeetCode上哪些典型题目及经典解法,和有哪些坑点,能总结出什么经验来,平时在项目中可能会怎么用到,那你就真的是学到了。
作为一名典型普通程序员,我也跟你一样,很懒。如果你觉得写的有点道理,并且想和我一起好好迈过数据结构和算法这道坎,记得点个哦,如果能留言评论交流就更好了。