0%

How to read and learn?

At times, fear may accompany certain things, but with repeated exposure and understanding, that fear dissipates. It’s akin to the fear of sleeping alone as a child; as you grow and become more familiar with the world, that fear gradually fades away.

The Pyramid Learning

Reading

If my purpose is to learn, read in following skills:

  • Pre-read the book/material super fast.
    • Preview it: Look at headings, subheadings, and any summaries or conclusions to get an overview.
    • Read a book in 4-5 minutes to find out what’s in it, and if it’s anything I need to know.
    • To be able to determine in 5 minutes: Should I even read this? Is this the right book?
  • Ask questions.
    • How will I use this?
    • Why is this important?
    • What applications does it have for the problem I’m trying to solve?
    • Look for what I know, and what I don’t know, and need to learn.
      • Don’t waste time learning what I know, I look for what I don’t know and need to learn.
      • Look for what I don’t understand and what is relevant to me.
      • Don’t need to know everything. I only need to know what I need to know. Spent too much time trying to learn everything and then didn’t remember anything.
      • What’s important is knowing the answers to the test questions if you’re in school, or knowing what your supervisors and clients want to know if you’re in business
    • Look for meaning and significance in what confused me, so now I understand it.
  • Pay more attention on the key things.
    • The first and last sentence/paragraph.
      • Usually the first tells you what’s coming, and the last tells you what came.
    • Vocabulary.
      • Mainly for the English book or some key concepts.
    • Names, nouns, numbers and verbs.
      • Who’s in the book and what did they do?
      • The people, things and their actions.
      • Any number. Date, statistic or formula.
      • Tables, charts, diagrams and so on.
    • In headers and sub-headers, what are the most important ideas in each section, the big takeaways?
    • What are the questions and answers?
  • Utilize recording while reading.
    • Highlight or underline, summarize what you have read.
    • Capture the main points(framework), organize essential data, questions as your read, fill in the highlights and stories.
    • Ask questions, make predictions, and connect what you’re reading to your own experience or knowledge tree.
    • Take notes.
      • What you’re learning?
      • What is your insights?
      • How will you use what you’ve just learned?
      • How did this book grab your attention and excite you?
        • A story, a joke? or anecdote? - more for writing skills.
  • Put the book aside and rehearse the content to yourself.
    • Visualize concepts.
      • Picture what you are leaning.
      • Envision yourself being successful at what you’re working on.
      • Imagine anything that helps.
    • Discuss/teach what you read.
  • Repetition is the key.

Learning

  • All reading skills
  • The Pomodoro Technique
    • 25 minutes and reward, like your favorite song …
    • You may catch your thoughts wandering, that’s normal, as soon as you do just bring it back.
    • Start with the Hardest questions, pull off as soon as you get stuck, go work on something else easier. then start on another hard problem. pull off, go back to something easier, and then go back to that hardest problem. …
  • Some good questions to ask when you’re learning something new:
    • What was the key idea here?
    • What did I really grasp?
    • Can I recall it or use it independently of having the book open right in front of me?
    • Ask more question.
  • View knowledge as sort of a semantic tree.
    • Understand the fundamental principles, i.e. the trunk and big branches.
    • Think more.
  • Summarize and deliberate practice.
    • Explain it in a way a 5-year-old could understand.
    • Do the exercise or practice it in time.
    • Flashcards/notes, Repeat it in your own words.
    • Use the power of metaphor
      • Explain even really complicated ideas using metaphors so that even kids can understand
      • For example, water is often used as the analogy for electrical current flow.
  • Persistence and flexibility is everything.
    • Stick it more than 1 hour every day. If you can’t, less is better than none.

如下是从左耳朵耗子的课程《左耳听风》摘录的一部分很受用的经验。

Note for knowledge tree

“联想记忆法”的方法,比如,在学习 C++ 的时候,面对《C++ Primer》这种厚得不行的书,我就使用联想记忆法。我把 C++ 分成三部分。

  • 第一部分是 C++ 是用来解决 C 语言的问题的,那么 C 语言有什么问题呢?指针、宏、错误处理、数据拷贝…… C++ 用什么技术来解决这些问题呢?
  • 第二部分是 C++ 的面向对象特性:封装、继承、多态。封装,让我想到了构造函数、析构函数等。构造函数让我想到了初始化列表,想到了默认构造函数,想到了拷贝构造函数,想到了 new……多态,让我想到了虚函数,想到了 RTTI,RTTI 让我想到了 dynamic_cast 和 typeid 等。
  • 第三部分是 C++ 的泛型编程。我想到了 template,想到了操作符重载,想到了函数对象,想到 STL,想到数据容器,想到了 iterator,想到了通用算法,等等。

于是,我通过“顺藤摸瓜”的方式,从知识树的主干开始做广度或是深度遍历,于是我就得到了一整棵的知识树。这种“顺藤摸瓜”的记忆方式让我记住了很多知识。最重要的是,当出现一些我不知道的知识点时,我就会往这棵知识树上挂,而这样一来,也使得我的学习更为系统和全面。

学习时一定要使用知识图,学习并不是为了要记忆那些知识点,而是为了要找到一个知识的地图,你在这个地图上能通过关键路径找到你想要的答案。

在学习某个技术的时候,我除了会用到上篇文章中提到的知识图,还会问自己很多个为什么。于是,我形成了一个更高层的知识脑图。下面我把这这个方法分享出来。当然学习一门技术时,Go 语言也好,Docker 也好,我都有一个学习模板。只有把这个学习模板中的内容都填实了,我才罢休。这个模板如下。

  • 这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题。
    这个问题非常关键,也就是说,你在学习一个技术的时候,需要知道这个技术的成因和目标,也就是这个技术的灵魂。如果不知道这些的话,那么你会看不懂这个技术的一些设计理念。

  • 这个技术的优势和劣势分别是什么,或者说,这个技术的 trade-off 是什么。
    任何技术都有其好坏,在解决一个问题的时候,也会带来新的问题。另外,一般来说,任何设计都有 trade-off(要什么和不要什么),所以,你要清楚这个技术的优势和劣势,以及带来的挑战。

  • 这个技术适用的场景。
    任何技术都有其适用的场景,离开了这个场景,这个技术可能会有很多槽点,所以学习技术不但要知道这个技术是什么,还要知道其适用的场景。没有任何一个技术是普适的。注意,所谓场景一般分别两个,一个是业务场景,一个是技术场景。

  • 技术的组成部分和关键点。
    这是技术的核心思想和核心组件了,也是这个技术的灵魂所在了。学习技术的核心部分是快速掌握的关键。

  • 技术的底层原理和关键实现。
    任何一个技术都有其底层的关键基础技术,这些关键技术很有可能也是其它技术的关键基础技术。所以,学习这些关键的基础底层技术,可以让你未来很快地掌握其它技术。可以参看我在 CoolShell 上写的 Docker 底层技术那一系列文章。

  • 已有的实现和它之间的对比。
    一般来说,任何一个技术都会有不同的实现,不同的实现都会有不同的侧重。学习不同的实现,可以让你得到不同的想法和思路,对于开阔思维,深入细节是非常重要的。

这种思路在学习上具有一定的普适性,譬如:

1
2
3
4
5
6
7
8
9
10
11
高铁产生的背景和成因

高铁应用场景

高铁组成部分

高铁设计原理

高铁优势和劣势

高铁和火车对比

Note for summary

总结归纳更多是在复习中对知识的回顾和重组,而不是一边学习一边就总结归纳。

我们来总结一下做总结归纳的方法:把你看到和学习到的信息,归整好,排列好,关联好,总之把信息碎片给结构化掉,然后在结构化的信息中,找到规律,找到相通之处,找到共同之处,进行简化、归纳和总结,最终形成一种套路,一种模式,一种通用方法。

确定学习的主题,比如 Java 锁优化的流程;然后确定学习框架,比如对于 Java 锁优化,这个框架可以是这样的:

  1. 锁优化出现的背景是怎样的,它是为了解决什么问题而出现的?
  2. 技术的关键点:偏向锁、轻量级锁、重量级锁;
    2.1. 偏向锁是啥?咋工作的?它解决了什么问题?它的适用场景是啥?它怎么解决的(它的工作流程)?它又引出了什么问题(它的缺点)?
    2.2. 轻量级锁是啥?咋工作的?……(参照前面)
  3. 根据这些锁的特性,Java 中锁的升级流程是怎样的?
    3.1. 无锁到加锁的过程;
    3.1. 偏向锁升级轻量级锁的时机和过程?
    3.2. 轻量级锁升级重量级锁的时机和过程?
  4. ……

学的过程中要画图,可以记一些零散的笔记和自己的理解,尤其是学习过程中自己理解起来比较困难的地方。

接下来就是针对每部分搜索资料进行学习,通过这个框架,我们可以轻松地判断完成程度,不停产生正反馈,使学习更有动力。当把框架中的内容学习完后,我们应该已经比较了解这个知识点了,此时可以根据我们的新理解,对框架进行调整,整合这个主题的知识图,并开始写文章,这时文章写起来就应该会轻松许多了。