概述 -- 如何学习

问题

很久之前我就感觉到自己失去了真正学习的能力,这种感觉非常强烈,从高中一直延续到现在。每当我下决心要好好学习某个东西,总是很难坚持下去,而且刚开始的那一部分也没有学到脑子里去。

就这样循环往复,我越来越感到自己的无知,看似什么都会一点,但是都是浮于表面。

现在反思,得出的结论是,我的学习方法出了大问题。一直以来我只会面向考试的学习,表现就是什么都想抓住,很快就会陷入繁杂的细节里去,然后失去激情或是很快遗忘。至于之前可以有效,那仅仅是因为有老师的协助以及大量时间成本的堆叠,使得我能慢慢地掌握那些实际上意义不大的东西。

当学习成为自己一个人的事情且没有超长的学校教育流程,这套体系就崩塌了。

本质上是我没搞清楚,什么是需要真正学习的东西,什么只是一些写在手册上随时查询的东西。学习的目的是学会借助一切可以借助的去解决问题,大部分情况你只需要知道有什么可以借助,以及如何在使用中借助他们而不是把所有细节都记下来。

学习,只需要学最本质的那些,需要真正理解的部分。其他的只不过是实践中自然而然熟悉的东西,不应该占据学习的主要部分。

如何解决

虽然说起来很容易,但是如何分辨最核心的部分并不是容易的事情,特别是对本就不清楚目标的新手。

我认为,一方面是通过自己的感受来判断,这是最基本的,也是能力的体现。

1. 理解本质, 抛弃细节

花一秒钟就看透事物本质的人,和花一辈子都看不清的人,注定是截然不同的命运。

比如,我学过很多次正则表达式。两年前我用纯正则爬了JAVBUS,把每个卡片的信息包括bt链接塞进数据库,非常成功,几百MB的数据库看着非常有成就感,那时候我觉得我完全掌握正则表达式了。但是实际是,很快我就忘记了。在我需要它的时候,我不得不再次花时间去学习,我之前的经验对我再一次学习没有起到特别大的帮助,依旧很耗时间。

而我这一次学习完,我感觉到的是,我依旧没有真正掌握它,因为它只是作为记忆短期的存在于我的脑子中。来看看我是如何学习的:我跟着 正则表达式指南,依次的敲击它提供的代码,根据他的指引学习一个个元字符,然后又借助 Stackoverflow 学习递归匹配,成功实现了我的需求

这看起来是一次很成功的学习,不是吗?我选择的教程非常棒,我在正确的平台顺利的得到了我需要的答案,我成功的完成了自己的需求。但是并不是,这只是一次成功的实践而不是学习。我抱着学习的态度,花费了不小的精力,并没有真正的让这部分知识成为我的长期能力,下一次遇到问题我可能还需要再学习一遍,尽管我可能会残存一些记忆,但是他们并不清晰,不能对我再次学习提供质的帮助。

因为我在学习之前,没有思考。我没有去思考正则表达式最核心的部分,最需要理解的部分 – 字符集合(或是其他名称,这并不重要)。我选择记忆了哪些最无聊的部分,\s \d 等等,这些人为规定的无意义的字符就是让我失败的原因。因为它们对理解本质毫无意义,它们本应该是在应用中随时查阅的东西,随着经验而变得熟悉而不是在学习的时候去消耗精力记忆的部分。你只需要知道有这个工具,它是做什么的就行,不需要把工具的说明书背下来。

以上就是我认为我学习正则表达式失败的原因,让不重要的东西干扰了我对本质的理解。我的理解本没有错,但是被太多没用的东西遮掩住了,让它们随时间白白遗忘。

2. 赛博老师

很多情况下,一个复杂事物的核心只有有经验的人才能知晓,这对于我们来说是难以接触到的。

不过好在有AI的存在,我们可以低成本的得到一位耐心的全面的赛博老师。我们可以参考性的去询问他们,所学习的对象最重要的部分,哪些是可以暂时抛弃的细节。

当然这只是一种参考,但是好在易于获得。我还在总结这方面的经验,就暂时没有例子。

如何学习

第一原则

在学习某个东西之前,一定要确认哪些是最核心的部分,需要理解的部分才是我们需要的。选择好方向至关重要,决定了我们接下来的学习是否轻松、能否长期有效。

这是目前我认为最重要的原则,如果做不到干脆就不去学习,浪费时间。

不过这个原则太过笼统,而且覆盖范围有限,对于很多纯靠记忆的东西不那么贴切,作为一种提醒更好,三思而后学。

费曼学习法

以讲代学,语言越简单越好

实际上我之前并没有了解过费曼学习法,看了一下直中我之前犯下的错误:注重无聊的细节而不是本质。

用简单的语言去描述想法,获得更本质的认识而不是重复人为归纳的复杂的名词。然后有条理的总结再传授给别人,以讲促进理解,以讲代学。

实践

  1. 重新学习Python

我对python的认知并不充足,借助此次机会来实践一下学习方法,重新学习一遍。

首先,明确目前需要学习什么。我想要深入的过一遍核心概念,从底层运行机制到模块管理。

对于python,最重要的莫过于类型/对象机制,如何理解这种机制在通用的编程语言知识(数据结构、控制、函数、类、模块)的应用是至关重要的,最优先关注的。

可以暂时舍弃的,是具体的几个数据结构的各种方法、魔法函数以及类型实现的细节。

大致分为三块 运行机制与表达能力 - 控制结构与数据结构 - 抽象与封装

0%