我注意到一个现象,最近几年,王垠的知名度和影响力都在下降,逐渐淡出公众视野。这导致很多 “新一代” 的程序员可能都不知道王垠是谁。而我最近总是频繁提到王垠(默认别人知道王垠)。
王垠的这种淡出背后也许有两个原因:
我们重点关注第二个原因。
在 AI 飞速发展的今天,短短几个月的时间,程序员的工作模式就发生了重大变化。现在的程序员,不再需要动手写代码,更不需要动手复制粘贴代码,只需要描述清楚需求,让 AI 来完成就可以。程序员需要做的,是验证功能点、审查代码、当 AI 遇到无法解决的问题时,给 AI 兜底。
这也就意味着,你不需要懂编程语言的语法,不需要知道王垠是谁,不需要知道王垠对编程语言的评价如何,不需要崇拜王垠对于编程语言设计的学术品位,依然可以很好地完成日常工作。
无论你是否愿意承认,事实上大多数日常工作都是平庸的脏活,不需要艺术级别的代码审美。“品位” 永远都是奢侈的东西,大多数人没必要在乎。
王垠是一种技术符号,代表着在 AI 出现以前,追求极致符号与抽象的最顶尖的一类人。那么在 AI 出现以后,我们的关注点,又该如何变化?
王垠的计算机课程中,练习题是重要的组成部分,每一节课都有课后练习题。我为了更好的掌握课程内容,就反复的去做这些练习题。第 3 轮做完的意思是,已经第 3 遍从头到尾做完了。
第 1 轮是在学习课程的过程中,因为每个人都至少需要完成一遍练习题,才算是可以毕业。对应时间点 5月21日~6月24日。
第 2 轮是在课程结束后大概一个月的时间内完成的,对应时间点 6月25日~7月20日。
第 3 轮比较慢一点,因为按照一天一道题的计划,想要在放缓练习频率的同时,能够有时间好好消化这些课程的内容。经过整 4 个月的时间,从 7月24日~11月28日,终于完成了。
在第 3 轮做练习题的过程中,大致是按照一天一道题的节奏,除了偶尔比较忙会跳票一两天,以及最后跳过了一点点 Rust 语法的练习题(实在是不太喜欢研究 Rust 的指针和内存),基本上没有大的偏差。
那么这一轮做练习题的过程中,对于练习题本身的改进有:
修复一些 typo、整理一些代码模板、补充少量的用于测试边界条件的测试
第 5 课关于 BST 的练习题,很多因为视频里讲过了,所以练习题直接给出答案作为复习。我改进了这个部分,让第 5 课的练习中,关于 table 和 BST 的题目,都类似其他练习题一样,可以按部就班、循序渐进地练习
还是第 5 课的练习题,我自己扩展出了自动平衡二叉树的题目。这个题目本是第 5 课的隐藏练习题,但是我当时上课的时候,为了能尽快学完,就没有做这个隐藏练习,包括正版的自动平衡二叉树的题目,也是没有拿到的。我根据课上提供的基础内容,自己补充出了这部分的练习题
第 6 课,类似的,很多语义的实现因为视频里讲过,所以练习题是直接给出的。而我改进后的练习题,可以在脱离视频,也就是不需要再重复看视频的情况下,仅根据逐步的练习题,就回忆起全部内容
大概就是一些修修补补、文本整理类型的改进,核心知识没有丝毫变化。毕竟确实题目本身就已经很精简了。
对于王垠的计算机课程,倒是也不用非拔高到 “改变人生的神课” 这种高度,但是描述为包含计算机理论核心知识、不带有杂质、循序渐进的高质量课程,肯定没有问题。一门课程就是一所大学,也毫不夸张。
做练习题的过程中,印象深的点有两个:
第 4 课隐藏练习,是实现一个简单的 parser,可以执行计算器的基本运算。这一次写出来的代码,和上一次,不太一样。而且稍微有点看不懂之前的代码了,感觉现在写出来的思路才是对的。因为 parser 这种东西的写法,可能本身就没那么严谨,所以这里出现分歧也没在意,直接按照新写出来的版本为准。核心思路肯定是没错的。
第 10 课的隐藏练习,涉及到用 Rust 实现解释器中的多级作用域的管理,让解释器能正确处理嵌套的闭包环境。与前 2 轮做练习题的时候不太一样,前两次遇到了同样的问题,然后按照同样的思路去解决问题。但是这一次,因为知道正确的答案,所以直接跳过了之前踩的坑,一开始就在用正确的方式实现,所以没有花费那么多心思。
总体来说,第 3 轮完成练习题肯定是巩固了对于课程知识的掌握。至于后续的计划,还在考虑中。