Skip to content

计算机科学专业的学生应当学习大学物理吗

中国的计算机科学教育因历史与体制的惯性而显得过时,常常包含物理这类不相关的科目。

这个问题可以看作教育系统中历史惯性叠加过时改革的典型案例,而这正切中了问题的核心。

坦率地说,我很难容忍人们为维护这种状况而给出的种种辩解。这不过是教育改革步履缓慢所留下的残余后果,却有人把它说成是「培养逻辑思维」,或宣称「大学不是训练营」。这样的论调完全站不住脚。

事实上,即便让计算机科学专业的学生多学一些数学而不是物理,也会远比现在更有益。

计算机科学从根本上区别于土木工程、机械工程、电子工程、化学工程等传统工科。这些传统学科植根于物理,而计算机科学深深扎根于数学。

传统工程学科主要与物理世界打交道,其基础在于自然科学,尤其是物理,并且拥有数十乃至数百年的历史。这些学科的核心关注点是对物质世界的改造。

试想一下:作为机械工程专业的学生,绕开力学是不可能的——不然你如何设计齿轮?如果你学的是精密仪器,那么光学与电子学知识对设计传感器而言不可或缺。对化工专业的学生来说,量子力学和热力学是理解分子相互作用的基础。同样,水利工程需要精通流体力学。

每一门传统工程学科都建立在物理等自然科学之上,致力于运用这些原理去重塑物质世界。

与此形成鲜明对比的是,计算机科学走的是一条截然不同的道路。它是一门「形式科学」,完全是人为构造的,其大部分概念直接抽象自数学。

现代计算机科学理论起源于艾伦·图灵(Alan Turing),他在可计算性理论方面的工作运用纯粹的数学构造来定义「计算机」这一概念。这些理论基础后来被付诸实现,创造出了各种类型的计算系统。

计算机科学的本质是研究理论框架。尽管工程师会应用这些框架来设计芯片和系统,但该学科本身关注的是抽象结构与模型,而非有形的物理世界。

形式科学——如数学、逻辑学和计算机科学——强调的是抽象的逻辑构造,而非物理现象。它们依赖演绎推理与逻辑证明,而非经验观察,这使得计算机科学与数学紧密相连。

例如,计算机科学中的许多基础概念,如图灵机、操作系统模型、冯·诺依曼(Von Neumann)体系结构,都是数学抽象。这些构造并不存在于自然界,而是人类智慧的产物。

甚至连函数、指针、参数、运算符等编程概念,以及复杂度分析这类领域,也都植根于数学模型。算法设计就是这种对数学抽象依赖的典型例证。

那么,有什么理由要求计算机科学专业的学生学习物理呢?难道他们要去计算搬运服务器时涉及的力?还是要去测定硅的熔点以便制造 CPU?

坦白地说:计算机科学本质上就是数学抽象的汇集。考虑到这门学科的起源,它与数学的契合完全不足为奇。

对于主张「我们学电子学是为了设计 CPU 电路」的人,必须澄清一点:数字电路和逻辑门同样是数学抽象。芯片的物理实现属于电子工程的范畴,而非计算机科学。计算机科学的职责是提供模型、理论与蓝图,而物理实现则由其他领域来完成。

此外,如今大多数计算机科学毕业生从事的都是软件开发工作。指望他们去设计 CPU 并不现实。

在中国,计算机科学直到 1980 年代、高考制度恢复之后才正式成为一门大学学科。然而,计算机科学的理论基础早在第二次世界大战期间就已经确立。等到中国将其纳入教育体系时,我们落后于西方国家已不下半个世纪。

在那个年代,计算机在中国十分罕见,能够讲授这门学科的人才更是稀缺。由于缺乏可以效仿的国内样板,我们只能照搬他人。因为物理是其他 STEM 领域的常设课程,它也就被塞进了计算机科学的课程体系。

然而,我们至今仍深陷于这些陈旧的作法之中。近四十年过去了,我们的计算机科学教育依然停滞不前。例如,某些高校至今仍用 VC6 讲授 C++,而这一工具按当今标准显然早已过时。

总而言之,中国计算机科学教育的种种缺陷可以归因于历史惯性以及过时的改革。与传统工科植根于物理不同,计算机科学以数学为基础,专注于抽象模型。在课程中纳入物理这类科目,反映出我们未能适应这一领域自身的独特性质与实际需求。