从学算法体会如何更好的学习

一、第一次学习算法

记得第一次学习《数据结构和算法》还是在大学的必修课里,是严蔚敏那一版。

那个版本的算法跟《算法导论》一样,代码使用的是伪代码。

而我们学习的时候,并没有掌握任何一门编程语言。

所以这门课就变成了一门纯理论课。

我是十分重视这门课的,课本也翻了不止一遍,然并卵,看了后面就忘了前面。看完全书全忘光了。

期末考试还是通过一些见不得人的手段勉强及格的。

从我现在的角度来看,当时读课本对知识的收获,大概也就是了解了一些基本的概念,对于算法的精髓,边都没摸到。

总的知识的掌握,估计也就5%

二、第二次学习算法

第二次学习算法已经是毕业多年以后,有一阵工作不是很忙,我边学习C语言,边用C语言实现一些基本的算法。

当时已经开始写算法,当然有一些是从网上抄过来的,网上有一些别人写好的代码。

又从一些教程,比如《数据结构与算法:C语言实现》,还有软考的一些视频、ppt教程,也涉及一些基本的算法

比如数组,链表,堆,二叉树等,更深更复杂一些的,自己就写不出来了。

从现在的角度看,这些对知识的掌握,估计有20%~30%

三、第三次学习算法

第三次的学习算法,大概是自己对python语言的学习有一定程度之后。

用python实现了一遍基本的数据结构和算法,算是对第二次学习的加深。

这一次除了第二次的基本数据结构外,又添加了8种排序算法。那个时候写算法还很慢,8种排序大概需要5天才能写完。

这个阶段已经基本不需要抄别人的算法,都是自己写,已经可以很熟练的实现递归,可能效率不是很高,但都已经是自己的思考。

现在来看,对知识的掌握,大概也就40%

四、第四次学习算法

第四次系统的学习算法是在极客时间订阅了王争老师的教程《数据结构与算法之美》。

王老师算法功力深厚,讲解深入浅出,课程很棒。但这个阶段因为有了娃,时间很紧张。

只是匆匆听了一遍课程,并没有跟着写代码,也没有做随堂练习。

这一遍下来只能算是对算法的整体知识图谱有了更全面的了解,对于一些高层次的算法思想比如分治/回溯/贪心/动态规划有了一些概念上的了解,

但写不出来,也没有深入理解。

对算法的理解,大概有50%

五、第五次学习算法

第五次学习算法,是在学习完王争老师的《设计模式之美》之后。

这门课我自认为学习的还是不错的,而且在实际的项目中也有了运用,实际效果很好。

让我深入体会到设计模式的强大。

这门课学习的时候我是边学边写代码的,每一种设计模式,我都会自己设想一个场景,然后用这个设计模式把它实现。

通过这种边学边写的方式,学完了,也学会了。效果很好。

因此我想复制这种学习模式到算法的学习上来,所以跑到了leetcode开始刷题。

可以说这次的学习是最虐人的,因为自己已经有多年的工作经验,但是对于一些题目,要么没有思路,要么提交多次才能通过。

一天下来只能通过5~6道题目。更深刻的理解到古人所讲“学然后知不足”,

刷了一百道题后,做题速度有所长进,也有一些官方题解没有想到的新奇算法想出来,然后分享出来。

但发现自己写出来能通过的代码是一方面,把自己的思路逻辑清晰的讲解透彻也更难,这应该就是“教然后知困”吧

但也是通过这次教的体验,才发现只有能把这个算法教给别人,自己才算是真正理解了这个算法,

否则如果自己都理不清楚逻辑,还通过了测试,那只能说之前的通过可能只是恰好瞎猫碰到死老鼠罢了。

这次的学习历程才刚刚开始,不敢说自己掌握了多少,但我知道我已经找到门路了。

分享一张从陈皓老师的《左耳听风》复制过来的学习金字塔给大家,希望每个人都有自己的收获。

 

 

 

引用周志明老师的一句话作为结尾:“技术人员的成长是有“捷径”的,做技术不仅要去看、去读、去想、去用,更要去写、去说。”

posted @ 2022-10-04 10:02  Mars.wang  阅读(97)  评论(0编辑  收藏  举报