我总结出的几种学习模式

引言

很久没更新博客了,最近几年总在忙于学业、忙于工作、忙于编程,忙于生活。然而,我并没有忘记自己还有这么一个博客,一直以来都想把那些在平时的学习和工作中总结出来的心得经验等整理成文。以前总以为写文章很容易,读完研究生之后,感觉写一篇高质量的文章很难。首先,要有自己的内容很难。其次,要把观点论述得清晰完善很难;最后,要不断修改直到满意也很难。这个过程真漫长,特别是把自己的一个尚且不太清晰的想法准确的表达出来。不过这又何尝不是一种锻炼?我打算继续把学习心得,解决过的技术难题等写在这里。这是我的财富,如果你认真阅读,也会是你的财富。

到目前为止,我凭借着一腔热情和对编程的浓厚兴趣,已经掌握了计算机领域各个层级的编程技术,从底层到高层我都有涉猎。回顾自己从事编程的经历,竟发现自己掌握了大量技能,算的上是一名全栈工程师了。其他绝大部分工程师都只停留在一个领域。我的编程学习经历如下:

  1. 本科期间,逐渐掌握了C/C++和计算机基础。
  2. 大学期间,自学学会Visual C++ 6.0和MFC,掌握在Windows上开发的技能。
  3. 第一份工作:学会了Linux编程,Shell, 正则表达式等。
  4. 第一份工作业余时间:学会了Qt, Gtk等开源技术。
  5. 第二份工作期间:自学学会了java,学会了android
  6. 读研期间:学会Scala,Akka,掌握了java web开发
  7. 现在:学会Java Web,一口气掌握Spring, Struts, Velocity, iBatis, html, CSS, javascript, jquery等。

学了这么多东西,加上跟身边的同学、同事们的交流。我总结出了值得参考的学习方式,目的既是给自己留一份记录以备将来查阅,另外也可以帮助读者反思自己的学习方式,找到更加适合自己的、高效的学习方式。如有叙述不当之处,恳请批评指正。我总结出的学习方式,按照下面的叙述格式进行总结。

概述 ->举例 -> 适用场景(案例)-> 如何运用 -> 优缺点


1、Try and Error

即试探法或者说尝试法,就是不断尝试并且犯错,在犯错后反思错误、查阅相关资料并且分析错误原因,然后学会知识或技能的一种学习方法。这是一种可能会不断踩坑、给自己或他人挖坑的做法。“失败乃是成功之母”说的也是这种方法。其实,犯错不是我们的目的,而是触发我们思考为什么这样行不通的起点。我们在新接触一个东西的时候,经常会因为不了解而犯错。但是有的人因为害怕犯错,常常畏首畏尾,不敢尝试,所以他们的学习进展缓慢。有的人胆子比较大,不怕犯错,总是勇于尝试新事物,能够通过这种方式以较快的速度学习进步。

我是写代码的,就以学编程为例。初学编程的时候,常常不自觉地采用这种方式。编写代码实现某一个功能时,会先按照自己的理解和事先已掌握的技能,尝试写出一段代码然后运行,看它是否按照我们预想的那样工作。通常情况下,一开始这种代码不会按照想象中的运行。于是,我们就会想为什么(即反思错误),反复查看自己的代码、调试、诊断问题。在调试过程中发现问题,如果对这些问题不理解,则会去找书看或者用百度搜索答案。在弄明白这些问题之后,再改用正确方法写出代码,让代码运行起来。我们不断重复这样的过程完成任务,在这个过程中学会相关的技能。

再举一个例子。我刚来公司的时候,因为对git分支操作不太熟悉,对master分支和beta分支分别存放什么代码不了解,就凭借自己原有的git知识进行操作,导致有一次把其他小组同事的代码合到我们小组的分支上来了,产生了git分支混乱。那一次事件,有的同事对这件事大肆渲染、反复炒作(ps: 有的人纯属调侃起哄,而有的人是别有用心),我一下子成为众矢之的。那次事件后,我找来一堆git书籍仔细钻研学习,最后终于把git的大部分操作弄懂。之后我再也没有合错代码,甚至周围同事感到困惑的git操作问题我也全部弄得一清二楚。在我博客内,还有一篇关于git使用方法的文章。甚至,后来又有新同事把分支搞乱,也是由我把代码恢复过来的。有的时候,你不慎犯的一个小错误反而是激发你的强大动力。

这种模式是一种积极主动的学习方式。用这种方式掌握的知识或技能,会在我们的大脑中留下非常深刻的印象,很长时间都不会忘记。通过这种方式来学习也不会觉得枯燥,能保持强烈的好奇心,就像探险一样有意思。然而,这种学习方式也可能导致我们付出一定代价(例如我被某些同事抓住把柄“批斗”),有时甚至是很惨痛的代价,例如把事情搞砸、把数据搞乱、把系统折腾挂了、误删同事的代码、给自己挖了一个大坑从而需要更多工作来挽救等等。

所以我们要正确地运用这种学习方式,在非重要任务和自己的业余学习活动中尽量采用这种方法。


2、Do and Search

工作学习法,即我们通常所说的“在工作中学习”或“边做边学”。如果领导交代我们完成一件从来没接触过的事情,并且我们不会,我们想尽快完成任务时,就只好采用这种做法。这种学习方式可分为提出问题、分析问题、解决问题这三个步骤。面对工作任务,我们要想明白怎么入手。边学边用,学完一个后马上运用。完成一件有挑战性的工作往往是在短时间内学会大量技能的绝佳机会。相反,我们通过看书学习,经常没有实际练习的机会。

其实,你还在似懂非懂、半懂的情况下,已经可以开始做事情了。只要这件事情并不是那么生死攸关。直接开始做,遇到不会的停下来,用谷歌百度搜索相关的资料,学会这次需要的技能或知识后继续做。不断重复这个过程。当把任务完成的时候,同时也学会了很多东西,这就是“Do and Search”学习法。

这种学习方式与前面的Try and Error有些类似。遇到困难不要退缩,感受到阻力是进步最快的时候。这是一种首先利用自身已有知识,直接开始做事情(这件事情自己之前没有做过),遇到不会的用搜索引擎学习的方法。在使用搜索引擎搜索到相关知识后,现学现用。通过日积月累,逐步掌握技能。当今社会不同于以前,已经有了互联网、谷歌、百度等网站。这种学习方式之所以行得通是因为科技进步,我们有了互联网和搜索引擎等强力工具。我们的学习方式也是随着时代发展不断演变的。只要有搜索引擎,你应该基本上什么都能学会。

怎么应用这种学习方式呢?例如,你想学会做网站,那么你就应该直接开始做一个网站这样来学习。很显然,你一开始很茫然,不知道怎么开始。于是乎,你就开始在搜索引擎中寻找做网站的入门教程来学习。等学会这些基本知识之后,你就知道一开始要做什么了。当你在做的过程中,可能又遇到问题了,此时再去找资料学习,等学会以后马上回去接着做。

这种学习方式的要点:每次停下来查资料学习的时候,务必要找到最适合当前问题的学习材料,并且只学习目前需要的那部分。学会之后,立即应用,因此需要比较强的领悟力。这种学习方式还要求你要善于思考,想问题想的深入、想得远一点。不要在解决当前问题时为后面埋坑。


3、Watch and Learn

观察学习法或模仿学习法,先看别人怎么做然后自己也这么做,即通过模仿他人的做事方式来学会某种东西或完成某项任务的学习方法。这种学习模式一般都是“照抄照搬”,别人的做事方法几乎不做修改就直接学过来。从某种意义上看,这是“生搬硬套”。然而,有的时候,“生搬硬套”未必是坏事。如果你面对的任务几乎总是一成不变,每次按照固定的步骤来解决问题完全足够了,那么对其进行刨根问底又有多大意义?我们的时间和精力有限,特别是在这个信息超载的时代,不是什么问题都要深挖个究竟的。所以,有的时候原封不动的copy别人的做法没有什么可耻的。不过,在理解别人为什么这么做之后,做一些改进当然是很值得提倡的,不过这就需要花费一定的时间精力。我们运用观察学习法,是站在别人的肩膀上,以最快的速度完成任务,节省时间和精力是关键。

实际上,这种学习方式其实非常普遍,我们很多人早就会了。例如,同事教你完成工作的具体步骤,但是没有告诉你为什么,对你来说也是模仿学习。你在日常生活中,看到朋友用了一个小技巧、小窍门,让某件事情完成得很顺利。你回去以后也这么做,也是在用观察学习法。对程序员而言,我们在学习某种开发框架的时候,常看到官方提供的各类demo。这些demo或sample的目的是为了展示框架中API的具体用法。我们通过参考或仿照这些demo和sample来编写代码,也是在运用观察学习法。学习新技能时,适合采用这种方式来快速入门,我们学编程时遇到各类 HelloWorld 就是证明。不过入门之后,我们就不能再单纯的用观察学习法了。

在用这种方式学习时,首先需要找一个靠谱、值得信任的学习对象,一个热心的、毫无保留的老师。其次,我们一定要弄清楚是否需要把背后涉及到的原理理解透彻,情况是否还会发生变化。我们在进行观察的时候,一定要“仔细”,特别要注意各种细节。观察之后,还要自己动手实践,否则依然学不会。用观察学习法时,我们既要观察别人是如何成功的,也要观察别人是如何失败的,取长补短,这样才可以充分利用别人的经验充实自身。当你能熟练运用这种学习方法之后,甚至能玩更高级的方式:观察一个其他领域的专家是怎么解决他自己领域中的问题的,然后把这个步骤应用到我们的专业中来,从而解决自己的问题,创造出新的方法。能做到这一点,就是创新。

总之,模仿他人完成一项任务,是一种快速、偷懒、走捷径的学习方法,优点是你能很快学会某项技能的皮毛部分,能立即展开工作。缺点是不能明白别人为什么要这么做,可能下次遇到的情况有变化时不能够举一反三。这种学习方式也有初级和高级境界之分。初级观察学习法就是“照抄照搬”,比较高级一点的境界就是既观察成功又观察失败,而它的最高境界就是能观察其他领域专家的做事方式,深刻领会,然后用来解决自己领域问题,很多学术成果就是这么产生的。


4、System Learn

系统化学习方式,即按照一定顺序、从基础部分开始,逐渐掌握整个技能或课程的学习模式。这是我们在学校里面念书时都曾用过的方法。然而,系统化学习跟主动还是被动学习方式无关,它跟应试教育中的灌输模式也没有任何关系。你也可以很主动的、采用系统化的学习方式去学习自己感兴趣、自己急需的知识。系统化学习方式只是一种学习策略,不是学习态度。

几乎所有的教科书,小学、初中、高中、大学的课程都是按照这种模式来讲授知识传道受业的。在编程领域,市面上很多“从入门到精通”、“30天精通”之类的书籍采用的也是这种学习模式。事实上,凡是教程类的书一定是按照这种模式组织内容的。在这种模式的指导下,一门课程几乎都是按照“概述->基础->高级”的套路来组织内容的。如果我们打算学习一门全新的技术,只要找到这方面的一本经典教程(教程是Tutorial,不是Guide,Guide是指南、手册之类的文档),从头读到尾,就是在使用这种模式来学习。

通过这种方式学会知识,我们可以获得一个清晰的知识结构,各知识点模块之间的关系明确。不像零星学到的知识点那样杂乱无章。我们会对课程有一个高屋建瓴的整体认识,而这种整体认识对于我们深刻理解这门技能从而更好的运用是有很大好处。这种学习方式的缺点就是速度慢,周期长。我们学到后面的时候,可能前面的内容都忘得差不多了,这时候不得不回头复习。另外一个缺点就是,为了整体掌握一门功课,不得不去学习那些暂时用不到的东西,这些我们暂时用不到的东西又是拖累学习速度的一个重要因素。

何时采用这种学习方式?当我们要学习一门新的课程且没有任何前期基础,并且以后需要综合运用这门课程里面的多项技能时,建议采用这种学习方式。还是以程序员为例:如果一个从来没接触过android开发的人想要做一个app,那么他最好找一份好的教程(例如官方教程),从头看到尾,系统的学一遍,这样才能较好掌握Android开发。而如果他不采用系统化的方式,先在网上找一篇某位“大神”写的入门教程博客,然后直接开始码代码,那么他在后面真正开发app的时候必定遇到重重障碍,适得其反。反过来,如果我们只是用到了这门课程中的某一点内容,其他绝大部分内容我们不需要,则用这种方式学习会十分浪费时间、舍本逐末。另外,利用这种方法,难免需要死记硬背,也难免需要融会贯通、举一反三。


5、Self-Introspection

自我反省法:假如你现在回头去看看自己以前曾经写过的文章、写过的代码,你会觉得,自己当年怎么这么笨,怎么这么蠢。如果现在再去做同样的事,肯定不会这样干。这就好像是学习下棋。当你跟一个高手下棋下输了,你把棋谱记录下来,回去分析自己当时的下棋过程,你会学到很多。以后再跟这个高手下棋,他可能就不能再通过曾经用过的招数来赢你了。

对于程序员而言,我们除了通过阅读别人代码来学习之外,其实也可以阅读自己曾经写过的代码。我在读自己的代码的时候,能看出以前考虑不到的问题。

记录下自己做某一件事的详细步骤,过一段时间之后,回头来看。你会发现自己以前犯了很多很多的错误。如果自己现在重新来做,一定会使用比当初更好的方法。


6、Wait and Enlighten

遇到一个难题,你会一筹莫展,这个时候咱们就停下来。去忙别的事情,卸下包袱,放松。经过一段时间,再回来看这个问题,你很有可能从完全不同的视角来看待这个问题,从而把这个问题解决掉。

爱因斯坦提出相对论就是这样的。爱因斯坦曾经也没有搞清楚光,时间,空间之间的关系,想了很久也没有搞定。有一天,他和朋友在公园里面散步,忽然就开窍了,于是有了相对论。

当然,这种方法看上去不太靠谱,但也值得尝试。


总结

上面所讨论的几种方式各有各的好处,需要根据实际情况采用最合适的方法。而且,这些学习方法可能我们早就已经在不知不觉中采用的,只是没有把它们出来。这几种学习模式之前一直存在于我们的潜意识中。这里把他们提炼总结出来,把他们放到我们的主观意识中。这就好比是背课文,你是有意识(故意)的背课文容易,还是无意识地背课文,哪个方式更容易把课文记住?显然,有意识的去背课文更容易记住。使用哪种学习方式也一样。每次学习之前,先理性思考一下自己正在使用哪一种学习方式,是否适合,是否另外一种方式更好。这样可以加快学习的速度,提高效率,节约时间,更好的应对我们当今这个信息量巨大的时代。

另外,为什么只通过看书无法真正掌握技能?这个问题,好比问为什么看人游泳学不会游泳一样。其实:

  1. 当阅读的时候,我们的大脑其实在获取宏观信息,得到的是概要性的认识,第一印象等。这时候处于了解阶段。除非你是故意非常仔细的阅读,否则,在大多数情况下,尤其是第一次阅读的时候,我们的大脑总是获取宏观认识、文章的大意等等。
  2. 当我们使用、练习或实践这项技能时,我们被迫研得关于这项技能全部的细节。真正动手做事时,你会把注意力放到之前阅读文章大意时不太可能想得到的细节上。这个时候,我们处于深入了解、实践应用的阶段。

学习技能的顺序一般是先了解(即先弄明白大体),然后钻研细节才能真正掌握技能。只强调读书或者只强调实践都不是正确的方式。

:这篇文章很难写,难在把几种学习模式的概念清晰的表达出来,也难在把适用场合、如何运用以及优缺点清晰完整的提炼出来。我费了好大劲,花了好多时间。现在基本上已经把想法表达清楚了。不过本文还会是不断更新,因为我追求完美。借我导师一句名言,“好文章是改出来的,不是写出来的”(很有道理的一句话)。

更多推荐

我总结出的几种学习模式