张 睿,郭东伟
(吉林大学 计算机科学与技术学院,吉林 长春 130012)
信息时代计算机应用和互联网技术的飞速发展,对于计算机专业人才培养,特别是作为高等教育基础的本科生培养,提出了更高的要求,从传统的强调“程序开发能力”拓展到要求学生具备“系统性设计能力”[1]。计算机专业人才培养注重系统能力的提升,对于贯通计算机软硬件体系,完整构建本科生知识结构,实现从源代码到芯片指令的全流程理论教学与实践教学都提出了改革的需求[2]。
芯片级别的指令操作理论不仅要求高投入的硬件实验环境支撑,要求高素质的教学管理团队作为核心原动力,而且要求学生具有较强的接受能力和对于未成系统抽象知识的理解能力。对于一般本科院校的投入而言,更新一整套硬件实验环境就会占据教学改革经费的很大一部分。相较于可度量的硬件升级,可以通过加大投入迅速推进,教学团队和教学体系的演进不可一蹴而就,且不可量化,更不会立竿见影,因而更加艰难。以建设计算机系统基础(ICS)[3]、计算机硬件系统设计原理[4]、计算机系统基础实验[5]等为目标的课程体系改革已经初见成效,不仅打通了若干传统课程的知识界限,明确了交叠知识点的分工,以及知识群之间的支撑与关联,还提升了授课教师的自身综合素质,从而提高教学的质量,增强系统能力培养的效果。
如果说对于“教”的硬件环境和教学团队/资料的提升,已经取得了阶段性的进展,那么对于“学”的过程中,如何激发学生学习兴趣,自觉培养自身的计算机系统能力,目前仍然是面向系统能力培养教学中的难题。开设计算机导论课程,帮助学生建立基本的计算机体系概念,效果并不尽如人意。期望通过“蜻蜓点水”式的导论,指导学生使用未接触过或未成体系的底层知识结构——CPU 指令层级的设计思维,以引导课程的学习,在教学实践中效果不佳。虽然软件理论专业本科课程的贯穿式改革如火如荼,但是学生“系统观”的建立很难通过前序课程的讲授建立起来。在系统能力培养模式的构建过程中,普遍存在3 方面的问题。
(1)教师对必要性的认识程度不足,对改革存在畏难情绪。部分教师的思想与先进的教学和培养理念脱节,对于计算机专业本科生系统能力培养的社会要求缺乏了解,没有引起足够的重视。部分教师安于现状,对课程体系改革怕难、怕担责任、怕花费精力、怕受埋怨;对于教指委提出的面向系统能力培养的教学改革,缺乏主观能动性。
(2)学生对教学模式改革成果不认可。针对系统能力培养贯通组成原理等硬件相关课程的改革已经在全国各层次高等学校展开试点,但初期的教学效果并不符合学生的预期。学生,特别是软件工程等专业的本科生对于硬件实验的目的不够明确,认为底层指令体系相关理论和硬件实验对于软件开发实现能力提升没有明显效果。这种反馈令部分老师对于改革的方向产生质疑,缺乏动力。
(3)自底向上的知识体系构建方法不完备。计算机硬件体系结构和CPU 指令体系是系统能力的底层,是系统能力培养模式中,学生需要构建的系统观的重要组成部分。但是由于现代计算机体系结构的飞速演进,学生无法直观看到高度集成的计算机硬件体系,难以快速地建立这一层次的知识体系,从底层向高层的体系构建方向困难重重。
针对以上问题,采取一种自顶向下的系统能力培养模式,主要包括以下3 方面。
(1)对标工程教育认证各项指标点,细化系统能力培养的评价体系。通过深度调研,获取企业、教师、学生等各个角色对于系统能力培养的细节要求。
(2)以常见软件现象为出发点的渐进式计算机系统知识体系构建方法。以软件为核心,带动实际系统能力应用需求,发掘“掩藏”在硬件中的内存管理模式、并发机制、安全机制等顶层需求映射,梳理从实际软件问题出发的、逐层向下的纵向知识脉络。
(3)通过系列讲座、课程贯通、综合实验3个步骤,实现渐进式的软件系统能力培养。
ACM/IEEE 在2013 年公布了计算机教育教学方案[6],对于18 个知识域进行了梳理,相较前版方案,更加强调系统知识和系统能力的培养。教育部计算机专业教学指导委员会组织了《高等学校系统能力培养研究》项目,对于本科生能力培养和实践教学体系进行了研究,全国共有4 批次102 所高校成为试点高校参与。同时,由教指委主办的“全国大学生计算机系统能力培养大赛”已经成功举办两届,为全国各层次高校系统能力培养提供了展示的舞台。国内多所知名高校如国防科技大学、清华大学、北京航空航天大学、中国科技大学、中国科学院大学、上海交通大学、南京大学、西北工业大学等,已经在面向系统能力培养的课程体系建设、教材与实验指导材料编撰、支撑工具研发与应用等方面取得了丰硕的成果。2019 年,教指委又成功立项“智能时代计算机专业教育研究”专项,研究“移、物、云、大、智”时代多学科交叉融合趋势下计算机系统能力培养的新问题。
对于传统计算机专业教育课程体系存在的常见问题,很多学者有切中要害的分析,如缺乏贯穿整个计算机系统的基础课程,忽视课程之间的衔接和关联,固守“经典”知识而忽视并行、分布式等计算架构和CPU、FPGA 等新体系对传统知识体系的影响。
从就业需求入手,针对我国高校本科教学规模庞大的现实状况,以应用软件层面的实际工程问题为出发点,可采用自顶向下,逐步深入CPU指令层实现的系统能力培养思路;同时,从目标、措施和步骤层面,建立一套可行的培养方法。
1)明确目标——入手点。
经过梳理近年来的毕业生就业去向与用人单位需求发现,大多数用人单位很难对于毕业生的系统能力层次进行明确要求,招聘条件往往是以工程实践为导向的,因此以面向就业目标的系统能力培养为入手点,形成“程序实现”“程序安全机制”“程序测试方法”等面向软件实现细节的入手点,从软件的角度,牵引系统能力培养的实施。
2)融会贯通——措施。
构建以系列学术讲座、系统化课程建设以及综合实验为主要措施的培养措施,其中,系列学术讲座作为符合我院实际情况的措施,进行了详细的规划。
首先,根据入手点确认讲座主题。以软件问题为主线设置题目,有利于扩大讲座的受众,避免学生和教师产生畏难情绪。
其次,以自顶向下的方式组织讲座的内容。邀请资深教师,以软件问题为牵引,自顶向下地将应用软件、系统软件及硬件层知识进行贯穿,培养学生系统性分析解决软件问题的能力。
第三,以讲座形式不限年级地多次参与。讲座形式灵活,可以作为课程的预热、补充和延伸。相较本科一年级的导论课,讲座时间短、针对性强、目标明确;相较本科四年级的就业指导课,讲座有内容、有方法,融会贯通。讲座不限制学生的年级,都可以参与,效果明显。
最后,兼顾重要课程的知识体系,在集体备课、贯通课程的同时,将讲座和课程关联,为学生进一步探索感兴趣的知识和内容起到引导作用。
3)渐进发展——步骤。
以“尖子班”学生为试点,要求必须参加系列讲座,并且通过调查问卷等获取反馈,提升讲座的质量;逐步拓展到普通班学生,要求一年级必听,其他年级选听;同时,根据课程贯通的实际推进步骤,对于讲座内容进行调整,以适应整体的架构。
自顶向下的软件系统能力培养模式的核心思想在于软件层面的问题驱动,即从实际软件工程问题出发,通过分析“常见”的应用层软件问题,逐步深入,自顶向下,渗透到操作系统层,再到指令系统层的结构,从而完成从软件功能到指令层的映射,由浅入深地构建计算机系统知识体系。
一个应用层面的实际问题——C 语言程序运行的知识脉络,从内存布局,到函数调用、数据访问、缓冲区溢出(管理)、垃圾回收(机制)自顶向下地引导知识体系的构建。以一年级本科学生对于C 程序设计课程的掌握情况,可以初步理解程序运行的概念。通过已理解概念向纵深层次的延伸,紧扣“程序执行”的主题思想,将内存布局、数据访问、函数调用、缓冲区管理、内存垃圾回收等概念贯穿到硬件指令集和存储空间层面,激发学生学习兴趣,克服学生畏难情绪,采用先突破一点,再带动一面的策略,实现知识体系的逐步构建。
该培养模式包括两个维度的研究内容。
1)软件系统能力指标体系研究。
针对计算机系统能力的概念,即在掌握计算机系统内部各软件/硬件部分的关联关系与逻辑层次的基础上,培养学生以计算机技术为核心的应用系统的能力。通过调研多个层面的相关人群对于系统能力的实际需求:毕业生用人单位、授课教师以及课程改革试点收益班级学生,对于推进系统能力培养改革具有重要意义。
首先,对计算机应用系统的概念达成共识,即不仅仅局限于大型系统软件,如计算机操作系统,还包括领域应用系统,如工业制图软件、地理信息系统等;“一般”应用系统,如简单的管理信息系统、移动应用等。学生具备了开发操作系统级大型应用的能力和开发简单的管理信息系统的能力,但从开发这3 类应用系统的市场需求量分析,开发“一般”应用系统的人才需求占绝大多数。
其次,分析本科毕业生就业情况。绝大部分计算机相关专业本科培养的人才输送到了各行各业的信息化、智能化建设岗位。用人单位的实际需求可以分成计算机基础知识、应用领域知识、实际工程问题解决能力等方面的要求。我院毕业生在计算机基础知识的准备方面能够基本满足用人单位的需求,但在领域知识的运用及实际工程问题解决方面,还存在一定差距。这衍生出一种非计算机专业特性的能力需求:学习能力需求。在信息科学领域技术、理论飞速发展的时代大趋势下,在终身学习的历史大潮中,学习能力和良好的学习习惯是毕业生质量的重要指标参数,但目前还没有有效的度量标准。
第三,通过校企联合、产学研合作等途径,丰富学生行业领域知识;通过学科竞赛(ACM、系统能力培养大赛等),拓展学生的系统思维模式、锤炼实际工程问题解决能力的措施得到教师和学生普遍认可。
第四,把握10 余年来教育部专业认证标准的演进,分析以OBE 理念为指导的教学效果评价体系在毕业生质量衡量过程中起到的重要作用。对于系统能力培养教学效果的评估而言,工程教育认证分解指标点评价体系侧重点更加广泛,但不够精准。在认证过程中,将毕业要求分解成12 个指标点,其中第3 点中的“掌握计算机专业领域系统设计、集成、开发及工程应用的基本方法,能够综合运用理论和技术手段设计解决复杂工程问题的方案,设计满足特定需求的计算机软、硬件系统,能够将创新意识体现到设计环节中”对于系统能力给出了有针对性的要求,但缺乏对于毕业生系统能力的细节评价标准和手段。
最后,在学生评价系统能力改革相关课程的学习效果调查中,普遍反映面向CPU 指令系统的MIPS 处理器实验课程与前序课程的关联性不强,不容易把握该课程中实验目标与其他主干课程的内在联系。在数据结构、算法分析等传统软件理论与技术相关课程中,该课程对新方法、新工具、新思维的要求较高,与传统课程在内容和教学形式等方面有较大差别,对学生个人能力要求较高。一方面我们可喜地看到课程改革尝试得到了认可,另一方面对于整个课程体系改革的广度和深度也提出了更高的要求。
综合各种调研的结果,确认以软件带硬件的课程改革方向,采用自顶向下的软件系统能力培养模式。
2)软件问题导向的贯穿式知识体系建设。
以北京航空航天大学等多所国内知名高校引领的贯通式课程体系改革已经初见成效。课程的贯通式改革,核心目标是明确知识的关联。在构建关联的系统性知识体系角度,我们做出了3 方面的尝试。
首先,对于学院计算机相关专业培养计划中现有课程的课程教学大纲进行语义匹配,得到章节、知识群、知识点等条目的语义匹配结果,挖掘现有课程体系中课程之间的关联关系。从得到的结果看,多门课程存在知识点交叠的状况。针对交叠状况,组织相关课程教学团队,进行跨课程研讨,以明确知识点/群的归属,实现课程之间的清晰分工,但此项工作的成果还达不到贯通式的课程改革标准。
其次,针对不同年级的学生,特别是一年级刚入学的新生和三年级下学期末即将完成大多数专业课的准毕业生,进行问卷调查,分析学生对于软件问题的贯通式解决方案的认识。2016 级软件工程专业卓越工程师班和计算机专业唐敖庆班(教育部“基础学科拔尖学术培养基地”吉林大学计算机科学与技术学院实施的拔尖班级)学生中,有28 人参加了调查,占总人数的50%。对于C语言程序的软件执行问题,我们设计如图1 所示的问卷题目。每个题目涉及一个软件问题,包括“程序运行模式”“输入输出与系统调用”“并发”“B/S 架构应用程序的指令层实现”以及“应用系统安全”5 个主题。通过选项调查学生对该主题相关知识的了解程度。
图1 调查问卷题目样例
在所有收回的有效问卷中,学生的反馈如图2 中的柱状图所示。图中的横轴代表问卷的题目代码,其中第2 题如图1 所示,纵轴代表的是学生评估的分数总和。其中,“了解”计1 分,“一般了解/不清晰/不太了解”计0.5 分,“不了解”计0 分。针对不同的题目,问卷设计了4~6 个选项,图2 显示了学生对每个主题的各相关知识点/群的了解状况。
图2 软件问题相关系统知识了解情况调查结果
从图2 中我们可以看到,在所有主题中学生对于知识点的了解程度。针对“程序运行模式”这一编译原理课程单科几乎涵盖所有知识点的主题,学生的了解程度基本上达到了半数(14/28)以上,而对于诸如系统调用(第3 题)、并发(第4 题)等,几乎没有超过半数的学生了解。第4题第一选项调查的内容“单线程和多线程的区别和实现机制”是操作系统课程单科涵盖的知识群,所以学生的了解率达到了预期。对于B/S 架构应用(第4 题)和安全(第5 题)这两个需要综合考量且在单科教学中未涉及的主题,学生的了解率大幅度下降,谷值达到了2.5。
调查结果表明,虽然学生已经基本完成了相关专业课程的学习,但是对于常见软件问题在指令系统层面的相应知识了解和掌握程度低于预期。
在调查问卷的结果分析中,我们也发现可喜的一面。多数参加调查的学生都对这些主题很感兴趣,并且针对诸如“分布式系统实现”“GPU并行编译”“网络”“系统管理”“Python 的机器层实现”“大数据下的隐私保护问题”“系统权限获取与验证”“复杂系统构建”等问题,具有浓厚的兴趣。通过软件问题作为兴趣驱动,可以调动学生的积极性,验证了软件牵引的贯穿式知识体系建设的可行性。
作为重点本科高校,吉林大学的计算机相关专业对于学生系统能力培养模式现状进行了广泛的调研,在借鉴国内外知名高校先进经验的基础上,立足于本校在计算机软件与理论研究方面的雄厚基础,抓住人工智能研究大趋势,探索了一条以常见软件问题为核心、软件带动硬件理论、自顶向下的系统能力培养模式。
模式探索初期,利用调查的方法对于系统能力培养与毕业要求能力指标点的对应方式,形成了细化的系统能力培养目标,确立了以软件问题为导向的系统能力培养思路。在模式探索的中期,尝试对计算机专业现有课程体系知识点关联的挖掘与关联,并动员和推进跨课程团队的交流研讨,明确知识点/群的依赖和界限,为模式探索奠定基础。
对于常见软件问题进行梳理,在广泛选题、重点选拔的思路下,确立一系列的主题,形成以这些主题为核心的讲座模式,打破学生年级界限,帮助不同年级的学生逐步建立计算机系统知识体系。
迄今为止,该系列讲座已经进行了2 次,参与的学生人数明显增长。讲座之后的非官方调查显示,学生对于贴近已有知识体系的主题有亲切感,容易找到切入点和兴趣点,对于构建计算机系统知识体系有实质性的帮助。
吉林大学计算机专业正在探索一条有学校特色的、行之有效的软件系统能力培养路径。通过大量的调研和匿名问卷,摸索到了计算机软件常见问题对于构建计算机系统知识体系的重要牵引作用,通过系列讲座这种打破年级的交流方式,帮助学生逐渐建立计算机系统知识体系,取得了一定的效果。