简单聊聊如何高效的学习新技术

Photo by Avel Chuklanov / Unsplash

如果想研究的技术或者技术的实现有发论文,优先看论文,因为论文中有比较详细的引用关系,毕竟一个新技术又不是凭空诞生的,那就可以通过论文引用关系溯源,而且一般论文都会附带详细介绍同类方案和对比,就可以很快知道同类有啥,优势劣势是啥。

学技术的优先是 论文 > 代码原理解析的技术文章 > 官方文档 > 使用教程技术文章 > 视频教程。代码原理解析可以看做是细节实现的探讨,官方文档一般都不会写得很细。只看如何使用是一种非常低效的学习方法,学了也学不明白,无法举一反三。

举个例子,大家基本都知道 lru,但是 lru 是个非常古老的东西,学会用 lru 一点意义都没有,学会了原理就可以进军 lfu,再学会 lfu 原理就可以进军 tinylfu,然后就可以学 tinylfu 更先进的 segcache。更别说现在还有机器学习预测的 cache、还有更高难度的分布式 cache。

学完 lru、lfu、tinylfu 基本 混合 lru 和 lfu 也搞明白了,再把 raft 搞明白,那 redis 的核心实现方式就搞明白了(当然一个更新了那么多年的中间件肯定还是有非常多细节的),同时你还顺便搞明白了 Caffeine。

把 raft 搞明白还有比它更老的共识算法搞明白,再把共识证明搞明白,那比特币原理就搞明白了,比特币搞明白了,再学学更新的工作证明那区块链的一系列包括以太坊也就很简单了。

然后共识学明白了,那再学学事务,然后学学它更加新的分布式事务 rmd ,基本上数据库这一套也都搞明白了。

再学学 b+tree,你就可以自己写一个 mysql 类似的小型数据库了,b+tree 下一代是 lsm tree,那基本近十年的数据库对你来说都不难。

上述你会发现数据库、缓存领域差不了多少,大家的底层数据结构、共识算法半斤八两,基本你能听过的数据库的核心原理对你来说近在咫尺,以数据库为例会发现一个领域有很重要的知识脉络,而且越靠近现在的越难。

比如看到个新的大技术,那看现在的看不明白,通过论文或者搜索找到它的上一代,上一代看不明白就继续找上一代,上一代再不明白就再找上一代。如今的主流技术基本都有 20-30 年的历史,二三十年前 cpu 之类的硬件比现在性能差这么多,它怎么可能复杂。像 lru 离现在都 46 年了,正常现代学计算机的怎么可能看不明白。

很多人工作几年就觉得自己到了瓶颈,其实还困在很低的地方。因为认知能力限制住了,认为很多大佬到了常人无法企及的高度,一般人以为需要付出很多倍的努力也达不到,其实是因为他知道到那个高度的路径,而别人不知道。追根究底是学习方法的错误。