如何"严肃"阅读一本书?


#1

0.序

本文为项目"步步为营, 零秒精通Emacs"的第四章"Emacs as a Notebook by Org"

一本书读过之后, 当再次拿起来的时候, 仿佛读新书一样;
读了, 看了, "劳民伤财"投入大量时间与精力, 但是记不住怎么办?
本文试图解决这个问题, 以SICP的第四章(Metalinguistic Abstraction)为例

论述分为六个部分:

  1. 启动-绘制大纲, 拿着地图阅读;
  2. 过程控制, 利用org-clock以及标签, 在控制过程的同时, 为后续的复盘预备第一手的线索;
  3. 阅读管理, 正文阅读阐述如何应用标签提高阅读效率, 并为后续查询参阅提供好用的数据结构;
  4. 案例与习题, 讨论怎样索引和处理书中的案例与习题;
  5. Org的撒手锏;
  6. 收尾, 总结探讨提高技术水平的同时, 稳扎稳打从每次阅读中提升英语能力.
  • 附录: 参看书目

1.启动-绘制大纲

关于大纲目录的重要性, 引用王垠在"如何成为一个天才"中的一段话:

如果你看过John Nash 的传记《A Beautiful Mind》,就会发现他与其他人的不同.Nash看书只看封面和开头,把这书要讲的问题了解清楚之后,就自己动手解决. 最后,他完全依靠自己的"头脑暴力"创造出整本书的内容.

天才的能力或许难以企及, 天才的方法却可学可至. 一本书拿过来, 先看封面和目录, 纸笔绘制出来; 目录便是大纲结构, 投入10~30分钟的时间在大纲结构上, 展开"头脑风暴", 如果你在写这本书, 将会如何展开, 根据既往经验与充分想象, “编造"出来大致脉络, “编造”, 无拘无束的"编造”. 益处有四:

  1. 梳理和回顾你的经验和知识结构;
  2. 编造的过程会滋生阅读的欲望, 因为某些部分造不出来;
  3. 当拿着"我"的思想与"作者"的思想对照之时, 阅读的过程已变为求证的过程;
  4. 两个思想互相碰撞, 有共鸣有拍案, 不仅会事半功倍的提高阅读效率; 还能更深入的掌握书中的精妙之处.

退一步, 如果一点想法都没有, 半句话也编不出来, 那最好将背诵下来, 待到"厕上枕上马上", 从脑子里拿出来慢慢反刍咀嚼, 驱动潜意识这种神奇的力量开始工作.

纸笔绘制的方法有助于记忆, 而且可以放在手边作为地图参阅.

用emacs-org参阅大纲结构:

方法一: C-n S(shift)-tab

控制目录显示的深度,比如C-2 S-tab显示到2级目录,

方法的优点是可以自定义控制目录显示的深度

方法二:

直接应用S-tab或者C-u Tab轮巡 ,

  ,-> OVERVIEW -> CONTENTS -> SHOW ALL --.
  '--------------------------------------'

重复操作一次则显示在不同的结构

方法三:

TOC结构, 安装doom-emacs后, 在任意位置, 应用:toc:便能自动生成目录

方法四

推荐的方案,纸笔绘制, 放在手边参阅.

2.过程控制

Clock-in and Clock-out

当前章节下调用 M-x org-clock-in,

  • 一方面可以计时,
  • 再者则随时提醒当前所处的位置和任务, 及时跳转到其他的buffer中, 也会看到, 比如从4.4.1 Deductive Information Retrieval中激发了clock-in, 则即使在这篇文章的编辑页面, 依然能看到当下的任务, 随时提醒你回去执行.

  • clock-in置顶当前任务, 为后文"阅读管理"添加标签提供便利.

随手建立todo任务

比如阅读过程中,发现svg的图片格式在black模式下, 认读需要眼睛对到屏幕上仔细得瞧个清楚, 因此设置任务将inline的图片逐步去掉, 修改成文本格式.

任务完成后变更todo为done

提出问题

过程控制中最重要的一点, 初次阅读的时候, 有困惑的地方, 不理解的地方, 尤其是与你在第一步"编造"和"想象"的内容不一致的地方, 标注成"问题?",
因为是自己的笔记, 只要稍微有一丝疑问, 马上标出来,
我觉着这是宝贵的财富.
一方面, 如果不标注, 过5分钟, 会忘记刚才在想什么
另一方面, 当一年后在读这本书的时候, 可以了解当时的水平, 当时的思考脉络.
问题统一设置成 问题? 的格式, 如此, 不仅是在正文的行首, 或者和在代码的内部, 都能方便查到; 又不会多余查到正常使用的"问题"这个词汇.

问题解决后, 在后面标注v,v当做是对号.

如图, 刚才的12个问题解决了7个, 剩下的可能需要发到stackoverflow上.

过程控制小结:

过程控制使用了todo, 问题标签.
后文的"阅读管理"中探讨,
使用filter知识点的标签 #得到-概念 #得到-语法 #得到-行文(学习到了文章的结构) #得到-关联(关联到过往的经验) #得到-应用(对后续对概念对知识点应用的思);
#短评(没有想好归类的,使用短评)
#洞见 #洞见-关联 #洞见-应用
#拍案 #词汇 #总结 等等,

使用"问题?"等标签的优点:
一是: 为后续查询提供结构化的关键词
二是: 可扩展性, 一本书, 二读, 三读, 四读, 可以在既有的标签规则下, 添加新的想法.

项目:

素材:


#2

3.阅读管理

金圣叹点评"水浒传", 也是为他深入理解文章,
阅读过程中, 给评注设置标签有三个作用:

  1. 分类记录, 不然写得评注很多, 复盘回顾往往眉毛胡子一把抓
  2. 从自己的角度, 将文章重新格式化, 正文的目录是作者的结构, 标签可以按照自己的想法构建.
  3. 为二读, 三读提供结构化的线索.

短评

短评是不分类的标签, 可以意识流, 读到哪里, 有想法立刻写下来. 无拘无束, 不给大脑是否要分类, 分类到哪里的负担.
待到二读, 三读的时候再适当"短评"的内容归类, "短评"为后面的动作提供原材料.

洞见

读着读着, 对作者的阐述生发共鸣,
或者比"绘制大纲"阶段中"编造"的内容阐述的精彩,
又或者在胸中困顿许久没想明白的点, 在此处豁然开朗.

举例比如 assignment and definition这一段, 从evaluator的角度, 赋值(assignment)与定义(definition)的本质是一样的, 都是set!, 这也完全符合直觉. 此处标注为洞见, 是因为刚从python入门编程的时候, 学习赋值与函数定义.

a = 9
def foo(x): return x * x

很容易直觉到或者看到这里的"def"与"="是一样的, 都是给一个变量赋值.
那时将这个想法分享到微信群组, 招惹来汹涌的嘲笑, 各种跳大神纷纷登场, scope, 一等公民都来了.
上面的这一段, 也写进去, 标签是 #洞见-关联 关联到既往的经验中.
洞见-关联 标签相对应的是 洞见-应用, 既然有了这个洞见, 日后怎样应用?

拍案

"拍案"是"洞见"的升级, 给感情发挥的空间, 没有规则, 就是突然醍醐灌顶,拍案叫绝.

比如这一章的开头, 作者引述的一段话

… It’s in words that the magic is—Abracadabra, Open Sesame, and the rest—but the magic words in one story aren’t magical in the next. The real magic is to understand which words work, and when, and for what; the trick is to learn the trick.

起讲"metalinguistic"之前, 作者引述这样浅显直白又颇具启发的用例.
与"洞见"一样, 后面在阅读的时候也加上"拍案-关联", "拍案-应用"标签,

小结: 从短评, 洞见, 到拍案, 都是自己的思路, 后面的"得到"标签标注知识点.

得到

采用"得到"标签, 是因为比"知识点"少一个字.

得到-概念:

标注文中新阐述的概念.

比如文中的一个角度对CS的定义

Seen from this perspective, the technology for coping with large-scale computer systems merges with the technology for building new computer languages, and computer science itself becomes no more (and no less) than the discipline of constructing appropriate descriptive languages.

得到-语法:

标注语言的语法

上图标注if-predicate, 是因为我的潜意识里, if总是两个predicates.

得到-八股

从文章中学习到的行文技巧, 起承转合, 类比比喻等等. 而八股文有着严谨的起承转合的结构.

再看第三章的第一段,承接前两章然后引出下文.

得到:

新的知识点, 没想好归类, 直接用得到. 以上, 搜"# 得到"的时候, 可以

总结标签:

此处略过, 最好每一节都有一个总结.

词汇:

此处承接"尾声"部分, 积累词汇与表达, “积土成山, 风雨兴焉” 利用org的规则, 词汇标注有两种方式.

其一:

比如本章节中的两个单词, evaluate与apply.
eval便是输入expression, 输出value;
拆解evaluate这个单词, evaluate = ex(out) + value 将value拿出来就是evaluate, 与eval的过程百分百匹配;
直觉大概可以从这样的"跬步"中慢慢建立起来. apply就不拿出来献丑了.

其二:
应用 ~vacabulary~ 标注单词

标注了14个词汇.

阅读管理小结:

  1. 短评, 基础的原材料标签, 有启发有想法随时记下来, 作为后续分类的基础;
  2. 洞见, 有共鸣, 有豁然开朗的地方
  3. 拍案, 醍醐灌顶, 就像高呼几声的地方
  4. 得到, 知识点
  5. 总结
  6. 词汇,
  7. 关联与应用放到相应的标签后面.

#3

感觉读本书,您老都搞成系统工程了哪01


#4

所以是"严肃"嘛, 一年拿一两本.
另外, 大概是想分享一种"硬功夫"“真刀真枪"的方法.
两军阵前, 敌将一招势大力沉的狼牙棒打来, 一戟刺去, 取对方首级;
而非唱一声"逃”, 以为是在戏台上.


#5

1.值得下这么大功夫读的书,基本上就那么几本

2.没有内化成自己想法的信息是没有意义的,已经内化的信息你想忘掉都是不可能的

3.大多数值得读的书里面真正有价值的往往就那么几句话

4.更多的书是垃圾,从垃圾堆中快速识别那本值得花时间读是更重要的技能.


#6

开着电脑就读不了书。。。


#7

真赞啊,emacs需要这样严肃的用户


#8

这真让人无能无力😄


#9

好久没来逛了,一上线就发现了一枚“妙人”。真真是好不开心。过年有事情干了,好好读读书,合卷已收假,只为自诩时光未虚度,感觉收获应该挺大。哈哈


#10

emmm, 咱读成了"妙龄".


#11

感谢,受益匪浅!只是到哪儿去找想看的org格式的书籍?


#12

可惜没有,得自己动手, 连emcas manual,elisp manual都没有org格式。 org manual的doc是org格式。


#13

上述的过程控制, 可以把握住节奏, 问题标签梳理最初的思路;
阅读管理中, 设置标签, 短评, 洞见, 拍案, 得到-概念, 得到-语法, 得到-八股, 工艺, 总结, 词汇等等,
一是将内容重新组织, 内化成个人知识结构;
二是也是梳理思路和备忘; 二读, 一打开书, 马上先看总结标签, 看拍案标签, 10分钟内至少能重置到当初刚读完书的水平;
三是: 可扩展性, 不论何时有了想法可以第一时间加进去.

但是,

以上, 没有触及一个核心问题,
如果内容特别难, 比如sicp的第四章和第五章, 又是初次阅读, 对内容的初次理解是怎样实现的?
通过分类整理标签吗? 我不太相信, 要说可以备忘, 备查, 我相信.

一本书读完, 在大脑中的呈现是怎样的呢? 是org这种结构吗? 散步的时候, 不能从脑中呈现出来的内容, 都是摆设.

org笔记的作用而只是参阅, 而非真的大脑.

以上仅作为头脑风暴的拓展探讨内容.

周末收尾这一章.


#14

首先是比较暴力的办法:

读书目的之一是学习:

有了方法,如何执行?

在这个纷扰的世界,需要一额外的办法:

但是你要知道,没有什么知识是特别的.有些东西觉得如获至宝,对于另外人只是垃圾,反之亦然.

可是为什么要读书呢?我觉得,那是因为当我离开这个世界的时候,我能说:我尽力了.


#15

说的好,我还想加一点

  1. 谨防用努力代替思考。

#16

棒, “如何学习如何学习”是coursera的招牌课程,15年的时候曾试图投入时间学习,但没有耐力坚持住看完第二个视频,那时候放下,再也没有拿起来。
如果能分享个人以从课程中学到技术,学习具体内容的case,不胜感激。

"Automatic habit"跟“deep work"还没拜读过,放到假期书单中,希望能在“Emacs as agenda by org"中深入探讨。

最后一声叹息,猜测“如何阅读一本书”,在每个人的书单里。(微信读书现在做得太棒了), 买一本书,将一本书放入书单,常常是心理安慰的作用; 而将“如何阅读一本书”放入书单, 则往往成了心里安慰的心理安慰。


#17

手写的英文卡片没看明白,可以出期视频吗?


#18

在写第二章"God’s hands and God’ Eyes by dired and bookmarks"的时候,
感觉个人的语言能力有限, 很难将工作流通过文字完整呈现出来, 所以那一章似乎半途而废, 在尝试录屏工具, 我想先尝试第二章, 如果录屏的过程中, 思路更加清晰了, 那还用文字表达,
视频作为最后的无奈选择.


#19

我说不出来我在学习如何学习的时候到底学到了什么,但这,也许,并不意味着我什么都没有学会。

我觉得把我“学”到的东西,用完整的文字呈现出来,并且不给别人带来误导,难度实在是太大。如果你真的很感兴趣,请直接向他们学习。文字表达只是思维活动的一部分,我所表达的,未必是我所学习的,你所看到的,未必是我想向你表达的。

真正的学习是艺术。就像每个人对音乐的理解。同样的人对相同的曲子用不同乐器演奏;同样的人对相同的曲子用不同乐器演奏但用不同的曲调;同样的人对相同的曲子用不同乐器演奏用不同的节拍;在不同的人生阶段,心境,环境,都会有不同的解读,更不用说不同人,不同的生活经历,背景。

能被量化出来的学习,不是学习,或者说,我们说的不是同一个学习。

学习如何学习,我现在还有印象的是,他们提出大脑的两种工作模式, Habit 和 Deep 都是对第一种模式的强化。第二种模式,则对我对运动,对碎片时间,对手机,对因特网的产生了一些和大多数人不一样的看法。

如果15年的时候尝试过,不妨先试试 Habit, 或许能帮助你克服难关。

我也是最近才发现 Org agenda 的强大,主要是受这篇博客的启发,以前一直以为很没有用的东西,可以真正和这些书中的想法融合在一起。

另外,我读了 Habit 之后, 对在 wechat 上能看书,持怀疑态度。读书不是容易的思维活动, wechat 很多设计思路,都是朝着我们大脑的弱点而去的,你了解之后,也许能改变你的想法。

我自己也有书单,也发现书单膨胀,这似乎不是我一个人的问题。我觉得克服这个问题的办法是设定一些规则,比如一定时期书单量小于某个量,一旦想超越,必须剔除一部分。搜集书单,不是坏事,因为能借助时间的力量,帮助我筛选出来,我真正喜欢什么。


#20

4.案例与习题

SICP习题过多, 目前的处理方法是建索引, 梳理思路.
org可以给代码块,图片等命名, 格式为 #+name

例如书中的案例:

#+name: case-4.1.2-self-evaluating
(define (self-evaluating? exp)
  (cond ((number? exp) true)
        ((string? exp) true)
        (else false)))

“#+name:” + “case-” + 小节序号"4.1.1" + “函数名”

书中的案例分散在各处, 刚上手开读, 不太可能过目不忘, 而读下文回想上文,巨耗脑力;
如果持续使用C-s随机跳转, 思路会搅得杂乱无章;

解决的方法是命名代码块, 自定义索引.

梳理思路

建立索引后, 可以从mini-buffer中查看局部的框架

也可以调用grep查看, 尤其是复盘的时候, 可以只看着grep的清单, 尝试重新构建出来.

跳转查询

比如当读到`define analyze`的时候突然忘记了`self-evaluating`的定义

(define (analyze exp)
  (cond ((self-evaluating? exp)
         (analyze-self-evaluating exp))
        ((quoted? exp)
         (analyze-quoted exp))
        ((variable? exp)
         (analyze-variable exp))
        ((assignment? exp)
...

从结构中能清楚地看到"目标位置"是在大纲目录下的4.1.2中,
如果直接搜索"define (self-eval", 则第一眼看不到大纲.
mini-buffer内的中操作:C-n C-p 如果点进去去查看细节, 结束之后按键 C-u C-@ 可以重新回到 (define (analyz) 这个起始位置.

习题

如果直接查看"Exercise"

大概能了解到有80个习题和粗略的进度(标注[X]),
但也仅此而已, 看不到一道习题隶属哪个章节, 没有整合进大纲结构中.

可以给习题解答的代码设置name, 比如

#+name: case-4.1.2-ex4.4-eval-or
(define (eval-or exps env)
    (cond ((null? exps)
            #f)
          ((true? (eval (first-exp exps) env))
            (eval-or (rest-exp exps) env))
          (else
            #f)

此时在查看"case-4.1.2"的时候, 习题与案例连成一体, 都在"4.1.2 Representing Expressions"之下.

Clock-in

案例与习题命名的格式是"case-4.1.2",
在阅读过程中, 挪用脑力记忆住"4.1.2"这个点位, 或者上下移动光标查看, 不太可取.
在过程控制中, 首要先打开Clock-in,此时可以派上用场. 脑力过于发达可以在大的节点上clock-in比如"4.1", 我是在颗粒度更高的小节点"4.1.2"上clock-in, clock-out.

案例与习题小结

案例与习题是洒落一地的珠子,
初次阅读在代码之间随机跳转参阅, 劳神费力;
建立索引是将珠子串起来, 梳理思路和参阅.
比如本章中的两个基础定义 eval and apply
分别建立索引"#+name: case-4.1.1-apply-core"和"#+name: case-4.1.1-eval-core",
便能C-s “case eval core"准确的一步定位.
如果用查询"define (eval)”, 则需要消耗点脑力构建regex规则过滤掉其他备选项,
而此时大脑正在全神贯注处理当下问题, 最好不要被分神打扰.