实时反馈在Java编程教学中的应用研究
作者: 曹文平
关键词:Java编程;实时反馈;课堂点击器;求解和评估
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2024)28-0133-04
0 引言
Java程序设计是各高校普遍开设的课程,但在目前的教学中存在很多问题。教学内容不能与时俱进,教学方法单一,导致学生学习兴趣低下,不能完全掌握编程思想和技能[1];程序设计应该训练学生的计算思维和创新思维能力,但目前大多数Java编程课程专注于具体的语法结构,忽视了学生解决复杂问题的思维能力[2];课时分配不合理,考核方式简单粗暴,学生的反馈不够[3];很多研究提出了线上线下的混合教学模式,线上课程优势明显,资源丰富,学习时间灵活,可以反复学习[4];文献[5]提出了小班教学模式,可以更好地关注每个学生,更多地进行课堂互动。计算思维和创新思维能力的训练需要长期的训练,除了学生课外自主学习外,课堂的引导对初学者非常重要,能够大大降低学生入门的难度,减少学生时间的浪费。其中,Java各个知识点的理解对思维训练起着重要的作用。但是Java的知识点繁多,如果学生在课堂中不能及时理解,课后往往失去了继续学习的兴趣。因此如果能在课堂上及时得到学生的反馈,教师就能掌握学生学习动态,针对相应问题进行进一步的讲解。本文介绍基于Java开发的课堂点击器系统,允许学生课堂中实时对提出的问题进行反馈,教师可以快速了解学生的理解水平,同时提出一种与之对应的新的教学方法:求解和评估教学方法。
1 课堂点击器系统简介
课堂点击器是一个用于组响应系统的可扩展框架。这样的系统可以快速收集课堂上所有学生的反馈。这种系统的常见使用是在上课期间,教师用投影仪投影一个选择题,学生可以使用点击器,通过按下点击器上的一个按钮来提交答案。教师可以立即看到以直方图形式汇总的回答,并可以进一步讲解直到学生理解该问题。点击器系统通过两个Java RMI进行教师和学生之间的通信。教师控制课程,并通过投影仪呈现可视化效果。学生解决问题并给出评估。系统采用Java语言编写,可以在任何支持Java的设备上运行,如手机等。系统背后的主要思想是基于软件的点击器能够支持比传统硬件点击器更丰富的交互。在该点击器中,可以灵活扩展问题的类型,多项选择题只是一种可扩展的问题类型。例如,点击器提供了一个插件,支持所谓的文本突出显示问题,向学生提供一个问题和一段文本,然后必须突出显示文本中的所有相关部分。这类问题比多选题更丰富,因为学生必须自己构建解决方案,而不是从教师预先确定的一组解决方案中挑选。多选问题的优点是它们的解决方案可以很容易地汇总在直方图中。更复杂的问题需要不同形式的聚合和可视化。点击器系统向教师提供所有个人解决方案的列表。为了扩展到更多的学生,针对新问题类型的插件可以提供解决方案的聚合。
2 编程技能学习
用Java语言编程意味着要学习许多相互关联的技能。文章描述了四种这样的技能,并展示了如何扩展点击器系统以增加对教学的支持。教师可以根据自己课堂上的需求选择其中的技能。学习编程的学生还需要掌握许多其他技能,点击器系统允许在未来增加对这些技能的支持。四种技能如下。
2.1 语法
语法结构及其名称是较为抽象的,这也是编程语言的一项基本组成。谈论语法结构、命名概念并识别它们的能力是学生看到的编程内容之一,也是磨炼学生抽象技能的第一步。点击器系统中已经提供了文本突出显示问题类型,它为检查学生对语言语法的理解提供了一种直接的方法。图1(a) 显示了一个文本突出显示问题,其中文本对应一段Java源代码,该问题对应突出显示特定语法结构的请求。例如,教师可以要求学生突出显示所有注释、所有字符串文字、所有方法体、条件语句中的所有条件或与方法调用相对应的点。这些问题不一定局限于语言语法,还包括对字段的所有读取访问、最终变量的所有使用或所有接口方法调用的高亮显示。
2.2 类型
类型是像Java 这样的语言不可分割的一部分。Java程序员的一项重要技能是能够推断任意表达式的类型。点击器系统开发了这样的功能,允许学生练习和测试该技能。图1(b) 显示了这样一个类型问题。教师编写Java代码片段,并突出显示一个表达式。然后,学生需要决定突出显示的表达是否合法,如果合法,则需要确定其类型。
2.3 控制流
对于刚开始编程的人来说,挑战之一是理解控制流。在基于结构化编程原理的语言中,学生需要理解顺序、选择和循环的基本概念。Java语言为选择提供if 和switch语句,为循环提供for、while和do-while循环。解释一个概念的一个有用的方法是使用多种表示法。以控制结构为例,可以使用两种这样的表示:控制结构的源代码以及控制流程图。为了评估学生是否理解特定的控制结构,要求他们将包含该结构的源代码翻译成控制流程图。图1(c) 显示了在学生的点击器上呈现这样的问题。将Java源代码与控制流图并排显示。最初,图形是不完整的(它只包含入口和出口节点)。学生必须通过添加必要的节点和边来完成图形。
2.4 编码
前三项技能,即理解语言的语法、类型和控制结构,是编程所必需的基本组成部分。然而,编程教学的最终目标是使学生能够将需求转换成实现代码。评估这些技能的直接方法是要求学生实际完成这项任务。图1(d) 显示教师编写要求并提供代码的框架。学生通过完成代码来解决问题。
3 求解和评估教学方法
课堂中,教师可以提出问题,每个问题由三个阶段组成:求解(solve) 、讨论(discuss) 和展示(reveal) 。在求解阶段,学生单独在点击器上解决问题,并提交他们的解决方案。在讨论阶段,教师展示提交的解决方案的总体可视化,并主导对问题和不同解决方案的讨论。在展示阶段,教师最终展示正确的解决方案(或其中一个正确的解决方法)。
这种方法的关键问题是学生解决问题所花费的时间不均衡。虽然有些学生通常在一分钟内完成,但其他学生则需要更长的时间。由于速度快的学生不得不等待速度慢的学生,他们将注意力从课程主题转移到了无关的活动上。为了有效地利用学生的等待时间,在求解阶段之后添加了一个新阶段:评估(evalu⁃ate) 。提交问题后,学生会收到另一个学生提交的解决方案,需要评估该解决方案并提交评估。在评估阶段,学生可以持续评估其他学生的解决方案,直到教师进入讨论阶段。三阶段示意图如图2所示。
请注意,评估阶段的目标根本不是让教师评估学生的解决方案。对于许多问题,点击器系统可以自动评估解决方案的正确性(例如,将其与正确解决方案进行比较,或者自动检查某些属性,例如提交的Java 代码是否编译)。让学生评估其他学生的解决方案,除了让他们在等待速度较慢的学生时保持专注之外,目的是让他们从其他人常犯的各种错误中吸取教训,以加强他们对问题的理解。
当学生创建并提交评估时,他们实际上并没有收到任何对自己解决方案的评估。他们也不会收到关于他们的解决方案是否正确的直接信息。这样做的目的是在讨论阶段引发课堂范围内对错误和正确方法的讨论。假如学生收到了对自己解决方案的评估和更正,他们会研究这些评估,而不是参与课堂讨论。
4 案例研究
这里通过课堂案例讨论了第二节中编程技能的四个问题,并分析了学生在解决和评估阶段的行为。案例中,学生以匿名模式使用该系统。匿名模式下,系统为每个学生分配一个数字标识符,该标识符和学生的对应关系不公开。虽然系统也支持学生实名的模式,但研究发现匿名模式可以鼓励学生参与。他们更愿意提交可能不正确的解决方案,而且他们不会试图通过看其他人的解决方案来作弊。这种方式更能反映数据的真实性。此外,一旦学生发现其他人也会犯错,他们参与课堂讨论的意愿就会显著提高。
4.1 语法
图3显示了一个语法问题,用来检查学生是否理解变量的声明和使用之间的差异,以及实例变量、局部变量和参数之间的差异。图4显示了16个学生求解和评估的时间线。x 轴表示时间(0~4分钟)。y 轴对应每个学生解决问题的时间间隔。
图4显示,提出的求解和评估教学方法是成功的,因为学生们确实花了大部分等待时间来评估其他人的解决方案。
4.2 类型
图5显示了一个类型问题,用来检查学生对多维数组的理解。图6中的时间线显示了21名参与学生的进度。当教师在大约3.5分钟后进入讨论阶段时,一些学生甚至7分钟后仍然在评估。虽然大多数学生提交了预期答案(int[]) ,但相当一部分学生发现这个表达式是不合法的。通过讨论,学生们发现了问题中的一个错误:在Java中,有些表达式不能构成表达式语句(只允许赋值表达式、递增/递减表达式、方法调用和对象实例化)。这表明了评估和讨论阶段可以更深入地理解问题,并能扩展到其他问题上。
4.3 编码
图7显示了一个求和问题,测试对数组、嵌套循环和局部变量的理解程度。图8显示,前几行在5到6分钟出现了一分钟的间隔。造成此间隔的原因是在此时间间隔内没有人提交新的解决方案。因此,已经评估了之前提交的所有解决方案的学生不得不等待。这一问题有待后续改进。很多学生在解决方案中使用了for each循环,在随后的讨论中自然过渡到了对for each循环的讨论中。实践证明这种讨论能加大各知识点之间的相互衔接。
4.4 控制流程
图9显示了一个控制流问题,测试了对嵌套for循环的理解。图10显示了19名参与学生的解决和评估阶段的时间表。可以看到,速度最快的学生在大约4.5分钟后提交了一个解决方案,而速度最慢的学生需要16分钟以上。结果显示第一个提交的解决方案在许多方面都是错误的,说明最快的学生不一定总是最好的学生,提交的文件也显示出学生缺乏根本的理解:循环的逻辑错误。看到这个解决方案,教师可以立即提出在课堂上讨论和澄清的要点,即保证循环中的逻辑正确性。
5 应用效果分析
在实际应用中对学生在课堂中的表现、学生的使用效率以及所犯的错误进行了统计和分析。分析的目的有两个:1) 希望提供关于如何在课堂上更有效地使用课堂点击器的信息。2) 希望报告对学习早期阶段(在课堂中,而不是在随后的考试中)的观察结果。通过记录所有问题、解决方案、学生评估、解决问题过程中的一些细节数据,可以得出如下结论:
(1) 解决不同问题所需时间不同。并非每个问题都需要相同的时间。根据统计数据表明,类型问题所需时间最短,而控制流问题花费的时间最多。这个看起来是正常的,因为推断表达式的类型通常比绘制控制流图简单得多。另外,不同的编码问题之间所花费的时间相差也很大,这反映出哪些编码问题较为复杂。
(2) 学生在不同问题上的解决能力不同。每个问题都需要学生给出解决方案,通过对这些解决方案正确性的评估,反映出在循环控制流上的得分较低,其次是选择控制流。可以根据这个结果增加相关问题的数量和难度。
(3) 解决方案的质量和所花的时间不一定正相关。对有些问题,解决质量与学生解决问题的时间呈负相关。这表明学生解决问题的时间越长,解决方案的预期质量就越低。因此,很难根据学生解决问题所花费的时间来预测解决方案的质量。分析其原因,主要是因为对相关知识点的理解出现偏差,导致对问题的分析出现了偏差。
(4) 学生相互之间的评估极大地提高了学生对问题的理解。如果学生自己的解决方案是正确的,他对其他学生的评估绝大部分都是对的;相反,如果自己的方案错误,则有近一半的学生对其他学生的评估是对的。这说明这些学生通过对其他学生的评估来反思自己的方案,从而找到自己方案的错误。因此,实际中应该更多地让学生相互评估。
(5) 实时发现学生的错误。这些错误包括:混淆关键字、注释使用错误、缺少语句结束符、变量赋值错误、变量作用域超范围等。
使用中对教师和学生的感受也做了调查问卷。教师的观点如下:1) 确定发布的问题。与任何教学活动一样,使用该系统前需要大量的准备工作。教师必须选择或创建要使用的问题。问题的选择应该非常慎重,不能太难或太易,一个具体问题的目标应该是解除学生的疑惑,引发讨论,从而理解知识点。2) 确定发布问题的数量。问题太多,使得问题的解决和讨论时间不够充分。最有用的方法是只使用少量的问题,大约两到三个,并将每个问题的复杂性降至最低。与传统教学相比,这个方法需要一些额外的讨论时间,但能够更好地满足学生的需求,极大地节省了学生自己摸索的时间。
学生的观点如下:1) 非常同意实时反馈方式。因为知识点繁杂,每个知识点及时有效地被解决是必要的,能极大地节省课外自学时间。2) 评估和讨论阶段非常有用。评估阶段能更好地帮助他们理解问题,发现自己解决方案中的错误;讨论时可以提出他们想在课堂上讨论的新问题或不确定的问题,同时教师给出的相关解决方案对他们有很大的启发。
6 结束语
文章提出的课堂实时反馈的教学方法,与课堂点击器系统相结合,提供了一个直接了解学生理解水平的视角,将传统的课堂讲授转变为课堂上有效的双向交流。该方法代表了一种基于问题的学习形式,帮助教师根据学生的需求自然地引入新的主题。这种关于学生理解水平的即时反馈,为学习和评估与编程相关的技能提供了具体支持,并将学生学习中的错误转化为所有学生的学习机会。根据实际应用中的统计和对教师学生的问卷调查,这种方法显著改善了教学,激发了学生的学习积极性和参与感,并获得计算思维和创新思维的能力。