从学算法体会如何更好的学习
一、第一次学习算法
记得第一次学习《数据结构和算法》还是在大学的必修课里,是严蔚敏那一版。
那个版本的算法跟《算法导论》一样,代码使用的是伪代码。
而我们学习的时候,并没有掌握任何一门编程语言。
所以这门课就变成了一门纯理论课。
我是十分重视这门课的,课本也翻了不止一遍,然并卵,看了后面就忘了前面。看完全书全忘光了。
期末考试还是通过一些见不得人的手段勉强及格的。
从我现在的角度来看,当时读课本对知识的收获,大概也就是了解了一些基本的概念,对于算法的精髓,边都没摸到。
总的知识的掌握,估计也就5%
二、第二次学习算法
第二次学习算法已经是毕业多年以后,有一阵工作不是很忙,我边学习C语言,边用C语言实现一些基本的算法。
当时已经开始写算法,当然有一些是从网上抄过来的,网上有一些别人写好的代码。
又从一些教程,比如《数据结构与算法:C语言实现》,还有软考的一些视频、ppt教程,也涉及一些基本的算法
比如数组,链表,堆,二叉树等,更深更复杂一些的,自己就写不出来了。
从现在的角度看,这些对知识的掌握,估计有20%~30%
三、第三次学习算法
第三次的学习算法,大概是自己对python语言的学习有一定程度之后。
用python实现了一遍基本的数据结构和算法,算是对第二次学习的加深。
这一次除了第二次的基本数据结构外,又添加了8种排序算法。那个时候写算法还很慢,8种排序大概需要5天才能写完。
这个阶段已经基本不需要抄别人的算法,都是自己写,已经可以很熟练的实现递归,可能效率不是很高,但都已经是自己的思考。
现在来看,对知识的掌握,大概也就40%
四、第四次学习算法
第四次系统的学习算法是在极客时间订阅了王争老师的教程《数据结构与算法之美》。
王老师算法功力深厚,讲解深入浅出,课程很棒。但这个阶段因为有了娃,时间很紧张。
只是匆匆听了一遍课程,并没有跟着写代码,也没有做随堂练习。
这一遍下来只能算是对算法的整体知识图谱有了更全面的了解,对于一些高层次的算法思想比如分治/回溯/贪心/动态规划有了一些概念上的了解,
但写不出来,也没有深入理解。
对算法的理解,大概有50%
五、第五次学习算法
第五次学习算法,是在学习完王争老师的《设计模式之美》之后。
这门课我自认为学习的还是不错的,而且在实际的项目中也有了运用,实际效果很好。
让我深入体会到设计模式的强大。
这门课学习的时候我是边学边写代码的,每一种设计模式,我都会自己设想一个场景,然后用这个设计模式把它实现。
通过这种边学边写的方式,学完了,也学会了。效果很好。
因此我想复制这种学习模式到算法的学习上来,所以跑到了leetcode开始刷题。
可以说这次的学习是最虐人的,因为自己已经有多年的工作经验,但是对于一些题目,要么没有思路,要么提交多次才能通过。
一天下来只能通过5~6道题目。更深刻的理解到古人所讲“学然后知不足”,
刷了一百道题后,做题速度有所长进,也有一些官方题解没有想到的新奇算法想出来,然后分享出来。
但发现自己写出来能通过的代码是一方面,把自己的思路逻辑清晰的讲解透彻也更难,这应该就是“教然后知困”吧
但也是通过这次教的体验,才发现只有能把这个算法教给别人,自己才算是真正理解了这个算法,
否则如果自己都理不清楚逻辑,还通过了测试,那只能说之前的通过可能只是恰好瞎猫碰到死老鼠罢了。
这次的学习历程才刚刚开始,不敢说自己掌握了多少,但我知道我已经找到门路了。
分享一张从陈皓老师的《左耳听风》复制过来的学习金字塔给大家,希望每个人都有自己的收获。
引用周志明老师的一句话作为结尾:“技术人员的成长是有“捷径”的,做技术不仅要去看、去读、去想、去用,更要去写、去说。”