CS 入门的核心素质:热情与品味

我个人认为,入门学习 CS 的核心素质只有两个:passion and taste。这并非为了显得锋利而刻意简化,而是对诸多经验作高度归纳之后得到的结论。

有些人或许会谈论一个人适不适合学计算机、有没有所谓“计算机天赋”。但在我看来,“天赋”这一归因更多时候只是把暂时解释不了的差异赋予一种不可证伪的神圣性,以换取心理上的安慰。即使是天赋异禀的少年,我们也仍然能够感受到他与老成学者之间的距离;因此,将天赋与积累粗暴地设置为二元对立,并不能真正解释这种鸿沟。

我们常常因为某个人能够举一反三、一点即通,便说他“天赋高”。事实上,我们真正看到的是一种把握事物本质的能力;而这种能力,很大程度上是抽象思维训练的结果。否则,哲学和数学何以发挥如此巨大的威力?有些计算机人认为数学并不关键,并不是因为 engineering 与 formal 之间存在彻底断裂,而是因为他们没有选择以数学的方式理解计算机:他们或许只看到了数学作为工具的一面,例如算法分析的工具、算法背后的图论原理,却没有选择用集合去建模类型、用代数去理解数据库查询。不过,我并不认为这构成一个必须纠正的问题;数学也并非品味的唯一道路。按照我个人的理念:

Any formal system or architecture is a perspective-constrained reification of reality, whose utility is measured not by perfection, but by relevance.

这也解释了前文所说的鸿沟与洞察力的来源:我们是否通过刻意练习,将一套方法论与认识论层面的思维工具内化为自己的思考方式?这种内化会生成隐性知识;而我们所谓的 taste,实际上正是借由这些隐性知识审视事物的结果。许多“找个 mentor 带”的建议,本质上也是对品味的追寻:通过观察与模仿,捕捉那些难以被完全显性化的模式。

沿着对“品味”的分析继续推进,我们可以得到一个颇具反直觉性的发现:taste 也可以是自顶向下的。它可以从简洁的公理出发,经由高度理论驱动的路径展开,并让哲学思辨与自我反思相互校正。与其完全依赖对行为和模式的经验归纳,不如借助分析哲学提供的工具,让经验归纳与演绎推导彼此配合。何况,阅读本身就使人得以把握来自他人的经验;否则,文献阅读的意义又何在?这便是元认知的核心意义。

不过,“天才都来自刻意练习”这一模型虽然具有相当好的解释力,用它考察现实却仍然令人不尽满意:如果一切差异都可以在刻意练习中消解,那么现实中的参差难道只能被归结为个体能动性的差异?这里自然需要进行否定之否定:这种对现实的建模固然解释了认知如何来源于对方法论和认识论的刻意练习,却没有解释元认知从何而来。对于一个人最初如何认识到某种模式,它选择了沉默。

如果站在一个更广阔的视角上看,最初的元认知几乎带有彻底的随机性:是否遇到好的家庭,是否遇到好的导师,是否拥有独特的成长经历与人生境遇。许多人所谓“事教人”的认知,也可以在这里得到统一;而前文恰好指出了这种成长模式的低效所在。不过,环境与制度的变量也因此得到了更好的诠释:我们或许不能预设某个个体必然具备足够的能动性,但社会可以为那些对知识怀抱憧憬与热情的人提供更多试错机会,消解更多隐性知识门槛,至少提高他们获得启发、获得最初那一下推力的概率。所以才会说,创新,尤其是创造性破坏,不能被计划出来,而只能在一个条件足够充分的环境中自然发生。

至此,我们可以获得一个更高阶的理解:天才是训练的产物,但训练路径本身往往依赖环境与制度所施加的推力;而元认知能力,又可以极大地帮助人超越这种推力。因此我才会立论:对于 CS 入门或初级阶段而言,并不存在什么唯一且必然的路径,但有两个不可绕开的要素:passion 与 taste。某种标准化路径或许能让人至少参与到社会分工之中;然而,那种只关心打了多少分、只崇拜取得分数之方法论的制式产品,显然无法造就真正的天赋。说到底,品味太差。