1. 算法设计与分析课程教学现状
新工科建设是基于国家战略发展新需求、应对新经济形势的挑战而提出的工程教育改革方向。其目的是培养适应新时代需要、“精益求精、追求卓越”的一流工科人才 [1] 。新工科背景下,要求计算机类课程体系能够紧跟时代步伐,培养的人才具备扎实的实践动手能力、缜密的逻辑思维与开拓进取的创新意识 [2] 。算法设计与分析课程是计算机专业的核心专业基础课,对培养学生的数学建模能力、逻辑思维能力和提升软件设计与开发能力有重要作用。然而,在实际教学过程中,学生们普遍反映1) 实验学时少,无法在实验课上完成所要完成的任务;2) 算法基本思想理解起来不难,但运用这些算法理论处理具体问题时,如大学生数学建模大赛或国际ACM赛事的考题,又感到力不从心无从下手!教学团队认为,这些现象与学生的基础及课程的教学方式有关。首先,算法课程理论性强、内容抽象,需有扎实的先修课程(如高级语言设计、数据结构)知识作基础。如果先修知识基础掌握不够牢固扎实,那么理解计算机经典算法的逻辑思维模式就会很困难 [3] [4] 。而目前课程的教学方式,存在以下问题:
1) 教学内容多、课时有限。在有限的课时内如何协调传授课程基本知识点和锻炼学生动手解决问题能力是该课程教学面临的一个严峻挑战;
2) 课上侧重于宣讲书本理论,忽视鼓励学生抒发对书本理论的己见。导致学生成为“鹦鹉”,复述书本理论头头是道,发表自己见解和解决问题时成为矮子;
3) 教学使用的应用案例没有跟进当今科技发展脚步,与当今大学生数学建模大赛或国际ACM赛事考题脱节;
4) 实验内容停留在验证性或模式化实验,学生照本宣科按部就班就能够圆满完成实验任务。这样的实验很难激起学生好奇心和兴趣,更难于培养学生的创新意识和提升学生逻辑思维能力。
针对这些问题,本文以UMOOC教学平台为基础,从建设线上资源、设计和组织线下教学活动方面进行探索,提出一种基于线上自主学习基本理论、线下面对面进行实践环节授课的算法设计与分析课程教学模式。由任课教师创建教学视频等线上资源,学生线上观看视频自主学习基本理论知识;线下课堂上,任课教师用较少的时间考核学生线上学习情况,更多的时间则用来进行实践环节教学,引导学生分析典型案例、指导学生建立数学模型和算法分析、鼓励学生阐述自己解决问题的算法步骤。通过线上学习基本理论线下面对面引导学生动手解决典型案例,学生在课堂上的身份逐渐由听者转变为抒发己见的演讲者,以教师为中心的课堂逐渐转变为以学生为中心的课堂,从而培养学生自主学习习惯和提高学生的学习主动性、逻辑思维和独立解决问题的能力。
2. 新工科背景下算法设计与分析课程教学模式设计
该教学模式设计为学生线上观看教学视频自主学习理论知识线下任课教师进行面对面实验教学的方式,运用过程性评价系统把控线上学生自主学习效果。目的是在保证学生掌握算法基本思想和基本理论前提下,加大实验学时,切实加强实践教学环节、重视培养学生实践动手能力和创新能力。教学模式具体实践过程中,重点关注:线上资源优化、线下资源建设、课堂教学组织及考核方式等方面。
2.1. 课程线上资源优化
为了突破课程教学活动在地点、时间等方面的限制,提升学生在线下进行自主学习的效果,线上资源优化是本次教学实践的关键环节。
2.1.1. 教学视频
课程教学视频是支撑线上学习的骨架,是统领和指导学生线上学习的纲领。教学团队在建设课程教学视频时,进行了缜密规划和详细设计;教学内容力求逻辑清晰、层次分明,做到让学生容易地掌握其中的逻辑结构和层次关系。为此,从微课和传统教学录像两方面建设教学视频资源。教学团队针对具体案例、列出问题、归纳知识点,自主录制微课。微课视频以一个知识点为讲解单元,利于学生针对性地学习。具体来讲,将课程内容分成六大模块:复杂性分析理论、递归分治策略、动态规划、贪心策略、回溯法和分支限界法 [5] 。第一模块除外,其余五个模块都录制有十个左右案例的微课,每个微课时长10分钟左右。除此之外,教学团队在熟悉UMOOC平台上共享的精品课程课件和教学视频基础上,依据学院教学大纲具体要求,对视频及课件进行加工整理,修改和重新组织一些知识点,使视频教学内容依据大纲的层次结构组织教学,易于学生从整体上掌握和理解知识点。
2.1.2. 在线判题系统(OJ)
为给学生提供一个关于本课程的知识练习和交流的平台,课程组在Windows平台自主研发一个在线算法判题系统(OJ)。OJ (Online Judge)是国际计算机协会(ACM)主办的国际大学生程序设计竞赛(ICPC)采用的在线判题系统。学生可以在线提交源代码,这些源代码用C,C++,或JAVA程序设计语言编写,系统可以检验代码的逻辑正误。如今在线程序判题系统虽然种类繁多,但算法设计与分析在线判题系统并不多见。通过借鉴众多在线判题系统技术,结合算法设计与分析课程特点,教学团队基于Windows平台自主研发了一个在线判题系统,它由题库选题管理、在线提交程序代码、在线判题以及在线排名模块构成。系统能够实现在线判题,记录测试者判别的具体过程和学习状况。在线判题系统题库的题目,主要来自教材《计算机算法设计与分析》(王晓东著)书后作业习题;同时,为了激发学生的学习热情和探索精神,还特地选取近年来一些ACM/ICPC赛事的题目 [6] 。这些题目,根据包含的知识点,算法实现过程的逻辑性,将难度等级分为一般、中等和困难三个层次,学生根据难度从易到难进行递进练习。作为众多在线程序判题系统的一种模式,教学团队开发的OJ系统不但为学生提供了一个在课堂之外学习算法设计与分析的环境,也为教师了解学生的学习状况以及最终评分提供依据。
2.1.3. 虚拟仿真实验建设
算法设计与分析课程学习,要求学生具有一定的逻辑思维能力。另一方面,通过该课程的学习,学生的逻辑思维能力也能得到培养和进一步提高。教学团队在教学过程中,依据教学大纲规定的实验内容,运用虚拟显示技术,在UMOOC平台上建立了算法设计与分析实验课程教学体系,虚拟仿真每个算法实现的具体步骤 [7] 。通过实验数据实时更新的可视化,学生能够观察到解决问题的算法具体步骤和结果。每个实验过程表现具体、感受直观。此外,每个实验过程可进行无限制、多样式的重复回放。学生课下在线观摩实验过程和操作,观察思考,总结要点难点及注意事项。然后在线下课堂上,学生进行实验点评,重点难点讲评;任课教师再补充说明,指明实验目的、实验内容、重点难点;之后,学生自己动手搭建数学模型,重现实验过程,撰写和提交实验报告。通过观摩实验仿真实验,学生自己动手做实验时,心里清楚自己要解决什么问题,具体步骤之间的逻辑关系,逻辑思维能力和动手能力将得到锻炼。
2.1.4. 文本资料
作为学生自主学习的辅助资料,建设文本资料包含四个内容:电子教材、课件、习题库以及习题答案。为了便于学生查找,提高资源的可用性,对内容多的知识点进行分类,按章节排序,每个知识点与线下课堂教学专题呼应。提供的电子教材是PDF版的电子图书,它们是英文《Introduction to algorithms》第三版和中文《计算机算法设计与分析》第五版(王晓东著)。课件资料包括任课教师上课使用PPT(含PDF版)、章节知识点的总结、学习知识点的注意事项及超星资源库的链接。超星资源库囊括的图书、期刊和杂志方便学生查阅课程相关文献,有利学生加深和扩展知识点的理解。习题库是线下习题册的PDF版本,习题答案主要针对习题册上的习题以及拓展题目提供的分析方法、解题步骤和答案。在建设课程文本资料过程中,教学团队成员特别注意课堂所讲内容与线上资料的呼应性。教学团队在先前教学过程中发现,如果课堂所讲内容与线上资源缺乏呼应,会造成学习内容混乱,使学生抵触翻阅文本资料;更有甚者,直接影响了学生的学习态度,产生厌恶学习该课程的情绪。
2.2. 课程线下资源建设
线下教学资源,重点建设对象是优化实验教学资源。《算法设计与分析》是计算机专业及相关专业的核心专业基础课,该课程的实践性很强。切实加强其实践教学环节对培养学生自主学习习惯、提高创新意识和逻辑思维的能力至关重要。然而,目前,实验指导书都是与教材课后习题合二为一,每一个实验项目都可在教材中找到伪代码。学生做实验的过程就是用高级语言翻译教材书上的伪代码、编写成程序输入计算机的过程。学生按部就班(按着伪代码)编写程序,不用温习和过多思考就能得到正确实验结果的实验,学生的逻辑思维能力、解决问题能力和创新意识很难得到锻炼和提升,同时也会让学生失去做实验的热情和兴趣。为此,教学团队自主编写实验教材,每章实验内容与课本章节知识点对接,且实验内容从四个层面体现:第一层面的实验题目要求学生学习掌握算法基本思想。在分析、理解教材上的伪代码基础上,将伪代码翻译编写成程序,输入计算机运行结果;第二层面的实验题目旨在锻炼学生算法设计能力。给出问题,要求学生先用伪代码描述解决问题的步骤,再编写程序实现。它要求学生按指定的算法,进行思考问题和解决问题,锻炼学生的逻辑思维能力;第三层面的实验题目旨在锻炼学生算法分析的能力。同一个问题,给出解决问题多种方案,要求学生分析每种方案的时间复杂度和可行性。训练学生分析伪代码和时间复杂度的能力;第四层面的实验题目旨在锻炼学生算法设计与分析的综合能力。给定问题,要求学生设计的算法能用指定的时间复杂度来解决该问题。这类题可以训练学生逻辑思维能力和创新意识。经过反复实践“读算法–模仿设计算法–算法分析–独立设计算法”的过程,由此由浅至深地熟悉、理解和掌握经典算法思想、框架和规则,学生的逻辑思维、独立思考和解决问题能力逐渐得到锻炼和提高。
2.3. 课堂教学组织和考核方式
本次教学实践以48学时的算法设计与分析课程为实验对象,实施的教学方案具体内容如下:线上学生自主学习基本理论知识;线下48学时,教学团队将理论和实验学时的分配比例定为1:1,其中,24学时的线下理论教学采用翻转课堂教学模式。教师在线上布置学习任务,引导学生自主完成算法基本思想和基本理论的学习;对重点和难点知识,通过微课和线上习题作业,观摩虚拟仿真实验演示,加深理解,强化记忆。课堂上这部分知识不是由教师讲授,而是由学生以组为单位讲解。学习小组根据观看教学视频的知识要点,制作20分钟左右的PPT。每组讲解一个专题,讲解完毕,全班同学在线即时评教打分,成绩的平均值是该组这部分知识学习效果的评价值。学习小组组长根据组员在准备讲解材料过程中的学习表现和态度,在此评价值基础上进行微调,给出每位组员的讲解成绩,该项占课程总评成绩的10%。除此之外,课堂上还进行10~15分钟的测验,督促和监督学生自主学习、把控学生学习情况。这样的考核在线下理论教学课堂上进行10次,即几乎每次理论教学课堂上,都有一次考核。考核成绩占课程总评成绩的20%。通过学生讲解和测试,任课教师能够及时掌握学生学习动态,了解学生对具体问题的思维方式。在剩余45分钟左右的理论教学课堂上,任课教师讲解学生反映出的不太懂或理解模糊不够扎实的知识点及难点问题,并对该章节内容进行纵向和广度拓展,提高学生对这一部分知识的学习效率和学习质量。
将教学内容的理论部分摊到线上教学,由学生自主学习;并采用过程考核和学生自作PPT进行讲解方式,督促学生积极投入学习中和把控学生的学习效果。这样,本教学实践使用24学时进行实践环节教学,实施10项实验专题。每节实验课,由教师依据实验教材内容设计实践环节,鼓励学生参与问题的分析和讨论;之后以学习小组为单位,建立实验模型、设计算法、讨论改进并完善算法、编制程序运行结果;最后一两次实验课,每组推选代表,进行实验汇报答辩,成绩给定方法和占总评成绩的比例都与理论课的翻转教学环节相同。而每次的实验成绩,与实验难度有关。考虑到学生的学习能力和动手能力存在着差别,每次实验的内容都提供多种选择方案。如果课堂上能完成的只是复现教材上的相关例子,用高级语言验证,那么实验成绩在及格一档;如果课堂上完成的是教材书后作业某几个问题,设计算法并用高级语言验证,实验成绩在中等一档;如果课堂上完成的是课堂之外问题,设计出一个指定时间复杂度的算法并用高级语言验证,实验成绩在良好一档;如果课堂上完成的是ACM/ICPC程序竞赛中的问题,按其要求设计算法并用高级语言验证,实验成绩在优秀一档。上述实验难度由自己挑选决定,前提是必须在课堂上完成,否则此次成绩按不及格记录。平时的实验成绩在总评成绩中占有比例为20%。
期末考试仍采用无纸化考核方式。有针对性地设计考试试题和题型,在考核内容分配上,侧重点倾向于考核学生实践动手能力。期末卷面成绩占总评成绩的30%。线上学习情况,每位学生在线学习时长、线上作业完成情况、线上互动情况、线上测试结果等方面的表现,也作为过程性评价分值(按10%比例)计入总评成绩。这样,线上学生自主学习的过程表现占总评成绩比例高达40%。通过这样的高比例,力求督促和激励学生去自主学习,养成独立思考和独立解决问题的能力。
3. 教学实践效果
针对以上教学模式,教学团队以计算机应用、软件工程,网络工程三个专业14个班的学生作为研究对象,跟踪两学期的学生成绩,对比分析教学实践效果。计算机应用专业三个班83名(下级学生85名)学生,由教学团队教师A任教;软件工程专业两个班57名(56)学生,教学团队教师B任教;网络工程专业62名(63)学生,教学团队教师C任教。每学期教学过程中,每位教师将自己所带的学生随机分成两组,一组(A1,B1,C1)采用以往的教学模式上课,一组(A2,B2,C2)采用本次教学模式上课。期末考试,三个专业的学生都采用同一套试卷考核。试卷试题有五种题型:填空题、简答题、算法设计、算法分析和算法实现题。填空题和简答题主要针对算法基本知识;算法设计题考核算法基本设计步骤的掌握情况,试题均为书上或课堂上讲授过的案例。这三部分内容倾向基础知识,考察学生掌握基本知识的能力。算法分析题要求考生根据要求,设计有效算法,并分析算法效率,该题型考察学生的逻辑思维能力。算法实现题考察学生解决问题的综合能力,考生根据要求,设计一个有效算法且需用高级语言实现。教学团队对试卷每种题型的得分情况进行统计,结果如表1所示。表1中,A11代表2020学年采用以往教学模式上课的计算机专业学生,A12代表2021学年采用以往教学模式上课的计算机专业学生,A21代表2020学年采用本文教学模式上课的计算机专业学生,A22代表2021学年采用本文教学模式上课的计算机专业学生,B11、C11、B12、C12、B21、C21、B22和C22表示含义以此类推。表1数据显示,与对照组相比,实验组学生的基础知识(前两种题型)得分成绩并不理想,但后三种题型的表现都优于对照组。后三种题型的优秀率、及格率还是平均分,由实验组学生获得的值都高于对照组的得值。这说明本教学模式能够提升学生的逻辑思维能力和独立解决问题的能力。除此之外,由实验组学生获得的卷面整体平均分(最右边一列),也高于对照组的得值,这说明本次教学模式能够提高班级的整体成绩,能够促进学生课程成绩的提高。

Table 1. Statistics of final examination scores in 2020 and 2021 academic years
表1. 2020和2021学年算法设计与分析课程期末考试卷面成绩统计
4. 结论
本次算法设计与分析课程教学实践,通过引导和督促学生自主学习线上资源,掌握算法的基础知识和基本思想理论;节省下来的线下课时用来加大实践环节教学,由传统的8学时实验教学改成24学时。线下的理论教学课堂,采用过程化考核和翻转教学等方式,督促学生自主学习;并把过程化考核结果和翻转教学效果均计入期末总评成绩,以此严格把控学生自主学习效果。线下的实践教学课堂,将实验内容分为四个层次,由学生根据自身情况选做实验内容;通过加大实验过程考核和实验终期答辩成绩在总评成绩中的比例,督促和鼓励学生独立思考独立解决问题的能力。通过统计两学期三个专业近400名学生的成绩可以看出,本教学模式实践在培养和增强学生自主学习意识的同时,提升了学生的逻辑思维和解决问题的能力;在一定程度上解决了总课时不断减少与实验学时日益不足的矛盾;为新工科背景下高校算法设计与分析课程的教学改革与发展进行了大胆尝试和探索。
基金项目
西安理工大学2021年研究生教育教学改革研究项目“新工科背景下《可计算性与计算复杂性理论》课程案例建设”(310-252042111)。