You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

11 KiB

加餐5周爱民我想和你分享些学习的道理

你好,我是月影。

专栏更新过半啦,我也收到了一些基础薄弱的用户反馈,说这门课难学。今天,我特意邀请了爱民老师,来和我们分享他的学习方法、心得。你可能会好奇,为什么今天没有音频。我希望你能静下心来,花上十几分钟,跟随着爱民老师一起思考学习的道理。


昔闻人言:天下之事,最轻易者莫过于求学,最恒难者,莫过于问道。予深以为然。
 
——引言

你好,我是周爱民。今天出现在这个课堂上,并不是因为我对月影兄所讲的“可视化”有着怎样的经验,也并没有什么应用技能或理论思想能和你交流。我在这里,想要与你讲的是“如何学习”。即便鼓了很大的勇气才领下这个题目,也不是因为我很善于学习。我在学习这件事上,是一个只会用笨功夫的人,没有什么技巧能跟你讲。

那我究竟为什么要来讲这个话题,又有什么可以跟你讲的呢?

这就要从同学们的感受说起了。“很难”,这大概是许多同学对月影这门课的直接感受。而这个感受,与引言中所谓“天下最轻易者”实在是天差地别。而我历来认为学习不同于问道:问道恒难,而学习甚易。这便是我想跟你聊一聊的道理。尤其重要的是,只要把这个道理听明白了,我想你学习起来也就轻松了。

正如我前面说过的,这不是学习的技巧,而是学习的道理。

为什么你会觉得难

很多人知道,我不是计算机专业出身的。在我决定自学计算机时,也并没有老师领路,因此,我需要自己解决的第一个问题便是:自修的话,先选什么课程。当时我是拿了计算机专业几年的课程表来看,然后把它们之间的关系理顺,最后决定先花一个学期单单只看一门《数据结构》。之所以这么选,是因为其它课程好像都要用到它,看起来也都与它有关。至于这其中的原因,我当时却是不明白的,因为没有人教,也没有人可以问。

那个时候这门课用的是Pascal我没有语言基础学校的电脑上也没有这个语言所以我基本是手写代码脑袋编译。至于一段代码运行的正确性对不起没有上机测试所以我也不知道。就这样忽忽的学了一个学期我去考了试得了70多分。

于是,我的《数据结构》的底子就这样扎下了。自那以后,我在计算机语言、应用这方面,再没遇到比当时更难的困境。这其中的道理很简单,只要扎实基础,循序渐进,几乎所有语言与代码方面的问题,我们都可以一点点啃下去。 直到如今,如果有人去看我写的那本《程序原本》,就能看得出这个硬底子还在。

当然,一定会有同学说:我的《数据结构》成绩比你还好,但一样觉得很难啊!

这是正常的。上面我说的这个道理,其实只说了一层。要知道我从业二十多年来,像《数据结构》这样一门一门、一本一本啃下来的课,也并不止一个。如今看起来学什么都容易,只不过是积腋成裘的结果罢了。在这个过程中,但凡我觉得有“非常之疑难”者,无不是中间少啃了那么一本两本“《数据结构》”。也就是说,那些称得上“疑难不懂”的,其实都只是缺了几门知识,少花了几次笨功夫而已。所以要学好月影这门课,且先不说他如何讲,你只要笃定一个笨想法就可以了:你看到不懂的名词,必然是少学了几门功课;看到不懂的话语,必然是少推断了几个逻辑,等等如此。

有着这些种种不懂,也就当然有种种能懂的知识。你把这些坑坑洞洞都补起来,自然也就懂了。只要你愿意像在学校里一样地去做笨功夫,这些缺失的知识又怎么算得上难呢?

为什么你会听不明白

不过很多人所面对的,倒不见得是“难”,而是所谓“疑”。疑难二字,其实并不是同一个东西:你攀山越岭时,所感觉到的便是“难”,只要努力,一座座地翻过去,总还是可以到达的。而你隔岸观花时,那种似是而非才是“疑”。

之所以有“疑”,并不是目力不济,而是心志不济。

在《程序原本》这本书的前言致谢中,我感谢了我的小学数学老师,因此便有同学问我其中的缘故。我说:那本书中,所用到的数学知识,止于小学足矣。然而这本书却是我在极客时间开设《JavaScript核心原理解析》一课的基础,所以如今反观这本书、这门课程,其实在数学知识上都是“止于小学足矣”。

所以我很想问,都这样了,为什么还有人觉得“难”?又或者问,既然已是“如此这般地不难”了,那么你所“疑”的,又是什么呢?

但凡我们受过高等教育的,又或者写过几年程序的,都不妨把自己看成是“有知识、有经验”的人。这很正常,我们本来就是靠着这些知识与经验吃饭的,这都是看家底儿的东西。然而,这些东西“正确”吗?我们之所“疑”的,往往就是所“见到”的与我们所“知道”的之间的矛盾。比如说在《JavaScript核心原理解析》中第一讲便是说“引用”这个概念的然而ECMAScript中的所谓“引用”与一般语言中的“引用”是似是而非的。所以从这门课一开始就有无数同学深陷于这一个概念之中用既有的知识来解释它有解释为指针的有解释为结构的有解释为类型的……不一而足。

**为什么有“疑”?其实这是缘于我们对“已知”的不疑。**当这种不疑与面前的真相矛盾时,我们就怀疑了、拒绝了、不可接受了。学习中怕的不是看不懂,而是明明表面什么都看得懂,心底里却什么都不接受。这才可怕,这才畏怯,这才寸厘不进。

这也是很多课程“学不明白”的根由:你从一开始,就放不下那些你认为“对”的东西;既然你认为已看到的是对的,那么眼前所学的,又是什么呢?

所以要解决学习中的“疑”,反倒是放开态度,认为自己什么也不懂,心志坚定地跟着眼前这位老师的步子一点点看,一遍遍练。这个过程,并不是要怀疑自己,而是要敢于舍弃自己。相信他人既然可以为师,必有所长,必不吝于教,无有成见地去学习,才能学有所得,进而更新自己。

在《大道至简》中说过“问道于盲”的故事:只要你愿意闭上眼睛,你也可以向盲人问道。睁开眼问,这止于眼前的所谓“真相”,便是你的疑难了。

为什么你觉得什么也没学会

其实月影这门课还有一个副标题是“系统掌握图形学与可视化核心原理”这与《JavaScript核心原理解析》有一个关键词的重合。并且事实上在我那门课程的开篇中我还专门提到这门课的要点是“体系性系统这算得上另一处巧合。

不过,“核心原理”+“体系性”却并不见得是“你觉得难”的根源。说到这里,恐怕又有不少人要跳起来反对了:都讲“核心原理”了,还不难啊?!

其实核心原理通常来说真的不难。例如密码学,核心原理就是映射变换;图形学,核心原理就是点(位置/坐标)等等。同样的,“体系性”也并不难,例如月影的课程,体系性就摆在那里了,你去看看课程目录就知道了。所以无论是体系,还是核心原理,都不是这些课程让你觉得难的真正原因。

这让我想起了《大道至简》这本书最后有一个“问智”的桥段。起首的一问是“何谓愚”,书中说的是:不知道事情的起始,也不知道它的终点,就是所谓的“愚”了。而在我看来,一门课程要是学不好、学不懂、学不通,起步上的错处,就在你对于要学会的东西“不知其始、非知所终”。

不管是什么课程,你得先知道老师“想讲什么”,这就是结果。如果一个课程你知道了结果,并且又假设结果是对的,那么学习它的方法就是按照老师所讲的内容,一步步推演过去就好了。这个过程是确定的,结果也是确定的,你所需的无非是推演中所缺的几门功课,以及一点耐心而已。所谓前人、所谓先行者,其实无非就是比你多走了一遍路途而已,所以只要我们放下自我的姿态,亦步亦趋地跟着老师讲的往前走,那么这个结果总是能看到的。

学习之“易”也就在于此:总有一个确定的过程,以及一个确定的结果。但是,这往往还不够。因为如果老师只教你这个结果,那也只是最低一等的“师”。无论如何,真正的“良师”,会帮助你解决“不知起始”的问题。——于此,你真正还需要知道的是老师“为什么要教”。一旦你知道了“教的目的”,也就知道了复核自己“学的结果”的方法,这就是相互印证了。如果学习不知道起始、不知道目的、不知道印证,那么怎么学都是茫茫然。

而核心原理和体系性的“易”也就在于此:核心原理总是一个简单的结论,你所学的,只是这个结论得到的过程;体系性总是一种明确的结构(组合),你所学的,只是将这个结构组织起来的方法。所以最终来说,你就是要得到一个核心推论的过程,以及了解它所涉及的那些领域之间的关系而已。

多数情况下,就结果来说,你甚至可以从课程目录,以及每章的小节中直接读到它们。那么不管它与你既有的知识是否有冲突,将这门课程粗略地看过去,拿了这样的结果(核心过程与结构关系)就可以了。

不过,学习这样的课程,不要在“结果”上花功夫,从过程上去找、去看方法,才是正途。

道理我都懂

正如引言中所说,学习这件事情,其实真的不是很难。至于是不是“天下最轻易者”,我可不敢跟古人去论争。所以在今天的分享里,我也只是想把一些似难实简的地方跟你说说:其一,你可能只是缺了点知识,要补课;其二,你可能只是宥于所知,请开放思想;其三,你可能只是埋头学习,而忘了要学会的是什么。

是的,我知道已经有人开始在说:“道理我都懂……”。

这种腹诽,实在是这么些年来我最怕见到的。因为持这种态度者,大多都是不愿下苦功夫的人。所以我希望读到这里,心底下还叹着“道理我都懂”的朋友,能再回到第一小节,从苦功夫做起。要知道古往今来之有成就者,不过将学习持之以恒而已,哪里有什么技巧

不过如果要舍了学习不谈只想拿个现成的东西去用那么作为程序员最好的地方是在GitHub而不是在极客时间。我想这个看起来众所周知的答案便是我对那些急于掩卷而去的人最后的劝慰了。