ACM/ICPC与可持续发展的IT人才培养方式实践
2009-01-18陈湘骥刘才兴徐东风
陈湘骥 刘才兴 徐东风
摘要:本文针对目前一般院校在参加ACM/ICPC(国际大学生程序设计竞赛)中普遍遇到的问题,结合华南农业大学的相关实践,阐述了竞教结合的人才培养方式以及可持续发展的思路与做法。
关键词:程序设计竞赛;人才培养;可持续发展
中图分类号:G642 文献标识码:A
1引言
近年来,国内参加ACM/ICPC(国际大学生程序设计竞赛)的高校迅速增加。以广东省为例,2007年有16所高校参加ACM/ICPC相关赛事,2009年增加到27所。另一方面,各类程序设计竞赛层出不穷、内容丰富多彩,同样以广东省为例,在校大学生除了可以参加ACM/ICPC外,还可以参加TopCoder、Google、百度等公司举办的一系列程序设计竞赛,以及GDPC(广东省大学生程序设计竞赛)、珠三角“金山杯”程序设计竞赛等,而且多数院校还定期举行校内选拔赛,有条件的甚至举办每月一赛、每周一赛等。在这样的形势下,一方面,新参加ACM/ICPC的院校迫切希望能够借鉴其他院校的经验,另一方面,随着竞赛的普及,它为相关课程的教学改革带来了契机,同时也对目前的教学方式提出了更高要求。本文阐述了华南农业大学多年来参加ACM/ICPC竞赛以及围绕竞赛开展大学生素质培养的一些思路与做法。
2一般院校参加ACM/ICPC遇到的问题与分析
以广东省为例,虽然到2009年参赛院校达到27所,但除了中山大学等少数强校一直保持骄人的成绩之外,更多的院校则是普遍存在如下问题:
(1) 部分学校依靠某一届的学生创出了好成绩,但之后就出现大幅下滑,取得的成绩无法延续。可能的原因是学校培养力度不够,只能依靠学生的个人努力,由于每年学生的入学情况不同,加上个人自学效果受各种因素的影响,因而成绩波动较大;另一种可能的原因是部分学校虽然可以集中资源培养一届学生,但培养所耗费的综合成本过高,难以持续,一旦投入减少,成绩便开始下滑。
(2) 竞赛指导教师更换频繁,能一直从事竞赛指导工作4年以上的教师很少。主要原因是目前教师的教学与科研任务繁重,其中的年青教师更要面对生活上、工作上的多重压力。因而,多数指导教师在从事几年的竞赛指导工作后,便选择退出或转为幕后。
(3) 多数指导教师没有参加ACM/ICPC做题的经历,加上教学、科研任务繁重,没有充足时间进行这方面的学习,因而单靠言传身教的传统教学方式难以培养学生创出好的成绩。
(4)ACM/ICPC的传统强校虽然有着丰富的经验,但由于强校与一般院校的基础条件不同,因而不能照搬其成功经验。强校有很强的师资,如上海交通大学集中教学资源专门开设了ACM班;强校有充足的活动经费;强校的生源较好,更易培养出高水平的竞赛选手;强校的毕业生有更好的就业机会和更多的保研资格,因而强校的学生更安心进行训练,竞赛期一般为3~4年,最长的达到5年(本科4年加研究生1年)。对照强校,一般院校往往活动经费少;学生基础相对薄弱;参加训练的学生少;临近毕业,学生因找工作、考研而结束训练,导致竞赛期不长,一般2~3年。
因而,摆在一般院校面前的主要问题是,如何快速提高竞赛水平,取得好的成绩;如何做到可持续发展。笔者所在教学团队从2002年开始组织学生参加ACM/ICPC并开展相关教学改革实践工作,先后经历了三个阶段,完成了从无到有,到稳定发展的过程。
3三个阶段
第一个阶段是尝试阶段。第一次组队参赛,通过简单的小范围选拔,组成了参赛队伍。最终,结果不重要,重要的是迈出了第一步,指导教师明确了自己的方向。
第二个阶段,有固定的指导教师,有定期的训练安排。这一阶段指导教师与所有的队员都只有一个目标,取得好成绩。采用能耗型的发展方式,指导教师付出大量的精力辅导学生,为学生安排训练,长期与学生耗在一起,不时督促学生完成训练任务。努力的结果是获得了ACM/ICPC区域预赛中的首枚奖牌,但教师的负荷也快接近极限。不 过,这一阶段为进入下一阶段创造了条件,包括系统的开发、训练题的积累、活动的宣传与普及等。
第三个阶段是稳定发展阶段。在这一阶段形成了相对稳定的指导教师团队和一定规模的学生群;获奖队员参与授课和讲题,形成良性循环;指导教师的事务性工作大幅减少,负担减轻。这一阶段的目标是:在继续创造更好的竞赛成绩的同时,促进竞教结合,提高教学质量,提高广大学生的编程技能,促进就业,达到多赢的目的。因此,这一阶段更关注如下几个方面:(1)分工细化;(2)竞教结合;(3) 构建平台,提倡素质教育;(4) 完善支撑系统,做到可持续发展。
4分工细化
一方面,随着教师科研任务以及生活负担的加重,指导教师投入的精力会减少;另一方面,为了取得更好的成绩,指导教师需要集中精力对题目(尤其是新题)作系统的分类与研究,以便给竞赛学生更好的指导。因而,需要将事务型工作与指导教师分离,由学生助理分担。这些工作包括组织训练与比赛(命题除外)、收集资料、管理机房、收发通知等。工作的细分如图1所示,工作细分之后,再根据每位指导教师的个人情况具体分配。
制定计划,包括计划一段时间内(多为近一年)需要完成的各项工作以及提出要达到的目标。计划首先要具有连续性,一些被确定为有效的活动,应该继续举办,比如每年一次的校赛,即使遇到人员、资金方面的严重不足,也要坚持办下去;只有相对稳定的计划与行动才能培养起良好的氛围。
整理资料,将历届竞赛队员最有价值的资料和代码进行分类整理,将各年度的竞赛题目进行分类整理,让学生及时共享。
设计支撑系统包括整合现有系统以及开发新系统,可整合的现有系统如网上公开的Online Judge系统、即时通讯系统、BBS、邮件系统等;新系统则是根据学校自身特点设计的专用系统,比如内部Online Judge系统、实验系统、考试系统等。
研究竞赛题目,包括钻研各类竞赛题目中的算法,并研究出题趋势。自从1977年的首届ACM/ICPC总决赛到2009年的第33届,竞赛题目所涉及的知识范围不断扩大,新题目不断出现,对综合运用知识的能力要求也越来越高。因而,研究竞赛题目既是提高竞赛指导水平的需要,也是提高教学水平的要求。我校选取的竞赛题目主要是近年各大洲的区域赛题目、世界赛题目以及信息学奥林匹克竞赛的题目,NOI(全国青少年信息学奥林匹克竞赛)的论文也是重要的参考资料。
授课则包括讲授竞赛相关课程与竞赛培训课程。
命题,主要指校内选拔赛的命题工作。出什么样的题目对学生有一定导向作用,因而,命题既要有区分度,又要在一定程序上接近国内竞赛的水平。
事务型工作则全部或大部分交由事务助理完成。我校从2008年开始从学生中招募事务助理,经过一年多的实施,收到良好效果,极大地减轻了指导教师的工作负担。
5竞教结合
提倡竞教结合符合教育部关于大力加强实验、实践教学改革的思路,而且ACM/ICPC与多门计算机专业基础核心课程密切相关,竞教结合在培养学生基本素质方面具有较好的教学效果。
ACM/ICPC所涉及的课程包括C语言程序设计、C++语言程序设计、数据结构和算法设计与分析等,覆盖了大学本科大一、大二的学习内容,这两年也是学生打好基础的关键时期。由于ACM/ICPC中极具趣味与挑战的题目对大学生有很强的吸引力,因而在课程中穿插介绍ACM/ICPC对提高学生的学习兴趣有明显的作用。另一方面,要在竞赛中取得好成绩,必须对有条件的学生提早安排训练。站在效率的角度,能提早发现并训练学生的最佳人选就是任课教师。以程序设计课为例,该课程在大一第一学期开设,在第一堂课上就将ACM/ICPC介绍给学生,可以让刚入校的学生逐步明确自己学习方向,同时激发他们对算法和编程的学习兴趣;在教学中因材施教,对学得快的学生安排不同的实验内容,例如选用一些较简单的竞赛题,让这部分学生尽快走上竞赛之路。为此,在实际操作中,我们尽量让每一门竞赛相关课程至少有一名竞赛指导教师。
为了竞赛创出好成绩,学校每年定期开办两期竞赛培训班,一期在4月份,时间较短,主要是为5月份的省赛做准备,以做题训练为主;另一期在7、8月份,时间长,内容丰富。合理地制定符合本校学生特点的竞赛培训课程很重要,我校将培训课程分两个层次,一个是针对低年级的学生,培训内容是超前学习大二课程内容,比如基本数据结构与算法;另一个是针对有一定竞赛经验的高年级学生,培训内容为专题讲解与讨论,内容丰富,形式多样。两个培训的时间安排如图2所示。
在我校,两层次培训方法取得了较好的效果,原因如下:(1)我校绝大部分学生在入校前未接受过正式的编程培训,基础薄弱,开设初级班能够吸引更多的学生参与到程序设计竞赛的相关活动中;(2)在时间安排上,高级班开班比初级班稍晚,通过开设初级班,能够尽早发现能力较强的低年级学生,并吸收他们继续参加高级班的学习,而不用等到下一年的暑假;(3)初级班人数多,时间短,高级班人数少,时间长,这样安排,既扩大了学生规模,又充分利用了有限的教学资源,并且可以让指导教师在暑假较长的一段时间内集中精力训练竞赛队员,创出好的成绩。
图3为我校2006~2009年参加培训的学生人数情况。图4为我校2006~2009年参加校赛人数情况。
参加培训的学生主要是计算机方向的学生,以大一、大二学生为主,培训覆盖面占计算机方向学生总数的20%左右。人数基本稳定,但普及率仍有待进一步提高。
6构建平台,提倡素质教育
信息素养是现代科学素养的重要组成部分。程序设计能力作为信息技术的核心能力,是学生核心竞争力的最直接体现,是踏入信息科学大门的垫脚石。
长期地培养竞赛学生,并从事相关的教学工作,我校逐渐形成一种以竞促学的人才培养模式,如图5所示。大一学生进校,教师讲授程序设计课程,鼓励学生进行做题训练,学生可以自由选择参加初级竞赛培训,内容包括基本数据结构与算法。这一阶段是参加竞赛之前的预备期。部分学生在预备期后转向软硬件开发,另一部分学生通过不断的训练与比赛进入实战成长期。在实战成长阶段,学生的算法设计与编程能力迅速提高,这不光为竞赛取得好成绩创造了条件,也为加入科研团队创造了有利条件。很少一部分学生会一直训练到大四,他们战果累累,算法设计与编程能力很强,毕业后一般就职于国内外的大型IT企业。
整个系统是开放的,不论是大一还是大三学生都可以进入系统训练,也可以随时结束训练,转向其他领域,学生训练全凭自身爱好与兴趣驱动,从而形成一种轻松愉快的学习氛围。经过多年实践,一批批竞赛学生毕业开始走上社会或读研深造,表1显示了2003~2005级共30名获得省以上竞赛奖项的学生毕业后的去向。30人中,有6人继续攻读硕士学位,7人就职甲骨文、北电、汇丰等大型外资或合资企业,14人就职腾讯、网易、华为等国内大型IT企业。
7完善支撑系统,做到可持续发展
培养人才虽然不能简单地比作工厂生产,但是在人才培养过程中运用先进的技术,无疑会极大提高效率,做到可持续发展。前面提到的分工细化,就是让指导教师将更多的时间用在重要的事情上。如果没有支撑系统,即使分工合理,指导教师的时间同样会消耗在众多的琐事上,比如整理资料、命题、评判对错、选拔组队等。因而实际中,竞教结合、构建平台都需要有相应的支撑系统。
支撑系统包括OJ系统、实验系统、考试系统、课程设计辅助系统、即时通讯系统、电子邮件系统以及资料管理系统等。支撑系统在ACM竞赛活动中起着重要的作用,以北大OJ为例,该系统目前有2000多道题目,不光在本校教学与竞赛中发挥着巨大作用,而且成为全国各高校大学生训练算法设计与提高编程能力的主要公共平台之一。类似北大OJ这样开放给所有人免费使用的系统还有不少,但是,建立学校自身的OJ与题库仍然很有必要。原因是:(1)可以自行安排校内比赛;(2)逐步建立自己的题库;(3)可以自行增设功能,满足不断增加的需求;(4)学校自己的OJ更能吸引本校的初学者,因为系统中记载着他们熟悉的师兄师姐留下来的“足迹”,这些“足迹”激励着他们继续前进。支撑系统还包括实验系统、考试系统,因为采用竞教结合的教学方式就是将教学与竞赛视为一个统一的整体。
支撑系统中,资料管理系统是重要的组成部分之一。整理资料主要是指将历届竞赛队员留下来的最有价值的资料和代码进行分类整理,将各年度的竞赛题目进行分类整理,并及时更新授课内容。由于整理工作量巨大,因而需要指导教师与学生共同完成,为了便于资料共享,就要充分利用网络,采用计算机系统收集与整理资料。图6展示了系统的主要构成。
在教学当中,以QQ为代表的即时通讯工具发挥了巨大作用,尤其是用户群的作用最为突出。实践表明,即时通讯工具已经成支撑系统的重要组成部分。
8结语
我校从2002年开始参加ACM/ICPC,2006年开始在ACM/ICPC亚洲区域预赛中获奖,目前共取得1金5银2铜。
当多年的积累营造出良好的学习氛围,有稳定的计划安排,有较完善的支撑系统,有稳定的指导教师队伍,做到竞教(或竞教研)结合,这时院校的ACM/ICPC活动便具备了可持续发展的良好条件。
参考文献:
[1] 郭嵩山,王磊,张子臻. ACM/ICPC与创新型IT人才培养[J]. 实验室研究与探索,2007(12):181-185.
[2] 林丕源,刘财兴,张明武. 软件工程专业的实践教学改革初探[J]. 实验室研究与探索,2007(12):238-240.
[3] 陈湘骥,刘财兴,陈志民. 在线评判系统在程序设计类课程大规模教学中的应用[C]//张凤祥. 全国计算机新科技与计算机教育论文集. 成都:西南交通大学出版社,2008.
ACM/ICPC and Practice on Sustainable Development of IT Students Cultivating
CHEN Xiang-ji, LIU Cai-xing, XU Dong-feng
(College of Informatics, South China Agricultural University, Guangzhou 510640, China)
Abstract: The recent problems which colleges met when training students for ACM/ICPC were introduced in the paper. After analyzing the reasons, a method of sustainable development of IT students cultivating with ACM/ICPC was proposed, by combining the activities in South China Agricultural University.
Key words: programming contest; students cultivating; sustainable development