程序设计基础课程中结对编程实践与效果评估
2020-07-10闫晟,徐彬,2
闫 晟,徐 彬,2
(1.东北大学 计算机科学与工程学院,辽宁 沈阳 110819;2.东北大学 国家级计算机实验教学示范中心,辽宁 沈阳 110819)
0 引言
学习程序设计能够解决不同专业的不同需求,同样的,计算机科学课程可以培养学生的计算思维[1],因此,C 语言在各大高校都成为了学生的必修课程,但是作为刚刚入门学习编程语言的学生来说,单独上机编程的难度非常大。在这种情况下,学生的成就感低,学习的积极性受到了很大的影响。研究表明,计算机教学实践中引入结对编程的模式有利于提高学生的编程能力[2-4],因此,可以在C 程序设计课程的上机操作环节引入结对编程模式。为了测量结对编程模式和传统单人模式之间的差异,设计一项实验,评估结对编程模式在课程中的实施效果。
1 结对编程的含义
结对编程技术是指来自同一工作站的两个程序员在同一个任务上协同工作。随着极限编程的兴起,这种技术已成为软件行业中一种常见的编程方法[5]。两个程序员在一起处理一个项目时,一个程序员编写代码,叫作“驾驶员”,另一个程序员在生成新代码时不断地检查它,叫作“导航员”。“驾驶员”主要关注正在编写的代码,而“导航员”可以在更加广泛的程序中结合上下文中进行审查。一般来说,程序员会在“驾驶员”和“导航员”两个角色中随时互换。
结对编程已经成为敏捷开发方法中一种重要的实践模式,在软件开发领域得到广泛的重视和研究。研究发现,结对编程对编程过程有多种积极影响,虽然结对编程增加了大约15%的开发时间成本,但它产生了全面更好的代码,从而减少了所需的测试和错误修复量[6]。
如今结对编程已经在许多计算机科学课程中获得普及,研究表明,这种学习策略活动是有效的[7-9]。结对编程为学生提供了高效的编程环境,学生可以在这种环境下生成质量更高的代码,并且增强编程的信心[10]。结对编程对于提高学生编程兴趣、对代码的理解能力以及编程程序的成功率都有着很大的帮助。有报告指出,结对编程能够使学生不断检查他们的编程及学习方式,因为他们对同一个问题有着不同的观点。这种方式可以扩展学生学习编程的学习策略,有助于改变一些学生的固定心态[11]。
2 结对编程的实施
2.1 实验参与者
实验数据来自于2019 年春季东北大学材料系学习C 程序设计课程的学生。本实验统计了来自材料系大一年级8 个班级共计255 人的数据,其中,男生所占的比例为79.6%,女生比例为20.4%。采用问卷调查方式收集并分析所有学生的信息,结果列于表1 中,其中,60%的学生表示没有编程经验,90.2%的学生此前没有听说过结对编程,仅有9.8%的学生了解过结对编程。
2.2 实验方法设计
实验总共进行5 周,学生每周在东北大学在线编程社区完成编程任务,并且完成在线测验。为了测量结对编程模式与传统模式的有效性,将8 个班级分为两组,其中1—4 班共计131 人作为实验组;5—8 班共计124 人作为对照组。在第1 周两组学生都采取传统模式,在第2—5 周对实验组采取结对编程模式,对对照组采取传统模式,图1 中总结了设计模式。实验组的学生可以和组内任何一位学生进行配对,不限次数。
表1 学生人数对比
图1 比较结对编程与传统模式的实验设计
2.3 实验数据处理
实验数据包括学生每周在在线编程社区完成程序题的提交正确率,以及学生在完成编程任务之后完成测验的分数。这些测验均为选择题的形式,其中包括概念和编程问题。
为了确保两种模式的学生能接受相同数量的作业,我们收集了编程任务中15 道程序题的提交正确率,并且对每个题目的正确率和每周测验分数进行均分。
根据学生的反馈以及每周的教学内容,可以得出第4 周和第5 周的编程任务更具有挑战性。15 道程序题的具体难度等级为PA1—PA4 简单、PA5—PA8 中等、PA9—PA15 困难,编程任务难度随时间的增长递增。
3 实验结果的分析
3.1 结对编程模式对上机编程的影响
实验组和对照组提交正确率波动示意图如图2 所示,在第1 周的3 个问题中,实验组的提交正确率低于对照组;在其余的12 个问题中,实验组的提交正确率明显高于对照组。这个结果是预期的[12],因为在第1 周两组学生均采用传统模式,单独完成上机任务。在实验组采用结对编程模式之后,提交正确率有很大提升,并且超过采用传统模式的对照组。在结对编程模式的初始阶段,实验组和对照组波动类似,表明结对学生和不结对学生解决问题的能力接近,但是随着结对编程模式的推进,实验组的波动逐渐平缓,表明结对编程模式倾向于使学生更好地应对比较困难的编程任务,学生解决问题的能力得到了加强。
图2 实验组和对照组提交正确率波动示意图
对实验组和对照组的代码提交正确率数据进行双样本t检验,两组之间的差异见表2,可以看出两组在提交正确率上有着明显的统计学差异。一般来说,对照组得分差异为负,这表明对照组的学生在提交正确率上比实验组的学生差。
表2 实验组与对照组在上机编程的差异性分析
3.2 结对编程对测验的影响
接下来,检查对照组和实验组之间对于周测验是否存在差异,结果如图3 所示。因为每周测验的总分值不同,因此取每次成绩占总成绩的比例进行比较,结果表明来自对照组和实验组的学生在所有的5 个周测验上的表现非常相似。
对实验组和对照组成绩数据做双样本t检验,结果见表3,没有发现两组数据的统计学差异。
由于测验中只包含选择题,因此可以得出,结对编程模式对选择题类型的测验并没有明显影响。这表明结对编程模式并不能使学生解决考试环境中的选择题类问题。
3.3 结对编程次数对上机编程的影响
图3 对照组和实验组在周测验的分数
表3 实验组与对照组在周测验上的差异性分析
在实验中,实验组的学生可以在组内任意配对,因此产生了不同配对次数的差异。为了研究这个差异是否对上机编程产生影响,检查不同结对次数的组合在每周编程任务上的表现差异,结果如图4 所示。不同结对次数的组合在所有编程任务上的表现非常相似,没有发现统计学差异,因此,结对次数并不会对上机编程产生明显影响。
图4 结对次数不同在编程任务上的表现
4 学生对结对编程的认知
在实验结束后,为了衡量学生对于结对编程的体验,向学生分发了简短的问卷。
Q1:是否愿意继续结对编程?
Q2:是否觉得结对编程更有效率?
Q3:是否觉得结对编程对于提高编程水平有帮助?
表4 的结果表明,学生对于结对编程的态度是积极的,大多数学生都赞成结对编程模式,并且认为结对编程模式对自己有帮助。图5 所示是收集到的学生认为结对编程的好处。
在实践过程中发现,在没有开展结对编程模式时,基础薄弱的学生对于指导教师的依赖性较强,消极地对待解决不了的问题。在开展结对编程模式之后,这部分学生可以和结对成员之间相互讨论。根据系统记录的代码提交时间,发现这些学生能够很快解决编程上出现的问题,更能获得满足感,学习积极性和主动性也有很大提高。
表4 学生对结对编程的认知调查 %
图5 学生认为结对编程的好处
5 结语
采取结对编程模式的学生在上机编程环节中的表现要优于采取传统模式的学生,并且在应对困难的编程任务时,结对编程显现出明显的优势,但是在实验中,没有发现选择题测验的分数与上机编程存在任何差异或者相关性,表明结对编程模式并不能帮助学生解决考试环境中的选择问题。
总的来说,结对编程模式是有效的,这种模式能够充分地发挥学生上机编程的自主能动性,有效减少上机过程中实践能力差、消极对待等现象。
在下一步的研究中,将考虑结对编程对于非选择题的考试测验的影响,并且关注部分消极学生的态度,改善结对编程模式,使学生更乐于接受结对编程,学习更加高效。