论ACM/ICPC竞赛推进程序设计类课程的教学改革

2014-03-28 05:53
长春金融高等专科学校学报 2014年2期
关键词:程序设计竞赛题目

戚 爽

(长春金融高等专科学校 计算机系,吉林 长春 130028)

一、引言

ACM/ICPC是国际计算机协会组织的国际大学生程序设计竞赛的英文简称。这项每年一届的计算机学科竞赛始于1976年,是目前规模最大且最具影响力的全球性高校之间的赛事。[1]ACM/ICPC竞赛具有独特的竞赛规则:以团队的形式代表各学校参赛,每队3名队员,比赛期间每队使用1台电脑,在5个小时内编写程序解决6~12个问题。[2]编程语言可以使用C、C++、Pascal或Java中的任意一种,比赛胜负的评判以答对题目数量多者占优,在解题数量相同的情况下,总用时最少者占优。[3]由此可见,ACM/ICPC竞技可以系统检验大学生的创新能力、团队合作精神和在压力下编写程序、分析和解决问题的能力。

ACM/ICPC竞赛题目没有固定的范围,涉及数论、图论、离散数学等多学科知识,并且要求学生在程序设计方面拥有扎实的基本功。就高职高专计算机专业开设的课程而言,ACM/ICPC竞赛与《C/C++程序设计》、《数据结构》、《Java程序设计》等课程有着紧密的关联。如何以ACM-ICPC竞赛为契机,推动与促进计算机程序设计类课程的教学改革,提高高职高专计算机专业学生的职业能力和职业素养,已成为近年来各高校教师积极探讨的热点问题。

二、现有程序设计类课程教学存在的问题

目前,现有的程序设计类课程教学仍然存在着很多尚未解决的问题,大体表现在以下几个方面。

(一)课堂教学模式未发生根本性改变

目前,程序设计类课程大多仍然沿用“教师讲授,学生被动接受”的灌输方式进行教学。程序设计课程内容比较抽象,而且层层加深,前后衔接较为紧密。这种传统的人才培养模式限制了课堂中教师与学生的互动,很难激发学生的学习热情,学生易产生畏难情绪,同时,也扼杀了学生的想像力与创造力,削减了学生自主学习的意识。

(二)实践教学流于形式并缺少综合性实验

一方面,在实践教学环节中,程序设计类课程对学生的实际编程训练要求较低,仅要求学生使用教材中的程序例题进行验证性操作,即按照书本机械性地输入源代码,然后进行源程序编译,修改错误,连接后执行程序等。这样就使学生变成了打字员、机器人,在实验课中一直进行简单且重复的模仿,甚至对自己输入的程序缺乏深入的理解和研究,导致学生失去学习兴趣与热情,误解了程序设计类课程的初衷,错失了提高编程能力的大好时机。另一方面,上机实践课程的教学进度必须遵照课堂教学的讲授顺序进行安排,这就导致上机实践内容的设计与制定为每一章节的重点和难点内容,或是对单独几个知识点的训练与考查。例如,在《数据结构》上机实践课程中,传统上会按照程序设计中非数值数据之间不同的逻辑结构来划分和设计实验内容,每一次实践课练习一种数据结构的实现以及相关操作。这样做会误导学生将注意力只集中在对于每种数据结构的算法上,而忽略了对课程概念的整体性把握,忽略了在解决较大规模问题时对于数据结构的选择、算法的选择等综合运用能力的培养。

(三)忽略协作学习能力和团队意识的培养

目前的大型软件均是通过团队协同合作获得的集体智慧的结晶,即使是非常优秀的软件编程人员,也无法熟悉和掌握所有的专业知识与技能,无法独立完成软件开发与设计过程中的全部工作。但在程序设计类课程的教学过程中,教师往往忽略了对学生团队意识的培养,缺少团队协作学习环节的教学设计。以往虽然在教学过程中鼓励学生采用分组方式进行讨论与实验,但由于学生的知识水平参差不齐,每组可能是由1~2名学生包揽了所有实质性的工作,而其他学生只是滥竽充数,没有真正做到团队协作式的学习。那么,学生参加工作后就会缺失团队意识这一基本的职业素养,给未来的工作造成影响。

(四)考核评价体系单一、陈旧

目前大多数程序设计类的课程考核内容局限性较大,多以考查教材中的基础知识与基本理论为主,且考核形式单一,一般只采用笔试或者上机操作,其中上机操作考试题型多以客观题、程序改错、程序填空和简单编程题为主,而且期末考试成绩占课程总成绩比重过大。在课程考核评价环节,由于考试方式和考试题型的局限,无法通过考核体现出学生掌握编程技巧和程序设计能力的真实状况,也无法突出程序设计类课程重视实践环节的特点,反而形成了学生死记硬背的现象,制约了学生动手实践能力等职业技能的培养。

三、ACM/ICPC竞赛推进程序设计类课程的教学改革

根据以上对程序设计类课程存在的问题和对我校学生的学情分析,参考ACM/ICPC竞赛模式及题目特点,程序设计类课程的教学改革应从以下几个方面入手。

(一)课堂教学增加ACM/ICPC竞赛元素

在理论教学过程中,尝试将ACM/ICPC程序设计大赛的试题穿插到程序设计类课程的基础知识和语法讲解中,由于ACM/ICPC竞赛试题新颖、有趣且极富挑战性,可以给学生不一样的感官刺激,使学生不断获得解题的喜悦感与成就感。但是由于学生的知识水平参差不齐,如果直接将ACM/ICPC试题库中的完整题目呈现给学生,会使学生产生畏难情绪,丧失学习的信心。因此,必须将与本节重点知识相关的内容提取出来单独编成题目。例如《C/C++程序设计》课程,在介绍选择结构和循环结构时,可以以ACM/ICPC竞赛试题中常规的几种输入、输出要求为例,演示讲解如何使用循环语句完成多个实例的按格式输入;在输出若干数据时如何使用选择语句控制前后空格数及何时输出换行符等。当然,对于ACM/ICPC题目的选择和改编是一项循序渐进的工作,在一个教学周期内不可能完成全部题目的整理,可能需要几轮的积累。

在课堂教学中还应注意运用多样化的教学法,如任务贯穿分解法,以任务驱动的方式将重点和难点知识化解于无形;课堂现场编程陷阱法,在演示编写程序过程中教师故意犯错,以吸引学生注意力,促使学生帮助教师查找错误,加深对该类型错误的认识;Flash动画演示法,例如在《数据结构》课程讲授栈的出栈与入栈操作时,通过动画演示的方式,帮助学生对抽象的概念有更加清晰的理解。多种教学法的穿插运用,可充分激发学生的学习热情,活跃课堂气氛,同时也能提高学生阅读程序的能力,拓宽学生的思维广度和深度,帮助学生树立良好的编程风格。

(二)实践教学借助Online Judge系统

根据高职高专职业技能培养目标要求,可将上机实践形式分为验证性实验、设计实验和综合实验。其中验证性实验是通过上机操作的方式将理论课中所学到的具有代表性的程序和算法进行实现。在验证实验的基础上,进行设计实验。教师可以挑选程序设计类课程中经典的例题和算法,或者在ACM/ICPC题库中精心挑选适合的题目并进行适当简化。

综合实验属于阶段性总结实验,一门程序设计类课程可按照课程内容的实际需求安排3~4次的综合实验。首先教师在Online Judge系统(简称OJ)上挑选涉及到本阶段学习知识的竞赛练习题目,并发布到竞赛平台。然后对学生进行分组,3~5人为一组进行联机程序设计练习。在使用竞赛平台答题的过程中,组内学生可以对题目进行分析与讨论,然后制定出解题思路,并完成程序代码的编写,最后将结果代码提交到竞赛平台,由平台自动给出判定结果。将ACM竞赛平台引入到实践教学中,一方面,教师可以通过竞赛平台为学生订制各阶段的综合上机实践项目,并通过提交情况掌握学生近期的学习情况,从而适当调整教学进度。另一方面,ACM试题都是非常贴近生活的实际问题,可以给学生身临其中的真实感。学生可通过竞赛平台答题,接触到更广、更深入的知识范畴,综合运用书本上的知识解决实际问题,同时,根据竞赛平台的判定结果查找自身的问题,促使学生不断进行代码查错和知识巩固。各组之间也可以随时了解各自的代码提交情况,从而形成一种互相竞争的状态,提高学生学习的主观能动性,形成良好的学习氛围。

(三)建立期末上机考试与ACM竞赛平台考核相结合的总体评价机制

对于高职高专计算机专业的学生来说,未来的就业岗位包括ASP.NET开发工程师、NET Windows开发工程师、网页设计师、需求分析工程师、系统架构设计师和数据库工程师等。这些岗位都要求其具备一定的算法设计和实现的能力,以及能够熟练使用计算机语言解决实际问题的能力。可见,学生实际动手编程能力是程序设计类课程的一项重要的职业能力培养目标。ACM平台采用计算机自动判断程序的正误,所以学生提交的程序既不能有任何语法错误,也不能有任何逻辑错误。在总体考核中增加ACM竞赛平台考核机制,可大胆进行尝试将期末上机考试成绩由原本占总成绩的70%降低到50%,学生多次综合实验中的平均成绩占总成绩的40%,另外10%为平时考勤成绩。

四、结束语

计算机技术发展日新月异,学生的素质参差不齐,为了适应社会和教育发展的需求,教育工作者应对现有的教学理念、教学方法、教学模式等方面进行不断的探索、创新。相信将ACM/ICPC竞赛的先进理念融入到高职高专计算机专业的日常教学中,能够为程序设计类课程的建设与改革提供新思路,从而进一步提升大专学生的职业素质与专业技能。

[1]吴文虎,王建德.世界大学生程序设计竞赛(ACM/ICPC)高级教程(第一册)程序设计中常用的计算思维模式[M].北京:中国铁道出版社,2009,(7).

[2]张熠.以ACM为导向构建C语言实验教学新平台的研究与实践[J].台州学院学报,2009,(6):70-74.

[3]周苏.感受数学思维与算法艺术之美——推荐《程序设计中常用的计算思维方式》[J].计算机教育,2010,(3).

猜你喜欢
程序设计竞赛题目
2020丝绸之路数学竞赛
唐朝“高考”的诗歌题目
基于Visual Studio Code的C语言程序设计实践教学探索
关于题目的要求
本期练习类题目参考答案及提示
从细节入手,谈PLC程序设计技巧
我看竞赛
创新思维竞赛(3)
高职高专院校C语言程序设计教学改革探索
追根求源