IT 行业是一个变化非常快的行业,它需要我们持续去学习新的知识和技能。 但是,工作以后,我们经常会发现自己学习的东西很少了,倒不是没有时间去学习, 而是学习的效率太低了。久而久之,就演变成『一年的工作经验,重复用十年』。
当然,有些人会说自己经常加班,没有时间学习,这只是表象,时间挤挤总是有的。 你想想你为了上王者,浪费了多少时间?为了刷今日头条,又消磨了多少光阴?
另外,很多人推崇碎片化学习,但是有一些东西碎片化学习效率是很低的,比如数学。
1 一些学习的坏习惯
1.1 被动反复阅读
通常编程新手在学习一个新东西的时候,喜欢买一本权威指南之类的书(大神或者同事推荐),比如「C++ Primer」和「Javascript 权威指南」。 而这样一本书,一般页数在700-1400页左右,要完整读完,在不求甚解的基础之上大概要花费好几个月甚至大半年时间。 别说是新手,就算是一个C++编程老手去读「Javascript 权威指南」这样的书也不可能在只阅读一遍之后就能理解。 这时,很多人会选择重复多次阅读。有人会从头开始重复阅读,也有人只挑不理解的章节来阅读。 我以前上大学那会儿就是这么干的,读了好多C++的书籍,其实自己编写的C++代码并不多,也没有做过大型的C++项目。 看了好多书,其实都是一知半解,效率很低。工作以后,这种学习方式更加不可取,因为你没有那么多时间这么干。
1.2 喜欢在书上划重点
很多人偏好纸质书,因为在看书的时候手感不错,另外,还可以在书上把喜欢的句子和重点的段落用彩色笔标注出来。 这样做除了给自己造成一种假象「书上的重点我都标出来了,所以我都掌握了」之外,其实并无多大益处。 我现在喜欢在电脑上面看PDF,可以边看边写代码。
读书的时候,还有一个误区,就是大脑被动地跟着作者的思路在走,如果是一本经典的书,你会每每被作者的真知灼见所震惊, 一种「于我心有戚戚焉」的感觉由然而生。如果作者的书写枯燥乏味,估计看几页你就丢到一边去了。在看书的时候,头脑中要 有自我意识,要感觉自己在跟作者对话,对于作者的观点不能一味全盘吸收,可以看一会儿,停下来,问几个为什么。
另外,我并不是说划重点是不好的,只是划重点的效率没有想像中的高。划重点有点像收集资料和网页链接,在你收集了一大堆PDF和视频教程之后, 你会得到一种满足,但是这并不代表你真正学到了东西,这个是要非常警惕的。
1.3 看书中代码示例认为自己就理解了,从不动手编程
这是新手学编程的大忌,不去动手写,不去跟编译器和开发环境做斗争,你永远不知道软件开发过程中的操蛋事情。
1.4 拖延
这个问题最大,也是影响N多人不去学习的理由。解决的办法只有一个,马上去做!一旦你开始去做了,你的大脑就不会排斥了。 你的计划再完美,你选的书籍再经典,你挑的视频水平再高,如果你不马上去看,去学,去动手实践,那永远也只是停留在空想的阶段。 成功学习的典范就是成功战胜拖延症的典范。
1.5 学习任何东西,只停留在编写「Hello World」的水平
这个是什么意思呢?不是说你真的只会写「Hello World」,而是说要跳出自己的舒适区,去尝试一些自己不了解的领域,去做一些超过自己能力范围的事情 。
1.6 喜欢加QQ群和微信群,美其名曰「技术交流」
这是国内技术圈的一大通病,可能刚开始会聊点技术,但是时间一长就水了。好好的技术群一秒钟就可能变成水群。 而且经常还有老司机冒然发车,此时马上有人冒出一句「留图不留种,菊花万人捅」。
我强烈建议大家不要过渡依赖Q群和微信群来学习技术或者解决问题,技术论坛,Stackoverflow 和 Github issue是你更好的去处。
1.7 天天熬夜打王者和LOL,睡眠严重不足
实践证明,睡眠不足,啥事也干不成,只想睡觉。有人会说我晚上不到那个点睡不着,我这里有一招。 拿着一本 Kindle,挑一本英文书,躺在床上看,半小时保管睡着。虽然说看书的效果不一定佳,但是催眠也是极好的。
1.8 工作中遇到模糊的问题不搞清楚,停留在面向 Google 编程
遇到问题,不假思索「百度」和「Google」,虽然现在80%的问题都可以找到解决方案,但是这样做对于自己并无多大益处。 找到解决方案之后,还要花几分钟时间探寻问题根源。可以查找背景资料,以便自己下次遇到同类型的问题时可以举一反三。
1.9 看几分钟书,敲几行代码就开始刷知乎和朋友圈
做事情不专注,注意力不能集中,这也是学习的大忌。可以利用番茄工作法,给自己一段时间专注于某件事情,这样可以极大地提高 自己的工作效率。
1.10 从不看书,所有问题的解决方案都从论坛,Q群和Google中来
认为看书效率太低,而且收益也不高,看书需要大量的时间,而且看完感觉也没太大的用,不如直接Google和Q群来得容易。 如果你真的这样想过,我只想说「小伙子,你思想很危险!」
2 一些学习的好习惯
2.1 与其反复阅读,不如经常回顾
与其一遍又一遍地阅读重复的书籍,编写同样的「Hello World」,不如有意识地总结回顾看过的书,学过的知识。 只需要每晚趟在床上的时候,回想一下今天都学到了什么?今天自己有进步一点点吗?
2.2 多做练习,多写代码,从错误中学习
看技术书籍要多写书中的代码,在初学阶段哪怕对着书本敲也没有什么问题。认真完成书中留的习题,在自己没有尽最大努力的情况下面不要去看答案。 不要怕犯错,每一次犯错都是自己进步的机会。不断地测试自己是最好的学习方法,不管是「刻意练习」还是「10000小时定律」,都要求我们通过不断地 实践来巩固我们的所学,从而让自己成为大师。
2.3 多总结问题的解决方案,多写可复用的代码,拒绝复制粘贴
每天把工作中遇到问题的解决方案总结一下,想想为什么要这么做,是什么导致了这个BUG,导致BUG的根本原因是什么。 是自己的逻辑混乱,粗心大意,还是程序框架太复杂?做需求的时候,要尽量避免复制粘贴,不要让代码里面有重复代码。 Don’t Repeat Yourself! Don’t Repeat Yourself! Don’t Repeat Yourself! 「重要的事情说三遍!」
2.4 对于自己想要学习的内容,制订一下计划,有节奏地学习
我是一个非常爱学习的人,但是有时候还是感觉学习不够高效。经常会由于一些突发情况把原本的学习计划打乱,导致学习效果打折扣。 因为学习一个东西最怕三天打渔,如果能够持续地学习一个东西,我可以把它学习地很好。这时候,我就得结合我自身的情况,选择一段最佳的 学习时间,在这段学习时间里我可以不被打扰,保持高度专注。比如每天早上6.30起床看一个小时书。
2.5 尝试使用不同的方式来解决一个问题
在遇到一个没有显而易见解决方案的问题时,你可能费了好大功夫想出一个方案,但是千万要记得,该方案不一定是最优的, 而且很大可能还存在一个更佳的方法。而这个方法只需要你退后一步,换个思路,或者与同事讨论一下就可以得出。 这也是我为什么非常喜欢别人 Review 我的代码的原因,因为别人能看到我代码中存在的不足。另外,有些时候,对现有的方案做一些 「微创新」也能使原本普通的方案变得不普通。
另外,习惯了面向对象,何不尝尝函数式编程?每年学习一门新的不同范式的编程语言,可以极大地开拓你的眼界,给你一些不一样的解题思路。
2.6 注意劳逸结合
多参加体育锻炼,多去户外走走,运动能够增强人的记忆力,并且有时候还能产生灵感。 如果身体不好,比如颈椎不好,下了班你就只想葛优躺了,因为你的本能告诉你,我不能再写代码了,会挂的。。。 想要成为大神,身体好是前提条件。有人30岁成为大神,我资质不好,我35岁成为大神总可以吧。 切莫在30岁的时候就把身体弄跨了,然后35岁转行了,永远失去了成长为大神的机会。
2.7 向别人解释你的知识,多与人讨论
多写博客,多分享自己的所学所思,这些对于学习者自身也是非常有益的。通过用别人能够理解的语言来解释你学到的东西, 本身就要求你对该知识充分理解。另外,很多人经常感叹「跟你讨论一下,我马上变得有思路了」,这其实就是交流的作用。
2.8 保持学习的专注
很多知识没有足够的专注力和足够多的时间是很难学好的,保持学习的专注尤其重要。 因为人的大脑在专注模式下面,神经细胞更活跃,你学的东西更容易从短期记忆变成中长期记忆。 而且在高度专注下面,你的解决问题的能力也会提高,原本看起来复杂的东西,在专注面前说不定就不是事了。
2.9 找到自己的短板并补足自己的短板
发现并找到自己的不足相对来说是比较容易的,但是要补齐短板就非常不易了。 因为人总是有畏难思想的,拖延症是怎么来的,就是你的大脑出于本能去做一些让自己分泌更多多巴胺的事情。 如果自己英语不好,就要下决心把英语攻克。如果自己数学不行,就要下死力气掌握数学。 补齐短板就像渡劫,越早渡劫,越快升仙。
2.10 给自己设计学习奖励
比如学好了 3D 数学,就给自己买一台顶配 MacBookPro 之类的。为什么游戏可以让你上瘾,因为它有反馈,有奖励机制。 学习数学是非常枯燥的,如果有了这个奖励机制,也许自己就更容易坚持了呢。
PS:这一点对于有家室的程序员有用,你想学好什么,要获得什么奖励,你可以当着你老婆的面立个FLAG
3 小结
Coursera 的这门MOOC 《Learning How to Learn》 强烈推荐给每一伴热爱学习的小伙伴,也欢迎大家给我留言,分享你的学习感悟。