计算机专业大学生的系统能力培养
郑纬民
摘 要:计算机专业的大学生应该能够运用数学和物理原理,设计和开发计算机运行系统,包括中央处理器(CPU)、操作系统、编译系统和网络系统等;能够运用计算机基础系统原理,设计和开发计算机领域的专门系统,包括软件开发系统、数据库系统、嵌入式系统等;能够运用计算机专业系统原理,设计和开发各种应用系统。本文主要内容包括三个方面:首先分析什么是计算机系统能力,它的内涵是什么;其次从计算机创新人才培养需求和计算机产业战略发展的需求两个方面说明为什么要强调系统能力培养;最后从计算机专业课程体系建设环节需加强系统能力培养和计算机专业核心课程实验室系统能力培养的关键两个方面说明如何加强系统能力培养。
关键词:计算机系统;系统能力培养;课程体系;培养方案、实验教学
一、计算机系统能力的定义与内涵
计算机系统能力是指能自觉运用系统观,理解计算机系统的整体性、关联性、层次性、动态性和开放性,并用系统化方法,掌握计算机硬软件协同工作及相互作用的机制的能力。通过掌握软硬件接口和运行协同机理、软硬件逻辑关系和体系结构、功能设计和交互模式等知识内容,培养学生解决复杂工程问题的基本能力,最终实现计算机应用和创新的价值。
计算机系统能力的内涵主要包括三个方面。一是计算机基础系统能力。即学生可以运用数学和物理原理,设计和开发计算机运行系统,包括中央处理器(CPU)、操作系统、编译系统和网络系统,这是计算机最基本的系统,称为计算机基础系统。二是计算机领域系统能力。即学会运用计算机基础系统原理,设计和开发计算机领域的专门系统,例如软件开发系统、数据库系统、嵌入式系统等,称为计算机领域系统。三是计算机应用系统能力。即可以运用计算机专业系统原理,设计和开发各种应用系统,称为计算机应用系统。
二、为什么要强调系统能力培养
强调培养学生的系统能力,是计算机创新人才培养的需求,同样也是计算机产业战略发展的需求。
1.计算机创新人才需要具备系统能力
随着大规模数据中心的建立和个人移动设备的普及,我们可以清楚地看到,计算机人才培养强调的“程序性开发能力”正在转化为更重要的“系统性设计能力”。为了应对各种复杂应用,编写出高效程序,应用开发人员必须了解系统平台的底层结构,并熟练掌握其中的技术和工具。同时,要求在整体的系统层面综合设计,通过软硬件协同实现开发方案的最优化,以强大的底层技术来保证各项复杂功能的高效实现。正如图灵奖得主David Patterson指出:“在异构计算的时代程序员必须对于算法和硬件模型融会贯通,才能写出高质量的代码。因此,未来的程序员还必须懂硬件!”
2.计算机产业战略发展的需求
随着我国计算机产业的快速发展,崛起一大批高水平的IT企业,计算机产业也已成为国家创新的龙头,为我国经济發展发挥了重要支撑作用,但仍存在缺乏核心技术、发展频受扼制的问题,这对计算机专业人才的能力提出了新要求。与此同时,我国高校在世界上的排名大幅度跃升,我国高校的计算机专业直接和世界一流大学相关专业合作交流与竞争越来越紧密。高等学校尤其是计算机专业对人才培养的定位有了提升,迫切需要培养学生解决复杂工程问题的能力,培养具备推动计算机学科发展的优秀人才。学生个人的成长空间也将大幅扩展,成为各行各业的领军人才、领袖人物。
系统能力是支撑计算产业发展的基石。从20世纪60年代的大型机时代、80年代的微型机时代,到90年代的互联网时代,再到进入21世纪的云计算时代,正是计算机系统的不断迭代,推动了计算机产业的蓬勃发展。计算机产业复杂性的提高与网络化发展,对系统能力的培养提出了更高的要求。
系统能力是大数据产业发展的基础。大数据蕴含的巨大应用价值和潜力已被广泛认知,数据的分析、数据价值的发掘与应用、算法的时效性等均依赖于数据计算系统,数据的存储和访问依赖于数据存储系统。因此,高效能、高可扩展、高可用的大数据依赖于计算和存储系统,是大数据产业发展的基础。
系统能力是人工智能发展的核心实力。人工智能作为深刻改变社会生产力和生产关系的颠覆性技术,正引领着新一轮科技革命和产业革命向纵深推进,重构着人类的生产、生活方式以及思维模式。人工智能的发展作为一门学科独立存在,到今天已经有60余年的历史了。1956年达特茅斯会议首次提出了“Artificial Intelligence”(人工智能,AI)这个术语,1959年Arthur Samuel 又提出了“机器学习”这一定义,推翻了以往“机器无法超越人类,不能像人一样写代码和学习”这一传统认识。但到了20世纪70年代,由于机器翻译等项目失败以及一些学术报告的负面影响,导致人工智能发展陷入低谷。1985年,又出现了更强可视化效果的决策树模型,1997年人工智能Deep Blue战胜了世界国际象棋冠军,近年来深度学习广受关注、大数据时代的到来,以及AlphaGo围棋人机大战,人工智能真正成为世界各国赢得全球科技竞争主动权的重要战略抓手。纵观人工智能的发展历史可以发现,人工智能设计的核心技术主要包括算法(深度学习)、算力(以GPU、TPU等为代表的AI芯片及超级计算机)、数据(大量训练数据集),而这些都需要计算机系统的支撑,都是建立在系统能力之上。
系统能力是解决卡脖子技术的关键能力。2018年,《科技日报》相继报道35项“卡脖子”技术,包括芯片、操作系统、核心工业软件、核心算法、航空设计软件、数据库管理系统等。习近平总书记在网络安全和信息化工作座谈会上的讲话中指示,没有网络安全就没有国家安全。解决这些“卡脖子”难题,需要我们聚焦核心技术,加大科研投入,培养计算机人才的系统能力。
系统能力是进行高端工程的关键能力。高端工程研发有别于大学中常见的基础研究工作,既要有先进的技术和理念,又要产出实际可用的系统特别是产出基础性平台。基础性平台的影响是非常深远的,以加州大学伯克利分校为例,他们研制的BSD操作系统、PostgreSQL数据库,以及最近的软件定义网络SDN,都对学术界和产业界产生了极大的影响。系统能力关注交叉性、基础性和工程性,是进行高端工程的关键能力。
三、如何加强系统能力培养
1.课程体系建设环节需加强系统能力培养
加强系统能力培养,有必要对计算机专业课程体系进行改革。这方面一些国内外著名高校计算机专业的系统类课程设置做了一些很好的示范。以麻省理工学院(MIT)培养方案为例,该校开设了Introduction to EECS via Robotics,Introduction to EECS via Communicatio n Networks,Computation structure,Microelectronic Devices and Circuits,Electronics Project Laboratory,Computer System Engineering等基础课程,课程体系纵向贯穿,系统能力培养课程占培养方案较大比例,系统能力培养贯穿本科几乎所有学期。如系统类基础课6.01 Introduction to EECS 1,课程内容纵向贯穿Programming,Python,Control systems,Inference,Probability,Sensons and effectors,Circuits and transducers等多个知识点,系统能力自底向上培养综合贯穿,实践性强。再如卡内基·梅隆大学(CMU),该校计算机专业同样注重在课程体系中贯穿系统能力培养,以15213 Introduction to Computer System为例,该门课程包括Machine level code and its generation by optimizing compilers,Performance evaluation and optimization,Computer arithmetic,Memory organization and management,Networking technology and protocols,Supporting concurrent computation等内容,从编程者角度理解计算机系统的运行,课程体系纵向贯穿。
但是,我们必须清楚地认识到,目前我国系统能力培养仍然面临着诸多问题。一是教学理念落后。专业人才培养重知识、轻能力,尤其是对全面的系统能力培养认识不足。二是教学目标单一。高校普遍采用统一的教学目标和考核标准,无法进行个性化培养和因材施教。三是教学手段陈旧。各门课程独立规划、独立教学,造成了知识体系中知识点冗余和衔接关系脱节。从教学方法上看,各门课程采取“横向”分析式教学方法较多,但很少采用“纵向”视角,系统性实验手段缺乏。
因此,我们系提出了系统能力培养课程体系建设的新思路:分层、双向。计算机科学内涵丰富,从底层到顶层,涵盖CPU、操作系统/编译系统、网络系统、数据库/软件设计/嵌入式系统、应用等多个层级。基于编程视角,课程体系自顶向下,深入贯通;基于系统视角,课程体系自底向上、综合贯穿。
清华大学计算机科学与技术专业贯彻统一的系统能力培养教学理念,以纵向视角组织教学内容与方法,采用基于工业标准的统一教学实验平台,先后开设了数字逻辑电路、汇编语言程序设计、计算机组成原理、操作系统、编译原理、网络原理6门课程,实现了课程体系的纵向贯通。让学生具备自主设计和实现一台简单完整计算机的能力,培养学生系统观点,掌握系统方法,增长系统能力。系统能力培养课程横纵向梳理知识体系,以明确各课程教学内容,建立计算机系统层次间的联系。通过明确系统培养概念,统一知识体系,确保纵横向知识点完备。横向角度确定各课程的主要知识点,避免冗余,并确保同层次内容的完整性;贯彻“纵向”视角,明确层次之间的衔接点,从各个课程的相互关系(也是计算机系统各个层次的相互关系)入手,对完整的计算机系统进行全面说明(见图1)。
2.实验是计算机系统能力培养的关键
系统能力培养的关键在于实验教学。对于系统能力培养而言,理论知识的应用、系统概念的建立、动手能力的训练、创新素养的习得,都与实验教学密不可分。实验体系的建立作为课程体系的重要组成,要衔接课程知识,面向系统整体。
目前国外高校的系统类课程实验体系较为典型的有麻省理工学院电气工程与计算机科学系(MIT EECS)。比如,其课程方向Course 6-3: Computer Science and Engineering就包括从系统入门到专业课程,再到系统综合的4个层次的完整实验体系。其中,第一个层次一般实验包括电机控制等简单入门课程(简单实验,例如电机控制等),第二个层次是专业课程(课内实验,例如ALU设计、时序逻辑等专业课程实验),第三个层次是独立的实验课程(独立设课,主要包括是机械臂控制等系统应用),第四个层次包括多核处理器设计等项目实验课程(选修实验,例如多核处理器设计)。比如系统类课程实验6.004 Computation Structures,涵盖RISC-V架构、模拟器进行实验、单周期处理器、运行排序程序等内容。再如斯坦福大学计算机科学系(Stanford CS),其課程分为System,Theory,Track和Electives四类。其中一般实验包括理论课程(编程实验,如CS 140中包含5个操作系统小实验)、实验课程(独立设课,大实验,例如 CS 140E中需要完成一个操作系统),系统实验包括系列课程CS 107,CS 107A,CS107E,其中CS 107实验主要是C语言编程,观察底层硬件如何支持程序运行的;CS 107E实验是大实验,学生组队在树莓派上进行一个软硬件结合的应用。加州大学伯克利分校电气工程与计算机科学系(UC Berkeley EECS)课程分为Lower Division (必修)和Upper Division(20学分)两大部分。一般实验包括理论课程(简单实验,如CS 61中的部件实验)、实验课程(独立设课,综合实验,如 CS61CL中使用C语言设计处理器);系统实验EECS151LA/B要求设计RISC V的3级流水线处理器,带Cache和图形加速,还要实现一些应用,无操作系统,A为模拟器上实现,B为FPGA上实现。
纵观国外系统类课程实验体系,我们不难发现,国外系统类课程实验体系一般都有专门的实验课,课程实验工作量大,设计型实验居多,大部分综合实验是以团队形式完成的,要求本科期间完成一个综合的系统层次实验,这些特点有助于培养学生的系统能力。但是也存在一些问题,比如较少全面结合操作系统、编译等课程,课程内纵向贯通较少,课程间联系较少,以虚拟仿真为主,等等。
清华大学在参考国外系统类课程实验体系的基础上,基于自身特色,构建了多目标、递进式、迭代化的实验体系。为满足不同学生个性化培养目标要求,科学构建了初、中、高三级实验,逐步递进、迭代培养学生的兴趣与能力。实验体系逐步增加难度,减轻了学生的学习压力,缓解了畏难情绪。在该实验体系中,能运行程序的计算机系统是关键。学生在完成程序设计、数字逻辑设计等课程学习后,即可参与初级实验,设计可以运行监控程序、具备基本输入/输出功能的计算机,运行交叉编译的应用程序;开展中级实验时,需要设计能够运行教学操作系统的计算机,并运行编译后的应用程序;高级实验中则需要设计运行支持网络协议的系统,搭建路由器。学有余力的同学可以开展进一步的实验,要求设计的实验计算机系统可运行Linux等开源操作系统,开发路由器连接多台教学计算机,并能构建网络系统。
清华大学基于上述要求,搭建了统一、规范、标准的实验平台——THinPad实验平台(如图2所示)。该平台能够实现课程间统一实验环境、统一规划课程实验、统一实验平台和工具,目前能够支持数字电路实验、处理器设计实验、操作系统实验、路由器实验等实验内容。我们系基于FPGA自主研发了硬件平台(ThinPAD I型和ThinPAD II型),软件平台也覆盖了模拟器、汇编器、仿真终端、数据通信程序、监控程序、GCC编译器、汇编与链接工具等,持续迭代和优化完善了实验环境。
但是,在实验中实体主板往往存在以下问题。一是实验板在学生手中容易损坏,维护成本高;二是实验时接线复杂,使用不方便;三是无法满足MOOC等线上課程要求。我们系依托信息化技术,进一步开发了Thinpad Cloud在线实验平台。该平台采用纯网页在线实验环境,随时随地可用,不需要额外设备,为学生的学习带来极大便利;后台依托真实硬件支撑,确保实验结果准确可复现;对实验者透明,学生不用修改设计来适应在线环境;面向MOOC需求设计,支持批量部署,适合大范围推广与应用。
[责任编辑:余大品]