刘芝怡 丁志云
常州工学院 江苏常州 213002
☆现代教育技术与装备☆
结对编程在程序设计语言实践教学中的应用
刘芝怡 丁志云
常州工学院 江苏常州 213002
结对编程是敏捷地和基于实践的软件开发方法。在程序设计课程的传统实践教学中,学生之间往往缺乏彼此的有效互动,从而不能完成实践教学的任务,甚至失去对课程的信心。笔者提出一种将结对编程运用于程序设计语言实践教学中的方案,并通过实验证明该方案可以有效提高学生的学习效率。
结对编程;计算机语言课程;教学实践
Abstract: Pair programming is a software development methodology which is agile and based on practice. Due to the lack of communication between each other, students cannot complete the task, and even lose the conf dence in the program designing course. This paper put forwards a method which applies pair programming in language course to teaching practice. Our experiment shows that pair programming is effective in improving students’ learning effect.
Key words: pair programming; computer language course; teaching practice
Linn和Dallbey在1989年提出的程序设计认识成就链中认为,初学者必须依次学会程序语言特征、程序设计技巧、问题解决能力等知识,才能由初学者逐渐成为“专家”。我校教师在经过一个学期的程序设计语言课程教学后,发现大部分学生无法超越第一阶段,仍然将学习重点停留在对程序语言语法的了解,无法通过编程解决实际问题。
造成学生学习效果不佳的原因有很多,其中一个重要的问题出现在实践环节。众所周知,要掌握好一门程序设计语言就必须通过大量的实践操作。当前,大多数学校程序设计语言实验课的教学方法是让每位学生在实验课上独立完成教师指定的题目,教师给予个别辅导。而学生多、辅导教师少的现实使得学生与教师之间缺乏足够的交流,导致学生的问题不能得到全面及时解决。一些程序设计能力较差的学生常常无法按时完成作业,部分学生甚至通过抄袭的方式来应付教师的检查。另一些程序设计能力较强的同学早早完成任务而大部分时间无所事事。若能在实践教学环节让学生之间相互交流,以协作方式完成作业,将会使学生体会到团队合作的优点,并学习他人的编程经验,从而达到快速进步的效果。
极限编程(Extreme Programming,以下简称为XP)是1996年由Kent Beck提出的敏捷软件开发方法。XP整合多人的观点与技术经验,以交流、简单、反馈、勇气4个价值观作为基础,其核心是结对编程。所谓结对编程,就是每个模块的编码都是2个人一起完成,共用一台电脑。这样,一个人编码时,另外一个人就可以检查代码,或对编码的思路进行思考,写文档等。不再有另外的测试人员,2个人同时完成代码的测试,并且是先写测试程序然后再编程。这样既避免了编程人员和测试人员的矛盾,又解决了一个人自己检查的局限性。2个人共同检查可以避免大多数的错误。在共同编程中还可以及时地进行经验交流和传授。并且2个人共同工作也增加了工作量的弹性,使项目计划的瓶颈能尽快解决。
在国外,已有众多研究人员对结对编程技术在程序设计教学中的效果以及影响因素进行了一系列的实验研究。结对编程正面效果有结对编程技术具有互相监督、互相协商、互相鼓励、互相复查、互相纠错、互相学习、互相信任等7种激励效应。国内也有学者从事这方面的研究,刘峰等指出将结对编程引入程序设计语言实践教学有如下意义:(1)极限编程有利于培养学生互相学习的良好习惯;(2)极限编程提高了学生的自信心;(3)极限编程促进了团队合作和人际交往。
当前,学者将结对编程思想引入程序设计语言实践教学的做法还存在一个很大的缺点。问题出现在结对的2个学生学习水平差异比较大的情况下。可能由于程序复杂,也可能因为害怕写错代码,甚至是想偷懒,那些水平较差的学生常常自己不工作,让能力较强的学生来完成大部分工作。这种情况下,水平较差的学生由于减少实践机会,其学习效果反而更糟糕。鉴于此,提出一种改进方案以确保在实践环节中结对编程的2个成员都完成等量工作,使双方均得到锻炼。笔者通过实验来分析新方案的使用对学生学习程序语言的成效和影响。
(1)结对办法:在前几次实验课中实行自愿配对制度,因为刚开始教师对学生的编程能力及个性特点还无法全面掌握。几次实验课后可实施强制配对,具体做法是能力强的学生带能力差的同学。
(2)任务安排:在每一次实验课上,首先要求队伍中的每位成员独立完成各自的编程任务,需要注意将个人编程任务的难度值及知识点设置成类似的。在他们独立完成各自的任务后,可让他们协作解决一个更复杂的问题,该问题要和他们先前的编程任务有关。表1为一个编程任务分配的样本。
表1 编程任务的样本
(3)学生在完成个人任务时,原则上不允许其相互讨论。但是,如果某个成员提前完成,并且另外一个成员认为有必要求助同伴时,教师可允许他们讨论但同时要做好记录以备对后续教学过程进行监督。
这样,每堂实验课上学生都可以进行独立编程和合作编程的实践,从而避免了传统实验课上水平差的学生因本身能力的局限和师生沟通少而导致无法完成实验,又避免了以往使用结对编程方法时水平差的学生不作为的问题。
采用实验法来检测设计方案的实施效果。在教学实验中,自变项为2种不同的实验课教学方法,因变项为学生的测验成绩。实验过程中,实验组2的学生实验课上采用笔者提出的结对编程方案;实验组1的学生则采用独立编程模式。两组教学内容和学时数完全相同。实验结束后,两组采用相同的测试题目进行考试,并要求各填写一份程序设计语言教学问卷。本实验的研究工具包括:课程讲义、合作编程学习记录单、VB测试卷、教学问卷。
实验过程共实行16周,每班每周4节课,2节理论课,2节上机课。16周后实施测试和填写教学问卷。数据资料包括实验课程序代码完成情况统计、测试成绩和教学问卷3部分。表2~表4是根据收集到的数据资料进行分析后得到的结果。
表2 整体学习成绩分析(总分20)
表3 程序理解能力分析(总分3)
表4 程序设计能力分析(总分17)
可以看到,采用改进结对编程方式进行实践教学的班级普遍在编程能力和质量上优于采用独立编程方式进行实践教学的班级。
学生对于课程活动的相关评价在调查问卷中使用开放式的问题呈现。实验组2中71.2%的学生认为结对编程有利于提高自己的学习效果,92%的学生表示结对编程让他们更自信,感觉更好。下面摘录了一些学生对结对编程实践的看法。
学生1:“我觉得,在帮助同伴解决问题的过程中得到了进一步提高。”
学生2:“同伴经常能发现我平时没注意的错误。”
学生3:“上课时有些问题一知半解,实验课上与同伴的合作让我对很多内容有了更深入地理解。”
参与实验的教师普遍认为该实践教学模式减轻了他们的工作负担。以往实验课上,辅导教师虽然忙得焦头烂额,但是仍有很多学生的问题无法得到及时解决。采用新模式后,学生遇到问题可相互讨论,合作解决。另外,他们也觉得学生上交的程序质量提高了很多,而且抄袭现象明显减少了。
结对编程在教学实验中取得了很好的应用效果。在程序设计语言的实验课中,学生采取了与传统方法不同的编程方式,即结对编程方式。通过在合作任务部分应用结对编程,发现结对的成本并没有比单独编程时高,极大地提高了程序质量,显著增强了结对学生分析和解决问题的能力,如分析时遇到不少问题,通过结对双方的及时沟通和不断探讨,最终找出较好的解决方案。此外,结对编程的过程也是一个互相督促的过程。由于这种督促的压力,使得结对学生在实验环节更认真地学习。通过这种实践模式的应用,学生的自信心和成就感得到了极大增强,从而进一步激发其学习热情。
笔者通过教学实验的实施过程总结出一些经验,遵从这些建议和经验,可以让结对学生的编程实践变得更容易、更有效率。具体有以下几点:(1)尽量将性格融合的,技术互补的配对。在不同阶段,有针对性地组合,可以起到很好的作用。(2)任务出错或不能完成,应让所有成员共同负责。(3)结对成员在完成合作任务出现意见不同时,可由教师帮助解决。(4)在教学过程中,教师应给结对学生多点鼓励,让其产生共同的荣誉感和责任感。
[1] B. Hanks. Student attitudes toward pair programming[J]. In ITiCSE, 2006
[2] P. Sfetsos, I. Stamelos, L. Angelis, and I. Deligiannis. An experimental investigation of personality types impact on pair effectiveness in pair programming[J]. Empirical Softw. Eng., 2009,14(2):187~226
[3] L. Williams, L. Layman, J. Osborne, and N. Katira. Examining the compatibility of student pair programmers[J]. In Proc. AGILE, 2006
[4] 刘峰,王小平.结对编程在计算机语言实践课中的应用[A].全国第19届计算机技术与应用学术会议论文集,2008
Application of pair programming in computer language practice course
Liu Zhiyi, Ding Zhiyun
Changzhou institute of technology, Changzhou, 213002, China
2010-12-26 稿件编号:1012129
刘芝怡,讲师。丁志云,讲师,主任。
常州工学院校级重点课题“极限编程和混合式学习在程序设计课程中的应用研究与实践”。