如果高效学习有什么秘诀的话,那就都在这里了:)书法

如果高效学习有什么秘诀的话,那就都在这里了:)

这篇文章我写了很长时间。起因是一个同学在我的课程问答区的提问。这个问题激起了我很多思考。最后形成了这篇文章。文章可能会比较长,我也没有花太多心思找什么配图。但如果你对“学习方法”这个问题有困扰的话,相信,这篇文章会给你一些启迪:)

 


 

在慕课网做了这么多实战课,时间长了,收到了越来越多的同学的问题。除了专业知识上的问题,遇到的最多的问题,就是学习方法方面的问题了。由于我本人不是学习方法的专家,所以不敢轻易说自己的学习方法多么先进。更重要的是,我不认为有一种固定的“好”的学习方法是适合所有同学。如果存在那样的方法的话,学习这件让人头疼的事儿,就不头疼了:)由于每个人的背景不同,擅长不同,每个人都有适合自己的不同的学习方法;与此同时,不同的领域,由于其本质不同,学习方法也应该是不同的。我坚信:每个人去寻找适合于自己的学习方法,是每个人一生的话题。别人叙述的所谓的“学习方法”,只能作为参考用。

 

不过我在慕课网做答疑的过程中,确实看到了很多同学的学习方法,有改进的空间。在这里,我想简单总结一些我见过的,认为可能不是那么得当的学习方法,仅供参考。这篇文章不是一套“如何学习”的理论,而是一些零碎的个人见解,更像是在总结“学习中的那些坑”,不过,在我写完这篇文章之后,回头看,我觉得,我自己的高效学习的秘诀,其实都在这篇文章里了:)

 

 

1)不要完美主义!

 

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

 

举个最经典的例子,也是我经常举的例子,背英语单词(在这里我们先不聊背英语单词是不是好的英语学习方法,我们只看如果我们想要背英语单词的话,应该怎么背)我发现很多同学拿着红宝书,第一个list都没翻过去就放弃了。这是因为每天背完第一个list以后,第二天会发现:第一个list还是有很多单词没掌握,然后就继续背第一个list。然后一周后,发现自己第一个list都搞不定,觉得英语好难,彻底放弃了。这就是“完美主义”:不把第一个list“彻底”掌握不肯继续前进。这样是不对的。背了一个list,能多记一个词,就是进步。就算一个词都没记住,模糊有了印象,也是一种进步。我们不应该过度着眼于我们还不够完美。学习不是要么0分,要么100分的。80分是收获;60分是收获;20分也是收获。有收获最重要。但是因为着眼于自己的不完美,最终放弃了,那就是彻底的0分了。

 

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

 

可能有的同学会跳出来反驳我:学习当然要认真啊!在这里,我必须强调,我所说的“不要完美主义”,和“学习认真”是不冲突的。什么是“完美主义”,什么又是“囫囵吞枣”,这是一个“度”,每个人其实不一样。不要“完美主义”,不代表学习可以草率前行。每个人都必须要找到适合自己的学习节奏。我的经验是:在自己又因为自己的学习进度而沮丧的时候,问自己一句:是不是自己又犯“完美主义”的毛病了:)

 

 

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

 

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

 

比如,很多同学想学机器学习,大多数学习路径都会告诉你,机器学习需要数学基础。于是,很多同学就转而学习数学去了,非要先把数学学好再去学机器学习。可是发现数学怎么也学不好(在这里,可能完美主义的毛病又犯了),而机器学习却一点儿都没学。最终放弃了机器学习,非常可惜。其实,如果真正去接触机器学习,就会发现,至少在入门阶段,机器学习对数学的要求没有那么高。正因为如此,我一直建议:只要你在本科接触过高数,线数,概率这些科目的基础概念,想学机器学习,就去直接学习机器学习。学习过程中发现自己的数学不够用,再回头补数学。在这种情况下,数学学习得也更有目标性,其实效果更好。在这里,我忍不住要打一个我的课程广告,入门机器学习不妨尝试我在慕课网的《Python3入门机器学习》,学过的同学都说好:)

 

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

 

再比如,我的《算法与数据结构》课程和《玩转算法面试》课程,在视频中都是使用C++进行编码的。虽然我一再强调对于算法的学习,语言不重要,但还是有很多同学表示,要先把C++学透,再回来把课程中的算法学好。这是完全没必要的。事实上,在我的这两门课程中,我看到的收获最大的同学,是那些能够把课程中的算法思想理解清楚,然后用自己熟悉的语言去实现的同学:)

 

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

 

 

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

 

不是说权威教材不好,而是每一本教材都有其预设的读者群,如果你不在这个预设的读者群的范畴里,教材再好也没用。最简单的例子:再好的高数教材,对于小学生来说,都是一堆废纸。

 

我经常举的一个例子是《算法导论》。我个人建议如果你是研究生或者博士生,已经有了一定的算法底子,才应该去阅读《算法导论》。但是对大多数本科同学,尤其是第一次接触算法的同学,《算法导论》实在不是一个好的教材。但很可惜,很多同学在学习中有上面的两个毛病,既过度路径依赖,别人说《算法导论》好,学习算法要走学《算法导论》这个路径,自己就不探索其他更适合自己的学习路径了,一头扎进《算法导论》里;同时还“完美主义”的倾向,对于《算法导论》的前几章,学习的事无巨细,但其实接触了很多在初学算法时没必要学习的内容。最后终于觉得自己学不下去了,放弃了对“算法”整个学科的学习。认为算法太难了。

 

诚然,算法不容易,但是,一上来就抱着《算法导论》啃,实在是选择了一条完全没必要的,更难的,甚至可能是根本走不通的路。对于一个领域的学习,了解市面上有什么好的教材是必要的,单也不能迷信权威教材。每个人必须要去探索学习如何寻找适合自己的学习材料。

 

 

4)不要看不起“薄薄”的“傻”教材,这些你看不起的学习材料,可能是你入门某个领域的关键。

 

很多同学问我最初学习算法的是什么教材,我告诉他们是这本教材:《算法设计与分析基础》。在这里,我完全没有推荐这本教材的意思。事实上,现在我有点儿“鄙视”这本教材。因为我在学习它的过程中,发现这本教材有很多错误(帮助它纠正错误其实也提高了我的水平:)当然,现在这本书的版本可能也和我当时学习的版本不同了,大部分错误应该已经纠正了。)但它确实是我的一本很重要的算法启蒙教材。关键原因是,它够薄。

 

在大多数时候,如果有人问我教材推荐,基本上我的回答都是,如果是入门水平:随便找一本在京东,亚马逊,豆瓣上,评分不太差的“薄”的教材,就ok了。在这里,关键字是够“薄”。因为“薄”的教材能让你以最快的速度看完,对整个学科有一个全盘的认识:这个领域是做什么的?解决什么问题了?整体解决问题的思路是怎样?解决问题的方法大致是怎样划分的?一些最基础的方法具体是怎样的。这些在初学阶段是至关重要!是让你全盘把握整个领域脉络的。虽然通过这么一本薄薄的教材,你的脉络把握肯定不够全面细致,但比没有强太多!我看过不少同学,一上来学习《算法导论》,关于复杂度分析的笔记做了好几页,然后就放弃了,可是连什么是动态规划都不知道。这样完全没有对“算法”这个领域有全面的认识,甚至可以说根本没有学过“算法”!先用薄教材入门,再找“厚”教材,细细体会其中的细节,是我百试不爽的学习方法。

 

另外,在这里,我还要强调“入门教材”,很多教材虽然够“薄”,但不是“入门教材”。大家要注意。

 

 

5)不要迷信单一教材。

 

很多同学非要我推荐一本具体的“薄”教材入门,说实话,很多时候让我有点儿哭笑不得。因为我随便推荐一本,我确实不敢保证它是“最好的”,“最适合你的”,但是各个领域那么多教材,我又不可能都一一看过,一一比较过。最最重要的是,我的学习经验告诉我,在大多数情况下,学习不是一本固定教材可以搞定的。非要找到一本“最适合自己的”教材,然后就一头扎进去,其实是不科学的。我印象很深刻,我读本科的时候,那会儿申请了一个项目,要做一个网站(那时候服务端都用ASP.NET),我一口气从图书馆借了10本ASP.NET的教材,然后以一本最薄的书为主干去看,发现这本书介绍不清楚的概念,马上就从其他书里找答案。通常不同的作者对同一个事物从不同的角度做解读,是能够帮助你更深刻的认识一个概念的。基本上一个月的时间,我就从一个完全的网站搭建小白,做出了这个项目需要的那个网站。这个习惯我一直延续,研究生的时候,对什么领域感兴趣了,第一件事就是到图书馆,借十本相关书籍回来翻看。

 

但是,大多数同学喜欢仅仅扎进一本书里,一旦选定了自己的学习材料,就对其他材料充耳不闻,甚至是排斥的心理。这种做法,一方面又是“完美主义”的表现——非要把这本教材学透;另一方面,其实也是“犯懒”的表现,不愿意多翻翻,多看看,自己多比较比较,自己去寻找最适合自己的材料,一味地盲目相信所谓“大神”的推荐,殊不知,这些推荐,不一定是更适合自己的材料;更何况,还有很多大神,明明是靠不出名的“薄”教材入的门,但给别人做推荐的时候,就突然变成自己是算法奇才,自幼阅读《算法导论》而所成的神话了:)

 

 

6)实践!

 

前面说了很多和教材选择相关的话题,但对于计算机领域的学习来说,教材的意义其实远远小于实践的意义。如果仅仅是看学习材料就是学习的话,那么教学网站的视频后期处理人员就是水平最高的工程师了。因为每段视频,他们都需要看一遍。但是,很显然,仅仅是看视频,是无法学到知识的。对于计算机领域的学习来说,真正动手实践去编程是异常重要的。怎么夸大其中的作用都不过分。这就好比学游泳,必须下水去游泳;或者学开车,必须亲自上路。否则你说的再头头是道,一个小学生文化水平的人,只要他开过车,游过泳,都能在这两个领域瞬间秒杀你。

 

很多同学都说我的算法讲得好,其实,我一直认为,这其中的一个最简单的秘诀就是:我带领大家把大多数算法都非常细致的实现了一遍;或者对其中的应用进行了非常具体的实践。反观大多数高校教育,对于算法或者机器学习这种一定程度偏理论的学习,通常非常不强调实践。最终的结果是学习者只是接受了很多抽象的概念,但对其中具体的实现细节,却是云里雾里。我见过太多同学,都明白什么是O(n^2)复杂度,什么是O(nlogn)的复杂度,却问我对于100万的数据规模,为什么自己的选择排序运行起来就没反应了。答案很简单:O(n^2)的复杂度太慢了,100万的数据规模太大了,一般家用计算机转选择排序一时半会儿是转不完的。这些同学一定理解O(n^2)的算法比O(nlogn)的算法慢,却没有真正实践过,不知道这个差距到底是多少。

 

在我的课程中,经常遇到有些同学提出这样的问题:这个算法的某句话(或者某段逻辑),为什么要写成A的样子,而不是B的样子?这种问题其实很好,但我觉得解决方法也很简单,实际的去把算法改写成B的样子,实际的运行试试看,看会发生什么。如果发生了错误,仔细分析一下,为什么会有错误?如果没有错误,具体比较一下:A和B两种不同的写法,为什么都正确?又有什么区别?真正的学习上的提高,就发生在这个过程中。我当然可以告诉给同学们一个结果,但是自己亲自实践一遍,相比阅读我给出的一个答案,自己对其中问题理解的深刻程度,是完全不可比拟的。

 

 

7)debug非常非常重要。

 

我看到的另一类“经典”问题就是:老师,这个代码为什么错了,然后贴一大段代码。这种问题背后,依然是,透露着学习方法的不对劲:提问的同学懒得debug。在计算机领域,debug近乎和实践是一个意思。如果只是把材料上的代码“抄”一遍,这不叫实践,这叫抄代码。小学生也能做。但是“抄”一遍,不小心没抄对,发生了错误,然后自己一点一点调试,找到错误的根源,这叫真的实践。小学生不能做。(当然,自己理解了算法的逻辑,按照自己的理解,把算法写出来,才是终极目的:)

 

不过很多同学不喜欢debug,我当然理解。其实谁都不喜欢debug,但是,debug才是最重要的能力。通常在一个领域里,你最不喜欢做的事情,就是这个领域的核心竞争力!我见过的所有计算机领域的“高手”,不管是在哪个细分领域,都无一例外,是个debug好手。我经常告诉大家,在实际工作中,其实debug的时间要占你真正编程时间的70%。如果你做一个项目,根本不需要debug,要么是你的项目对你来说太简单了,要么是你根本没有接触到这个项目的核心。

 

debug不仅仅是找到代码错误,解决错误的手段,其实更是一个重要的学习手段。通过debug,看看自己写的程序执行逻辑,哪里和自己设想的不一致?再回头看自己哪里想错了,或者想漏了,分析一下自己为什么想错了,或者想漏了,等等等等,依然是,进步就是发生在这个过程的。

 

在我的算法课程中,很多同学对递归想不明白,我的建议都是:用一个小数据量,一步步跟踪程序,看看程序到底是怎么运行的。通常这么做,1个小时的时间,就足以让你深刻理解递归程序的运转逻辑。可是,很多同学懒得花这1个小时的时间,最终的结果是,花了一个下午,对着代码生看,硬想,最终还是没有理解程序的运转逻辑。

 

 

8)量变到质变。

 

还有很多同学,对于算法的一些问题,会问:老师,你是怎么想到用这样的方法的?对于这类问题,我的回答一般都是:你见的还不够多。

 

不知道是不是受高中阶段学习的影响,有一些同学特别执着于就着一个单一的问题,寻找其中的“解题路径”。当然,我不是说这是完全错误的,但也有一个“度”。我的经验是:与其把时间花在这里,不如去见更多问题。比如动态规划,是算法学习的一个难点,很多同学在学会了背包问题的解法之后,总是执着于去追寻:是怎么想到这种状态定义的方法的。可能是我个人水平有限,我无法清楚地解释是如何想到这种状态定义的方法的。但是我的经验告诉我:再去看,去实践100个动态规划相关的问题,然后回头看背包问题,你会发现这种状态定义的方式非常自然。仅仅对着一个问题思考,很多时候都是死胡同。你见识的还不够多,就不足以帮助你总结出更加“普遍”的问题解决的规律。当你见得足够多的时候,一切就都变得很自然,所谓的“量变到质变”。

 

不过,大多数同学在这个环节都会“犯懒”,企图通过一个问题就理解问题的本质,这其实和企图通过一本教材就精通一个领域的想法是一样的,是不现实的,不可能的。同时,这里又包含着学习过程中的“完美主义”的思想,遇到一个问题一定要把它想的无比透彻。但是我的经验告诉我:大多数问题,其实都是需要“回头看”的。随着你对一个领域理解的越深入,回头再去看那些曾经的问题,都会产生新的视角,对于很多曾经想不明白的问题也豁然开朗。这也是“进步”的根源。如果卡在一个问题上不前进,不给自己“回头看”的机会,甚至最后是放弃了,就什么也没有学会了。

 

所以,很多时候,你发现对一些问题“百思不得其解”,或许不是因为自己“笨”,而是因为“还不够努力”:)

 

 

9)最后,一定要相信时间的力量。

 

有一天,在我的一个算法课程群里,有个滴滴的后端大神发招聘,结果大家七嘴八舌的就议论开了,大致主题思想就是:自己什么时候能够成为滴滴的后端大神。这位滴滴的后端大神今年32岁;大多数议论的同学,其实连22岁都不到。我告诉他们,其实10年后,你们就是大神。

 

这其实很好理解,回想十年前,也就是12岁的你,和现在的你比较,是不是天壤之别?如果把你扔到一堆12岁的小朋友中间,22岁的你是不是就是个大神?同理,32岁的人,已经在业界摸爬滚打了那么多年,扔回到22岁的大学生中间,当然是大神:)

 

很多时候,所谓的“大神”并不神秘,仔细观察他们的经历,会发现时间有着不可磨灭的作用。只要你没有虚度时间,每天都在进步,通常结果都不会太差的。如果再加上一点点机遇,就是大神。

 

 

愿大家也早日成为大神。

 

大家加油!

什么叫学会了?自己到底有没有学会?知识掌握的七个境界

最近,遇到了两个来自同学的提问,我觉得都挺典型的。

 

一个同学问我,“学习的过程中,到底怎么样才叫学会了?掌握了?

 

还有两个同学,不约而同的问我,“学习算法,是不是掌握了基本原理,面试的时候,能说出个大概就好了?——对于这个问题,其实不止这两个同学,在过去的两年时间里,我也已经遇到很多次了。

 

今天这篇推文,就借这些问题,聊一聊我眼里的,知识掌握的七个境界。

 


 

第一重境界:撸串境界

 

知识掌握的第一重境界,我管它叫“撸串境界”。什么意思?就是,对于这个知识,你只有在撸串的时候,才能“无障碍”地提起。比如:

 

A:你知道吗?昨天人类首张黑洞照片公布了!

 

B:是啊是啊,人类离宇宙的真相又近了一步。听说黑洞和时间的奥秘也有深刻的联系,可能我们离时空旅行又近了一步呢。

 

撸串的时候,我们可能会不自觉地聊起这种话题。但是,八成,A和B对黑洞的了解,都是在“撸串境界”,真的正儿八经地说说:黑洞到底是怎么回事儿,黑洞照片的历史意义是怎样的,对未来有可能有什么影响,黑洞和时间又有什么联系,可能都不太清楚。对于黑洞,也就是在撸串的时候随便聊聊。

 

图片

大家都放黑洞照片,我偏放羊肉串儿照片!

是不是很酷?

 

再比如:

 

A:听说XXX自己做人工智能,预测股票走势,赚了一大笔钱!

 

B:我也听说了,就是用现在最火的深度学习。Alpha Go已经战胜人类最强的围棋选手了,Alpha Go用的就是深度学习算法。

 

在这段对话里,A和B对人工智能和深度学习的理解,八成也是“撸串境界”。

 

通常,看新闻就能帮助你进入撸串境界。

 


 

第二重境界:关键词境界

 

知识掌握的第二重境界,我管他叫做“关键词境界”。就是,对于这个知识,你掌握了非常重要的几个关键词。比如:

 

A:听说XXX自己做人工智能,预测股票走势,赚了一大笔钱!

 

B:我也听说了,就是用现在最火的深度学习。好像是建立了一个叫LSTM的模型就好了。我也想找时间学习学习呢,搞不好就能赚1个亿呢。

 

在这段对话里,B对深度学习的理解,进入了“关键词境界”。当然,在这里我只是举例子,毕竟LSTM只是深度学习的一种方式,深度学习领域也有很多其他重要关键词。在这里,我想强调的是:关键词境界和撸串境界,是截然不同的。

 

为什么?因为如果你处于关键词境界,这个知识对你来说,就不仅仅是只有在撸串的时候可以提及的一个缥缈的概念了。你可以利用这个关键词,在网上查询,进而深入学习。换句话说,这个关键词已经可以指导你行动了——你已经可以开始具体的学习了。

 

很多时候,我们解决问题,就是缺少一两个关键词而已。比如,我本科的时候,做一个项目,其中一个子功能,要对用户输入的邮箱字符串是否合法做验证。当时我花了很长时间自己设计“所谓的算法”去处理,其实就是一堆if-else。到后来,我明白了,这事儿其实用正则表达式,一句话就搞定了。真要说其中的算法,也是一个专门的领域,叫模式匹配。“正则表达式”,“模式匹配”,就是正确的关键词。如果我早一些知道这些关键词,我就可以直接去学习正则表达式的使用,或者直接去学习“模式匹配”算法,就会少走很多弯路。

 

在这里,我要强调,从学习的角度,我觉得这个弯路,也是值得的。因为通过我的思考和尝试,再去看成熟的解决方案,我就能看到差距,总结自己思维上的缺陷,对知识的理解也会更深刻。我经常说,在大多数情况下,走一些弯路绝不是坏事,走弯路是进步的源泉,所谓失败是成功之母。只不过,对于很多时间紧任务急的业务场景,可能现实不允许你走弯路。

 


 

第三重境界:原理境界

 

第三重境界,就是你不但知道了这个关键词,你还知道了原理。

 

归并排序对你来说不仅仅是一个名词,你知道归并排序是每次将整个数组分成两部分,将这两部分排好序以后,再合并起来;

 

快速排序对你来说不仅仅是一个名词,你知道快速排序是每次以一个元素为标定点,把数组分成小于这个元素和大于这个元素两部分,对这两部分再去递归地进行排序;

 

二分搜索对你来说也不是一个名词,你知道,二分搜索就是对一个有序数组,先检查中间的元素,如果正好是你要查找的内容,就ok了;如果不是,你要查找的内容比它小,继续到左边找;你要查找的内容比它大,继续到右边找。

 

大部分同学通过在学校的专业学习,应该是至少能达到原理境界的。也就是,你知道这个名词,了解这个名词在解决什么问题,同时,也能用自然语言表述他的原理。

 

但是,在这里,我必须提醒大家,对于计算机专业的学习,必须要把基础知识的掌握上升到第四重境界。

 


 

第四重境界:实践境界

 

所谓的“实践境界”,在计算机领域,其实就是,你不仅仅能说出原理,还能用代码将他们正确实现出来。换句话说,你不仅仅知道“归并排序”,“快速排序”,“二分搜索”,你还能写出正确的代码。

 

我在这篇推文开篇,两个同学,不约而同的问我,“学习算法,是不是掌握了基本原理,面试的时候,能说出个大概就好了?”他们的问题,本质就是:对于算法知识的掌握,有没有必要进入实践境界?

 

我的答案是:太有必要了。因为,这是计算机专业跟非计算机专业的本质区别。也是你能吃这碗饭,别人不能吃这碗饭的关键。

 

计算机专业要做的,就是把抽象的逻辑转换成可以正确实现这个逻辑的代码。如果能顾及代码的效率,可维护性,甚至是简洁优雅,那就更好了。但如果你只是懂原理,能扯淡的话,恕我直言,别说数学系物理性能碾压你,连文学系历史系,甚至是一个素质高点儿的高中生乃至初中生,随便看两眼,可能都能碾压你。但是让他们转行程序员,还是会费一番功夫的,为什么?正确,优雅,高效的代码实现能力,不是一日之功。

 

如果到达原理境界就ok的话,我的所有算法课程,长度都可以直接缩减到1/5。但是,能用代码正确的实现出来,完全是另一回事儿。很多同学说得清楚原理,但是实现不出正确的代码。这就是编程基础不够。由于你实现不出正确的代码,我也不敢保证你的理解是完全正确的。

 

你跟我扯再多永动机的原理,要想让我不质疑你,请实现出一个永动机证明给我看。你跟我扯再多炼金术的原理,要让不怀疑你,请把这个易拉罐变成金子给我看(广告插入,推荐阅读我的文章:清明时节雨纷纷。科技,死亡,和永生。)。

 

同理,你说你懂快速排序,不要废话,实现一个快速排序给我看。

 

Linus Torvalds说:talk is cheap, show me the code.

 

图片

 

大家一定要明白,计算机是工科,工科是靠东西说话的。我相信这也是很多同学选择计算机专业的一个原因——它没那么多虚的。你专业水平高,你就能用实现出来,时间短,效率高,代码整洁优雅,让所有人都闭嘴。从某一个维度看,这确实是更公平的,不像在有一些行业或者领域,单靠嘴皮子,人和人能拉开很大的差距。(当然,一切都是相对的,公平这个话题太大了,有时间单聊。)

 

所以,大家在具体学习的时候,一定要明白:我是计算机专业的,能实现出来,才是我的立身之本。

 


 

第五重境界:灵活应用境界

 

第五重境界,就是灵活运用。知识是死的,能灵活地运用这些知识解决实际问题,甚至是解释生活中的现象,对这个知识点,就达到了这重境界。

 

随便举几个例子。

 

Leetcode上1011号问题,大家可以看一看。在这里,我把中文版本的问题也截了一个图(没时间看具体问题直接跳过去,在这里只是举个例子):

 

图片

 

对于这个问题,如果你能很快地反应出,应该使用二分查找法来解决的话,你对二分查找的理解,就已经进入了灵活运用的境界。相较而言,写出正确的二分搜索代码,是简单的,但是,能快速反映出这类问题可以使用二分查找的思路去解决,还需要一定的专业训练才能达到。实际上,类似这样的使用二分查找法解决的问题,是算法竞赛里常见的问题套路。二分查找本身,也绝不仅仅局限在在一个有序数组中找一个数而已。对这个问题的深入解析,我在文章中不具体分析了,有兴趣的同学,可以自行搜索学习。

 

再比如,经典的“智力”题,过河问题:

农夫需要把狼、羊、菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。请考虑一种方法,让农夫能够安全地安排这些东西和他自己过河。

 

以及经典的“装水问题”,版本众多,我随便取一个:

有两个水桶一个装5升一个装3升怎么利用水桶得到4升水?

 

如果你看见这类问题,能很快地想到,他们的本质,是图论中的一个路径搜索问题,那么你对路径搜索算法的掌握,就进入了灵活应用境界。给你一个图,让你找到从s到t的一个路径,是简单的;但是对于这类问题,可以使用图论去建模,将其转化成一个图中的路径搜索问题,是需要一定的专业训练的。

 

再举一个Google的面试问题:

一个硬币,抛了1000次,结果有560次是正面,请问,你觉得这枚硬币是不是“公平”的?

 

如果学过概率论的同学,可能都能说出什么是中心极限定理,都知道假设检验。但是,遇到这样一个问题,能不能联系已经掌握的知识,有理有据的说明白你得出结论的依据?需要你对相应的知识,达到灵活运用的境界。

 


 

第六重境界:发明创造境界

 

上面的几重境界,都是对已有知识的掌握逐渐深入。但是,这个世界上尚未解决的问题还很多,能不能根据已有的知识,发明创造出新知识,进而解决新的问题?这就是发明创造的境界。所有的诺贝尔奖,图灵奖的获奖者,对相关领域的知识掌握,都在发明创造的境界。

 

首先,必须承认,对于任何知识,我都达不到发明创造的境界。

 

事实上,对于大多数人来说,对某个领域的知识,能整体进入灵活应用的境界,就已经足够了。因为能够灵活运用,已经意味着你可以使用这些知识,解决大量实际问题了。这已经对整个社会有相当大的价值了。能否进入发明创造的境界,一方面看你是否有这方面的追求;另一方面,也看机缘和天赋,很多时候,是可遇不可求的。

 

不过,在这里,我想强调,所有的新知识,近乎都不是凭空出现的。都是靠大量的对前人知识的积累,理解,甚至是灵活运用之后,才出现的。所以,不断学习前人的知识和思想,是根本。没有积累,突然发明了新知识,尤其是在当下这个知识爆炸的时代,近乎是不可能的。

 

所以,不要妄想把自己关起来,就能解决黎曼猜想。不要觉得自己是张无忌,找几本世界经典教材,在“洞里”与世隔绝,苦读三年五载,就能一鸣惊人。金庸的小说是成年人的童话。所谓的童话,就是骗人的。相较而言,不断地去积累,甚至是跨领域的积累知识,从其他领域的知识中汲取灵感,才有可能更大概率地发明出新的知识,解决更难的问题。

 


 

第七重境界:遗忘境界

 

第七重境界,我称之为遗忘境界。在这里,首先要说明,前六重境界,是层层递进的关系。但是,在这里,我说的第七重境界,不是第六重境界的一个递进,而只是一种状态——遗忘,而已。

 

相信很多同学都有这样的苦恼:学了很多知识,很快就忘掉了。即使曾经达到灵活运用的境界,但是可能各种原因,几年甚至十几年没有碰,最后也会遗忘。

 

在这里,我想强调的是:这是极其正常的。如果你不会遗忘的话,你就是一个超人了。或者你拥有机器猫中的记忆面包,你应该已经是全球首富了。

图片

 

关键在于,如何抵抗遗忘?首先,对一个知识的掌握,你的境界越高,越不容易遗忘。相较于已经达到灵活运用境界里的知识,只在原理境界的知识,更容易被遗忘。

 

另外,使用的次数越多的知识,越不容易遗忘。其实在我国,大多数初等教育,都是在采用“重复使用”这种方法,来帮助你记忆知识的。你根本没有具体应用过这些知识,但就是忘不了how are you后面,接的是fine, thank you. and you? 对于这种机械式地使用,我的评价是中性的。有好有坏,有机会可以单独写文。

 

其实,遗忘并不可怕。遗忘境界是一种境界,如果你的遗忘境界中存在着某种知识,基本就意味着你能迅速地把它捡起来,重新回到原来的境界。这是很重要的。所谓的经验,不过是遗忘境界的存储。比如,红黑树的内部原理,很容易遗忘。但是,如果你跟着我的课程,认认真真学习了红黑树的原理,实现了红黑树的代码,那么,即使你遗忘了,我相信,对于正常智力水平的同学,在需要的时候,比如面试前,一两个小时的时间,足以让你回到原有的水平。

 

最后,我想说的,虽然学习的目的不是遗忘,但学习的目的也绝不仅仅是记住。其实,“记住”,是学习的一个太低层级的收获。关键是,在学习的过程中,你的大脑在消化、吸收知识的过程中,会连带有很多附加的收获。这些附加的收获,在很多时候,都是更加重要的。

 

比如,对数学的学习,会逐渐让你对数字更敏感,同时,形成如何用数学模型解决问题的思维方式(所谓的数学思维和数学素养);

 

对算法的学习,会逐渐培养你理清逻辑的习惯,对每一个变量作用的深刻理解,也能让你写出越来越优雅的代码;

 

更不用提,在学习的过程中,你会逐渐总结出适合自己的学习方法,把他们应用在更多领域的学习上;

 

你会慢慢体会到如何能够更加高效的查找资料,如何归纳,总结知识体系,帮助你更好的理解;

 

你会去提问,在提问的过程中,你会越来越多地理解:怎样提问更加有效?什么是一个好的问题?;

 

你会给别人讲解,在给别人讲解的过程中,你也能锻炼自己的表达能力;

 

你甚至能在学习过程中,逐渐找到自己的兴趣,自己的天赋,自己的理想;

 

通过学习越来越多的东西,你也会越来越有自信,你能感受到天地之大,也能感知到自己之小;

 

所有的这些,都比学习某一个具体的知识点,重要太多了。

 

爱因斯坦说:所谓的教育,就是忘记了在学校所学的一切之后,剩下的东西。

什么叫学会了?自己到底有没有学会?知识掌握的七个境界

比勤奋更重要的,是底层思维

什么样的思维是底层思维,恐怕不好一一定论,万物相互联系,互相影响,必定遵守人类的荷尔蒙自发原则《世界的真实格局分析,地球人类社会底层运行原理》,要说自己是底层思维恐怕总会会有不同看法,作为工作两年就当leader,一个有十年管理经验的研发人来说,深刻体会到了深度思考的力量,当我从研发第一次做产品看UI,第一次搞运营的时候,没有想到也能做得还可以;深度思考的获得能力无不是从外界学习,然后交流总结提炼,深度思考会让自己,让很多事少做很多无用功,就如同我们玩公众号一样,更早的明确阐明自己的立场和价值观,哪怕有短暂损失,过滤掉该过滤的,留下该留的,为日后打下更加坚实的基础,更早的减少不必要的麻烦,收获同行者,这便是与人不同的,看见的未来,不是现在;生活,不只是为了钱,还有沟通相处的诗情画意
 
一件事要达到目标,要有愿景和目标,还要有路径,这条路径是真实可控的,是逻辑,而非想象,这很重要,缺少哪些因素,找到那些因素;搞定人,成为了这些事当中最重要的事情,你是对的不重要,而是要用合适的方法搞定人,让大家有所认同,有所成就;创造,真的是一件很有意思的事情
 
天下没有馅饼,从来都只是逻辑;大道至简,行至远
 
为什么有的人读了上百本,却总感觉自己收获不大,甚至还发出了“懂了很多道理却依然过不好这样一生”的感慨?
 
而有的人只靠学习,就能取得很高的收益?
 
这是因为很多人都进入了一个误区:把手段当成了目的。我们为什么要读书和学习?很大程度是为了获得知识,但大多数人只是获得了信息。
 
那什么是知识?那些能够改变我们行动的信息才是知识。
 
如果你看了一篇文章之后点头称是,然后生活照旧,那么这篇文章和其他所有类似文章一样,都只是一个信息。只有你看完一篇文章、了解一个观点之后,受到启发,改进了思考问题的方式或者做事的方法,这个信息才是知识。

 

一、知识深度构建认知优势

 
傅盛曾说过这么一句话,“人与人最大的差距,是认知”。而一个人的认知是由他的知识深度构建的。
 
对同一个产品和项目,理解的深度不同决定了结果的不同。
 
王兴的美团能够在千团大战中胜出,不仅仅是因为他第一时间看准了团购这个方向;更重要的是,他在众多竞争者中是看得最深刻的。
 
当其他团购网站在大打广告战的时候,美团王兴坚持不加入广告大战,而是坚信决定团购事业的关键是:高效率、低成本;高科技,低毛利。
 
他把别人用于广告的钱,投入系统开发和效率提升。最后美团的胜出成就了“新美大”这个互联网新巨头,可以说是知识深度的胜利。
 
有意思的是,美团在千团大战中脱颖而出后,王兴说了这么一句话:“多数人为了逃避真正的思考愿意做任何事情。”

图片

我们都对“知识改变命运”耳熟能详,然而改变命运的不再是知识数量这一维度,更重要的是认知的深度。
 
那么,如何提升认知深度?
 
要回答这个问题,首先要弄明白:什么才算深度认知?
 
有深度的认知能力是这样的:在分析问题的时候,能够跳出问题本身思考更普遍的情况;在寻求答案的时候,能够根据理由可信度判断是否接受这个结论。
 
通过深度认知得出结论,往往能解释相似情境中的很多问题。
在这些结论中,有些结论经过了更为广泛长期的验证,也在更普遍的领域具有指导意义和应用价值。那么,这些结论就是我们说的临界知识。
 
所谓“临界知识”,便是我们经过深度思考后发现的具有普遍指导意义的规律或定律。
 
在你每天的工作生活里,是只有看到时才能想起它们,还是你遇到问题时它们就会主动出来?如果你真的明白这些知识,那么对于牛人所说的,你就都不会觉得意外——他们只是在印证一个你知道的道理罢了。

 

二、跳出“低水平勤奋陷阱”

 
要学习临界知识,就要从具体的知识输入开始。读书,自然是最基本而又重要的方式。
 
从上学开始,老师教给我们的读书方法似乎就是:把一本书从头读到尾,遇到有启发的句子就画线或者摘抄。我们读书的过程就是不断记录新知识的过程。
 
为什么我们“经典”的读书方法是低效的呢?
 
原因很简单:阅读+画线/摘抄的读书方法是把一本书拆分成了一个个孤立的知识点。
 
在这种方法的引导下,我们读书的目的,就成了理解和记住这些孤立的知识点。而理解和记忆一个个孤立的信息,可不是我们大脑擅长的高效行为。
 
事实上,大脑的记忆,靠的是将信息与旧经验联系起来。记住新知识更好的办法是和已有的知识进行联系。

案例:

 

记忆宫殿法,可能是目前人类发明的最为强大的记忆方法。它的基本原理是,构想一个我们熟悉的场景,把需要记忆的事情放到已经熟悉的场景当中。

 

你想记住“B6”,最好的办法不是直接背“B6”,而是动用生物本能,想象一位大胸(像B)、有6块腹肌的美女。

 

大脑这种通过已有知识学习新知识的特性,除了能够帮助我们记忆之外,还有一个更重要的作用:我们可以将新旧知识构建成知识网络。
 
通过在新旧知识间建立联系网,我们便能够从不同角度和领域对同一个知识进行分析,从而加深我们的理解和认识。
 
读书时,将新知识和哪些已有的知识进行联系会更有成效呢?
 
答案便是那些在生活中各个领域起基本而重要作用的规律,也就是临界知识。每一种临界知识,都是我们思考问题、认识世界的重要工具。因此,这些临界知识可以频繁地应用于不同的领域和场景里。
 
《好好学习》一书作者成甲的做法是:

 

当我要解决某个问题的时候,主动去寻找可能会讨论这个问题的文章和书籍,去观察——作者用什么样的思路解决问题?在这个解决方案背后,是否有我熟悉的知识?我还能把这个解决方案的原理,应用在什么领域?

 

当你把这些问题想明白后,虽然你没有读完一本书,但是你对这个问题的理解和认识,比读完10遍书的人都要深入。这种状态,呈现出来便是举一反三的能力。
 
因此读书不在于多少,而在于你有没有通过读书重新认识这个世界,发现临界知识并把它运用到自己的生活当中。

 

三、学习“临界知识”需要具备的心态

 

1.绿灯思维
 
什么是绿灯思维?让我们先看看和绿灯思维相对的概念:红灯思维。
 
红灯思维就是一听到不同的观点就消极处理,准备防卫:“你不了解情况。”“你先听我说!”这是我们在红灯思维下大脑所处的状态。
 
而绿灯思维是,当我们遇到新观点或不同的意见时,第一反应是:哇,这个观点一定有用,我应该怎么用它来帮助自己?
 
始终保持开放心态,能够听进去与自己认知不一致的观点和想法,才能快速成长。
 
2.以慢为快
 
快是结果,不是原因。想要能力提升得更快,不是说学习过程就要很快。相反,越是快速提升的能力,反而越需要下慢功夫。也就是说,快速学习的前提是要能够做到:结硬寨,打呆仗。
“结硬寨,打呆仗”这六个字是曾国藩带领湘军打败数倍于己的太平天国军的要领。
 

所谓“结硬寨”,是指湘军到了一个新地方以后马上要扎营。选好关键要地后,无论寒暑,要立即修墙挖壕,且限一个时辰完成。而且在战争中,不论敌人看起来有什么漏洞,有什么可以追击的诱惑,曾国藩都不为所动,一定会让部队死死守住关键要地。 

 

“打呆仗”是指湘军每到一个城市边上,并不与太平军开打,而是就地挖壕,而且每驻扎一天就挖一天壕沟,把整个城市外围全都用壕沟隔断联通,断粮断水,生生把敌人拖死。

学习,首先要有“结硬寨,打呆仗”的心态。因为真正高效的学习,其实是知识融会贯通的结果。有了对重要的、核心知识的深刻理解,我们才能运用起来游刃有余。
 
然而,对我们大多数人而言,阻碍我们融会贯通的原因,恰恰是我们在学习中遇到了一个“阻塞”,没有“结硬寨,打呆仗”地把它攻克,导致我们一直有“自以为知道,其实不知道”的“知识阻塞”,也就没办法实现融会贯通的效果。
 
所以,我们想要快速提高,努力的方向应该是花大力气打通那些知识阻塞,而不是追求看起来很花哨的新方法、新技巧。底层堵住了,新方法和新技巧学得再多,也都是表面上的花拳绣腿。
 
这就好比我们想要快速学会骑自行车,要把精力放在掌握平衡上,反复寻找平衡的感觉。可是,我们现在的大多数人,却是在追求两分钟学会21种踩脚蹬子的技巧……
 
所谓厚积薄发,只不过是你在此前花真功夫死磕了很多基本的道理,打通了知识阻塞。
 
那照这么说,你肯定会想:是不是读书只要一页一页慢慢来就好了?
 
这就涉及到了对以慢为快的第二个认识:把慢功夫花在真问题上。
 

图片

 
以慢为快,就是把80%的时间,花在20%的重要问题上面。把时间花在重要的基本概念、有启发的观点和自己没想明白的问题上。
 
以慢为快、把慢功夫花在真问题上的方法,不限于读书,在学习的各个领域中都是相通的。
 

四、提升学习能力的3个底层方法

我们的所有观点、结论,本质上都是一个假设。观点和结论的好坏,取决于我们的假设与事实相符的程度。
 
思考肤浅,也是在某个错误假设指导下行动的结果。而学习,就是不断调整改变我们的假设,让我们在正确的假设下做出合理的判断和决策。
 
所谓认知升级,就是拿一个新的、更好的、更符合事实的假设规律,替代过去别人传授的经验认知假设,用新假设替换旧假设就是一次升级。
 
你希望在过去的认知上,多掌握一些工具,多掌握一些技巧,让自己变得特别牛逼,这是不靠谱的。只有你认知这个世界,构筑这个世界的基本假设发生改变,你才能够有真正的进步。
 
1.反思
 
什么是反思?反思就是对产生结果的原因进行分析,是对一开始的假设进行校正。
 
我们通常做事的顺序是:做出假设——→采取行动——→产生结果。
 
反思的顺序则是:观察结果(现象)——→研究原先假设——→反思校正假设。
 
我们只有不断反思过去的经历,提炼精华,指导未来,才能提升自己的学习能力,让自己有所进步。
 
反思在学习的过程中有三方面的作用:
 
第一,发现知识误区;
 
举个例子,很多人在遇到比自己更优秀的人的时候,第一反应是往回退,不敢接触。这种面对某些问题,不假思索就做出某种行为的现象,叫做“跳跃性假设”,也就是跳开理性思考环节做出的假设。
 
因为省略了理性思考的过程,往往不是最合理的。长期这样的话,我们就很难发现新的思考方式或者解决办法。但是我们可以通过反思来校正。
 
如果我们放慢思考,不断问自己“做出决定的过程合理吗”,或者“考虑的因素全面吗”,就可能发现新的思维方式和解决方案。
 
第二,促进已有知识产生新知识;
 
在反思一件事情的时候,我们可以通过对知识的联想和联结,将生活中其他经历和经验串联起来,重新认识和审视自己的过往经历。将自己分散的生活经验进行重新组织,从而产生新的知识。
 
而要做到这一点,其实就是多问问自己:
我过去还遇到过类似的事情吗?
 
我还听说过有其他人犯过类似的错或者有做得更好的吗?
 
有什么相关的方法可以应用到这件事情中吗?
第三,检验学习的新知识是否用了起来。
 
众所周知,富兰克林通过日记培养了13个习惯,然而他真正提出的重要观点是:“我想出了下面的方法。”
 
这个方法是什么呢?那就是:提前设定一个期望的标准,然后每天反思,与之比较寻找差距。
 
 
多么简单的办法啊!《好好学习》一书作者成甲突然意识到,富兰克林提出的方法,其实就是他之前学过的企业管理中的“对标管理”。他早就学会这个知识,但从来没想过这个知识该如何用在生活里。
 
是反思,让他发现自己其实并没有学会“对标管理”这个新知识,因为他根本不知道它可以用在哪些地方!
 
说完反思的三大作用,再说说我们日常生活如何训练反思能力。
① 从小事反思,深入突破;
 
② 把生活案例化处理;
 
生活每天都在生产未经加工的经验素材。我们的判断来源于经验,而有效的经验来源于对判断的反思。反思,让我们把生活的素材重新解读,成为洞见。
 
③ 培养记反思日记的习惯。
 
记录反思日志时,不仅要记录事情的结果,更要记录自己的情绪和思考的过程。
 
人与人之间的差距不是来自年龄,甚至不是来自经验,而是来自经验总结、反思和升华的能力。人的进步和行为的改变,往往源自反馈。
 

 

如果你不知道你的行为产生了什么影响,你是不会改进的。反思日记,是一个帮助我们主动对行为影响进行反馈的工具。
 
2.以教为学
 
教别人的过程表面上是知识输出,但实际上这个过程还有额外的三个价值:
 
第一,因为要教别人,就会督促自己发现知识阻塞,进一步打通已有知识。
 
第二,教别人的过程,是一个强化记忆和认识的过程。
 
第三,教别人之后,别人提出疑问、质疑和新想法,会增强我们的认识。
 
3.刻意练习
 
刻意练习,就是提升元认知能力的过程。
 
什么是元认知?就是对我们的思考过程的思考。
 
我们每个人都能意识到自己在思考,但是很少有人能自觉地意识到还可以去思考我们“思考的过程”。这就好比人们很难意识到空气的存在,鱼儿很难意识到水的存在一样。
 
元认知与临界知识是什么关系?元认知与临界知识,一个是思考的过程,一个是思考的工具。
 
举例:
元认知就好比我们选择从北京到天津的道路,可以是省道也可以是高速公路。不用临界知识,就像是我们开车去天津选择走省道,路远,堵车,浪费时间;而在思考的过程应用临界知识,就好比开车上高速,能够更快速地到达目的地。
 
我们快速成长就是把省道升级为高速的过程。

 

如何通过刻意练习来掌握临界知识和提升元认知能力?有3个部分:
 
第一,对基本核心知识划小圈;
 
“划小圈”这个概念是从乔希·维茨金的《学习之道》这本书中借鉴过来的,意思是持续、刻意地进行大量专注训练。
 
比如,在像武术这样的技能类训练当中,划小圈的内容可能是蹲马步、打直拳等。我们需要反思动作细微的差别,理解这些基本动作的应用并做到熟练。
 
第二,将基本知识组合成更大的知识能力单元;
 
我们把掌握的核心知识彻底吃透,就能够和其他相关知识组成一个新的知识能力单元,整体使用。
 
比如,游泳这件事情,刚开始练习漂浮、呼吸、打水等等,每个项目都是一个基本的技能,组合起来就成了在水中穿行的新技能——游泳。
 
第三,在各知识能力单元之间构建认知框架。
 
我们对核心概念都吃透并组合成知识能力单元之后,接下来要做的就是用认知框架将它们联系和整合起来。
 
比如,在商业分析中,可以将复利、边际效益、规模效应和品牌效应组合成一个认知框架,来判断一个企业的未来发展潜力。
 

五、小结

 
对于我们每一个人而言,不要做收集知识的矿工,而要把已经收集的知识,打磨成璀璨的珠宝,这才是真正的好好学习。
深度思考的能力,决定了你人生的高度
知道这些知识你能少花很多冤枉钱活得更长寿
硬笔行书字帖教程:钢笔字间架结构
耗子尾汁!听说这是工作1~3年的同学都很疑惑的问题?
posted @ 2023-08-11 17:19  CharyGao  阅读(58)  评论(0编辑  收藏  举报