技术类书籍选购和笔记记录指南

这篇文章主要想解决我一直很心烦的一个问题:“为什么我特别讨厌国内教材”。为了避免不必要的争端,仅将范围缩小到计算机技术类书籍当中。对于这个问题我思考了两年多,最后我发现自己并非是对于“中国产”讨厌,而是对于一种特定场合使用的教材不满。

版本 0.1.1

我认为计算机书籍分为两类,其一为详细介绍内容本身,并且你可以轻松的在其中进行实践和玩乐的书籍,这类我称之为教程。其二为对内容、篇幅控制十分苛刻,介绍知识简明扼要的,这类我称之为讲义。

教程

教程适合自学,那本书自从被买回去,它就是一个很好的老师。一个好老师的标准是教和学相结合,也就是说,其有足够的吸引力能让你对知识进行实践和玩乐以加强教育的效果,典型的是《Python学习手册》,别人讲200页的东西,它活生生的拉长到了1000页,但是这1000页学起来十分有趣,内容很广、深、并且循序渐进,你可以写很多自己的小程序,来验证它所教授的内容。但这样并不适合那些想要快速查找资料的人,这显然适合作为兴趣的自学,而非作为工具的学习书。

讲义

而讲义则非常不适合自学,其适合临时翻阅或者充当教学的辅助工具。比如我曾经买过一本《MongoDB权威指南》,这本书介绍的内容毫不啰嗦,极其吝啬笔墨,光是安装就搞得一头雾水。并且丝毫不提供一个尝试和练习的机会——因为即便你想要试着做一下里面讲到的语句,你也会痛苦的发现其缺失上下文关系,久而久之,这本书就只能负责“教”而不管“学”了。但是,讲义作为视频讲解的补充是很好的,MongoDB提供了University的在线课程,有视频,有作业,有很多动手的地方,但是,由于外语关系,加上视频讲解深度不够,因此需要一个讲义补充深度和其它知识,我一般用来做预习,这很好。

手册

图:一个手册的局部,手册一般用来搜索和快速查找某个API

此外,还有一种东西叫做“手册”,这些手册详细介绍了其项目的API,有很多还提供了Guide来帮助学习,但是,这些东西一般不适合拿来自学,甚至是预习。这些适合快速查找某个函数/API的用法,了解某个特殊机制,补充自己遗忘的知识等。教程和讲义+讲解的下一部才是手册,手册一般是开始搞工程时使用的重要工具,其使用的默认要求应该是:你对于相关知识/领域有所了解, 有大致的思路,手册不是作为一些学习的工具而存在的。

笔记

第一类笔记

我认为是要做笔记的。我把笔记分为两类,其一我称之为todo类笔记,其是使用标题详细区分的那种像手册一样的东西,其内部缺乏“有意义的联系”,这种笔记你可以边听边做,按照的流程就是老师给的流程,而没有经过自己的思考。一般来说,使用OneNote在课堂上做的笔记都属于这种,其包含重要的知识点,虽然缺乏各项目之间的逻辑,但是其项目本身是重要的知识点,需要我们去实践或者记忆。

图:一个快速todo类笔记的示范

图:一个不太标准的todo类笔记的示范

第二类笔记

另外一种笔记,我称之为概念联系类笔记,其是使用白纸写的,你要对知识有一个了解,然后像VNN图/思维导图一样划出其内在的流程、关系、步骤,这种笔记看起来像是草纸,只是帮助你理清楚思路,一旦超过这个用途,其本身不再重要,并且,这张草纸上的东西一旦确定,应该牢牢地刻在你的脑子里,这是使用“手册”的前提。自然,这种关系的笔记是需要不断补充知识来不断修改的,因此需要实际实践经验的支持。并且,确定之后,经过未来的学习,其架构也有可能改变。

图:一个联系类笔记的示范

在这里我想要区分一下第二种笔记和那些网上所谓的思维导图的关系,如果两个定义没有内在关联,你是不能将其联系在一起的,这种笔记十分强调内在架构,可以按照流程或者是内在本质来进行关系的确定,其就像一个网,关系较近的距离较近,相反则反之。对于那些按照序号顺序排序的思维导图,其本身缺乏有意义的联系,因此要给予区分。

第二种笔记应该是常新的,使用一章A4纸就可以画出来的,最好进行存档。一旦阅读,你可以清晰的了解此章节笔记内在的架构。当然,这种笔记不是每天都可以做出来的,很多时候我们学习某个东西,建立的关系会随着之后的学习而改变,只有学习很多的东西之后,才能够总结其共性。因此像编程范式之类的东西,需要上百个小时的实践后才能做,并且还是参考别人已经建立好的框架做。

第二类笔记的重要性

那么,为什么要有第二种笔记呢?其一,如果我们没有笔记,脑海中的结构就很容易丢掉,这很浪费,其次,如果我们没有笔记,脑海中的结构就会迫使我们不断的修改笔记,以让其结构和我们心中的结构所符合,但是,我们很容易想到新的结构,这样的话,会很疲乏。因此,这个纸质草稿一样的东西很重要,其代表了知识在我们脑海中存储的一个过程,以及结果。

按照书本/老师的结构不行吗?

有人说,按照书本/老师自己的结构来不行吗?为什么我们要有自己的结构呢?对于这个问题的回答,我认为,这是因为知行目的不同。知是知识,知识不论采用什么架构无所谓,但是行,则需要一个流程性的东西,而这些知识,在我的框架中是要应用的,而白纸,就代表了知识在我脑袋里的流程,这种结构很重要,并且是人人不同的,其根据我们利用知识的目的不同,结构也不相同,比如我在重读《Think Python》一书的时候,发现作者的章节编排都是按照Python语言的实现顺序来写的,首先是结构、其次是表达式和for循环,for循环是实现切片的基础、由此引出来了建立在其上的函数们。而我的学习目的是为了使用,我大体是按照这个流程,不过还加上了如何建立这个数据结构?这个数据结构和其他结构如何转化?这个数据结构有什么使用上的须知?这些东西显然是需要我们按照一个自己的结构来走的。

对于学习第二门语言,可以按照我们定好的结构来走,但是对于第一门语言,要想形成这样的结构不是一件简单的事情。哪怕我已经实践、写过很多的组件和程序,还是必须要从头梳理一遍。因此说,一个健全的流程性的结构是重要的。而笔记的目的之一,就是建立这样的结构,之二才是依托这些结构的API和各个函数的用法,细节之类。

结构是不断变化的,但总归有最优解

因此,这就是白纸的目的。而要想形成这样的健全的结构和流程显然是不容易的。我认为预习的一个目的就在于此,但是这还不够。因为当我们分章节预习和学习的时候,建立的结构是基于章节的,而当从整体看的话,可能其各章节的结构就要做部分的修正以满足总体的一个一致性。因此就有必要继续更新结构,而当我们补充和添加知识的话,这个结构说不定也要变化,因此白纸们表示了这一坨知识的结构的一个最优化的过程和结果。

我的经历和笔记流程

我之前喜欢将这两者混合起来。也就是说,在听课的时候想要建立一个完善的结构良好的笔记,为此我尝试过很多方法:使用活页纸、使用电子版笔记、使用白纸,但是发现效果都不怎么好。而那些笔记,要么是因为太过于条理以至于失去了清晰的内在结构,要么是因为画的太乱而难以辨别,或者是因为在白纸上不断地更新而导致难以更改。

我现在采用两种笔记,其一为电子笔记,这是因为电脑很方便的可以调整顺序、快速修改文字,添加多媒体内容。其二为白纸,我总是试着将自己脑袋里关于这一大坨知识的看法、逻辑画出来,尽管这有时候很不容易。每次在我完成或者开始记录电子笔记之前,我会先确认一下自己对于整体知识的印象有没有结构性的变化,如果有的话,那么就画出来新的结构。新的结构必须是包容性的,也就是说,其可以囊括任意的知识而保证结构完整以及充满联系。而我也会因此反复的修改电子笔记,直到其结构统一为止。

我认为一个完善的工作流是这样的:首先预习,形成一个自己的框架,按照讲解的顺序记笔记,这些笔记是电子版的,很容易调整结构。经过对逐条知识进行思考和实践以及补充之后,我们形成一个自己的框架,之后再对于笔记进行结构性的整理、重组。这个过程不宜太密集,因为我们总是很快想到一个新的结构,但是,笔记总不能每次都即时的得到更新。一般而言,每一章节开始和结束时进行结构性的思考和笔记的重组较好。对于总体进行结构的优化也是有必要的,这一般在于最后整理书本的时候进行。

可以把笔记看作一个不甚完善的手册,每次我们使用手册去实践一些东西/学习一些东西,之后形成一个整体性的框架,之后修改和完善手册内容。周而复始,每次我们都去实践/学习一些内容,然后形成更新的整体性框架,之后修改和完善手册内容。这个框架是根据我们的实践来的,而这些知识则是根据我们的学习来的,这两者要保持一致。

复习和反馈

整体

形成上述我们提到的框架是重要的。你可以在学习一章后,拿出一张白纸进行总结,思考其内在的联系,可以在下次学习的时候再拿出来,首先再画一张,将自己脑袋中的结构标识出来,接着对照之前自己画的,这样的话,可以了解哪部分自己不熟悉,在缺少反馈的情况下,这是一个很好的方法,来整理整体性的架构。经过多次这样的反复,最后得到的框架一定是我们认为最优的,在很长一段时间之后,拿出来可以快速了解相关内容,进行温习。

细节

我们之前还提到过另外一种笔记,是按照条目而非关系组织的。这种笔记也有其价值。对于整体的价值是,其可以用作验证整体架构的一个验证器,一个好的组织结构是可以包含所有条目的。其对于经验的价值是,我们可以将这些条目看作是todo list,对其分别进行实践和检验,以确定自己的掌握程度。这真的很好,因为对于任何命令,如果不是在学习的时候故意敲错几次,我们是不会有一个关于“正确”的印象的,而这种实践的经验,往往可以弥补对于整体的重视而造成的眼高手低的现象。我们在对于细节条目的阐释中收获了经验性知识,在对于整体的不断把握和更新中获得了一种流程性知识。这两者都很重要。当然,至于细节,你也可以之后去文档查看,但是,记住一些关键的常用的细节还是很有好处的。




更新历史

2018年2月5日 version 0.0.1 添加文档

2018年2月5日 version 0.0.2 添加图片,修改了部分样式

2018年2月6日 version 0.1.0 添加了划分两种笔记的说明

2018年2月6日 version 0.1.1 对笔记部分进行重新思考和实践,更新了第二类笔记的重要性、结构性知识建立的过程的说明。