竞赛导向的计算机教育,并非真正的 CS

我个人认为,计算机科学何时开始学习都无不可,它更多依赖个人兴趣的驱动,以及脚踏实地的求索。为什么在所谓“不恰当的时机”学习计算机会留下“只会做题”“缺乏想象力”的印象?我以为,这首先是教育与评价体系的责任。

中国普遍意义上的计算机教育,尤其在本科以前,是高度竞赛导向的;甚至不妨说,本科以前真正被承认为“学习计算机”的人,几乎只有信息学竞赛的参与者。由这种竞赛导向衍生出的“算法”标签化,后来依然四处蔓延;如果说算法岗之所以令人艳羡,其经济逻辑在于稀缺性带来的高薪,那么从另一个切面看,其中也沉积着算法竞赛塑造出来的精英倾向。“鄙视链”的阴影斑驳陆离,却又心照不宣,清晰可见。

在这样的环境中做计算机教育,竞赛几乎成了投放精力的唯一目标,算法题与激烈角逐也就无从避免。不过,算法竞赛所训练出的能力,并不必然能够移植为工程能力:算法竞赛追求的是逼近理论极限,工程则更青睐稳定性、可拓展性、可复用性等指标。诚如先前戏言:

“性能极致的代码只是上古神话时代的传说,大量可堪一用的代码才是决胜之道!”

这里限于篇幅不作证明,仅取一个简单例子说明:线段树是算法竞赛中的基础结构,然而在《算法导论》正文中亦难觅其踪迹;红黑树普遍到 C++ 标准库直接提供支持,我以前身边的同学却未必比熟悉线段树更熟悉它。我无意评判竞赛圈的风气,因为我并不甚熟悉;不过,与我们分析高考、考研时的思路类似,只要存在某种评价标准、某条固定赛道,就难免围绕它发明创造出一整套知识体系。倘若从这里出发,关于计算机科学的元认知自然会大相径庭。

这样看,小时候“不适合学计算机”,并非计算机科学本身的性质使然,而是中国并没有为计算机教育提供一个足够普适的方案。这种落后处处可见:比如数学教育中对先进计算工具的排斥,比如直到疫情前都还甚嚣尘上的对互联网的偏见。对个人而言,解决方案也十分简单,却难以做到:只要不在这个框架下思考问题,自然不会遭遇这个框架所制造的问题。

计算机科学的自学传统一直是显学,本来也没有规定知识必须从何处取得;如《儒林外史》所言,“资格困人,贤豪同叹”:各种“资格”是做题家的掌上明珠,却也是有志者的绊脚石。告别这些稀奇古怪的人为设限,海阔天空自然并非奢望。

做一只在计算机科学中自由飞翔的小鸟,不也是很好吗?