六千字干货文:到底要怎么去学算法?

此文对我影响很大,分享出来给大家,愿大家早日成为大神。

1)不要完美主义!

我观察到的大多数同学犯得最最最最大的“错误”,就是在学习上“完美主义”。乃至后续很多其他的问题,在我看来都和这个问题是直接相关的。

举个最经典的例子,也是我经常举的例子,背英语单词(在这里我们先不聊背英语单词是不是好的英语学习方法,我们只看如果我们想要背英语单词的话,应该怎么背)。

我发现很多同学拿着红宝书,第一个list都没翻过去就放弃了。这是因为每天背完第一个 list 以后,第二天会发现:第一个list还是有很多单词没掌握,然后就继续背第一个 list。然后一周后,发现自己第一个 list 都搞不定,觉得英语好难,彻底放弃了。这就是“完美主义”:不把第一个 list “彻底”掌握不肯继续前进。这样是不对的。背了一个list,能多记一个词,都是进步。就算一个词都没记住,模糊有了印象,也是一种进步。

我们不应该过度着眼于我们还不够完美。

学习不是要么 0 分,要么 100 分的。80 分是收获;60 分是收获;20 分也是收获。有收获最重要。但是因为着眼于自己的不完美,最终放弃了,那就是彻底的 0 分了。

仔细想,这种“完美主义害死人”的例子特别多。我看到过很多同学,其实是在学习的路上,被自己的“完美主义”逼得“放弃了”——由于学习中有一点没有做好,遭受到了一点点挫折,最终就放弃了整个学习计划。每个人都一定要接受自己的不完美。想开一点:我们都不是小升初考了满分,才能上初中的;也不是中考考了满分,才能读高中的;更不是高考考了满分,才能念大学的;将来也不会是大学所有科目都是满分,才能出来工作。不完美其实是常态,根本不会影响我们学习更多更深入的内容。但是在自学过程中,很多同学却要求自己在自己制定的每一步计划中都达到“完美”,才进行下一步。最终结果,通常都是“放弃”:(

可能有的同学会跳出来反驳我:学习当然要认真啊!在这里,我必须强调,我所说的“不要完美主义”,和“学习认真”是不冲突的

什么是“完美主义”,什么又是“囫囵吞枣”,这是一个“度”,每个人其实不一样。不要“完美主义”,不代表学习可以草率前行。

每个人都必须要找到适合自己的学习节奏。我的经验是:在一些情况下,问自己一句:是不是自己又犯“完美主义”的毛病了:)

2)不要过度“学习路径依赖”,学习要冲着自己的目标去。

什么意思?就是现在信息太发达了,对于大多数领域的知识,网上会有很多所谓的“学习路径”。我不是说这些学习路径没有用,但是不能“过度”依赖这些所谓的学习路径。

比如,很多同学想学机器学习,大多数学习路径都会告诉你,机器学习需要数学基础。于是,很多同学就转而学习数学去了,非要先把数学学好再去学机器学习。可是发现数学怎么也学不好(在这里,可能完美主义的毛病又犯了),而机器学习却一点儿都没学。最终放弃了机器学习,非常可惜。

其实,如果真正去接触机器学习,就会发现,至少在入门阶段,机器学习对数学的要求没有那么高。正因为如此,我一直建议:只要你在本科接触过高数,线数,概率这些科目的基础概念,想学机器学习,就去直接学习机器学习。学习过程中发现自己的数学不够用,再回头补数学。在这种情况下,数学学习得也更有目标性,其实效果更好。

类似这样的例子还有很多,很多同学想学习做 iOS app,就先去精通 Swift 语言,或者想做android app,就先去精通 java 语言。在我看来大可不必。以我的经验,只要你有一门编译型语言基础,大概看一下这些语言的基础语法,就可以直接上手 iOS 或者 android app 的开发了。先能做出一个最基本的 app,在这个过程中,就会意识到语言特性的意义,再回头深入研究语言也不迟。此时还能结合真实的开发任务去理解语言特性,比没有上手 app 开发,抽象地理解语言特性,有意义的多。

虽然我一再强调对预算法的学习,语言不重要,但还是有很多同学表示,要先把 C++ 学透,再回来把课程中的算法学好。这是完全没必要的。事实上,在我的这两门课程中,我看到的收获最大的同学,是那些能够把课程中的算法思想理解清楚,然后用自己熟悉的语言去实现的同学:)

依然是:不要“过度”学习路径依赖,什么叫“过度”,每个人的标准不一样。每个人都需要寻找自己的那个“度”。

3) 不要迷信权威的“好”教材。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssgyx.html