一、教师简介
刘航,网络空间安全学院教师,本科生“数据结构”、“算法设计综合实验” 和研究生“算法设计与优化”课程的主讲教师。近年来积极开展了教学与考核模式改革、探究式/研究型课程等课程改革探索,探索课程、学科竞赛和项目相结合的科研体验,引导学生开展自主学习、深度学习,曾获评本科生“最满意教师”、获得校教学成果一等奖。
二、课程信息
1. 课程基础信息:
1)课程编码:
U09M11097.01
2)课程名称(中/英文):数据结构/ Data Structures
3)学时/学分:64/4.0
4)先修课程:C/C++程序设计、离散数学
5)开课单位:网络空间安全学院
6)开课学期(春/秋/春、秋):春季
7)课程模块:学科专业
8)课程类别:学科基础课程
9)教材及教学参考书:
《数据结构——用 C语言描述(第二版)》,耿国华,高等教育出版社,2015.7或
《数据结构(C语言版)》,严蔚敏、吴伟民,清华大学出版社,2018.7
2. 教学目标:
《数据结构》是计算机程序设计技术的重要理论基础,是信息安全专业的主要专业基础课和主干课程。课程以 C/C++语言作为描述工具,使学生能够针对非数值计算问题,学会分析研究基本数据结构的特性,为具体应用所涉及的数据选择或设计适当的逻辑结构、存储结构及其相应的算法,初步掌握算法的时间分析和空间分析方法。
知识目标:掌握线性表、栈和队列、树和二叉树、图、查找、排序等数据结构及算法的基本概念、使用方法。
能力目标:通过理论学习和编程训练,提高应用数学工具建模、分析数据特性、设计与选择合适的数据结构和算法解决工程技术基本问题的能力,较大幅度地提高学生的编程能力。
专业素养目标:培养学生对核心、关键问题建立系统性思维的科学素养;能够利用专业术语准确、简明和规范地对工程技术问题进行描述的科学素养;多角度探寻解决问题途径的素养;具有创新精神,敢于合理地提出新概念、新思想、新方法的科学素养。
3. 教学重点/难点:
(1) 线性表、栈和队列、串、数组、广义表等线性结构的逻辑结构、存储结构、各种基本操作、算法实现及应用,KMP算法、稀疏矩阵压缩算法。
(2) 树和二叉树的逻辑结构、存储结构,二叉树的各种遍历算法及其他基本操作、算法实现及应用,霍夫曼树及其应用。
(3) 图的多种存储结构、广度和深度优先遍历算法及其他基本操作、算法实现及应用,连通性、最小生成树、拓扑排序、关键路径及最短路径等图的典型应用。
(4) 静态查找、二叉排序树及其平衡化、B树、散列查找算法、实现与性能分析。
(5) 插入、选择、比较、归并和基数等5类内排序算法、实现与性能分析。
(6) 递归、分治、贪婪等基本算法设计方法。
三、在线教学设计
1. 教学资源准备
理论教学内容更新:除了讲授数据在计算机中如何组织、存储和处理等基本知识外,为了大力强化程序设计基本能力的训练,对涉及程序设计语言的知识点进行总结、凝练,额外安排学时进行线上编程工具的培训,精炼地对数据结构中涉及的程序设计重点和难点内容进行样例讲解,设计了课堂讲解版和学生练习版两个版本的应用例,两个版本框架相同,但练习版缺乏核心代码,力求扫清学生学习、掌握数据结构核心内容的障碍。
对教学内容进行递进式设计,按照基础验证、综合应用和问题探索三个层次构建教学内容。设计、编制实验题目,既有涵盖数据结构的核心内容,又有与专业领域研究相关的算法(如网络、查找、模式匹配、散列等)。每次实验内容分为基础验证和综合应用两部分,在基础验证部分安排基本数据结构及算法实验项目,使学生掌握基本数据结构和算法,体会数据结构如何从现实问题中抽象,又如何用来解决实际问题,提升学生的兴趣和自信心,提高实践能力;综合应用部分安排C/C++描述一些经典应用问题所用到的数据结构,分析、设计并编程实现相应算法,使学生理解、掌握、消化理论教学难点内容。
除了常规的作业外,将部分作业调整到MOOC在线测试和视频观看驻点测试中,并将传统课堂的纸质作业改为线上提交方式。
2. 以代入感为目标的多平台结合的在线教学运行方案
疫情期间,教师和学生身处多地,都只能面对冷冰冰的计算机屏幕,教师看不到学生,无法从学生的神情中判断出学生的参与度和对内容的理解程度,缺乏沉浸感;学生上课时看到PPT 课件的同时就看不见老师,身边缺少同学的陪伴, 缺乏代入感。因此,线上教学并不是单纯地把原本的普通课堂搬到线上,而是需要通过合适的在线教学运行方案,拉近师生之间的距离,解决师生之间线上的互动问题。因此,选择在选择在线授课平台、制订授课方案时,既要方便与学生开展互动,还要符合授课规模的特点,选择简单、易于获取、音视频传输清晰流畅且功能简洁的平台,保证基本教学过程的平稳。
为此,在学院的指导下,经过教师之间的多次交流和师生的多轮测试,目前采取基于MOOC的在线异步SPOC模式,即
(1)以精心打磨、制作精良的国家精品慕课课程作为辅助教学资源,为学生提供丰富的信息、拓宽学生的视野,学生可以反复重听、暂停思考,学习方式和时段更加灵活。
(2)针对慕课学习完课率低、主要解决一般性知识传授等问题,而数据结构与算法既需要理论与理解,又需要实际操作和创新应用,需要有师生之间的实时交互,在对QQ屏幕分享、腾讯课堂、腾讯会议、钉钉、雨课堂等多种在线实时授课方式测试后,根据学生的感受投票选择了QQ屏幕分享作为实时在线直播授课方式,该工具简单、易于获取,视频、语音传输清晰较为流畅,功能简洁。
(3)为方便与学生开展各种方式的互动,纵使师生天各一方、互不相识,也要让学生有自我代入感,能够“入戏”,因此,选择雨课堂、QQ聊天作为实时在线互动平台,MOOC讨论区和QQ聊天作为课后交流平台。
3. 知识传授、内化和能力培养相结合的探究式课程在线化运行
(1)通过雨课堂开展课堂调查和投票
对授课对象开展学情调查和课后反馈调查是教学目标定位、教学内容选择、教学方法调整及确定的重要依据。在授课初期,通过雨课堂的投票功能,对学生的先修课程修读情况、学习兴趣、对本课程的理解、未来学习意愿、学习执行力等情况开展调查,力争有的放矢。这种投票还将用于课程进行过程中的课堂质量调查和反馈。
(2)多种模式相结合的知识掌握度即时测试
针对以知识传授为主的基本内容,准备单选题、多选题、填空题等题型,通过MOOC视频驻点测验、雨课堂答题、雨课堂弹幕、MOOC单元测试、QQ 在线提问-聊天区回答等方式,进行知识掌握程度测试,力争无论是观看授课视频, 还是实时直播授课时学生都能处于“在线”状态。
(3)线上讨论和分享增强课堂互动活跃度
对于某些口述很难解释清楚、但画图演示一目了然的问题,在在线教学中, 采用触屏书写作为教辅工具,既便于讲解,还有类似课堂板书的效果,有助于师生间的互动,便于学员更深刻理解。
通过师生之间的音视频切换,由学生进行结果展示和讨论。后期还将结合实验题目由学生从问题来源、应用需求、问题分解方法、设计思想、设计表示、实现、测试和性能分析等角度对其研究内容进行报告。培养学生的探索、创新精神,另一方面,也从研究能力、表达能力等方面进行训练,力促知识内化为能力和素养。
(4)多措并举创建安全的互动氛围
考虑到数据结构课既需要理论与理解,又需要实际操作和创新应用,是程序设计的基本“内功”,非常烧脑;与此同时,程序设计与文章撰写有异曲同工之处,千人前面,各不相同,学生可能会有很多各不相同的疑难问题需要解答,又考虑到部分学生会比较害羞,怯于大庭广众下与人交流,必须给予其足够的互动安全感。我们设计了以下互动保障方案:
(a) 锵锵三人行:建议每3~4 名同学组成一个学习讨论组,每个同学至少在某一个讨论组中,相互讨论、互相帮助、共同提高;
(b) 真心话大冒险:QQ 群管理员设置了允许群内匿名提问和回答功能,学生针对课程和学业内容,可以选择实名或匿名提问、作答,鼓励学生大胆提出他们心中的疑问,又保证其安全感;
(c)硬核团队:考虑种种客观因素,我既不可能24小时在线答疑,一人也难以应对60位学生的问题,动员了实验室的4位研究生作为助教,他们本科要么是信息安全专业,要么是计算机专业,对数据结构与算法课程内容熟悉,编程能力突出,既有助于研究生能力的提高,又能帮助本科生解决问题,努力使问题不过夜,缩短响应周期。
四、学生学习反馈
1. 老师上课时由于个别同学没关麦偶尔会有噪音。
2. 个别同学无法进入雨课堂。
3. 部分同学反映老师在课堂上切换平台会造成学习效率的下降。
4. QQ屏幕分享时PPT的清晰度较低。
5. 上课期间老师采用QQ直播的方式进行授课,课下学生可以通过MOOC进行温习,效果很好。
五、教学经验小结
1. 课前调查、有的放矢。
2. 备选方案充足,成功应对了雨课堂服务器拥塞的情况。
3. 多样化的互动方式为营造沉浸式的课堂气氛提供了保障,使大多数学生始终处于在线状态,但课堂活跃度仍需加强。
4. 学生的程序设计先修课程差距较大,基础不够扎实,不能灵活地使用C/C++语言编程,对集成开发环境不够熟悉,需要和助教一起加强与这部分学生的定向互动。
5. 教学内容、教学方式需要进一步更新、优化,吸引学生的兴趣。课程教学内容的生动性、易于实践性方面仍有较大幅度的提升空间。
文稿:刘航
审核:刘志强 王克勤