2021 开启数据结构与算法的学习之旅
神奇而又魔幻的 2020 终于过去了,2021 年的第一个月都快接近尾声了,新年了,相信很多人都会给自己立下许多 Flags。2020 年对我来说有所得也有所失,我感谢自己这一年来始终都保持对学习的热情,但自己始终处于浅学习的状态,不能进入高质量的深入学习和研究的心流状态,尤其是在底层技术上我总是不能坚持下去。上周六我在公司述职会上,我给自己设定的学习 Flag 是“专研底层技术”从数据结构算法、系统架构设计两个方面进行专研学习(如图 1-1)。
图:1-1
关于如何学习,我从骨灰级程序员“左耳朵耗子”老师那学到了一个“捷径”,他说,其实学习有很多种方法,读书、听讲是学习,讨论、实践也是学习,但学习和学习之间还是有一定的差别。美国缅因州的国家训练实验室曾经发布过一张学习金字塔图(如图 1-2),从图里我们可以看到,学习方法分为两大类,一类是被动学习,也是浅度学习,包括听讲、阅读、视听、演示;另一类是主动学习,与人讨论,自己动手实践,教授给别人都属于主动学习。主动学习我们称之为深度学习,如果你不能深度学习,你就不能真正学到东西。
图:1-2
结合以上实验理论得出最高效的学习方法即是教,所以我今年学习之旅将按照如下方式执行(如图 1-3)。
1-3
我为什么要学习数据结构与算法?
首先,当然这块确实是我的短板,没有认真系统性的学习这部分的知识,所以面对新技术,新框架的时候,学习起来就会比较吃力,正因如此,我决定从现在开始下定决心一定要把这块硬骨头啃下来。
其次,对于大部分业务开发来说,我们平时可能更多的是利用已经封装好的现成的接口、类库来堆砌、翻译业务逻辑,很少需要自己实现数据结构和算法。但是,不需要自己实现,并不代表什么都不需要了解。如果不知道这些类库背后的原理,不懂得时间、空间复杂度分析,你如何能用好、用对它们?存储某个业务数据的时候,你如何知道应该用 ArrayList,还是 Linked List 呢?调用了某个函数之后,你又该如何评估代码的性能和资源的消耗呢?作为业务开发,我们会用到各种框架、中间件和底层系统,比如 Spring、RPC 框架、消息中间件、Redis 等等。在这些基础框架中,一般都揉和了很多基础数据结构和算法的设计思想。
最后,说说掌握数据结构和算法的好处,如果我们掌握这部分的知识,不管对于阅读框架源码,还是理解其背后的设计思想,都是非常有用的。基础知识就像是一座大楼的地基,它决定了我们的技术高度。而要想快速做出点事情,前提条件一定是基础能力过硬,“内功”要到位。
我将如何开展数据结构和算法的学习?
其实,去年我就在“极客时间”发现一个很好的学习专栏,就是王争老师的《数据结构与算法之美》,目前这个专栏已经有超过 10 万的用户订阅,应该算是“极客时间”的“招牌专栏”课程之一了。但是由于惰性使然,自己没能坚持学习。今年我采用这样一种将自己的这个学习目标公之于众的方式,并每周都要通过 InfoQ 分享自己的学习心得,而且我将在年中、年终等重要节点,分享我自己的学习成效与心得,从而来迫使自己一定要坚持下去。那么我将如何来开展学习呢?去年年底“得到”的 CEO 脱不花,发布了一个新产品《怎样成为高效学习的人》,其中一篇关于“怎样学得更快更好”的文章里,有一个非常好的“测试前置”方法,就是在我们开始学习之前,可以问自己这样 4 个问题。
1.这门课/这本书的标题 xx,我认为它应该主要是谈什么问题的?
2.关于这个问题,在学习之前,我知道些什么?
3. 关于这个主题,在学习之前,我的观点是什么?
4.接下来我要开始学习,我最想知道的、最想通过老师解决的问题是什么?
脱老师说,这个测试的目的,其实是自己给自己设计“学习任务”,帮你进入任务式学习的状态。这时候,你注意力的雷达就会全部打开,学习效果当然就会更好。
因此,在我学习这个专栏的时候,我也会从这 4 个问题入手,把自己带入到任务式学习的状态。除此之外,我会寻找并利用优质的学习资源,从知识的源头去学,并请教身边的行业高手。
欢迎和我一起来学习
学习数据结构和算法等底层理论知识是枯燥无味的,但我们并不是为了死记硬背几个知识点。我们的目的是建立时间复杂度、空间复杂度意识,写出高质量的代码,能够设计基础架构,提升编程技能,绚练逻辑思维,积攒人生经验。掌握了数据结构与算法,就像站在巨人的肩膀上,拿着生存利器行走世界,学好数据结构与算法,看待问题的深度,解决问题的角度将为完全不一样,我希望我的学习之旅不要太孤单,我邀请您的加入,我们一起做个伴,请和我一起来学习数据结构和算法吧。
版权声明: 本文为 InfoQ 作者【Nick】的原创文章。
原文链接:【http://xie.infoq.cn/article/ca7d3aca3ccf620348ac22ab8】。文章转载请联系作者。
评论