专栏到今天真的要结束了。在写这篇结束语的时候,我的心情还是蛮复杂的,既有点如释重负,又有点不舍。如释重负,是因为我自己对专栏的整体质量非常满意;不舍,是因为我还想分享更多“压箱底”的东西给你。
专栏是在2018年9月发布的。在发布后的两三天时间里,就有2万多人订阅,同时也引来了很多争议。有人说,我就是随便拿个目录就来“割韭菜”。也有人说,数据结构和算法的书籍那么多,国外还有那么多动画、视频教程,为什么要来学我的专栏?
这些质疑我都非常理解,毕竟大部分基础学科的教材,的确是国外的更全面。实际上,在专栏构思初期,我就意识到了这一点。不夸张地讲,我几乎读过市面上所有有关数据结构和算法的书籍,所以,我也深知市面上的数据结构和算法书籍存在的问题。
尽管有很多书籍讲得通俗易懂,也有很多书籍全面、经典,但是大部分都偏理论,书中的例子也大多脱离真实的软件开发。这些书籍毫无疑问是有用的,但是看完书之后,很多人只是死记硬背了一些知识点而已。这样填鸭式的学习,对于锻炼思维、开拓眼界并没有太多作用。而且,从基础理论到应用实践,有一个非常大的鸿沟要跨越,这是大学教育的普遍不足之处,这也是为什么我们常常觉得大学里学过的很多知识都没用。
我本人是一个追求完美、极致的人,凡事都想做到最好,都想争第一。所以,就我个人而言,我也不允许自己写一个“太普通”“烂大街”的专栏。那时我就给自己立了一个flag:我一定要写一个跟所有国内、国外经典书籍都不一样的专栏,写出一个可以长期影响一些人的专栏。
所以,在这个专栏写作过程中,我力争并非只是单纯地把某个知识点讲清楚,而是结合自己的理解、实践和经验来讲解。我写每篇文章的时候,几乎都是从由来讲起,做到让你知其然、知其所以然,并且列举大量的实际软件开发中的场景,给你展示如何利用数据结构和算法解决真实的问题。
除此之外,课后思考题我也不拿一些现成的LeetCode的题目来应付。这些题目都是我精心设计的、贴合具体实践、非常考验逻辑思维的问题。毫不夸张地讲,只把这些课后思考题做个解答,就可以写成一个有价值、有干货的专栏!
专栏到今天就要结束了。尽管有些内容稍有瑕疵,但我觉得我实现了最初给自己立下的flag。那你又学得怎么样呢?
如果这是你第一次接触数据结构和算法,只是跟着学一遍,你可能不会完全理解所有的内容。关于这个专栏,我从来也不想标榜,我的专栏是易懂到地铁里听听就可以的。因为你要知道,没有难度的学习,也就没有收获。所以,作为初学者,你要想真的拿下数据结构和算法,时间允许的话,建议你再二刷、三刷。
如果你是有一定基础的小伙伴,希望你能够真的做到学以致用。在开发项目、阅读开源代码、理解中间件架构设计方面,多结合数据结构和算法,从本质上理解原理,掌握创新的源头。
如果你是数据结构和算法高手,那我的专栏应该也没有让你失望吧?我个人觉得,专栏里还是有很多可以给你惊喜的地方。对于你来说,哪怕只学到了一个之前没有接触的知识点,我觉得其实已经值得了。
送君千里终须一别。数据结构和算法的学习,我暂时只能陪你到这里了。感谢你订阅我的专栏,感谢这5个月的同行,真心希望我的专栏能对你有所帮助。
我知道,很多小伙伴都是“潜水党”,喜欢默默地学习,在专栏要结束的今天,我希望能听到你的声音,希望听听你学习这个专栏的感受和收获。最后,再次感谢!

精选留言
2019-02-25 06:33:24
刚开始学习启动晚了,再加上学习方法不对、静不下心来,始终不得要领,课后题看了也完全没有概念,很是烦躁。
最近两个月终于摸索到了合适清晰的学习方法:正如老师的文章一样,把注意点放在发现问题,解决问题上。
采用笨办法,拿一堆A4白纸、铅笔、便利贴,在便利贴上写下要学习的章节、1个小时的起始学习时间、完成后面说的步骤的哪几部分,然后郑重地贴在白纸上,最后在规定的时间结束时,写下完成的情况。
把学习的过程分解成以下的步骤:
1. 归纳提炼问题:先把标题、课前问题,课后问题写下来,把概述和段标题提炼成问题写下来,把文章的内容分解归纳成一个接一个问题写下来;
2. 查找答案:然后,将文章读一遍,看看前面问题的答案在哪里,文章还有没有回答其他的问题;
3. 动手实践:对着代码将文章中的算法过程的图自己推导画一遍,找出算法的关键线索在哪里;最后,将代码回忆输入编辑器,将文章图片中的例子数据输入进行测试,同时加入打印日志观察顺序过程,看看自己回忆输入的代码犯了什么错误,记录下来。
这样一遍下来,心中终于感觉踏实了,自己不用看文章也能写出代码来了,感觉掌握了这个算法的思想,紧跟老师的思路。
这两个多月,基本上每个周末都会去麦当劳学习(找了很多地方,发现只有在麦当劳能静下心来学习,学习效率最高)。每次有新的章节先学新的,如果章节中有联系前面章节的,抓紧把这些章节的进度赶上去。睡前有空,就翻一遍每次学习记录的笔记,回忆一下。
目前的学习进度是多少?
目前终于完成了大概70%的章节的学习,当然这一轮还没结束,课后题也还没开始完成,有些章节学了又忘了,对复杂度分析还是不熟练。我想还需要再重点突破一下,然后再来回滚动学习两遍。
这门课,我收获了什么?
一是,找到了合适的学习方法:问题、动手、分解,以及合适的场所;二是,收获了自信心,相信自己能学会算法;三是,现在看其他书籍、代码的时候,会注意它使用了什么数据结构与算法来,有什么优缺点,不像以前,即使看到了也不知道是什么。
最后,非常感谢王争老师,把这么宝贵的经验分享出来,提供了深入浅出、联系实际的文章。让我觉得,自己有希望成为一位真正的软件工程师,不是一辈子打杂。
路漫且长,终于有了点光,可以继续赶路。
2019-02-20 09:10:07
人在江湖,终会再见。
2019-03-02 18:03:04
2019-02-20 08:46:19
2022-03-13 22:31:33
现在想进军微软,就再来重刷了,老师的算法是此次进军80%的加成。
打算重刷完毕后,报一下老师的培训班。老师是铁血真大神。
2019-02-24 19:19:25
2019-02-20 11:37:41
2019-02-20 08:33:18
有时候慢,才是最快的。
2019-02-20 10:00:21
从专栏刚出时就订阅了,从未落下每一篇文章.想不到转眼就近半年了.
可能第一遍有些知识没太懂,没关系.
我最近在复习动态规划的那3篇文章,又对老师说的"从由来讲起,做到让你知其然、知其所以然",有了更深的认同感.
别的地方,可能着重介绍状态定义和写出动态方程,有些复杂的场景会带一句"大家记住这个方程就可以了,不需要知道怎么来的".
但是老师的专栏真的是从基础理论"一个模型三个特征",从回溯->回溯+递归->动态规划->优化动态规划的空间复杂度,再到问题的变种,更到更复杂的实际问题.
让我知道了是怎么一步一步演变而来.
除了让我对该知识有了更深入及牢固的了解,还可以把该优化思想应用到平常工作中.
我是非科班出身,从没系统的学习过数据结构与算法,自己也下不了决心去刷专门的书籍.
但是跟着老师的专栏,我并没觉得枯燥,反倒觉得很有意思.可能是老师的讲解与实际结合的很紧密,也可能是老师的讲解让我知道了厉害的算法是怎么从无到有的.
感谢老师的付出,让我收获了很多,谢谢!
2019-02-20 08:41:45
2019-08-07 23:06:57
2019-02-21 16:24:31
最后说一句谢谢,高质量的课程很少有,谢谢老师及你们团队的辛勤付出。
2019-02-20 08:29:07
2019-02-20 07:32:51
2019-02-20 09:08:30
2019-02-20 07:33:16
难忘今宵,难忘今宵,
共祝愿老师好,学习专栏小伙伴好,
下个专栏再相邀,
青山在 人未老 人未老!
2019-02-20 00:34:50
我大部分时间都在潜水,第一次留言提问貌似王老师没看到,第二次留言却是告别,不知道之后遇到问题还会不会有回复?
期待王争老师的下一个专栏。
2019-02-23 16:21:11
2019-02-20 08:10:02
2021-01-14 15:34:10