刘 彦,赵 欢,杨科华,黄丽达
(湖南大学 信息科学与工程学院,湖南 长沙 410082)
近年来,我国提出并实施创新驱动战略,以互联网+、大数据、人工智能等领域的理论和技术突破促进传统产业的升级。技术的创新与实施需要大量具有创新能力的工程技术人才。人才的培养依赖于高质量的高等教育体系,高等工程教育需要持续为国家科技创新和产业升级输送满足新时代要求的新型工程科技人才。2017年,教育部高教司发布了关于开展新工科研究与实践的通知,并组织了相关的研讨,形成了复旦共识、天大行动和北京指南等新工科建设指导意见[1-2]。新工科人才培养新模式的内涵包括更新人才培养理念、重构培养目标和知识结构、转变培养方式等[3]。随着工程教育认证的逐步推行,推进新工科背景下的计算机类专业课程教学改革,确定新的课程目标与内容,并将以学生为中心和面向产出的教学实践落到实处已成为当前实际教学活动中迫切需要解决的问题。
新工科不仅是高等工程教育对未来工程发展新态势和新需求的回应,更是工程教育领域依据国家、产业和科技领域重大需求而进行的突破性变革[3-4]。新工科说到底是人才培养方式的创新,最终需要通过高等学校在专业设置、培养计划修订和课程教学实践中具体实行并落到实处。目前,以OBE为核心思想来重新梳理教学目标并改进教学设计和完善评价方法已经成为新工科背景下的课程教学改革的主要方法。OBE理念强调课程的设计者要能够回答“学生需要学什么,如何帮助、评价和确保学生取得既定的学习成果”这个核心的问题,一切的课程教学活动均需要围绕解决该问题展开。
计算机系统课程是一门面向计算机专业大类招收大学二年级学生的核心基础课,现有诸多教学环节中暴露出一系列问题。首先,学生计算机基础知识和操作能力水平不一,部分同学对课程教学内容的理解和完成有困难;其次,很多同学没有接触过基于命令行的编程和调试,从而对现场演示教学和课程实验的完成有困难;最后,教材内容比较丰富,涉及计算机系统的各个方面却又深浅不一,很多同学会有学了后似懂非懂的困惑。针对这些挑战,教学组以OBE理念中“以学生为中心”“反向设计”和“持续改进”为引导,从课程目标、教学体系和评价方法3个方面改革计算机系统课程的教学。
课程目标的制定应该遵循反向设计的原则,需要从专业培养计划和毕业要求的角度出发确定教学的出发点和内容。首先,合理制定课程目标最为关键的是由“教师想教什么”到“学生培养成才需要学什么”的观念转变。其次,课程目标应该使用纵向分解的方式以便于更好地评估课程目标的完成程度[5-6]。由传统的课程目标横向分解的方式转换为纵向分解是基于OBE课程教学改革的重要步骤。计算机系统的课程目标是让学生掌握计算机系统及其构成的基本组件与组成原理,了解程序执行的过程,掌握基本的编程工具,为解决复杂工程问题奠定基础。何为横向分解?即将课程教学目标按照学生需要掌握的内容由浅入深、由基本概念到系统设计与应用分层递进式的描述。计算机系统课程按横向分解的方式可以大致分为4个目标。
(1)计算机内部组成结构与数据通路基础,涉及计算机系统基本概念。
(2)学习和掌握Linux基本环境及编程基本工具,具备从机器代码级理解程序行为的能力。
(3)了解“程序”在计算机内部运行的原理和机制,为成为更有效率的程序员奠定基础。
(4)强化“计算机系统”的思维和能力的培养,获得使用复杂工具和方法设计和优化复杂程序和系统的基本能力。
上述横向分解的课程目标偏重于教学进程式描述,即随着课程进度的逐步完成,学生能够在学习结束时逐步达成4个目标。横向分解后的课程目标是层层递进的,因此,课程目标(4)的达成隐含了课程目标(1)—(3)的达成。这使得整个课程的达成度评估与持续改进无从着手。
使用纵向分解的思路,可以将计算机系统的课程目标分解为3个目标。
(1)建立计算机系统思维的基本概念,理解计算机的基本组成与结构;理解和掌握计算机系统中信息的表达方式和存储形式;了解汇编指令,掌握x86汇编编程基本方法;理解存储系统基本概念,掌握cache设计原理和评价方法;了解程序编译和执行的过程,理解重定位、库文件、栈和异常处理等关键环节;了解虚存管理,掌握物理地址与虚拟地址的映射方法。
(2)了解基于程序的性能评估方法,掌握基于实测数据收集与分析并进一步发现问题的方法;了解系统组成各个组件对程序性能的影响,掌握各个组件性能评价方式和指标;了解影响计算机系统性能优化的诸多限制,掌握系统优化目标及其可行性方案分析方法。
定理2 对于时延异构多智能体系统式 (1),考虑切换有向拓扑情况,各系统参数满足如下要求,则该系统获得编队控制一致性:
(3)能够使用常用的开发工具进行命令行程序开发、性能分析与评估;具备以理论分析为指导,通过程序实践进行系统优化的能力,掌握以实测程序和系统知识为基础进一步理解、归纳和总结技术问题并提出问题的能力。
课程目标纵向分解的关键在于课程目标之间是相互独立的、可评估的。通过课程目标的纵向分解,可以将具体教学内容、教学环节以及教学评估与课程目标直接关联起来,从而也为课程达成度评估和持续改进提供关键依据。
在保证教学质量的情况下建立公平、统一的教学体系,有助于进一步构建有效的持续改进机制。
计算机系统课堂讲授采用大班梯队课方式,总计48学时。4位老师组成一个教学梯队,分别完成4个部分的课堂教学任务:第一部分:计算机系统基础、Linux实验环境与编程、汇编程序基础;第二部分:数据的表示与存储、程序的机器级表示;第三部分:数据通路基础、程序优化与存储层次结构;第四部分:链接、进程控制与虚存管理。
《深入理解计算机系统》一书从程序员的视角出发,分别从程序结构和执行、程序在系统的运行以及程序间的通信和交互3个抽象层面介绍计算机系统相关概念[7]。该教材内容覆盖广,部分章节理论难度较大,对学生的计算机基础知识和上机动手实践能力有一定的要求。授课环节主要从以下两个方面进行改革。
(1)调整教学计划,将部分涉及基础操作的内容提前,增加各章内容的关联性,学习难度由浅入深。很多同学在学习之前只有简单的高级语言编程经验。为此,教学组特意将计算机系统概述、Linux系统基本操作、命令行编程与Debug调试基础和编译与链接基础等内容作为第一部分。通过该部分的学习和实验,同学们可以较好掌握Linux基本操作和命令行编程基础,了解基本的Debug命令并查看寄存器和汇编代码。同学们首先学会建立自己的系统环境尤为重要。教材上有大量的代码示例均可实际运行与调试,从实际操作入手亦可有效提升学习兴趣和主动性。此外,课堂教学第二部分的主要内容是程序的机器级表达,汇编语言是难点和重点。但如果学生在此之前没有掌握命令行编程和反汇编基本方法则更加难以理解教材内容。从教学组近年来的教学效果反馈来看,此处教学计划调整取得了明显的效果,同学们在课程实验和期末编程题的考核中成绩均有提升。
(2)教学梯队授课,由4位不同风格的教师同讲一门课,博采众长并增加课堂活跃度。对于梯队授课的方式在实际执行中能否取得良好的教学效果有过不少质疑,主要集中在两个方面:其一,梯队授课通常使用大班授课,学生课堂听课效果不佳;其二,一个学期4位老师上一门课会不会让学生觉得无所适从?会不会让老师无法掌握学生的学习情况和进度?从今年教学实际效果上看,以3~4个行政班为一组进行梯队式授课教学效果较为理想。首先,学生有机会接触和了解研究方向和教学风格各不相同的4位老师。比如,有的老师喜欢以代码展示开始,通过实际代码的分析对基本概念和知识点进行讲解;有的老师教学安排严谨,将枯燥繁杂的指令系统娓娓道来;有的老师结合自身科研经验分享计算机系统程序优化和存储系统设计中的细节。以4周为一个阶段的授课时间,既可以让每位老师有充足的时间讲授1~2个专题,也有助于让学生在一个学期的课程学习过程中始终保持新鲜感和好奇心。其次,虽然大班授课一位老师只讲4周,但是每位老师需要全程参与其所负责的行政班级的小班讨论。从学生的角度来说,每个行政班还是有一位主讲教师对其教学活动和成果进行全程跟踪并最终做出评价。
笔者所在学校的小班讨论课由教务处统一排课,以1个行政班为单位、每2周一次(2学时)。每位主讲教师和1位助教负责2~3个班的小班讨论课。小班主讲教师将整个学期跟班上课指导,因此可以弥补大班授课带来的对班级同学学习进度掌握不足的情况;小班讨论课的内容自主学习和课程补充相结合、自由讨论为主并辅之以答疑,形式灵活多样,鼓励团队合作,必须实际操作演示。
小班讨论课的主要问题有:第一,课程助教由在读研究生担任,临场组织和引导能力有限;第二,如何调动学生的学习积极性,增加讨论的活跃度和深度。为此,教学组要求担任课程助教的研究生同学跟大班听课,并且每学期聘用一半以上做过此课程助教的研究生担任助教。与此同时,由于主讲教师会全程跟班参与小班讨论,对讨论课的进程和质量可以有一个总体的掌控。小班讨论在几个方面成为课堂授课的有力辅助:第一,小班讨论内容的安排是主题讨论和课程内容补充相结合;第二,组织形式灵活多样,鼓励团队合作;第三,时间充裕,有助于核心知识点的巩固和实际操作能力的检验。从近年的教学实践来看,小班讨论成为一个培养团队合作精神、强化课堂理论知识并督促实践展示的有效形式。
以往的教学评价不足之处在于评价方式单一、考核内容与课程目标关联性不明确,以及持续改进机制不完善等方面。教学组将原有的以“平时成绩+期末考试成绩”来评估学生学习效果的方法调整为多个教学环节、分目标综合考核方法。考虑到大班授课时不同授课教师打分的主观差异性给出规格化的集体打分指导原则。
1)考核方式。
本课程计分教学环节分为课堂及作业、讨论课、课程实验、期中考试和期末考试。期中考试为机试,由考试系统给出百分制成绩,期末考试为闭卷笔试,由阅卷教师给出百分制成绩。其他教学环节使用先分档评价再规格化评价的方式。细化后的考核方式侧重点有所不同。“期中考试”使用机试,以选择题为主,主要考查计算机系统相关基础概念的掌握情况;“期末考试”则以编程和系统设计分析题为主,主要考查关键知识点的掌握情况以及实际应用分析的能力;其他3个计分环节则可以针对整个教学环节分别给出合理评价。
2)教学各环节教学检查与成绩评定基本安排。
每位教师为其所负责的小班进行课程成绩评定。助教负责批改作业,参与小班讨论课和实验检查并记录和评价。考虑到本课程上课班数较多、梯队授课以及助教人数多(每班1位)的情况,使用“教学过程分档化评价”与“期终总评规格化评价”相结合的评分方式,并分别给出如下评分标准。
(1)教师及助教的“教学过程分档化评价”评分标准。①作业。主要考核学生对每堂课知识点的复习、理解和掌握程度。平时作业以教材习题为主,目的是检查学生对知识的掌握情况以及帮助学生巩固所学各章节的知识。②课堂。主要考核学生学习态度,以便及时发现教学过程中的问题,保证教学过程中学生的参与度并及时解决学习中的问题。课堂考勤采用随机抽查方式,每缺席一次课从该部分成绩中降半档处理。③讨论课。小班讨论各班分组进行,每组 4~6 人。指导教师和助教均对课堂情况和学生表现分别记录,从文献阅读与准备、案例分析、PPT制作、团队合作、现场宣讲与演示互动等多个方面评分。④课程实验。实验内容课程中心提前发布,学生自主选择课余时间完成,安排固定时间节点集中进行实验验收,并要求实验成绩按评分标准打出区分度。
(2)教师的“教学过程分档化评价”评分标准。规格化方法如下:每次的作业、实验和讨论课发言,助教都进行记录和评价。助教的评分作为老师评定规格化成绩的依据。任课教师根据助教的打分,将班上同学分为A/B/C三档,然后再将各类成绩按照任课教授掌握的课堂表现、作业完成情况、讨论课活跃度与学习质量等多方面综合表现予以计分。
3)持续改进机制。
持续改进机制包括教学过程的可追溯性及定期教学分析与改进两个方面。在对课程目标的纵向分解之后,即可更为明确地将各个考核环节与具体课程目标进行关联,从而更为方便地考查各个课程目标的完成情况。
表1为计科1501班期末试卷分析表格之一,从中可以看到,第四题和第六题得分率偏低。第四题为程序分析题,考查反汇编代码综合分析能力;第六题为综合设计题,考查虚存系统相关知识点。
表1 计科1501班期末试卷分析
得分率偏低反映出本学期教学中的几个问题:首先,部分同学核心知识点基本概念熟悉,但综合运用能力较差,表现为对于通过C代码和反汇编代码对比从而分析程序栈空间分配与管理的能力比较弱;其次,课程第四部分内容较深、学期末教学效果有所下降,这也反映在第六题得分率只有0.14。针对上述问题,教学组初步拟定了改进方案:第一,在小班讨论课环节结合课程实验案例,增加程序栈空间管理与综合分析的论题,强化通过C代码和反汇编代码协同分析程序能力的培养;第二,调整第4部分课堂授课内容,突出虚存管理,重点培养学生分析问题和解决问题的能力。
笔者所在学院2015年开始由传统的计算机组成与原理课程方案改为以《深入理解计算机系统》为教材、面向系统能力培养的计算机系统课程方案。针对计算机系统课程教学的现状和现有教学方法的不足,教学组以OBE理念为核心从课程目标、教学体系和评价方法3个方面进行了调整和优化。首先,以“纵向分解”的原则重新审定了教学目标;其次,按照教学反馈意见和教学组特点重新制定了教学体系,增强教学过程的可追溯性和可评价性;最后,按照工程教育专业认证的要求改进教学评价方法,建立持续改进机制。计算机系统课程教学方法的改进,有助于学生循序渐进地掌握计算机系统基础知识,并从系统的角度认识和了解计算机,最终提高学生使用计算机解决实际问题的能力。