促进自主学习的数据结构“四位一体”实验教学改革

作者: 刘忠民 陈英 段喜龙 郑巍

促进自主学习的数据结构“四位一体”实验教学改革0

基金项目:国家自然科学基金地区项目“基于全局交互网络的大学生利他协作学习模式研究”(61867004);全国高等院校计算机基础教育研究会项目“基于建构主义的数据结构理论课堂教学研究”(2019-AFCEC-275);江西省高校教改课题“《数据结构》课程实验差异化教学的研究和实践”(JXJG-14-8-12)

第一作者简介:刘忠民(1968-),男,汉族,江西南昌人,硕士,副教授。研究方向为计算机基础课程教学和网络信息安全。

DOI:10.19980/j.CN23-1593/G4.2024.06.034

摘  要:数据结构存在前修课程基础不扎实、学生实验课前准备不充分和实验结果考核困难的问题。该文总结夯实基础、任务驱动、全员考核、强化训练“四位一体”的实验教学改革。从理论课堂弥补学生编程短板入手,结合任务驱动教学方法,明确布置实验编码任务,要求实验课前学生必须完成并提交实验代码,在实验课堂采用覆盖每个学生并要求重写核心算法代码的考核方法,分批次考核学生实验结果,并借助PTA平台对学生进一步强化训练。实践表明,该教学改革措施有利于促进学生的自主学习,不仅达成比较好的学习效果,而且有助于培养学生的综合能力。

关键词:数据结构;实验教学;自主学习;建构主义;任务驱动

中图分类号:G642.0      文献标志码:A          文章编号:2096-000X(2024)06-0144-05

Abstract: The data structure course faces issues such as students having an unstable foundation from prerequisite courses, insufficient preparation before experimental classes, and difficulties in assessing experimental results. This paper summarizes the "four-in-one" experimental teaching reform of solidifying the foundation, task-driven, full-staff assessment, and intensive training. Starting from compensating for students' programming weaknesses in theoretical classes, combined with task-driven teaching methods, clear coding tasks are assigned for experiments. Students are required to complete and submit experiment codes before the lab class. In the experimental class, an assessment method that covers each student and requires rewriting of core algorithm codes is adopted. Students' experiment results are assessed in batches, and further intensive training is provided to students through the PTA platform. Practice has shown that this teaching reform measure is conducive to promoting students' self-learning. It not only achieves relatively good learning results but also helps cultivate students' comprehensive abilities.

Keywords: data structure; experiment teaching; self-regulated learning; constructivism; task driven

数据结构课程是软件工程等专业的一门重要的学科核心基础课,是数据库原理、操作系统和算法设计与分析等课程的重要基础。该课程理论与实践并重,承载着培养学生的计算机程序设计能力和计算思维能力的重任,对学生的后续专业学习带来重大影响。传统的数据结构实验教学面临很多困境,在工程教育专业认证背景下,如何贯彻“以学生为中心,以产出为导向,持续改进”的教育理念,有效利用各种教学资源,提高课程教学效果,培养具有实践能力的应用型人才,是当下需要不断改革探索并深入研究的重要课题。

一  数据结构实验教学困境

(一)  前修课程基础不扎实

程序设计基础是数据结构课程最主要的前修课程,由于大班授课、学时有限、学生自主性差和实践不足等原因,学生的C语言编程基础普遍不太扎实,而数据结构课程的理论和算法都需要借助于类C语言来进行描述、讲解和实现。再加上程序设计基础课程教学侧重语法知识,后续指针、结构体及其应用等介绍不多,而这些内容却是数据结构课程中要用到的主要知识。这样造成学习前后衔接不够,基础不扎实,这直接增加了学生学习数据结构课程的难度,学生在学习中压力太大,难以产生兴趣,学习的深度和广度达不到基本要求,是造成学生无法做到学以致用的原因之一[1-2]。

(二)  学生实验课前准备不充分

在一般实验教学中,教师根据课程进度将实验任务布置给学生,学生按任务要求课下准备实验,上实验课时教师检查学生实验完成的情况并给予评分。整个过程表面上并没有什么不妥,现实的结果让任课教师很无奈,很多学生往往实验课前准备不足,结果导致实验课时完不成实验任务,无法接受检查,少数学生会选择抄袭期望蒙混过关。

(三)  实验考核困难

数据结构的实验考核包括实验结果考核和实验报告两部分,其中实验报告部分相对好办,制定好评分标准对报告进行评分即可。而实验结果的考核却困难得多,不能只看程序运行结果是否正确,需要通过对代码和算法提问来确定是否自主完成实验,而这不仅判断困难而且费时费力。为了准确判断,教师需要针对代码和算法各至少要问2~3个问题,学生回答问题再加上交流,检查一个学生短的耗时2~3 min,时间长的需要4~5 min,如果一个班30多个学生都接受检查实验课上根本检查不完,而且由于检查的时间紧任务重,检查的结果也未必准确,教师两节课下来容易身心俱疲。

最终教师为了防止鱼目混珠,保证实验评分的准确性,往往会选择增大检查难度,单个学生的检查会耗费更长的时间,检查无法覆盖到每个学生。最终不少学生实验课只是为了出勤,获得一个基本分,实验课时不认真去完成实验并思考和动手解决遇到的问题,实验变成了走过场和拼凑报告。

二  促进自主学习的“四位一体”教学改革

自主学习是指学习者在一定程度上从认知、动机和行为方面积极主动地参与自己学习活动的过程,其核心是学生积极主动控制、调节自己的学习[3]。自主学习理论在课程教学中已经多有应用[4-7],本文描述的实验教学改革主要依据自主学习理论以及由此衍生的建构主义理论,构建了如图1所示的夯实基础、任务驱动、全员考核、强化训练“四位一体”的实验教学体系。教学实践中结合理论课堂尽量弥补学生的编程短板,夯实学生自主学习基础;理论课后马上布置一些微实验任务要求学生完成并落到实处,而在实验课前明确布置编写实验代码的作业任务,通过任务驱动学生自主学习;采用覆盖全体学生的实验考核方法,通过严格考核起到督促学生自主学习的目的;结合线上资源进一步对学生进行强化训练,通过给予评分晋级的举措激励学生自主学习。

图1  数据结构“四位一体”实验教学体系

改革举措尽可能引导学生采用马上应用、做中学等如图2所示的学习金字塔理论[1]中更底层的学习方式,这些更底层的学习方式能达到更好的知识识记效果,有利于学生达到更有效的知识建构吸收目的。

图2  学习金字塔理论

(一)  理论课堂注重夯实学生编程基础

高质量的理论教学有助于实验教学的良好开展,在理论课堂注重去弥补学生前修课程基础不扎实问题,这样做是必要的也是相对容易把控的。但如果不能清醒地认识到这一点,只关注学生对数据结构知识本身的掌握,结果只能是事倍功半。

最初采用过设立预备实验的办法来弥补学生的编程短板,编写了包括函数、指针和结构体三个实验项目的预备实验指导书,指导书包含较多的导学内容,要求学有困难型的学生必须参加,其他层次学生根据自身的情况选择参加[8]。实践发现学生参与意愿不够强,需要教师额外投入比较多的时间精力,成效不容易掌控。

依据建构主义理论,课堂上讲解到学生没掌握好的编程知识时,通过恰当的演示方式尽力构建有效的学习情境,用课堂作业和课后微实验等任务驱动的办法引导学生在课内课后及时动手演练,促使学生主动建构、内化吸收知识。其中微实验是指给学生布置一些针对特定编程知识的实验任务,这样的实验任务牵涉面少,工作量相对较小,从多方面来说都容易见成效。主要做法如下。

1)讲解到线性表的顺序存储结构和算法时,学生对存储结构中的“ElemType *elem;”及算法中的“*(p+1)=*p;”等部分最不容易理解。在课堂马上编写一个简单的C语言程序给学生演示这些语句达到的效果,这很容易做到,花的时间也少,但却能为学生构建这些编程知识的较好学习情境;课后再布置一个微实验任务让学生模仿教师做一次,并要求学生将实验结果截图发到教学用QQ群,这样要求比较有效,不断有实验结果发到群中对未完成实验的学生有很好的督促作用,否则的话学生容易忽略这个任务。

2)讲解到线性表的链式存储结构时,学生对结构体定义大都不太熟悉,课堂直接通过电脑演示两种结构体的定义方式:先定义结构体,再利用结构体定义需要的结构体类型和指向结构体的指针类型;直接通过结构体定义出需要的类型。让学生直观发现两种定义方式实际上是等价的,能达到更好的解惑效果。

3)讲解链表操作时的处理比较有迷惑性,教学实践中使用过编程演示方法但效果并不好,也许对大多数学生来说链表操作知识欠缺太多、难度太大,编程演示并不能带来直接、清晰的观感,反而会有雾里看花的感觉。更有效的做法是使用板书来演示,板书前插法、后插法以及中间插入和删除各种情况下该怎样写代码,再利用板书灵活多变的特点,把每一行代码达到的效果更形象地表达出来,包括一些典型的错误代码(如指针操作代码前后调换顺序)达到的效果。

板书完后做一个总结:不管是插入还是删除, 核心语句都只有两行或者三行代码——这会对学生造成很大的心理冲击,学生会惊讶发现,原来链表操作难度远比想象的要小。这能很好地帮助学生克服畏难心理。接下来趁热打铁,马上布置准备好的链表操作练习,要求短时间内当堂写完,当堂上交,下一堂课挑一些典型错误代码再分析一下。

4)讲解到函数的引用参数(前面加&的参数)时也采用课堂上快速演示加课后微实验任务驱动的办法。

(二)  布置编写实验代码硬性任务

平常布置的一般作业过了截止时间未提交作业的学生屈指可数,而一般实验教学中只有部分学生能真正做好准备,有少数学生甚至在上实验课时才开始编写代码。分析原因有两方面,一方面是由于实验考核困难,每次实验课只能考核到部分学生,导致部分学生学习压力不足;另一方面是由于实验任务布置不够明确。

经典小说推荐

杂志订阅