赛教结合提高C++程序设计实验课教学效果的再思考
2017-07-21肖宁
【摘 要】为提高C++程序设计这一学生普遍感到难学的实验课的教学效果,文章结合软件设计大赛从多方面进行探讨,教学实践表明其在提高课程的教学效果上是行之有效的。
【关键词】C++程序设计 软件大赛 教学效果
C++程序设计是学生进入编程世界的入门课,概念规则多、使用灵活、包含了面向过程及面向对象机制等[1],如何提高学生编程能力及实验课的教学效果一直是该课程教师所追求的目标。目前的高职教育中,竞赛尤其是工科类的竞赛,如“蓝桥杯”全国软件专业人才设计与创业大赛(简称:软件大赛)等已成为教育发展和教学改革的一种辅助和促进手段。大赛具竞争性、挑战性、创新性等特点,它要求学生具有较强的信息获取、理解、处理、创新能力,参与大赛可有力提高学生运用知识解决实际问题的能力及学生创新思维的培养,可有效提高学生的自主创新意识、研究能力和工程实践能力,是对教学质量及创新人才培养目标实现的一种较好的检验和推动[2]。本文将结合笔者近五年来对软件大赛(C++组)参赛学生的省赛、决赛的赛前辅导及自己的教学经验,探索有效提高实验课教学效果的方法。
C++程序设计实验课教学过程中存在的主要问题
1.职业院校的学生来源多样,素质差距大,入学成绩低,学习积极性不高,几乎无课前预习、课后复习的习惯,学习能力不强,给教师的授课带来困难,再加之该课程的教学内容多,课时少,使学生普遍感到该课程学习难度大,这在一定程度上不利于学生对该课程的理解和掌握。此外,大学里丰富绚丽的社团活动更能吸引学生,他们参加这些活动课只需短时间努力就可看到成果,而专业课的学习却相反,在短期内他们很难看到明显效果,而且对克服学习上的困难缺乏恒心、毅力,容易在学习上产生畏难心理而放弃对课程的学习。
2.教师对学生编程思维的培养不足,学生不能将所学知识应用到实际,降低了教学质量。
3.实验题型类型单一,内容陈旧、枯燥、没有新鲜感,多为课本例题或其变形,验证性的实验较多,缺乏设计型、创新型实验,很难将所学知识应用到实际,很难激发学生的学习兴趣。
4.实验课上学生随意性大,教学效果不能量化,教师对学生管理不能到位,影响了实验课的教学效果。在调试程序方面,学生不会调试、修改错误程序,遇到问题或错误时无从下手,过多地依靠教师,缺乏自信心,这些都增加了课程的学习难度。
5.在有限的实验课上,教师难以保证对全体学生答疑解惑和实时地对学习效果进行评价,积极性很难调动起来,学生课后也很难有意识地进行编程实践,长时间会导致学生失去学习兴趣。
6.考核体系不完善,仅采用传统的笔试进行考核,使得学生对实验课的重视不够,学生在实验课前没有进行充分准备,实验内容不能完成,且抄袭现象难以避免。
实验课教学的探索
1.注重实验题目的选取
描述枯燥的题目很难调动学生的学习兴趣和主动性,而软件大赛的题目与实际应用紧密结合,且知识性、趣味性、实用性强,它在一定程度上反映了行业对职业能力的要求[3],可借鉴其风格使实验题目趣味化、生活化。例如,2012年软件大赛选拔赛真题:大数学家欧拉在集市上遇到了本村的两个农妇,每人挎着个空篮子。她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。欧拉随便问:“卖了多少鸡蛋呢?”不料一个说:“我们两人自己卖自己的,一共卖了150个鸡蛋,虽然我们卖的鸡蛋有多有少,但刚好得了同样的钱数。你猜猜看!”欧拉猜不出。另一个补充道:“如果我按她那样的价格卖,可以得到32元;如果她按我的价格卖,可以得到24.5元。”欧拉想了想,说出了正确答案。我们不是数学家,很难列出公式来分析。但计算机可以“暴力破解”,就是把所有的可能情况都试验一遍,撞上为止。请写出每人拥有鸡蛋的数目,用逗号隔开。让学生自己选择合理的算法、数据结构来解决。有趣的题目极大地调动了学生的编程欲望和创造动力,感受到学有所用、基础知识的重要性。此外,大赛题目的引入,可使学生提前了解大赛,也为之参赛奠定基础。
2.注重实验内容的形式
实验内容的形式应多样化,例如程序代码填空、程序结果填空、描述程序功能、代码改错、书写函数、程序设计等,从而多方位地增强学生的读程、编程、调试程序的能力。此外,在学生验证程序时,为了使学生明确如何给出测试数据及测试数据的普适性,可借鉴软件大赛的命題模式,除了题目描述,还包含测试输入样例、输出样例,这样就能客观地验证程序的正确性。
3.注重实验内容的设计
根据学生的个体差异以及不同阶段的发展需要,将实验内容由浅入深地推进,将实验题目分为必做题和选做题,让每位学生根据自身的学习情况选择相应难度的题目,即让所有的学生都有事情做,能够完成各自的学习任务,带动学生的积极性,也避免了教师采用相同题目要求,造成部分学生抄袭作业的情况[4]:第一级是必做题,是基础性知识,是知识的直接运用,要求学生必须掌握;第二级是扩展练习或与实际问题相结合;第三级为代码优化或选择软件大赛相关或源于软件大赛的题目。此外,为了拓展学生思路,通过启发,让学生尽量一题多解,从不同角度切入,设计不同的代码,可使学生将知识点进行联系、分类、对比,形成一个较完整的知识体系。
4.注重引导学生学会编程的思维和方法
在C++课程的第一次课程教学,尤其是在赛前辅导中,笔者一直给学生灌输这样的思想:“思想有多远,我们才能走多远”,在程序设计中从不同角度切入,尽可能地一题多解,注重启发、引导学生思维,将编程的思路、方法传授给学生,培养学生先思考数据结构、算法,再写代码的习惯,提高学生的学习质量,以及分析、解决问题的能力。
5.注重程序调试,培养学生独立分析、解决问题的能力
衡量编程能力的一个重要指标就是调试程序的能力,所谓的程序调试,即排除程序中的错误,可分为编译型错误和逻辑型错误。对于编译型错误,有错误提示,相对容易修改,但很多学生要么不会翻译,要么没有耐心阅读,要么直接忽略错误提示,往往使得一个很简单的错误也很难找到并纠正,打击了学生学习的兴趣和积极性;而逻辑型错误,因系统无提示,很难发现,要查找和纠正这些错误更是无从下手,因而让学生注重程序调试至关重要。对于编译型错误可采取边讲边练的形式和学生一起阅读、翻译提示信息,再进行查错、改错,将常见的错误进行翻译、归类、总结后发给学生,让他们在遇到类似问题时先自行解决,当他们解决不了时教师再予以解答;而对于逻辑型错误,教师不能直接给出答案,应通过启发,循序渐进地提问,引导学生主动思考,得出修改的方法,也可依托实例利用注释、设置断点、逐语句执行等方法以边讲边练的方式进行查错,使学生在获得理论知识的同时及时实践,使得他们能更快更真实地领悟编程中程序调试方法的重要性,在学习中不断积累调试的方法、技巧和经验。endprint
6.注重分组教学模式的使用
依据教师指定和学生自愿相结合的方式将班上的学生每4人一组,按学习、动手能力的强弱分成强弱型和强强型小组:强弱型小组,可使能力强的学生带动、帮助能力弱的学生。强强型小组,他们会对同一问题各抒己见,迸发更多的思路,创造性地完成实验任务。
7.注重及时评价学生的实验学习效果
对于实验课上规定的内容,根据学生完成的数量及对编写的程序依据结果的正确性、功能的完善性、算法的效率、程序的可读性和规范性、考虑问题的全面性或程序中是否隐藏错误等进行及时打分,作为每次实验课的平时成绩,最后整合平均成该实验课的总评成绩,以一定的比例计入该课程的总分中,使学生重视课程的实践操作。同时,对善于思考和提问、作业完成质量高的学生要及时表扬,以达到树立学习榜样和激励学生互相学习、进步的作用。
8.注重加强实验课的管理
为了避免出现学生实验课上玩手机、聊天、淘宝等现象,教师在实验课前就将实验任务布置给学生,让他们独立思考,也可和同学讨论交流后写好程序的初稿、程序运行所需的测试数据、预期的运行结果等。此外,为了在日常学习中培养学生的工程意识,还要重视初稿代码的可读性、可维护性及可重用性等,这样,学生在课上带着问题有目的地操作而不是面对电脑一片茫然。每次实验课前,教师先检查实验题目完成情况,让学生养成习惯,提高实验课的效率,而上机时重点进行编辑、调试,及时写出并提交规范的实训报告,有利于节约宝贵的上机时间。
9.注重充分利用网络平台
如今的网络已成为重要的交流平台,充分利用网络可延伸实验课教学,对课堂教学进行补充。具体来说,教师可将实验指导书、教学案例、教学视频、学习网站、经典算法、C++函数库、编码规范、常见编译错误分析、典型错误剖析、模拟试题、历年软件大赛真题等资料发布到博客或QQ空间让学生分享。这样,有助于学生进行课前预习、课堂重现、课后复习、赛前练习和自测等以提高其学习效率。
10.注重实验课的教学形式
提高实验操作课的教学比例,为学生提供开放的实验环境。除传统的实验课外,建议学校的机房应向学生开放,并有指导教师指导,这样的环境增加了学生上机实践的时间,让学生有足够的机会进行实践操作,通过有充分时间的思考、编程、调试加深学生对知识点的理解,才能真正达到实践教学的目的。
11.注重加强课内外辅导,及时解决学生遇到的问题
在课内,应对学生提出的问题、疑问及时分析讲解;在课外,应充分利用网络平台如微信、QQ等互动的方式对学生进行及时的指点,这样可避免学生因问题累积而产生厌学现象,提高学生学习积极性,教师能与学生进行深层沟通,了解学习状况、进度快慢、内容的难易,促进教师自己进行日常教学反思,调整自己的讲课内容、思路、方法等以提高教学质量。
12.注重考核方式的改革
考試是检验教学效果的重要手段,C++课程的考核除了传统的理论考核、平时作业、平时实验考核外,还应加入期末上机操作考核,其题目形式可借鉴软件大赛预赛题样式,这样不仅扩大了总评成绩中实验操作的比例,引起学生对实验操作课的重视,也使学生在学习过程中重视自己实践操作能力的培养。
结语
为了提高C++程序设计实验课中学生的学习兴趣、积极性、能力和教学效果,在保证常规教学目标实现的同时,结合软件大赛,将大赛理念、大赛中的相关题目渗透到实验课教学中,并结合近年来笔者的教学经验从多方面进行了探讨,这不仅对学生提出了要求,也对教师提出了更高的要求,实施过程中,再加上教师的责任心、对教学的努力和投入,实验课的教学效果得到了明显提高,同时也为其他程序设计类课程教学效果的提高提供了参考。
参考文献:
[1]崔永红:《C++面向对象程序设计》,北京大学出版社,2014。
[2]Wang Hong,Wu Wenhu.“New ideas of Tsinghua practice based on competition and teaching,”Computer Education,no.7(2006).
[3]张瑞成、陈至坤、王福斌:《学科竞赛内容向大学生实践教学转化的探讨》,《实验技术与管理》2010年第7期。
[4]肖宁:《结合软件大赛提高C++程序设计课程教学效果浅谈》,《电子测试》2014年第14期。
作者单位:陕西职业技术学院计算机科学系 陕西西安endprint