摘要:针对目前大学计算机学科教学与实践在培养计算机人才上的不足,提出了以ACM-ICPC竞赛为依托的计算机科学方向的理论教学内容和实践教学方法,引入ACM-ICPC竞赛注重学生思维能力和计算机实现算法的考核方式,强化以赛代练的实践环节,培养学生的算法设计能力、编程技巧、逻辑思维能力以及良好的协作精神,实践证明通过ACM-ICPC竞赛的模式及其培训能切实提升学生的程序设计和实现能力,培养社会真正需要的创新型计算机科学人才。
关键词:计算机科学;ACM国际大学生竞赛;教学方法
TP3-4;G652
一、引言
ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest,ACM-ICPC)是由美国计算机协会(ACM)主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。该项竞赛从1970年举办至今已历31届,因历届竞赛都荟萃了世界各大洲的顶尖计算机人才,竞赛采取ACM/ICPC程序设计竞赛评测系统pc2评判,实时发布各赛队解题结果,避免人为的主观因素的影响,ACM/ICPC竞赛的公正性与公平性得到充分的肯定,备受国际上的知名大学和各著名信息技术公司如Microsoft (微软公司)、GOOGLE、IBM 等的高度关注,成为世界各国大学生最具影响力的国际级计算机的赛事[1]。
创新实验学院于2009年成立ACM实践班,依托于校创新实践基地,以培养创新人才为目标,近年来在省赛全国赛中获得多项大奖,并于2012年获得了我校首枚区域赛金牌[2]。目前,计算机人才培养的专业课程存在以下问题,专业课程广度和深度都不够,学生对算法理解的不深入。教学内容理论性強,而缺乏实际应用问题,内容枯燥,学生缺乏学习兴趣。实践教学环节时间较少,形式不够丰富,实践活动不具有连贯性和持续性,学生的编程能力弱。
而面向ACM-ICPC竞赛的计算机科学人才培养的教学与实践方法能够解决以上在计算机科学人才培养上存在的不足与弊端。ACM国际大学生程序设计竞赛需要参赛队员具备数据结构、排序算法、搜索技术、数论、组合数学、搜索技术、动态规划、计算几何等多方面的知识。学生要想具备参加ACM-ICPC竞赛的能力,需要学习大量的算法知识,而且ACM-ICPC竞赛更要求算法的效率,因此学生对算法的理解更加深入。参赛学生需要要在国内外的网站的OJ系统(online judge,OJ)上完成ACM竞赛涉及到的多个专题的竞赛题目,一个参加ACM竞赛的合格学生在一年中的编写代码数量至少是计算机专业同学大学4年完成的平均编程量的数十倍数百倍的量[3]。因此,ACM实践班培养出来的计算机人才具有编程基础过硬、算法设计能力强、逻辑思维缜密和良好的合作精神,因此在就业和保研中有着优异的表现,获得了来及微软、google等知名信息企业以及国内各重点院校的青睐。
二、ACM-ICPC弥补计算机教学不足
目前,大学计算机专业的教学中存在着理论教学与实践运用的严重脱节。一方面,理论教学内容不能指导实践的运用,学生掌握了理论,却无法用计算机语言实现。计算机专业课程包括C语言程序设计、数据结构、算法设计采用笔试的方式考核学生的知识掌握能力,考试能得高分的学生,,却不能编写一条简单的程序,这完全背离的计算机专业对人才培养的目标。虽然,目前,国内计算机专业的实践环节已经得到了强化,但是实验课程中的程序设计题目单调枯燥,考察知识点单一,实际应用意义不大,不利于学生对知识的深入理解和灵活应用,更不利于创新能力的培养。现在的实验系统,老师对学生的编程结果的考核几乎是不现实的,很难评价实验课学生的编程结果,因此也不能保证学生的实验课效果。引入ACM-ICPC竞赛的PC2判题系统就可以解决以上问题,各大高校的OJ,如北大、杭电上的编程题目知识点综合性很强,题目贴近生活且趣味性很强,同学们非常有兴趣去做题,每道题目都由测试样例,PC2系统可以自动评判程序的运行结果[4]。对程序的时间复杂度也有限制,同样一道题目,只有效率最优的算法才能满足题目的时间复杂度要求,这样思考问题,才能对知识深入理解并灵活运用,这样的编程过程能有效的培养学生的创新能力的培养和实践能力。但目前国内的计算机专业的实践课还尚未引入ACM-ICPC的PC2系统。
ACM-ICPC竞赛内容以大学计算机学科理论课程为基础,内容往往涉及离散数学,数据结构与算法,高等数学,高等代数,组合数学,图论,网络优化与线性规划,数论,计算几何等多个领域,一些竞赛题目是多个领域知识的结合,掌握的知识需要融会贯通,才能解答出来。目前,关于计算机课程的讲授还是独立的,没能很好的结合起来,可以通过ACM-ICPC竞赛和培训模式将多门计算机理论课内容融合起来并能够运用于程序设计当中。
三、面向ACM-ICPC的教学实践方法
1.ACM程序设计竞赛实际问题的案例教学方法
在课程的理论教学中嵌入具有实际问题背景的ACM-ICPC赛题。ACM競赛题目涉及的知识面非常广,如果按照知识点一一讲授,二年的课程时间学习难以讲授完,且传统的教学方法,学生感觉课程枯燥,对算法理解不够深入,在竞赛中难以获得好成绩。
采用acm竞赛题目的实际问题案例教学方法,通过计算机编程语言实现算法巧妙的解决生活中遇到的有趣且有一定难度的问题,首先这些案例问题都非常的引人入胜,比如旅行商问题、背包问题、图着色问题,acm竞赛中解决这些问题的算法复杂度要求都很高,因此解决这些问题算法都具有一定的数学思想和理论深度,在解决实际问题的同时,学生对算法和数学思想理解深度、掌握和运用的熟练程度都有了非常大的提升。而且在解决每一道实际问题过程中,遇到的数据结构、算法、数学的知识点有若干个,学生能够在短时间内吸收到大量的知识。
2.以赛代练的实践教学方法
课程的实验教学以程序设计竞赛的形式实施,在实践课环节通过在OJ系统上完成ACM的竞赛题目。实ACM竞赛对学生编程和算法的基本功要求非常高,对算法理解不深入、编程基础不扎实、知识点不全面都难以在要求的时间复杂度下完成题目。因此,实践教学部分至关重要,实践教学需要全方位、各层次的组织,保证实践教学的时间和深度,在实践中提升学生的能力,发现自身知识结构的欠缺,促使学生发挥自主学习精神,自学所需算法和相关知识。
实践教学分一下几个方面组织,日常训练:根据课堂教学的内容,为学生挑选acm竞赛中相关的题目,加强训练,真正掌握相关的知识点和扩展内容。周赛:每周周末举办周赛,督促学生对算法的持续学习,提高学生的学习热情,巩固学生成果。校赛:每学期举办一次校赛,春季学期为个人赛,秋季学习为团队赛,校赛考察学生知识点全面,提升学生竞技状态,团队赛培养学生的团队精神和配合。暑期集训:暑期集训是大幅度提升学生能力的关键时期,暑期时间集中,学生集中,学生学习效率高,学生学习氛围浓厚。省赛、四省赛、区域赛:更高级别的acm-icpc竞赛,与全国高校中的出类拔萃的计算机人才同场竞技,也是为高级别的acm比赛选拔队员。这样高层次的比赛可以激发学生的潜能,在准备各级赛事的短时间内,吸收、巩固大量的知识。
实践教学通过ACM/ICPC在线评判系统为教学实训平台,辅助完成日常训练和模拟竞赛,增加上机考核方式,实现对学生程序的自动运行和测试,增强学生的程序调试能力。并通过分析比赛结果,更加精细地评估学生对教学知识点的掌握程度,这些信息进一步反馈到课程的理论教学中,可以确定课程教学的实际難点和重点。
四、结语
大连理工大学创新实验学院经过多年培养面向ACM国际大学生竞赛的学生发现,这部分学生的计算机专业素质较高,表现在编程能力强、知识面广、具有良好的团队合作能力、创新能力和临场应变能力,因此在毕业时能获得名校和名企的青睐。这主要与ACM-ICPC竞赛的一些良好的竞赛规则和竞赛环境有关,本文提出了面向ACM-ICPC竞赛的计算机人才培养教学与实践方法提升计算机专业人才的素质,包括以下几个方面:1、理论课按专题讲授,包括:图、动态规划、搜索、计算几何、数论等案例教学;2、实践课引入PC2自动判题系统,趣味综合性题目选自国内外著名OJ:3、周赛、月赛、校赛、省赛、区域赛培养学生综合素质、加深理论知识理解与实际运用能力。
参考文献
[1] 赵 龙,李贝贝,王喜凤ACM/ICPC竞赛对培养大学生综合能力的作用.安徽工业大学学报(社会科学版).2013, 30(5):110-111
[2] ACM/ICPC竞赛人才培养模式的研究与实践——以大连理工大学ACM/ICPC创新实践班为例.内蒙古師范大学学报(教育科学版).2012,25(3):141-144
[3] 郭嵩山,王磊,张子臻.ACM/ICPC 与创新性IT 人才的培养[J].实验室研究与探索,2007,(12)6:181-185
[4] 韩建民,钟发荣,赵相福.基于 ACM-ICPC 训练模式的数据结构实践教学探索. 计算机教育.2013,(10): 103-107