距离上次发文到现在已经过去了 202 天,我「沉寂」了许久,但却没有停止思考。最近,我重新找到了写博客的意义,我想把这半年以来的思考分享于你!

博客的意义:定义你自己

我曾无数次尝试为写博客寻找意义,像是增进对知识的理解、督促自己学习等。但无一不以失败告终,因为这些目的总有更高效的实现方式,而我又对写作本身没有太多热情。恰巧最近在找实习,我惊讶地发现自己真的缺少一个让别人「深入」了解我的渠道,不到一小时的面试很难对一个人做出正确的判断啊。

阅读过很多博客以后,我发现这样集中式的文字很能反映一个人的知识能力、兴趣甚至对科学的审美。从这个目的出发,似乎鲜有比博客更高效的方式了。

解构学习:兴趣与工具

一门学习主题可以按两个维度进行划分:【工具|兴趣】以及【知识|训练】

  • 工具:学习此主题的动机在于实现一个另一个目的。常见的比如:服务端开发之于拿学分、数据库内核之于找工作、面经知识之于面试等。
  • 兴趣:学习此主题的目的就是其本身,换句话说,仅仅是学习该主题这件事本身就足以诱发学习动机,无需其它理由。比如并发算法与理论、算法、数学。
  • 知识:学习该主题的主要效用在于理解、掌握和运用一系列的概念、知识。比如计算机网络、形式语言与自动机等。
  • 训练:学习该主题的效用在于训练一个人的某项能力,比如 PA、概率论、数学等。

对于不同分类的学习活动,我们投入的精力和学习的深度也不一样。

  • 比如在学工科概率论时,我们的主要目的是训练自己严谨应用概率的能力,因此知识点的记忆反而没那么重要,更重要的是通过大量训练确保自己熟悉、理解且能应用那些最重要的 Concepts。
  • 又比如在学计算机网络时,我们的目的就是搞清楚网络的底层实现,以便日后在遇到网络瓶颈时能有系统的分析思路。这样的话,我们应当通过间隔重复不断强化对知识点的记忆。
  • 再比如兴趣使然的科目,我们就没必要过分思考怎样才能学得更快更好,只要自己学的时候开心就足够了。而工具类科目,我们就有更强烈的动机寻找最高效的学习方式,“多快好省”地实现目的。

当然,这种分类的边界是「模糊」的,上述观点也只是启发式的。应用时要根据实际情况判断。

解构知识:了解与理解

费曼批评了仅把学东西停留在了解层面上的行为,这确实是对的。但我们很难理解一切——时间不允许,能力也不允许。而更重要的是,了解有助于理解

就拿我自己的亲身经历来说,当我第二遍看 15445 时,我对那些知识的理解显然更深了。这其中当然有第二遍理解的作用,但我个人感觉更重要的还是我知道每个知识在 Big picture 中的位置了。这样的话,我再次学它时,目的性就很强,更易建立知识之间的连接。

可我的亲身经历同样表明,了解与「知道」依然有区别。知道很多东西并没有任何用(比如我多年的知乎经历,按理说自己应该知道很多事情,但对学习产生帮助的寥寥)。

更严谨的说, :

  • 知道:停留在语法层面的认知
  • 了解:What
  • 理解:What, How
  • 深度理解:What, How, Why
  • 运用:What, How, Why, Generalize

我们需要的是大量的 [了解, 理解) 范围的知识,然后对自己感兴趣的、主方向的要达到 [深度理解, 运用] 层面。

BTW, 刷知乎大多停留在知道层面,看博客能提升到了解、理解层面,自己思考并做出笔记就能提升到深度理解层面,做题训练达到运用层面。

「找」实习带给我的

图1

过去四周花了不少时间在准备找实习上。准备的过程还是比较枯燥的,但与业界前辈们的交流(尽管不多)还是让我对学习有了新的看法。

专注,专注,专注

尽管几乎所有公司都声称自己希望招募「解决问题能力」强的人,但从我的求职经历来看,面试时所能展现的能力仍然是高度聚焦的,聚焦在某个领域(如数据库、分布式)或语言(C++ 性能调优)。聚焦就意味着可以通过「刻意训练」来提高。

之前的我其实有点追求「理解一切」,渴望成为亚里士多德式的“全知”。但事实是,以我的能力在专业高度细化、科学不断发展的当下无疑以卵击石。继续追求全知,唯一的可行办法是每门科目都浅尝辄止,停留在「对机制的了解」上而忽视科学的复杂性。这样固然很“爽”,每时每刻都似乎在高速学习东西,但如此这般与 LLM 似乎也没什么区别。

既然理解一切行不通,除了兴趣使然的学习外,从工具理性出发,我们就只能把时间投入到尽可能小的专业范围里了。当然,你可能会说,这样做难道不会使视野受限吗?我只能说,以我的能力,学习数据库本身比学习数学更可能让我做出更 fancy 的东西。泛化的难度随领域的差异扩大而陡然上升。

实践,实践,实践

我其实很早就树立了这样的认知——「逢学必记」,始终认为甚至无法自己用文字表达出来的知识,显然谈不上理解。但计算机作为一个工程学科,在纸面的理解之外还应该多实践。面试时有很多问题其实我都想过,也做过一些笔记,但真的问起来还是很容易发现自己的疏漏。

当然,实践是老生常谈的话题了,为什么实践很困难呢?一个原因自然是懒,另一个主要原因还是基础设施能力不行,不能快速地搭建起一个实践的平台。比如学到不同的 Join 算法,一想起实践这些需要一整套的 SQL 解析、查询引擎,头都大了。

尾巴

希望自己能继续保持怀疑的精神解构一切,希望自己能坚持写博客,这次尽力分享一些能「标榜我自己」的东西吧。