Learning Task Pattern 的分类

Learning Task Pattern 的分类

计算机(computer science,CS)领域的学习之难,不同于数学,会在某条逻辑链上逼到极致,给出极其抽象、繁复、艰深的逻辑推导,而在于那些如蝗虫一般密密麻麻向你涌来的各种知识概念(knowledge node)。如果仅仅是数量繁多,那么其实问题不大,只需要按部就班地将它们一一习得即可。但 CS 的困难,在于这些 knowledge node 之间会相互纠缠、相互依赖,对某个 node A 的理解会依赖于好几个别的 node B/C/D,而 node B/C/D 又可能在经历了好几个 node dependency 的关系之后,如依赖到 node R,这个 node R 的理解又会反过来依赖 node A 的理解,即出现循环依赖的问题。这直接导致「仅掌握单个 knowledge node」对学习者毫无实质性用处,不得不在掌握一片 knowledge network 之后,才能有些许实质性的领悟。

相比起来,作为科学的皇冠的数学,它虽然是大部分人学习生涯中的噩梦,常常被诟病为过分抽象、繁复和艰深。但如果从 learning task pattern 的角度讲,数学的知识体系要直观明了得多。如果按照 learning task pattern 的难度等级来划分的话,我会将其划归到最底层:level 1。

Level 1

图片

之所以将数学放在 level 1,是因为它的每一个 knowledge node,都可以被拆解出一条学习链,顺着这条链能够追溯到一组最简单、最直观、且「一定正确」的 knowledge nodes,即:公理、定义。你可以很容易地从这组 root nodes 逻辑推演出整个体系。

在这样的 task pattern 之下,无论其知识有多么繁复,你只需要拆解出一条条相互独立的学习链,对每条 learning chain 一步步地向前追溯它的 root task。找到并学会这组 root task 后,你将不仅能习得这条 learning chain 上的所有 knowledge node,还能将一大片的「相关推论」一网打尽,可谓是性价比最高的学习方式。

所谓对「理性」与「严密逻辑」的训练,即是在训练如何发现 / 识别某个「现象」的 knowledge chain,如何判断某 knowledge node 的 parent nodes 是哪些,什么样的 chain 是符合逻辑的,如果某个 knowledge node 可以被多条 chain 推导出来,哪几条是符合逻辑、哪几条是看似正确的伪链。这些纷繁的训练成果,基本上就是「数学」这门学科所能提供的最大益处:不是学会某个高等数学的概念 / 知识,而是在这些数学命题、习题的训练之下让你形成的理性系统思考的技能。

这个过程艰辛而漫长,没有三年五载的反复敲打是无法将其 hardcode 到自己大脑中形成自然的「理性」条件反射。

但无论再怎么艰辛和复杂,它本身的 pattern 是却是极其简单明了的,是又一例经典的「简单却不容易」的代表。

当然,数学的训练也有其风险,如果对「理性」过分执着,而无法参透「理性的非理性」,即无法意识到:「非理性」的存在也是「理性」思考的必然结果。那么就只能故步自封,困死在形而上的逻辑圈中。

Level 2

图片

再来是 level 2 的 CS 领域。如图所示,CS 的 knowledge structure 最麻烦的就是各个 knowledge node 之间的互相耦合,各种概念之间相互纠缠。

例如,你要能够写出高性能的代码、掌握 programming skill,就必须知道 code 是如何在 OS 中从 source code 转变为 executable binary code,这些 executable binary code 又是如何执行的。而要看懂 compile、OS 的原理,吃透它们为什么如此设计,又依赖于你的 programming experience 所领悟的 API 设计、逻辑模块的解耦、复杂业务逻辑的精巧组织。不经意间,我们便构成了一组 learning chain 的循环依赖。

再对掌握 OS 这项任务做细分:它的其中一个 dependency 链是掌握 source code 到 executable code 的转换过程。而这个过程会依赖于 assembly code 的掌握。而 assembly code 的深刻彻悟,又依赖于对 OS 中 memory、register 的通悟。这便又构成了一组间接的 cycle dependency。

而对于出入行业的 newbie 来讲,可能更绝望的是他甚至都不知道这条 dependency chain 是什么。他只知道不明白 node A、不明白 node B,但对 A 与 B 之间潜藏了多少繁复的 knowledge chain 却是一无所知。

这基本上就构成了鸡生蛋、蛋生鸡的死循环。但 developer 总不能就死在那里原地不动吧?那通常是怎么破呢?

为了让自己有一个开始的落脚点,例如 node A,developer 几乎都会下意识地先 YY 自己知道 node A 所依赖的 node B/D/E。根据字面意思、望文生义地先理解 node B/D/E、并假设自己的 YY 是正确的,然后以此作为基础开始展开对 node A 的学习和推演。如果在实际的 programming 中发现了矛盾,则掉过头来找一找,看是否可能通过修改 node B/D/E 的 YY 假设来解决矛盾。如果可以,你就能对你的 YY 做出一定的修正。如果不可以,则要么暂且忽略继续其它部分的学习(公司可不会让你只学习不干活),要么就在网上搜索出一段或许自己也读不明白的解释。

可以看到,虽然 CS 中的每一个 knowledge node 是恒定不变的(即:不会出现今天 memory 是用来做存储的,明天 memory 就会用来做计算了这样的奇怪场景。它的每个 node 的确定性,是由 hardware 在物理世界的确定性所保证的),但整个的学习入门过程,却是在一个「连蒙带猜」的不确定性状态下逐步迭代演化的。这也是为什么很多工作了三年五载的 developer,内心对 CS 领域依旧是「没底」的、找不到那份「确定性」的感觉,总是在科学和玄学的边界上徘徊。

更糟糕的是,很多有了三年五载从业经验的 developer,会难意识到自己很多 “已知” 的「基础」其实是自己当年入行时 YY。无论你的从业经验有多丰富,如果不能有意识地去研习 CS 领域的经典基础著作,你的「基础」便永远是你的 YY,而无法将其转化为如同数学命题一般确定的知识基石。

如果这名 developer 还存在一些性格缺陷,如过分地心高气傲,那么他还可能因为自己貌似丰富的从业经验而轻视「基础知识」。这类 developer 给出的理由往往也是让人无奈的:我都工作了这么多年了,这些基础知识还能不知道?而现实是,是的,确实不知道。因为他们无法通过谦逊的认知回顾发现,那些自以为知道的「基础」,其实不过是自己曾经入行时的 YY。

于是,这又给 CS 从业者制造了另外一项艰巨的挑战:你必须不断有意识地反复审视自己的「知道」。随着你的知识与经验的累积,你的「局部认识」得以逐步迭代进化。以修正好的认知再回过头去审视那些「知道」,你往往会发现它们不过是自己的「误解」。

但大部分的 developer,可能都不屑于基础、不屑于对「已知」的反思,疲于奔命于各种前沿新技术(当然,其中一部分原因是因为市场本身的逼迫造成的,当前中国的 programmer 市场不大愿意奖赏技术深厚的从业者,而是更愿意奖赏能立刻干活的可替换人员)。殊不知,掌握 root node,才是最高效的学习方式,因为你能够借此解决一大片的 node network,而不仅仅是一条 knowledge chain。

另:CS 领域时常存在的一种说法是,数学出身的 developer 似乎更有优势。我想,这是因为数学从业者对 level 1 的基础掌握得更为扎实,从而更能得心应手、系统地将 level 2 中的 knowledge network 拆解为相对独立的 knowledge chain。而如果你本身没有太多 level 1 关于 knowledge tree 的训练,你几乎就只能迷失在 level 2 的 knowledge network 中。因为你找不到线头、找不到根本、找不到共同的抽象层次、无法以严密的逻辑走好每一步,更无法退回来以宏观的视野来审视自己的知识结构。

Level 3

最后是 level 3,我会将 business、investment、politics 这样的领域划分在这个层次。level 3 的 knowledge structure 基本等同于 level 2,同样是纷繁复杂且相互循环依赖的 knowledge node。但 level 3 最大的不同点在于,这些 knowledge node 并非像 level 2 是亘古不变的,每一个 node 的「成立」都是有「有效期」的。例如,这个时代存在的商业规律,在下一个时代就不再成立了,今年的热门销售方式,在明年就又不成立了。

也即是,level 3 的知识体系,不仅会像蝗虫一般向你疯狂涌来,其基石命题还会不断地更新换代。整个 knowledge network,由不确定的 knowledge node 来构建。于是,整个领域的学习就变得更加玄幻而妖魔化了。

正确的推理不一定能够得到正确的结论,因为很可能你没有识别到你所依赖的基石 node 已经悄然发生了变化;错误的逻辑推理也不一定导致错误的结论,反而可能获得极大的成功,因为他错误的推理恰好符合了更新的 node 的推论。

在这样高度「复杂」和「不确定」的体系之下,「认知」的鸿沟 / 阶层将会被进一步扩大。所谓的「读书无用论」,大体会出现在那些暴发户的圈子里。以他们的认知经验来讲,丝毫感受不到「理性」思考的必要性,因为他们执着于以「结果」论英雄的眼见为实。「随机性成功」让他们意识不到现象背后的确定性是由「理性」所支配的。当然更无法意识到自己的成功到底来自于自己做了正确的事情,还是来自于单纯的随机事件。

大部分的韭菜们,都是在没有掌握 level 1,甚至意识不到 level 1 的情况下,就贸然进入了 level 2 和 level 3 的领域。这些危险的操作,从一开始便埋下了悲剧的种子。如果见好就收,或许也不失为幸运的一生。但,通常能够不顾 level 1 而进入 level 2 和 level 3 的人,都怀揣「贪婪」与「恐惧」的极端情绪,几乎不可能做到见好就收,只能在两种极端情绪间堕入无间地狱。

当你开始进入一个领域时,你要能够清楚地意识到自己到底是在玩什么游戏。但无论哪种游戏,归结为 level 1 的 knowledge tree 总是必要的。因为从认知心理学的角度讲,人类最喜欢和擅长的认知方式,便是 tree pattern。所谓「总结反思」,就是将一堆散乱的 knowledge node 整理成一棵符合你思维习惯的 knowledge tree。而所谓「学习」,则是 pattern recognition 的勾连,将「新知」的 pattern 抽取出来,对其加工整理、挂到自己已有的 knowledge tree 上。

按照这样的视角,level 3 的学习一定是最为困难的。因为它要求你在由不确定的 node 所构筑的 knowledge network 中提取出不变的 pattern。这种「在高度复杂的不确定性网络中寻找 invariable pattern」的行为,几乎是对人类认知最高标准的检验。

我想,这便是 Charlie Munger 将「理性」作为一切的基石的原因吧。


近期回顾

综述:理性 / 非理性、投资 / 投机二维平面的比对分析
Notes:对话李录,第十三届哥伦比亚大学中国商业论坛
「理性投资」被当做玄学的一个缘由


如果你喜欢我的文章或分享,请长按下面的二维码关注我的微信公众号,谢谢!

发表评论