在问答 | 我适合做软件开发吗一文中,列出了当时汇总的7个问题,其中“我是否适合做软件开发”、“怎样开始行动”、“学哪种语言”这个问题都聊过了,这次我们来谈谈怎么学习的问题。
记得曾经在我的微信公众号“程序视界”发布过一篇题为“怎样新学一门技术”的文章,里面讲了很多东西,现在看看也还有价值,推荐一下。这次呢,我想说的和那篇文章不一样,主要从下面两点来谈:
学习方法
效果度量
知乎上有一个问题——学习编程语言最好的方法是什么,有很多人关注。
赞同最多的答案是:猛敲代码。亲,这是最佳答案。
赞同第二多的答案如下:
Miguel de Icaza大大在访谈里说:我了解到C#这门新语言觉得不错,所以为了充分学习它,我写了个C#编译器⋯<--这就是Mono项目的起源。
Evan Phoenix大大在访谈里说:我在做项目的时候学习Ruby觉得很有趣,于是我鼓捣鼓捣弄出了一个Ruby解释器⋯<--这是Rubinus项目的起源。
孟岩有一篇文章——快速掌握一个语言最常用的50%,感兴趣的也可以看看。
说了这么多,然而它们适合你吗?
不见得!
每个人都有自己独特的学习模式,我们要做的第一件事,就是发现自己的学习模式。
比如有的人喜欢边看书边写代码,学一节就做做小练习,学一章就来个综合点儿的练习,争取能覆盖大部分语法和知识点;
比如有的人就喜欢先通览一遍教材,最后才挑感兴趣的部分写点儿代码练习一下,然后找一个熟悉的需求来实现一下,对用到的部分反复研究;
比如有的人就只是看书、看视频、看博客,全都看个遍,始终不动手,直到做实际项目时才开始写代码;比如那几个大牛,学一门语言就要鼓捣几个编译器;
比如我,现在的习惯是边学边记笔记,学完一个主题就设计一个练习,有新体会就记下来,抽空就把笔记整理成博客发布……
你一定可以找到自己的学习方式,别人的经验,不一定适合你。唯一可以肯定的是:学习编程语言,学习技术,一定要多练习,练习,练习,再练习,没有代码量,一切都是扯淡。
那么,问题来了,怎么才能找到适合自己的方式呢?想想你中学怎么学习的、大学怎么学习的、空闲时间感兴趣的东西怎么学习的,分析这些过往的学习经历,有助于你找到自己的学习方式。
除了自我分析,还可以找一个教练。教练的作用就是帮助你发现自己的学习方式。这其实也是老师的作用、教育的作用。教育的作用就应该是引导我们发现自己的学习模式。所以林格说,学习是不用教的。我们不必拿别人的学习方式往自己身上套,但可以请别人帮助我们发现自己,因为有时我们确实会因为视角的原因而陷入迷途却无法自我发现,有经验的教练可以看到我们的尝试不对,他可以点一下我们,启发我们自己找到方向。所以,从这个意义上讲,向别人请教是可行的。请记住,好的教练(老师)不会给你灌输1+1=2,他会引导你自己去寻找答案并让你体会到成就感。
自己的学习方式,最大的特点就是适合自己,对自己来讲效果较好。所以,通过对效果的度量,就可以确认当下的学习方式是否适合自己,这是确认是否找发现了自己的学习方式的通用方法。
那怎么度量效果呢?接下来看。
学习效果怎么度量?大部分人都能感受自己的情绪、感觉自己的感受,比如你今天学习是障碍重重很吃力,还是不断体会到原来如此果真如此,后者的情况就说明你走对了路子,说明你正势如破竹地前进。
体会自己的感受,如果觉得顺利、兴奋,那基本上就可以说明你走在正确的路上,你的学习方式符合你自身的具体情况。
还有一种度量方式,是从客观效果来看的:在一个时间盒内,评估自己的进度与平均水平的差距。比如学习《the C Programing Language》,可以了解别人花多长时间掌握了基本语法,与自己比较。
至于怎样获悉别人的学习情况,有两种方式,一种是加入相关社群,比如QQ群、微信群,问别人的学习经历和所花的时间;另一种是考察学校或职业培训机构的课程设置,他们给一门技术设定的课时和目标是很好的参考——虽然他们往往用错误的、整齐划一的灌输的方式来进行教育,但课程的设置大部分都是经过评估的,是相对合理的。
排除智力因素,大部分人学习一门技术,应该在某个时间范围内达到特定的目标。这是我们说学习效果可以衡量的前提。
Ok,来回顾一下吧。
想让别人提供一种灵丹妙药式的学习方法帮助自己打通任督二脉的想法是应该摒弃的,那些声称自己发现了适合所有人的学习方法的“大师”基本上都是江湖骗子,他们只是想通过推销自己的方法赚迷途羔羊的钱或者等价物,别信广告,要看疗效。
一句话总结:设定目标,用自己的方式去实现,这就是我们学习一门技术的指导原则。