陈英 郑巍 杨丰玉 段喜龙
摘 要:针对高校计算机专业人才培养的现状,首先介绍目前国内可参加的程序设计竞赛的特点;然后说明以程序设计竞赛为依托,对提高教学质量所产生的积极影响;最后以我院的改革与实践为例,从多方面论证程序设计竞赛进一步促进了老师和学生综合素质的提高。
关键词:程序设计竞赛;教学质量;综合素质
中图分类号:G642 文献标志码:A 文章编号:2096-000X(2018)09-0092-04
Abstract: In view of the present situation of the training of computer professionals in colleges and, this paper first introduces the characteristics of the program design competition which can be attended in China, and then explains the positive influence on improving the quality of teaching based on the program design competition. Finally, taking the reform and practice of our hospital as an example, the paper further proofs that the competition can improve the comprehensive quality of teachers and students from many aspects.
Keywords: programming competition; teaching quality; comprehensive quality
近年来,随着科学技术的快速发展,各大公司相对以往更加关注毕业生的综合素质。在此要求下,各个高校应该适应这种变化,更加有针对性加强在校大学生综合素质的培养,以期提高大学生毕业找工作的竞争力。而对于计算机专业相关的学生而言,程序设计类竞赛能够有效地提高学生学习的主动性、思考的创造性、团队的合作性。本文将以我学院过去几年学生参加竞赛的结果来讨论程序设计竞赛对提高教学质量以及培养计算机学科专业创新性人才的作用。
一、计算机学科专业人才培养的现状
1. 程序设计类课程定位和课程目标不够明确。虽然每个高校针对每门课程都会制定教学大纲,但是,大纲修订的实效性不够,有部分高校的教学大纲往往多年都没有进行修改,无法适应当今社会对相关课程所要求达到的目标,同时,学校的教务部门却要求任课老师严格按照教学大纲进行教学活动,这样导致各个任课老师对如何培养学生的能力、培养学生的哪些能力无法达成共识。
2. 教学方法仍侧重理论教学而忽视实践教学。虽然现在部分高校采用了翻转课堂、MOOC等新的教学方法,但是,对于一般的高校而言,依然是教师灌输理论知识为主,学生被动接受,实际的效率不甚理想。尤其是扩招后,大多数的课堂都是大班上课,学生数多的可达一百多人,即使老师想兼顾到每个学生也基本变得不可能了。再者,虽然大部分的课程除了理论课外,还有实验课,但是实验课多以验证型为主,学生上机时更多的只是按照实验指导书将内容输入一遍,并没有真正掌握所对应的知识点,其结果是只要实验内容稍有变化,学生则不知道该如何完成实验。因此,忽视实践教学导致学生解决问题能力较差,不利于培养创新思维能力[1]。
3. 教学过程中忽视对学生学习兴趣的培养。对于程序设计类课程,学生因为新鲜感在开始阶段对这些课程是比较感兴趣的。但是,不可否定的事实是程序设计类的课程内容均比较多,同时难度也相对较大,因此,随着所讲课程内容的增多和深入,学生会感觉到越来越吃力,如果此时老师在讲解课程时仍然只是采用枯燥的语法讲解,而没有实例演示的话,则结果只能是学生死记硬背语法,等到编写程序时则无从下手,这样学生学习的兴趣则慢慢地消失了,只剩下被动地为了应付考试而痛苦地学习,效果会很差。
4. 考核方式不注重编程能力测评。对于程序设计类課程,虽然部分高校采用上机考试,但是,对于一般高校而言,却依然采用了纸质版的考试方式,这种考试方式更侧重对内容的记忆,而缺少对思考能力、实际解决问题能力、动手编程能力、调试程序能力的考核,其结果可能导致部分学生高分低能。更加严重的事实是部分高校的考试试卷越出越简单,考核的知识点也越老越少,这样导致部分学生只在考试前几天突击备考,真正学到的知识少之又少。
5. 学生对本科教育的培养目标理解不够。对于计算机专业的学生而言,其在学习的过程中接触的各种软件比较多,所以部分学生的兴趣侧重在对各种软件产品的学生,而缺少对计算机学科经典理论知识的学习,总是自觉不自觉地把本科学生当成软件公司的“岗前培训”。再者,部分学生在学习理论知识的过程中,经常问的一句话是“学这个有什么用”,他们对本科教育的培养目标培养不够,眼界相对短视。
二、相关程序类设计竞赛简介
近年来,国内高校学生可以参见的程序设计类竞赛主要有以下几种[2]。
1. ACM国际程序设计竞赛(ACM International Collegiate Programming Contest):由美国计算机协会主办,每支参赛队伍由三名队员组成,每只队伍只能使用一台计算机,突出团队协作能力,比赛时间一般为5个小时,每次提交不通过时则罚时20min,比赛截止时,正确完成题目数越多、用时越少的队伍为胜者。
2. “蓝桥杯”全国软件和信息技术专业人才大赛:由教育部高校学生司导,工业和信息化部、教育部等部门联合主办,面向全国高校在校大学生。大赛分为软件类和电子类,参赛大学生先参加各个省份的省赛,只有在省赛取得好成绩的学生才有参加国赛的资格。该赛事的宗旨是向软件行业和信息产业输送具有创新能力和实践能力的高端人才[3]。
3. 团体程序设计天梯赛:由浙江大学主推,教育部高等学校计算机类专业、软件工程专业、计算机课程教学指导委员会主办,于2016年举办了第一届,赛事的影响力正在逐年扩大。每支参赛队伍由10名队员组成,比赛题目分为基础级、进阶级和等顶级三个难度等级,只有前一个等级的分数达到一定要求时,后面等级的分数才能计入总分数,比赛以团队分数进行排名。该比赛重点考察参赛学生对数据结构、算法设计能力,但难度相对ACM难度要低,因为参赛人数较多,通过该赛事的高校排名则可以体现各个高校在程序设计类课程的教学水平。
4. 百度之星程序设计大赛:由百度公司发起,创办于2005 年,该赛事为个人赛,其宗旨旨在为广大程序设计爱好者搭建切磋交流的平台,在比赛中获得好成绩的选手将自动进入到“百度人才库”。
5. TopCoder大学生程序设计挑战赛:创办于2001年,参赛选手在规定的时间内完成三道不同难度的题目,完成的时间将决定该题所得到的分数。
6. iGoogle中国大学生创新设计大赛:由Google举办,包括小工具,背景主题以及点子大赛,旨在依循其API标准,为用户提供更加丰富的内容和用户体验。
三、程序设计竞赛的积极作用
以程序设计竞赛为载体,能够有效地提高教学质量,也能更好地培养计算机专业大学生的各种能力。
(一)对提高教学质量的作用
程序设计竞赛对教学质量的作用主要体现在提高师资、有利于学科建设、更新教学内容、加大实践教学环节、改变教学模式、改变考试模式以及打通多课程等方面,具体的内容如下所示:
1. 有助于加强师资队伍和学科建设:首先,竞赛对知识点的广度和深度都有更高的要求,这就要求指导老师除了掌握基本的知识点以外,还要努力拓展和程序竞赛相关的知识点,更要求指导老师具有“授之以渔”的能力,以便能更好地教导竞赛的学生;再者,程序设计竞赛所涉及的知识点不仅仅是属于某一门课程,而是一个体系,这样就要求各个高校在开展程序设计竞赛时,以点带面,坚持计算机学科的建设。
2. 有助于更新教学内容,调整课程体系:程序设计类竞赛所涉及的知识面广且深,且要求学生具有较高的综合设计和实际操作水平。这就要求老师在实际的教学中,把在程序竞赛中出现过、涵盖多个知识点、且时效性强的题目作为例题,讲解解题的整个过程,引导学生一起思考,以做到以点带面,让学生充分综合运用所学的知识,也进一步知道解决问题所用到的方式方法。
3. 有助于加大实践环节教学的力度:学生们在学习和准备竞赛的过程中,由于程序设计类竞赛的题目的难度均比较大,所涉及的知识点也较多,这就要求学生不管做哪道题目,均要所有学过或未知的知识进行综合汇总,反复认真求解认证才能得到解题思路。在将思路付诸实现的过程中,进一步要求学生具有较强的编程能力和查错能力,而这些能力的提高将强化学生在自习情况下的实践动手能力。
4. 有助于将课堂和课后练习相结合,改革课程教学模式:程序设计类竞赛要求学生具有很强的自习能力。目前,国内外的部分高校和IT公司均提供了在线判题(Online Judge,OJ)竞赛平台,这些平台提供大量的竞赛题目,学生注册成功后则可以自主答题。同时,各个平台还提供BBS供大家讨论各道题目的解法、各种算法的优缺点、学习的方法和比赛的经验。
5. 有助于改革考试方式:课程考试可以采用机试,通过Online Judge平台进行考试。考试前,教师导入学生的ID,然后学生登录后按照要求在规定的时间内独立完成,平台会根据学生提交的代码进行自行测试,并返回测试的结果给学生交互。在考试结束后,平台系统将自动生成每道题的正确率、用时、提交率等统计信息。教师则可以根据这些数据,综合评估学生的成绩,并有的放矢修订下一步教学的内容[4]。
6. 有助于打通程序设计类课程,例如程序设计基础、数据结构、离散数学、算法分析与设计、组合数学、计算几何、密码学及算法复杂性等课程。这样教师就可以不按部就班地顺序讲解这些课程的内容,而是采用螺旋式的方式培养学生在竞赛的高压环境下、在有限的时间内综合运用知识对问题进行分析和研究,并通过抽象、建模和编程实现解决问题的能力,这对培养计算机学科创新性人才有其独到的优势[5-6]。
(二)对培养创新型人才的作用
将程序设计类竞赛的模式引入到当前的本科教学中,将有助于提高学生的自学能力、培养学生的自律能力、团队协作能力、创新思维能力、实际动手能力以及解决各种问题的能力,而这些能力的提高将有利于造就高素质的创新性人才。
通过参加程序设计类竞赛,可以形成良好的竞争环境,为学生个人、学院、以及学校带来好处,具体为:
1. 优秀的学生通過自己的努力,在竞赛中取得好成绩脱颖而出,这样将给其它的学生树立良好的榜样,让更多的低年级学生参与到竞赛中,进而在学院里形成优良的学风和良性循环,极大地促进了学院、学校的学风建设,而好的学风又将为学生提供更理想的学习环境。所以,程序设计类竞赛将深深地影响着一届届学生,也为我们培养创新型人才提供了良好的平台。
2. 获奖学生除了得到例如获奖证书和奖学金以外,也将获得更好的就业机会。当然,获奖的过程是艰难的(尤其对于像ACM-ICPC这样的比赛),但是,学生努力付出的过程也正是各大高校人才培养的过程,同时,因为有企业的参与,学生的培养就和IT行业的发展更加紧密,这样就提高了毕业生的就业竞争力,该培养过程将夯实高校创新型人才培养的基础[7-8]。
四、我院的改革与实践
1. 课程教学充分和竞赛的内容及模式相结合:将程序设计类竞赛所涉及的相关内容及模式渗透到日常教学中,使竞赛成为教学的有益补充。学院开设了与程序设计类竞赛相关的选修课,以竞赛促进教学。学院组建了自己的竞赛团队,积极对学生开展了课外辅导,为团队的学生提供了各种平台,使优秀的学生通过自己的努力和老师的帮助能够脱颖而出。图1为我院采用的课程教学改革路线图。
2. 进一步加强了程序设计类竞赛的高水平师资队伍的建设:近几年来,学院逐步完善了程序设计类竞赛的奖励制度,且成立了竞赛委员会。积极鼓励更多的年轻教师参与竞赛的指导,加强对高水平指导教师的培养,鼓励指导老师参与各种培训和教练论坛,在精神上给予支持,在物质上给予奖励。指导教师人数由初期的2位老师已经增至10位老师,同时,院系老师也积极参与程序设计大赛与程序类课程教学的改革,每年均有指导老师获批省级或校级教改类项目。
3. 建立学科竞赛的长效机制,使学科竞赛具有延续性:学院以提高大学生培养质量为目标,努力营造学科竞赛氛围,定期举行全院、全校性程序设计竞赛,通过建立学科竞赛的长效机制,最终形成校院级、省级、国家级的多级竞赛机制。例如,软件学院每年都会举办《C语言》和《程序设计基础》的竞赛,在各级学生中均取得了良好的反响。
4. 做好了组织宣传工作,扩大了学生的参与面:通过组织多种形式的广泛宣传,让更多的学生知晓并参与到竞赛中来。同时,我们非常注意学生梯队的建设,“老带新”、“传帮带”,充分发挥老队员的示范作用,形成互帮互学、互相赶超的学习氛围。我院四个年级共有近1200名学生,每年的新生基数比较大,我们在新生入学之前就已经在新生群中积极宣讲程序设计类竞赛对学生成才的积极作用,让新生积极参与其中。目前实施对象的范围包括14级10%的学生,15级20%的学生,16级35%的学生,以后学生的比例将逐渐加大。
5. 提高学生的荣誉感和积极性:提高学生的团队合作能力,每个参赛者把个人表现与小组荣誉、学校荣誉紧密联系,这对培养学生的光荣感、使命感和责任感有很大的帮助。同时,参赛学生的优异成绩和拼搏精神将产生榜样的力量,为学院、学校形成一种积极进取、奋发向上的良好学风。平时,这些学生会充分利用好课余时间,主动学习,在各个OJ平台上刷题;每年寒暑假,参加比赛的学生都以饱满的热情留在学校参加集训。
6. 学院构建了更加良好的硬件支持:学院20余个实验室为课题的实施提供了良好的软件开发环境和教改实施平台,购买了大量程序设计竞赛类的书籍,提供学生参加各种程序设计竞赛的经费,为学生提供了良好的硬件环境的支撑,专门为学生开辟机房以作为竞赛训练的场地。
7. 程序设计类竞赛让学生自上而下形成一种良好的学习氛围,有效地促进了优良学风的形成。图2和图3是对我院部分学生就主干课程课堂出勤率和利用课余时间情况的调查结果,该结果表明,程序设计类竞赛能够激发学生的学生兴趣,让学生更加充分利用课堂时间的基础上,进一步利用好课余时间。
8. 程序设计类竞赛也让学生的付出在一定程度上取得了良好的效果:近3年来,我院的学生共获得“中国高校计算机大赛-团体程序设计天梯赛”团队二等奖2次,江西省冠军、亚军各1次; “ACM国际大学生程序设计竞赛”现场赛铜奖2次、现场赛资格6次;“CCF大学生计算机系统与程序设计竞赛”总决赛铜奖1次;“蓝桥杯”省级一等奖3项,二等奖5项,三等奖10项。江西省计算机协会主办的相关赛事一等奖2项,二等奖11项,三等奖13项目。同时,学生对和程序设计竞赛相关的主干课程的感兴趣程度(以百分号记)和期末考试的成绩(以百分制记)相对未参加程序设计竞赛之前都有提高,具体的结果如图4和图5所示。
五、结束语
本文依据我院人才培养目标及社会对软件程序设计人才的要求,通过以程序设计竞赛为依托,对程序设计类课程的教学模式、教学内容的串联、教学方法进行研究和改革。以期将学科竞赛与课程教学相结合,建立学科竞赛的长效机制,更好地增强学生所学知识的广度和深度,增强了学生的团队合作意识,促进创新型人才的培养。下一步我们将让更多的学生参与程序设计竞赛,也让课程的设置更多地和程序设计竞赛相关联。
参考文献:
[1]田贤忠,刘楠,孙道国,等.ACM国际大学生程序设计竞赛学习模式探讨[J].高教与经济,2009,22(4):46-49.
[2]袁国武,赵杨,赵征鹏,等.依托程序设计竞赛提高计算机专业学生培养质量[J].教学研究,2009,15:104-106.
[3]李敏杰.程序设计竞赛对学生实践创新能力的培养[J].福建电脑,2015,8:60-61.
[4]洪雄.从程序设计大赛看计算机公共课程建设改革[J].重庆理工大学学报(自然科学),2013,27(11):137-140.
[5]楊玉军,杨夷梅.计算机程序设计竞赛思想融入“数据结构”课程教学的探索与实践[J].科教文汇,2016,340:50-52.
[6]赵锦元,熊兵,唐志航.任务驱动教学法在数据结构课程教学中的应用[J].计算机教育,2015,2(4):71-74.
[7]李尤丰.程序设计大赛对高校创新人才培养的作用[J].计算机教育,2011,18:4-7.
[8]张耀民.程序设计大赛对程序设计类课程改革的促进[J].中国教育技术装备,2015,13:3-4.