如何利用互联网学习?

In this world we have two kinds of knowledge, one is Planck knowledge, the people who really know, they paid the dues they have the aptitude. Then we got chauffeur knowledge, they have learned to prattle the talk. They have a big head of hair, they have a fine temper in the voice, they make a hell of an impression, but in the end they've got chauffeur knowledge.

Charlie Munger

首先定义一下什么是 “学习”。学习就是掌握未知的技能,经验,知识。要学习一个事物,首先需要知道这个事物是什么,它用来做什么,内部是如何组织构造。我们需要为这个事物建立起一个基本的认知概念“集合”,这些概念通过一定规则相互组织在一起,最终形成这个事物。这些集合起来的概念我们可以称之为知识,在维基百科知识是这样定义的:

知识是对某个主题确信的认识,并且这些认识拥有潜在的能力为特定目的而使用。意指透过经验或联想,而能够熟悉进而了解某件事情;这种事实或状态就称为知识,其包括认识或了解某种科学、艺术或技巧。此外,亦指透过研究、调查、观察或经验而获得的一整套知识或一系列资讯。

此时,我们可以确定出一个知识和学习之间关系的结论。知识是一系列概念的组合,学习是获取这一系列概念的过程。我们也可以说,学习是我们增加对具体事物更细致的认知。从语法角度来说,知识是名词,学习是动词。知识获取需要靠学习来付诸行动。本文谈的就是怎样利用互联网更好的去“做”学习这样一项行动。

若要开始一个新领域的学习,需要学习这个领域里面离散的概念,这些概念相互组织,形成系统的知识。因此我们需要为这个领域搭建一个“架构”,然后逐个学习“架构”内具体概念。下面我们以编程语言 C 为例,来说明一个事物知识“框架”以及学习方式。

在 C 语言里面,构成知识基本框架的概念有:变量,表达式,循环,跳转,函数。一段简单的能运行的代码,是由这些最基本概念组成。基本概念掌握后,更高级,更难的概念可以慢慢的进入这个框架内填补,最终形成的框架将会越来越完善。推而广之,其它的编程语言也同样可以利用这一基本框架。事实上一些语言的作者写的简单教程,里面都会把语言里面主要的基本概念说清楚,而这些基本的概念大致和 C 语言的这些基本概念差不太远,只是表现形式不太一样。如果学会这些基本概念,学习其它编程语言会越来越快。

基本的概念框架形成后,下一步就是把学到的东西用于实践。实践分两种,一种是为了掌握某一个概念而实践,比如做题。另一种是解决某一具体问题实践,比如“如何使用爬虫爬数据”。

说到做题,我们一不小心就会落入到像学校考试那样,陷入到题海战术里面去。很多书也会在每一章后面列出大量 的练习给读者做,尤其是数学书。大量做题对于想学习一门技能,而不是致力于短期提高考试分数的人没太大必要。但书上题目的这些题目还是有必要去做,做针对某一概念的题是理解这一概念的捷径。在做题过程中,不要在意是否做对,因为我们本来的目的不是为了把题目做对,是为了能更好理解学习到概念。

解决某一具体问题,是编程里面经常看到的实践方式。要解决某一具体问题,会需要把学到的概念组织起来,所以这种实践一般是在一本编程书最后边。在解决具体问题过程中,你可能需要去学习怎样使用别人已经做好的库(library);怎样去写一些胶水代码,把别人的库“黏”到你的代码里面。在这过程中你会碰到一些杂七杂八问题,这时候搜索引擎就会帮上忙。针对某一具体细小的问题,搜索引擎通常能非常容易找到别人已解决过的方法。

如上所述,学习一个领域首先需要形成一个架构,然后学习架构内具体知识。作为一个领域的新手,我们找到这个架构的最直接方式就是看书,一本书通常都会很好的把知识“架构”好。对于选书我们需要特别注意,不能单纯只通过网上评价来选书。我们必须要结合自身当前能力水平,以及目前认知水平去读适合自己的书。一些书网上看评价全是赞美之言,这书未必适合现在的你。这方面典型的反面例子就是 <The Art of Computer Programming> 这本书,网上评价的人多数都没有看过,大部分是凑热闹的。不客气的说这本书甚至都没有必要花时间去读,里面的内容有比这本讲得更好,更容易理解的书大有存在。正面的例子就是 <The C Programming Language> ,拜 C 语言本身简单特性所赐,这本书很薄,短短 100 多页把 C 语言讲得深处浅出。所有 C 语言概念都涉及到了,所有概念自成一体。这本书是技术书籍典范,我无数次给别人推荐,多少溢美之词赞美它都不为过。这本书也奠定了后来讲编程语言书籍的风格,几乎所有编程语言发明者写的书标题都是 The xxx Programming,里面的内容组织和这本书也非常类似。如果想新学一门语言,照着这个路数选书看基本不会错。

有时候一本书讲太细致,对新手来说反而不好,容易被一些细节困惑。做为新手也不需要对太多的概念有非常细致的了解,这种事情一般都是在入门以后才做的。细致理解一个概念细节需要花很多功夫,在没有经过长期实践的情况下,在这些细节上猛下的功夫收效甚微。那种把每一个概念都非常细致讲清楚的书通常是大部头,这种书通常适合用来做参考书。在需要增加对某一概念细致理解情况下,可以直接跳到介绍这一概念的地方来读,而不是从头到尾的读。所以,做为一个领域的新手,我们需要的是把整个领域的概念形成一个框架的书。这样的书通常会有一定概括性的抽象,也不会写得太厚。举例来说,在 C++ 这个错综复杂的编程语言里面最好的入门书籍不是那些大部头像 <The C++ Programming Language> 或者 <C ++ Primer> 这样人人称颂的书籍,而是像 <Accelerated C++> 这样短小精悍的书籍。在英语语法里面最好的入门书籍不是那些大部头的语法书,而是把整个语法体系从头到尾梳理出来的书,比如 <语法俱乐部>。对于逻辑学最好的入门书籍不是那些哲学巨匠写的书籍,而是像 <being logical> 这样短小精悍,在生活总随处可见,可以直接应用的逻辑学。

对于一些难以理解的概念,死磕一本书未必是最好的方法。同时读很多本书,同时看很多本书,比“使劲”看一个作者写的概念要好得多。所以买书也不能只买一本,要买很多本。买回来也不要有那种没有把一本书从头到尾读完的“压力”。拜互联网所赐,现在书价相对知识的价值来说便宜得像白送一样,尤其是中文书。如果在互联网时代你还花时间去图书馆找书,去逛书店找书,只能证明你可能真的只是在找书,而不是学习。

系统性学一个领域的知识不那么容易,还很花时间。如果不系统性的学习,只是很表层的,短时间的学,脑袋里面的概念全部是零散、割裂的。这种情况短期内看来并不会有什么问题,长期下来是有害的。有时很多人都在犯类似的错误(包括我自己)。我无数次看到很多编程新手啥也不会就直接上手去折腾爬虫,折腾所谓的“大数据分析”。他们之中没有人看书,或者根本不看书,所有的一切问题全靠搜索引擎解决。这种方式学习到的就是所谓的“司机知识”,学习司机知识是很快的,这也是为什么培训行业能火爆的原因之一。由此在 IT 行业产生一系列的怪象,比如公司招人大多数按编程语言招,招聘上明确写着招 xxx 语言程序员。更甚的是“前端程序员”这个领域,招人可以按照“库”来分类。比如 Angular 程序员,Vue 程序员,Jquery 程序员。我见过那种认为自己可以靠 Angular 吃一辈子的前端程序员,还见过写不出 for 循环, 甚至不会 Javascript的前端程序员,这些都是学习“司机知识”带来的危害。

我们今天从互联获取的信息已经过载;朋友圈,今日头条,知乎这些地方的信息让我们乐此不疲。越是有趣的信息越能被喜爱,被传播,这样带来的一个问题就是“娱乐至死”,它主要体现在越能撩动大众情绪的东西,越能广泛传播。我们都有着喜新厌旧心理,都有着强烈的好奇心想看看最近发生的一切事情。要从这些“娱乐至死”的信息里面挑出有用的真的太难,甚至还有可能被误导。割裂的、没有系统性的知识对于我们来说也产生不了任何价值。我们应该主动放弃去垃圾堆里捞黄金的想法,要捞就去那些“知识金矿”里面捞。去找那些久经时间考验的书来读,或者找久经时间考验的大师写的东西来读(一般会被称为某个领域的“圣经”)。信息过载的另一个问题就是会让我们不知不觉产生落后的焦虑,于是出现一些声称能够缓解这种焦虑的“知识付费”产品。这些产品特点就是用户只需要付一点点钱就能获取到,用户也不需要额外的成本去把互联网内容里面的“杂质”剔除出来。这些产品会有一些用,不过在我个人看来它更像是“减肥药方”,它更需要你买来后主动学习才能发挥作用,并不会让你减少学习的过程。

如上所述,对于学习某个事物,我们学习的不紧紧是单一的知识,而是学习很多概念组织在一起的成型。我们首先要找到这个事务的内部组织“架构”,对“架构”内的知识概念逐个击破,掌握好这个“架构”后我们还需要想办法在现实生活中实践。在以前,这一系列的过程如果没有一个好的老师恐怕难以办到。现在互联网这个巨大的地图可以给我们更多的指引,我们可以通过互联网找到更多的好老师甚至大师(可以读他们写的书)。我们需要做的只是甄别内容质量的高低,找到知识”架构“,然后跟着大师学习就行了。我们需要下功夫的地方是学习的过程,而不是获取信息的过程。学习的成本很高,筛选我们学习“信息源”这个能力非常重要。我们要利用互联网主动学习,防止被动接收互联网杂乱无章的割裂信息。任何学习的过程都应该是主动的。