teleSOHO.com

思考如何学习

虽然我从小到大都一直在学习,但是对于如何学习进行认真的思考却从来没有过。

这段时间刚好看了几本关于如何学习的书籍,其中最喜欢的一本是 Scalers 写的《刻意学习》-北京联合出版社。

Scalers 是个中国人,Scalers 应该不是他的真名,我没有刻意去调查他的资料,但是从他书中的自我介绍中得知他也是个 IT 工程师,所以他的思维方式和我比较接近,他提出的学习系统的观念对于我来说比较好理解。他把学习的过程都做了量化,这样以来我们就可以对学习的效果进行度量。

首先他把学习时间长度做出了量化,他借助了数学里的“底数”和“阶”的概念,提出了“N 阶持续行动者”的概念。以 10 为底数,N 为幂,10 的 N 次方代表能够持续行动的天数。

10^1天 = 10天(一周)
10^2天 = 100天(三个月)
10^3天 = 1000天(三年)
10^4天 = 10000天(三十年)
10^5天 = 100000天(三百年)
10^6天 = 1000000天(三千年)
10^7天 = 10000000天(三万年)
……

1 阶行动者大概能连续坚持 10 天就失去动力了,这是由于他们的行动系统出了问题,Scalers 对行动系统下的定义是维持学习动力的系统。对于如何修补行动系统以后我在讨论。

2 阶行动者成功的完成了 100 天的持续学习,然后就放弃了。到达这个阶段的基本可以算是刚刚入门,如果不持续会很容易会到原来的模式。这个阶段放弃的人多数是因为学习系统出问题,学习系统解决的是如何进步的问题。

3 阶行动者是成功的完成了 1000 天的持续学习。只有达到 3 阶的人才能算是正真养成了习惯,才能产生创新。

4 阶行动者是已经坚持了 30 年,这时候应该能成为某个领域的大牛了。

5 阶 300 年已经不是一个人的问题,而是一个家族,一个企业的问题了。

6 阶 3000 年是一个文明的问题。

7 阶 30000 年是整个人类的问题。

我的体验

Scalars 提出的 N 阶概念,从时间长度上给出了一个判断处于什么学习阶段的划分方法。那么我就结合自身的实际情况来看看我的一些爱好的学习情况。

游泳

我 2015 年开始真正开始练习游泳,由于日本的健身房除了周 3 不营业以外,每天的营业时间到都晚上 12 点,所以即使我每天加班到 10 点,回到家后,还是可以去健身房游泳的。这个游泳的习惯一直坚持了一年,直到我因为要到杭州长期出差才停止。我的感觉是头几个月进步很快,特别是学会轻松游泳的感觉非常兴奋,但是后来的感觉真的难进步,于是慢慢把游泳当成了锻炼身体,而不再设定学习目标,可以说现在的游泳水平就是 2 阶水平。

吉他

我从 91 年读大学时就开始自学吉他,当时也非常着迷,虽然几乎每天都拿起来玩,但是直到大学毕业也仅仅是能弹唱而已。2015 年突然对弹吉他又重新激发起兴致,于买了一把比较好的吉他,空闲的时候就尝试给原唱歌曲伴奏,对于难度不大的歌曲,基本能很好的伴奏了,但是对于复杂的伴奏真是力不从心,明显感觉吉他基本功不扎实。吉他水平是处在 2 阶水平。

编程

我 92 年开始自学计算机编程,C/C++,Basic,MASM,FoxBase,数据结构,操作系统等,统统都学了,之所以学这么多是因为当时要参加全国计算机软件工程师考试,大学毕业时通过了初级程序员的考试,就因为这个能力,所以能应聘到某所大学担任计算机教师,96 年得到机会去四川联合大学学习了一年的研究生课程,当时学习的是所谓基于知识体系的人工智能语言Turbo Prolog,不过 Turbo Prolog 已经被淘汰了,而当年只看过一本书的神经网络,现在反倒成了人工智能的热门。2004 年到北航读研究生的学的是软件工程,主要研究的是项目管理。2006 年底,我选择到日本一家公司打工,结束了教师生涯,而开始了自己程序员的生涯。

我的工作几乎都在和写代码有关,做过的项目涉及的开发语言包括 C/CPP, C#, VBA, Java, Pytho, PHP, javascript 甚至还有 Cobol,可以说我的编程技能从时间长度划分来看已经是 3 阶水平,甚至接近 4 阶,但是为什么我未能成为大师。

为什么没成为大师?

我的三个兴趣,虽然坚持的时间不短了,但是没有一个能让我骄傲的,特别是编程能力,可以说是我用来吃饭的技能,为什么也不能让我达到登峰造极的地步呢?

学的不够快,不够好

如果不能在同样的时间内赶超其他 99%的人,无论你学多久永远都不会是 1%的大牛。要做到短时间内超过别人,除了天资以外,另外两个变量就是时间和学习技巧。

  1. 如何保证时间优势

    1. 养成习惯,才能节省时间

      所有人在一天内拥有的时间都是 24 个小时,不同的人却能在这 24 小时里做的事情却不一样,要保证在某项学习上有时间优势,只能把其他的时间挪过来用。但回想一下,除了上班以外,其实平时很多时候都是在漫无目的地浪费时间,如何能减少浪费的时间,是保证时间优势的关键。要减少浪费的时间,只有一个办法,那就是对时间进行规划,并养成按照时间计划行动的习惯。对时间进行计划也是很耗时的事情,如果每一天都需要花大量的时间进行计划的话,是得不偿失的,况且计划经常会赶不上变化。因此,根据自己的情况,把一天内固定能用来学习的时间进行计划,并按照这个计划养成习惯。这样就不必每天花时间做计划,从而节省了时间。

    2. 提高学习效率,不做无用功

      一切行动必须有成效,成效的检验结果就是输出,哪怕就是一篇短短的心得也是输出。使用番茄时间法,开始做一件事前,先大的任务划分为 25 分钟内能完成的小任务,然后把定时器设定为 25 分钟,每个 25 分钟完成一个小任务,25 分钟内不允许做任何其他的事情,时间到后必须停止,可以去休息,喝茶,为下一个 25 分钟的子任务做准备。这样做的好处是,让自己能度量完成任务的效率,比如,我用番茄时间法来写博客的时间就发现,我竟然在 25 分钟内只写了一段文字,于是我不得不想办法提高写作的效率。也就是说番茄时间法其实提供了一个及时反馈的机制,让你有意识的去提高效率。

  2. 学习技巧

    1. 对技术发展预判,避免错误投入精力

      打算学习一门技术之前,应该对此技术做一个预判,这项技术做未来的发展会如何,值不值得花时间去学。这一点非常重要,记得我曾经为了让显示器能更快地显示 8 位色(即 256 种颜色),而花了大量的时间去研究显示器显示的原理,并学会了用 ASM 汇编语言去操作寄存器。然而计算机硬件发展非常的快,现在的计算机已经能非常轻松地显示出 32 位色的图像,也就是说我花了这么多时间学习了一个很快被淘汰的技术,我费了九头牛的力气却只解决了现在一根毛的问题。

      1. 如何判断这门技术未来是否有前途,不会很快被淘汰?

        在计算机方面判断一门技术是否有前途,真的很不容易。我的理解是,能解决痛点的技术,而不是为了炫耀技术发展的技术,应该都是有前途的。基本上如果跟着大公司或者风投的方向走,应该不会错。

      2. 选择立刻能产生价值的技术,也就避免学而无用的尴尬

        一项新技术,学习以后能立即产生价值,比如马上能解决眼前的问题或者能提高 50%以上性能就值得去学。为什么是 50%以上呢?因为如果一门新技术,如果没有能优化 50%以上的性能,意味着它不具备领导潮流的能力,也就很有可能被淘汰掉。

      3. 以结果为导向来学习,避免过度学习

        学习那些能应用到实际的项目中的技术的那一部分,而不是全部都学习,避免过度学习。以我的经验来看,每一种技术都会不断的进化升级,如果是优秀的技术,会吸引更多的人去开发和研究他,所以技术的进化会越来越快,你永远都无法学完所有的内容。只学习需要的部分,对其他部分适当的取舍,也是节约时间的一种办法。

    2. 开始阶段,首先是模仿(学习时间长度为 100 天,即达到 2 阶位标准)

      1. 挑选优秀的项目模仿,如果可能的话,加入这些项目 从 0 开始的学习,最快的方法就是模仿。先挑选一个感兴趣的优秀项目(在 GITHUB 是能获得比较高的星就是好项目)。
      2. 如何开始学? 写代码和写文章我觉得是一样的,尝试按照参考代码的思路重写。比如掏空法:把函数内部所有内容全部删除,然后把自己实现所有的函数体的内容,最后和源代码比较。 要点就是自己把全部代码敲进去,而不是拷贝。

      3. 检验学习结果的方法就是输出产品
        1. 选择一个类似的项目开始作为作业,用来检验学习结果
    3. 3 阶阶段(3 年),保证输出数量

      1. 这个阶段要有足够的输出数量
      2. 随时注意吸取其他人的先进的技术
        1. 保证阅读量,每天最少一篇技术文章,必须要写心得。
        2. 如果发现别人的技术已经超过自己,必须想办法引入自己的项目中。
      3. 招募其他有兴趣的人加入项目
        1. 扩大项目的影响力
        2. 完善项目文档

← 感触