这里的新技术,可以是一门语言,一个特定的框架,一个特定的算法等。
不知道你有没有这样的习惯,学习一门新的技术总是依赖于搜索引擎,输入关键字,于是出现了一大片内容,各种博客,点来点去,当你要学习的东西是比较复杂而非比较单一特定的,比如是消息队列rocketMQ而非一个特定的算法快速排序。依赖搜索引擎,几篇博文这种方式让我觉得懵懵懂懂,浮躁,因为没搞懂,所以又去看别的文章,但最后发现都怎么讲得不太明白,我们忽略了一个事实,复杂的东西怎么可能几篇文章就搞懂呢?
今天我自己学习rocketMQ时,刚开始也是读别人文章这种方式,后面实在受不了就去下载了源码,先是按照队列的基本使用流程读了生产和消费的源码,偶然发现里面又官方写好的文档,内容详细,基本包含了方方面面,看完后感觉通畅多了。
我想表达什么?不要总是急于求成,去浪费时间读网络上各种碎片的信息,若是真想好好学习关于这个技术更偏底层的东西,那么我们应该找一个更系统的方式,比如你想了解JVM,那么可以好好读一本书,比如像我今天这种想要学习一个框架,那么可以尝试读源码,读官方文档。这可能是我最近才深刻意识到,之前的方式是多么浮躁,而不正确。
如何学习某个知识,在我看来,主要矛盾在于解决这三个问题。
要学否
在学习一门新技术前需要解决的第一个问题是要不要投资时间去学这门技术。就像买书最大的成本并不是买书的价格,而是看书的时间。花费大量的时间去看一本没有价值的书,无异于浪费生命。正是方向搞错了,越努力越尴尬。
怎么确定一门技术的价值,可以从以下两个方面来考虑:
从知识体系出发:某门技术经常不是孤立存在的,而是一个积木般搭建的大厦的一部分。要学习顶部的技术,就需要掌握一定的底部技术。如果一个技术很基础很底层,被很多高层的技术所依赖,那学习这门技术就很有价值。
从应用前景出发:如果一门技术很有市场“钱景”,或者有潜在的市场需求,那学习这门技术就很有价值。毕竟我们学习目的很大的一部分在于赚钱解决自己的生活问题。不过这里的难点在于从我们已知的信息来分析,很难判断某门技术的市场前景。如果分析判断错误,很可能会导致我们学习这门技术的时间被浪费。那最佳的选择的就是尽可能让自己所学的技术都满足这两点,哪怕最后没有市场前景,但如能成为我们知识体系的基础,也值得投入时间去学习。
基于这两方面的考虑,我开始学习了分布式系统的一些底层知识:
之后通过搜索间接找到了基于WebRTC技术的语音聊天网站speakrandom,在分析这个网站技术栈的时候找到了pion/webrtc这个框架,最终决定从这个框架入手开始学习WebRTC。
怎么学
在制定了学习目标之后,剩下的问题是怎么怎么学?学习方法千万条,重要的是找到适合自己的学习方法。
我的方法是善用搜索,找到对的资料和对的人。学习本身不应是一件复杂的事情,因为它不是做研究,不是探索未知的东西,只是站在巨人的肩膀上把已经被解决的问题学习一遍。
但这里的难点在于资料千万份,一不小心就找到错误的资料,让本来简单的学习变得复杂,这就像天龙八部鸠摩智学了段誉给的错误的六脉神剑剑诀,很容易学的走火入魔。
主动搜索
主动获取学习资料方式的要点在于从错误少的信息库筛选、交叉对比选择要看的资料。由于很多技术资料都是用英文写的,用Google英文搜索更容易获取高质量的资料。另外使用Google图片关键词搜索可以快速获得架构方面的资料,方便从高层次理解这个技术。
学习新技术的10个建议
尽管我的建议主要涉及的是软件开发方面,但是这些原则在其他领域也同样适用。
1.克服惯性
万事开头难,克服惯性是学习新技术的第一步。举个日常生活中惯性存在的简单栗子,当我们看电视的时候会因为遥控器不在身边而懒得换台。幸运的是有很多的小技巧可以调动我们的积极性,帮助我们克服惯性。对于我来说,微习惯是一个很好用的小技巧。与其被手头的任务吓到,不如将任务细分为一个个具体的微任务,然后挑选其中的一个开始做起。就“拿到遥控器”这个例子来说,首先扭动你的脚趾,向前伸出,然后推动整个人离开沙发。下一步,身体滑到地上,用脚拿到遥控器,然后起身。通过完成一个个的微任务,你会发现自己克服了惯性,并且这项任务不再显得难以完成。这个方法可以被应用到学习新技能的过程中。关键就是将大块任务细分为微任务。
2.
转载请注明:http://www.0431gb208.com/sjszlff/4967.html