作为终身学习的实践者,我经常需要学习一些新的技术。如何学习这些新技术,因人而异。之前我也写过一篇文章,讲的是如何快速学习一门新技能。在这篇文章中,我分享我学习的理论框架,但在这篇文章中,我将以我学习WebRTC为例,分享我在学习新技术时使用的一些方法。
如何学习一些知识,在我看来,主要矛盾在于解决这三个问题。
要学否在学习一项新技术之前首先要解决的问题是是否要投入时间学习这项技术。就像买书最大的成本不是书的价格,而是看书的时间。花大量时间读一本毫无价值的书是浪费生命。方向不对。越努力越尴尬。
如何确定一项技术的价值,可以从以下两个方面考虑:
但这里的难点在于,很难通过分析我们已经知道的信息来判断某项技术的市场前景。如果分析判断错误,很可能我们学习这项技术的时间就白费了。最好的选择是让你所学的技术尽可能满足这两点。即使最后没有市场前景,如果能成为我们知识体系的基础,也值得投入时间去学习。
基于这两点考虑,我开始学习一些分布式系统的基础知识:
之后我通过搜索间接找到了基于webrtc技术的语音聊天网站speakrandom。在分析这个网站的技术栈时,我发现了pion/webrtc的框架,最终决定从这个框架开始学习webrtc。
怎么学设定好学习目标后,剩下的问题就是如何学习?学习的方法有上千种。重要的是找到适合自己的学习方法。
我的方法是利用好搜索,找到合适的信息和合适的人。学习本身不应该是一件复杂的事情,因为它不是在做研究,探索未知的事物,只是站在巨人的肩膀上,研究已经解决的问题。
但这里的难点在于,文献成千上万,一不小心发现了错误的文献,使得简单的学习变得复杂。就像段誉给的六脉神剑诀,易学附体。
主动搜索主动数据获取的关键是从信息库中选择并交叉核对错误较少的数据。由于很多技术资料都是用英文写的,所以用谷歌英语搜索更容易获得高质量的资料。此外,使用Google image关键字搜索可以快速获取关于建筑的信息,便于从高层次了解这项技术。
一般我会从Google,YouTube,GitHub上搜索一些技术相关的资料,视频教程,开源库。从搜索开始,找到合适的开源项目或技术标准,然后制定学习计划。通过webrtc关键字很容易在这些平台上找到这些材料和教程:
从pion/webrtc了解到作者是@Sean DuBois。GitHub关注了一波然后去YouTube搜索他的演讲,又收获了一波优质教程:
另一个高质量的材料是协议标准,如IETF RFC文档。经过搜索,找到与WebRTC相关的标准:
从这个W3C标准中,我们可以看到很多IETF RFC的资料。了解这些技术标准,有助于我从更高的层面理解这项技术的一些特性。当然,我暂时不会去看这些标准的细节,等到需要了解细节的时候再说。
另外,我们可以从标准中梳理出这项技术的一些历史背景知识。
技术历史复杂技术不是横空出世空,而是根据需求从简单技术逐渐演化而来。很多时候,一项技术的复杂性是由它的历史特征造成的。例如,Java范式是复杂的和限制性的,因为它是一个折衷的产品,旨在与旧的库兼容。了解这项技术的历史背景有助于降低理解这项技术的复杂性。
做好笔记如果对搜索到的信息不进行整理和记录,时间长了就会完全忘记。我把这些材料放进Logseq,一个双链笔记。
从下面的note拓扑图可以看出我记录的分布式系统和WebRTC的关系。我们都知道,学习在大脑中的体现就是在神经元的突触之间建立新的连接,笔记之间的知识也可以通过这种方式帮助我们快速建立知识之间的联系。
做好笔记后,我要做的就是规划时间学习消化收集的资料。在这个环节中,可以用时间管理的方法来制定这项技术的学习计划。
学习技巧学习的技巧有千万种,但有一种我认为很重要,那就是告诉别人你学到了什么,从别人对你薄弱知识的反馈中学习。很多时候,大脑在学习的过程中会有很多模糊的点。如果我们不说,这些不清楚的点就会被忽略,但是如果我们想让别人明白,就需要了解更多。
写文章其实就是说给别人听的,只是比简单的说出来更系统。所以我一般在学习某项技术的时候会写文章分享。一方面可以更清晰的梳理自己的知识,另一方面可以和读者交流,掌握更多的知识。这样也能解决经典的我不知道我不知道。当我写出来的时候,看到的人会帮我发现我不知道的东西。
当然,你也可以把学习中整理出来的一些知识点分享到社交网站上,然后方便地整合到文章中:
找到合适的人来解决学习中的困惑,无异于加快了整个学习的进程。在这方面,许多开源项目都有自己的论坛。比如我在了解WebRTC SFU的过程中,有过很多困惑甚至误解,在社区和作者交流后得到了正确的答案:
当然,我们也可以在论坛、GitHub问题、邮件群或者交流群中寻求帮助。
心理建设在学校的一大困难可能就是不好意思说自己不懂的东西,尤其是工作多年后,很难承认自己不懂。但是如果你以终身学习为目标,那么这方面没有障碍。不懂就学,不懂就问。无知不可怕,年纪大了不懂也不可怕。可怕的是你不懂却隐瞒。
怎么用[/s2/]在掌握了技术的理论之后,可以通过技术实践来提高自己的技术水平,比如做一个开源项目。应用技术有两种方式:
通过搜索,我发现了两个很好的学习项目:
两者都是基于pion/webrtc库的语音聊天网站。基于这两个开源项目,我可以逐步学习和开发自己的开源项目。
在研究了这两个开源项目之后(看了源代码之后),我定下了基于WebRTC的应用开发目标:做一个隐私聊天和本地优先语音聊天免费的网站。
这个目标有点大。我会把这个业余项目作为技术试验田,把所有需要研究和应用的技术都应用到这里。
学以致用是学习的最终目的。只有真正的使用这项技术,才能真正的掌握它。不然就抓紧时间学习。如果你不用它,你很快就会忘记它。
最后,如果你能读到这里,希望本文提到的一些方法能帮助你更快的学习某一领域的技术。
文/Thoughtworks马大维
原文链接:https://insights.thoughtways.cn/how-to-learn-new-technique/
更多精彩见解,请关注微信微信官方账号Thoughtworks insights。