2024 年春季学期,我参加了学校的课程教学评估,参评课程为计算机系统工程导论,这门课既是双一流专业“计算机科学与技术”的核心专业课程,又是卓越人才班“软件工程”的核心专业课程,目前在国内尚无对标课程。课程虽名为“导论”,但课程目标和内容绝非科普漫谈或介绍性入门,而是要引领学生思考和建立计算机系统设计的原理性与系统性思维,为学生今后能从事更深入、更复杂的系统设计打下基础。课程着眼于系统工程能力培养,抽取 6 门系统类核心课程和 3 门系统类选修课程中的设计原理,在复杂性递进的系统设计主线上不断进行设计探讨、冲突分析、权衡取舍和迭代改进。课程的目标既包含了概念学习,也要考虑如何能让学生从课程中得到有助于未来成长、有别于个人自学的长久受益,让学生产生概念和知识之外的能力和思维提升,这既是极大的挑战,也蕴含着极大的机遇。
计算机工程师最重要的应当学会什么?计算机系统设计的第一性原理又是什么?如何重现系统设计中遭遇的实践冲突?如何培养学生的文献、评判、工具和交流能力?应对复杂性是永恒的主题,实践则是复杂性最根本的来源,计算机系统是对人类认知的机械性重构。面对这些问题,我尝试从经典文献中寻找灵感,使用了 80 余篇计算机系统经典设计文献,从历史中寻找计算机设计的基本原理。在课程教学中设计了 8 个计算机系统属性和冲突主题实验、8 次系统经典文献精读与评价、8 次综合性设计习题。在此学习过程中,学生不断强化了英文文献检索阅读能力、系统分析评判能力、使用工具的实际动手能力。课程还从基础软件模块和基础硬件模块的构造出发,应用了概率统计、排队论、图论、博弈论等数理知识和 Python 科学计算库、UNIX 系统软件等计算工具,使学生掌握使用数理知识、学科知识和计算工具进行系统设计的基本方法。课业压力虽大,但学生完成课程学习后,可基本建立计算机系统 60年发展形成的宏大知识体系的宏观视图,并以此指导未来更加具体和细微的方向学习。
为了达成培养优秀计算机工程师的目标,在课程建设和授课中,遇到了很多困难挑战,也有很多收获,总结起来有以下几点:
1. 课程体系的重构势在必行,旧的教学内容与知识架构需要与时俱进。
2. 工程思维的培养还需加强,固化思维的表面化知识应该舍弃。
3. 坚持基于第一性原理的思考和问题求解永远是根本。如果只关注应用创新,缺乏基本原理的指导,无法产生革命性的创新成果。
4. 思政与工程伦理教育应与工程思维深度结合。二者都不是二元决策。
5. 当教学目标不再以知识点为核心,日常考核与考试频次就尤为重要。
回头来看,努力建好一门面向工程的课程,学生得到的收益远多于我们的付出。在大语言模型不断挑战人类工程师的符号设计能力的时代,我们只有不断培养学生解决复杂工程问题的能力,才能应对智能语言大模型时代对工程师的挑战。我们只有培养具备深厚基础的人才,才能早日破除我国信息产业“缺芯少魂”的局面。