如何高效的学习编程?

今天想聊一聊学习这个话题,理想情况下,每个人都应该有适合自己的一套学习方法和节奏,主要因为不同人对知识的理解和吸收速度不一样,举个非常简单的例子,在网上看视频或者电影,有些人觉得2倍速播放刚刚好,而有些人甚至还要降速才能看明白,才能Get到点。即便如此,我觉得有些学习的经验和方法是可以共享的,虽然它不一定适合所有人。

人一生都在学习,学习不一定是在课堂上,特别是在互联网时代,我们可以随时随地打开手机观看各种课程,尤其是在编程行业,更需要不断持续的学习才能保持竞争力。我也是自学入行编程,期间也看过很多网上的视频教程,平时学习的时候也经常看一些博客教程,可以说现在也基本上是靠自学成长,颇有感触。

在学生时代,我也算是班级里面名列前茅的选手,在别人眼里我很厉害,每次考试都能考一个非常高的分数,但是我自己却感觉很轻松,我每天和其它同学一样,一起上课学习、按时完成老师安排的作业,没有什么额外的事情。而我周围的也有些同学非常努力,早起晚睡,周末还会上家教,但成绩却一般般。举一个不太恰当的例子,10万块钱在你眼里可能是巨款,但是在有钱人的眼里那只是零花钱。所以在一些牛人的眼里有些问题太简单了,他们可以分分钟钟给你手写一个翻转二叉树算法,这真的不是他们很努力,有些只不过是天分而已,而你刷了几百遍leetcode依然达不到人家的水平。

正视智商上的差距并不意味着努力没用,因为在大部分时候,我们远远没有达到需要拼智商的地步,努力能够弥补很多差距,即使智商很高的人也需要努力,不然也就是当代“伤仲永”而已。

方法论

在我很早学习Java的时候,我在网上看过一个叫韩顺平的人的视频教程,他在开课之前有一小节专门讲了如何高效的学习编程这个话题,他总结了几个点,我觉得非常有道理,后来得知,他不仅仅教Java,也教PHP、Linux、Go,但是每次开课的时候都会讲一下这几点学习方法,个人感觉这几点讲的非常好,这里和大家分享一下:

  • 高效而愉快的学习

  • 先建立一个整体的框架,然后细节

  • 在实际工作中,要培养用到什么,能够快速学习的能力

  • 先know how,再know why

  • 软件编程是一门“做中学”的学科,不是会了再做,而是做了才会

  • 适当的囫囵吞枣

  • 学习软件编程是在琢磨别人怎么做,而不是我认为应该怎么做的过程

韩顺平是清华大学毕业,之前一直在某智任教,后来听说自己开设了一个培训班,但是经营不善倒闭了,现在又重返课堂了。

仔细想一下,这些点讲的非常有道理,很多人在学习的时候往往忽视了整体,盯着一个点在那死磕,有点盲人摸象的感觉,比如你要学习使用一门语言,你首先应该知道这门语言适合干啥,然后再去了解大体有哪些特点,再去写一个最简单的例子,学习基本语法,具体的细节等以后渐渐熟悉了再去学习。

我们不能要求自己一上来就把所有的功能都学会了再做事情,编程行业发展到现在每一个细分领域只要你想去研究学习都有一大堆东西,需要大量时间,很多东西都是发展了很多年不断迭代的结果。你不能要求自己一上来就写一个没有bug、面面俱到的代码,但是你可以去不停改进优化你的代码。

What?Why?How?是什么?为什么?怎么用?这一条几乎可以适用于各行各业,我见过很多人,一上来就对着教程照葫芦画瓢,完全没有理解,效率自然不高。

类比

学习最快的方法就是用一个已知的东西去理解一个未知的东西,这个方法大部分情况下都是可用的,比如说你学习完了PHP再去学习Java或者Go,你会发现基本语法差不多,所以上手很快。

在编程行业,很多经验都是相互借鉴的,比如说PHP的composer和Node的npm它们都是一个包管理工具,是用来解决包依赖问题,一样功能的还有Linux操作系统里面apt和yum。编程里面常常提到的设计模式就是一种共同性的思想,虽然不同语言的具体实现可能有所差异。

即使不是同一个行业,也有些思想可以借鉴,比如,有人在讲述buffer和cache的区别的时候举了一个这样的例子,cache就相当于京东在每个城市周边的仓库,它可以快速的把你买的东西寄到你手上而不用从厂家发货。

但IT行业是一个非常喜欢吹牛逼的行业,经常会发明一些新鲜的词汇来唬人,比如云计算、云原生、5G云、大数据、人工智能等等。可能这个和风投资本有关,创业的人需要拿出一些看起来很厉害的东西唬住投资人,如果你仔细了解过这些“高大上”的词汇背后,你会发现其实还是熟悉的东西。

网课

现在知识付费非常火,卖课的广告到处都是,很多技术公众号天天也在贩卖焦虑,然后卖课。卖网课几乎是一个一本万利的生意,你只要录制一次就可以卖给N人,相对于书本来说,连印刷的成本都省了。

在早期我也看过很多视频教程,很多确实非常有用。但我现在看来,视频这种形式比较适合入门初学者,它可以快速的帮助你了解学习一门知识,特别是你啥也不会的时候,跟着视频学会快很多。

但是当你进入一个行业几年之后,视频课程基本上不是一个很好的选择了,大部分课程讲的东西都比较宽泛和全面,实际上你不一定用得到,很多人就听了一些公众号的忽悠,买了很多课,有些根本没时间看,有些看完时间一久就忘了。所以我建议还是得结合实际应用有针对性的去学习,很多优秀的开源项目的官方文档已经写的非常清楚了,有些怕你不会用连demo都给你写好了。

笔记

记笔记是个好习惯,我记得以前上学的时候很多同学记笔记记的非常认真,老师在黑板上写,同学都在下面抄,一字不漏。老师经常说让大家不要照抄,不要把时间浪费在抄笔记上面,要多注意老师讲的东西。毕竟那会教育条件很差,现在估计学校里面应该都是直接投影仪放PPT了,学生也不用抄笔记了,直接拷贝就行了。

不过我还是建议大家有时间可以写点总结性的笔记,也可以叫作博客,不一定要写出多么有深度,你只需要记录自己学到一些东西或者自己的一些想法即可,因为有时候很多东西你感觉你自己学到了,但是让你写出来就会不一样了,写作的过程通常也是一个思考的过程,有助于查漏补缺。

所以如果有时间,建议抽出时间不妨就某一个技术点写出你自己的理解,写得好还是可以帮助别人,何乐不为呢?