吕 品,于文兵,汪 鑫
(1. 上海电机学院 电子信息学院 ,上海 201306;2. 上海电机学院 文理教学部,上海 201306)
数据结构是计算机学科相关专业本科生的一门专业基础课,是培养学生数据抽象能力、计算思维能力与程序设计能力的一门重要课程[1-3]。数据结构课程学习效果的好坏不仅直接影响学生后续专业课程的学习,而且对应用型本科院校学生在程序设计类竞赛、软件服务外包竞赛、数据挖掘竞赛中取得优异成绩起着关键性作用。
居然数据结构课程在应用型人才培养中具有十分重要的地位,但是,通过数据结构课程教学发现,学生在该课程上的学习存在严重的“马太效应”。程序设计基础好的学生对本课程的学习兴趣随着所学知识的增加变得越来越浓,自主学习欲望越来越强烈,抽象思维与编程能力逐步得到提升。然而,程序设计基础薄弱的学生随着课程学习内容难度的增加,无法通过自身编写程序理解与运用课程中的知识点,学习兴趣的严重挫败导致自主学习欲望逐渐消失,从而为后续专业课程的学习埋下了“应用能力隐患”。
分析产生以上现象的原因,可能有4方面:①数据结构课程开设时间较早,学生的计算思维还未真正形成。相较于其他类型的高校,应用型本科院校计算机相关专业的数据结构课程通常提前在第2学期或第3学期开设。一个学期或两个学期的程序设计学习时间对于大部分学生来讲可能太短,学生对用程序实现自动计算的核心要素和学习方法掌握不牢。②数据结构的先修课程离散数学与数据结构同时开设,学生对符号语言的运用能力和逻辑推理能力没有在先修课程中得到锻炼,导致学生对抽象数据类型的理解存在困难。③数据结构的教学学时较其他类型高校短。数据结构现有教学学时为64学时,其中,理论48学时,课内实验16学时。数据结构课程中的抽象数据类型和应用算法繁多,并且都是学生在后续专业课程中的先修知识。教师必须在有限的教学学时内,合理安排教学进度,完成教学内容,因此,教师没有过多时间在课堂上为学生及时梳理课程中的重难点知识。④大部分学生自主学习意识淡薄。学习过程中懒于提出问题是学生自主学习意识淡薄的最主要表现,这与教师为完成教学任务而无法掌握每位学生的具体学习情况形成一对学与教的矛盾。
为了解决以上问题,让学生较好地掌握数据结构课程中的理论知识和算法应用,提高学生在后续专业学习中的应用程序开发能力,可以在数据结构课程教学中融入线上学习的教学方法,并将线上学习成绩作为课程考核的组成部分,使线上学习延伸数据结构的教学学时、记录学生课外学习行为;帮助教师利用每个章节的线上学习行为数据,分析学生的学习情况,及时对学习不达标的学生提出学业预警,提供具体的学习资源和组织同伴之间的帮扶,让每位学生在本课程的学习中得到个性化的学习支持和编程能力的提升。
数据结构线上学习平台由一位已学过数据结构且成绩优异的高年级学生和两位没有学习数据结构的低年级学生共同开发。开发工具采用开源的Moodle。Moodle是澳大利亚教师Martin Dougiamas开发的一个课程管理系统,在国际上有着广泛的应用[4]。随着国内教育信息化进程的加快和Moodle平台插件使用资料的逐渐增多,越来越多的教师开始认识、了解并使用Moodle。Moodle不仅适合于在线学习,而且可以辅助课堂管理与教学。
开发数据结构线上学习平台之前,向3位学生分析在数据结构课程教学中融入线上学习的原因,如数据结构课程知识点多、理论抽象,而学时有限,绝大多数学生没有真正掌握高级语言程序设计基础知识(数组、链表、结构体类型、基本的循环结构等);学生白天上课多,晚上没有养成复习的习惯;学生没有养成每天编写程序的习惯;平时学生与教师的沟通少,教师无法及时监控每个学生的课程学习情况并对其进行有针对性的学习预警等,同时讲解平台需要具备的功能。这些想法得到了3位学生的认可,他们利用一个月的时间完成了此项任务。所有选修本课程的学生可通过包括移动终端在内的任何计算机设备登录数据结构线上学习平台,学生课后学习数据结构的地点与时间具有极大的弹性。截止2019年2月,该平台已投入使用了两个学期,记录了两个教学班共162位学生线上学习数据结构课程的行为数据。
数据结构线上学习平台中教学资源的发布、学生学习行为数据的收集可分别由两位低年级学生负责。由于这两位低年级学生是学校编程社团中的重要成员,因此,他们参与此项活动能让许多即将学习数据结构课程的学生了解到本课程在应用软件开发中的重要性。
数据结构线上学习平台主要包括2部分教学资源。一部分是按教材章节组织的课堂教学内容演示文稿和Word版本的核心算法分析;另一部分是涉及该章节重要知识点的测试题。每位学生只有在观看完成课堂教学演示文稿的内容后才有权限进入测试环节。平台规定演示文稿的观看时间至少为15 min,以确保学生必须要进行课后自主复习。
为保证学生课后自主学习的时间与教师课堂授课内容的同步,平台规定了每章节测试的截止日期。学生只要登录该平台,平台就能自动收集学生线上学习数据,包括完成一次测试所花费的时间、每一小题的得分情况、同一测试重复练习的次数等。
教师在讲授数据结构第一节课之前,指导学生导入所有选修该课程的学生基本信息,以确保每位学生能进入平台,并指导学生导入本课程除测试练习之外的所有课堂教学资源。除此之外,教师要在每章节测试开始之后,定期观察每位学生对知识的掌握情况,并动态调整下节课的课程教学内容与进度。当章节测试的截止时间到期后,教师要通过学生参与同一测试的次数掌握每一位学生学习本课程的态度;对照测试题涉及的知识点分析每位学生的薄弱环节;统计分析每位学生的测试成绩,对测试成绩未达到平均分的学生,通过邮件或QQ方式给予本章的学业预警;帮助有学业预警的学生分析学习中遇到的困难及存在的原因,并为其提供具体的学习资源和帮扶的同伴。
以数据结构第二章线性表的教学内容为例,教师对线上学习平台的监控过程如下。
1) 针对授课知识点布置测试题。
教师根据教学大纲的要求,利用2学时讲授完线性表的顺序存储结构与链式存储结构后,针对这两部分内容涉及的知识点,组织由10道选择题构成的测试。这10道题既包括基本概念,又包括综合应用,以检测学生对这两部分理论知识的掌握情况。每一道测试题10分,共100分。
2) 观察学生的测试情况,调整教学内容。
从发布测试之日起,要求学生必须在两周之内完成测试。教师从开启测试之日起,每天定时观察学生登录线上平台的学习情况,如学生学习课堂教学资源的时间与次数,在不同教学资源之间切换的频繁程度。如果有学生完成了测试,观察并记录学生对知识点的掌握情况。2017—2018学年第2学期,有73名学生选修本课程。开启本章测试的第2天,就有58名学生参与了测试,参与程度达到79%。在第一批参与测试的58名学生中,只有12名学生测试一次且以满分通过,知识点掌握较好的比例仅为20%;其余学生中,有经过2次、3次或4次测试最终获得满分的,也有测试成绩不合格的学生没有进行下一轮测试。分析参与第一轮测试且未获得满分的46位学生发现,他们的共同错误主要体现在3方面:顺序表的插入操作、线性表存储结构的选择以及线性单链表插入与删除的综合应用。
通过对线上平台学生学习数据的了解,教师能够基本掌握学生的学习态度、学生没有掌握的共性问题,于是,在章节后续的课堂教学中,可以有意识地详细讲解学生出错的共性问题,淡化学生掌握较好的内容。
3) 提供个性化学习支持与帮扶。
通过定期了解学生线上学习情况,教师已大致掌握学生的整体学习态度、学习能力与学习成绩分布。在2017—2018学年第2学期,选取2名男生和1名女生作为本课程的课外教学助手。在每一章节的测试日期截止后,教师根据管理线上平台学生提供的测试成绩与相关数据,为本章测试未达到平均分和未参加本章测试的学生发送邮件或QQ提醒,给予相应的学业预警。
针对每位有学业预警的学生,指定课外教学助手,并根据每位有学业预警的学生的错题,分发指定的学习资料和线下作业,并要求课外教学助手督促这些学生在一周内完成指定学习内容和作业。教师通过批阅作业进一步了解学业预警学生的掌握情况。在2017—2018学年第2学期第二章测试中,给予了5名学生学业预警,通过后续具体的学习支持与帮扶,这5名学生在课程后续章节的学习表现良好,编程能力得到了大幅度提升。
利用2017—2018学年第2学期数据结构线上平台收集的学生学习行为数据,我们对20人次学生的学习态度进行了教育和端正;对30人次的章节学习给予了学业预警,并进行了帮扶对接和学习支持。2017—2018学年第2学期期末考试结束,整理教师线下收集的学生学习数据,如课堂出勤次数、线下作业完成次数、线下实验完成次数、期末考试等,并结合学生线上学习的数据,如参与章节测试次数、测试时间、测试成绩等,进行统计分析和学生学习行为模型的构建。通过以上学生学习数据的探索分析发现,判断一个学生能否掌握好本课程的知识,认真参与本课程的线上学习是关键,这是因为即时的线上测试能够考核学生对本课程中知识的掌握情况,从而为后继内容的学习奠定基础。
利用上述分析结果,在2018—2019年第1学期的数据结构课程教学中,我们对参与线上学习的89名学生进行了更加频繁的监控与跟踪。教学过程中发现,随着教学进度的推进,给予章节学习预警的学生人数逐渐减少,课堂教学中曾经讲过的内容返工重新讲解的次数也随之减少,学生课后学习的自主性明显比上一学年有所提高。与此同时,教师在学生学习兴趣上升的阶段,有意识地布置不同层次的工程应用问题,要求学生根据自己的实际情况,运用所学知识编写相应的程序进行解决。经过一学期的持续改进,课程考核的通过率提高了,更重要的是许多学生反馈通过这种教学模式,自主学习能力得到了锻炼,编程能力得到了提升,更有兴趣和信心参加各类程序设计竞赛和学科竞赛。
数据结构是计算机相关专业培养学生应用软件开发能力的重要课程,然而,现有数据结构的教与学却存在“鸿沟”。为实现教师与学生之间的双向沟通和交流,需将数据结构课程的线上学习作为数据结构课堂教学的拓展。教师通过监管学生的线上学习行为,并结合课堂教学的实际情况,能真实了解每位学生对知识的掌握情况,从而给予学生个性化的支持和帮扶。实践证明,融入线上学习的数据结构课程教学模式借助数据驱动,让大多数学生能基于已有的程序设计能力体验数据结构学习的乐趣,培养自主学习的能力,提升编程的兴趣,增强编程的自信。