关于《学习》的一些体悟
学习是程序界永恒的话题,程序界流行的类似抱怨一样声音是:
“不学习就会被淘汰。”
这曾一度让我沮丧,认为做程序真是辛苦,好像永远无法达到一个境界然后每天放飞自我,依然可以吃香喝辣。
后来我才知道,原来我错误理解了这句话,因为乍一看这一句话的隐藏含义是:
“真是不幸,程序员需要不停学习来赢得机会,其他行业不需要学习就能自发地随着年龄增长越混越好。”
后来我觉得,这句话更恰当的另一半其实应该是是:
“真是幸运,程序员只需要通过学习就能不被淘汰,甚至越混越好。”
要知道,有很多行业,是和你的个人能力无关的,那也意味着,在很多行业你并不能通过提升自己,来增加可变现的价值。你不够牛逼和你牛逼又能怎样,我起码选前者。
正题:
学习是一件乍一看人人都能做到的事,似乎愿意就无需任何附加条件,当然这么说是可以的,但具体来说确实有一些条件会让学习效果更好,而这带来的差距可能非常大。
学习的难点:
1.学习需要“意志力”。
学习是痛苦的,日语里,学习有“勉强”的意思,学习意味着你要打破你的舒适区,
去到你不熟悉的知识领域,可能是要求你用平时不习惯的方式思考,让你使用不趁手的工具。
如果你学的很舒服,那你可能真的要思考,你究竟是在“学习”还是“复习”。
总之学习是非常消耗“意志力”的事情,而一个人每天的意志力是有限的,并且像吃什么,去哪,买什么,这些只要需要做决策的事情都会消耗“意志力”。
回忆一下你和一群朋友聚会时候,大家为了商量下一步干嘛最终会疲劳成什么样子。
所以,当你今天的“意志力”用完以后,哪怕今天你还剩10个小时,今天的你都不再可能进行有效的学习了。
2.学习最怕“打断”。
当你今天的“意志力”满额,如何好好利用也是难点,学习的大敌是“打断”。
尤其如果你是一个工作的成年人,收入不差,本身学习动力就不强,在美丽的周末本来就可以“为所欲为”的情况下,好不容易切换到了学习状态。
20分钟后,一个电话过来谈天说地10分钟,你再想要切换回学习状态,也要花费很长的时间和很多“意志力”,前提还是你还愿意切回来。
3.学习需要有“记录”。
被誉为最聪明的一群人的程序员尤其容易更相信一种幻觉,就是那种技艺傍身,谁也带不走,不需要记录也永远不会遗忘的那种类似永恒般的安全感。
那么你是否有这种印象,就是当你在进行一个规划为一个月的学习的进度时候,在第三周左右,忽然发现第一周的内容自己不记得了。
此刻的如果重复回去研究就会陷入程序员最讨厌的事情“做重复的事”,那种沮丧感足以让你崩溃并彻底摧毁你的学习计划。
4.学习要有“反馈”。
这里尤其指“正反馈”,你需要有成就感的学习,如同游戏一般,开枪就能知道打中没有,打怪就有经验,过关就有装备,看,哪怕是虚拟的反馈都能让你不知不觉地坚持几个月甚至许多年。
所以,去指定具体的目标并扎扎实实最好记录,github也好,博客也好,这都是你的“正反馈”。
5.学习有“加速度”。
这是很多人一个重大的误区,不用统计你都能知道,有多少人会在面试时候说自己虽然经验不足但是学习能力强,然而我想说真实情况是,有经验的人,同样面临一个新知识,瞎猜都比新人强。
有庞大健全知识网络,有无数的实践经历可联想,有无数次的类似学习的体验,查找鉴别资料的能力,这都是新人和老手间巨大的差别。
同样面对一个新知识,老手能很直接地抓到重点,然后自己迅速探索熟悉,用习惯的方式训练掌握,那个时候新手可能还在群里问“这啥啊,要不要学啊。”
所以新人应该,扎扎实实地学习,一步步地累积学习体验,累积知识量,也不要看到你一个月才能学会的技能,老手一周就学会儿了而沮丧,加速度起来以后,你也可以,前期的缓慢是必然的,不要因此而否定自己。
具体的学习方法
1.以项目为导向。
工程类学科,最重要是实践。很多基础原理搞不懂,是因为实践不够,也就是熟练度不够,没有可联想的东西,自然是弄不懂记不住。
就像读一篇英语阅读,生僻词汇量超过一定比例就无法读懂了,熟练度就是某种意义上的词汇量。一开始不懂原理很正常,直接用这技术起个项目。
做完下来再看原理,就只剩查漏补缺了,看书写demo这种学习是不够深入的,容易遗忘也很容易放弃。
2.先有广度,再有深度。
在一两门内容上死磕,停滞不前,这是大部分人一开始最容易走进的误区,案例最多的是《算法导论》,而且我认为更多是来自老手们的错误引导,最悲剧的,这还是老手们往往不是故意的。
听起来有点迷糊,打个比方就懂了,这就跟马云说钱不重要一样,老手们真的已经忘记了新手时候的迷茫痛苦,他们通过很多摸爬滚打的实践把丰富的经历浓缩成了简单的原理,是把书先读厚了再读薄,所以老是跟新人强调基础重要,原理重要。
这其实本身没错,但是要搞懂这些基础和原理是不能通过在一两门技术上死磕弄懂得,而是需要那些弄脏双手的实践得来,甚至往往更多时候,是通过别的知识点联想而来,这句话重点不是简单的“实践出真知”,而是很多想说,很多知识的学习,是在该领域里无法彻底理解的,往往你会在另一门技术的内容里,帮你领悟到这一门技术的内容。就像很多人是学习数据库索引之后,才明白数据结构里的B树的作用,才有兴趣去了解B树的实现,而纯粹学习数据结构,只会让你纠结于那个怎么也记不住的B树实现,然后彻底崩溃。
所以当你卡在了一门内容上,往往更好的方法是,放一放,继续学习实践,通常你都会在某一天回头来发现,自己已经在别处学懂了。
同样当你在一门内容上觉得没有什么可学了,缺乏灵感,不妨学学自己完全没接触过的新内容,后台的去学学前台,前台的去学学后台,将知识面铺开,你的思路会大不一样。