APP下载

程序设计类竞赛集训模式探讨及作用分析

2019-05-09杨丰玉段喜龙

计算机教育 2019年4期
关键词:集训队集训程序设计

陈 英,郑 巍,杨丰玉,段喜龙

(南昌航空大学 软件学院,江西 南昌 330063)

0 引 言

随着科学技术的快速发展,各大公司相对以往更加关注毕业生的综合素质。在此要求下,各高校应适应这种变化,更有针对性地加强在校大学生综合素质的培养,以期提高大学生毕业找工作的竞争力[1]。而对计算机专业的相关学生而言,程序设计类竞赛能够有效提高学习的主动性、思考的创造性、团队的合作性[2]。

近年来,国内高校学生可以参加的程序设计类竞赛主要有以下几种[3-4]:①ACM国际程序设计竞赛,中国区域赛网络赛的时间为9-10月,现场赛的时间为10-12月;②“蓝桥杯”全国软件和信息技术专业人才大赛,初赛时间约为4月初,国赛时间为5月底;③团体程序设计天梯赛,比赛时间为3月底4月初;④中国大学生程序设计大赛(CCPC),网络赛时间为9月,现场赛的时间为10-12月。从以上几种比赛的时间看,基本跨越了全年。如何保证学生以好的状态把握上述比赛的机会,是各个高校教练要面对的事情。分析各个取得好成绩的高校实践结果表明,组织集训队是一个不错的措施。

1 集训模式

1.1 严格选拔优秀学生

学生是比赛的主体,选拔优秀的学生是形成集训队的先决条件。然而对一般高校而言,绝大多数学生都是零基础的,即高中阶段没有接受过系统程序设计竞赛的训练,这是一个短时间内无法改变的事实。针对这种情况,学院主要采用三步走的学生选拔策略:①广撒网:在PAT平台上布置200道基本题目(以C语言和简单的数据结构为主),为每一个刚入学的大一新生分配一个账号,通过入学宣讲说明参加程序设计竞赛的重要性,并告知他们两个月后根据做题数量的多少进行淘汰;②重点捕鱼:根据做题数量以及完成的质量,淘汰大多数新生,只留下积极性比较高的学生;③多轮次考核淘汰:制定每两个月一次的淘汰机制,进行末位淘汰,淘汰后的学生将无法再次进入集训队。

1.2 认真梳理集训内容

程序设计类竞赛的知识点非常多,且难度非常大,对于学生而言,不可能期望知识点全覆盖。因此,按照从简到难对知识点梳理排序,同时结合学生的特点,选择其中的部分知识点进行专题讲解和训练,通过对部分例题的讲解,让学生掌握知识点的特点、解题的思路、多知识点的结合等。在此基础上,布置难度稍高的题目,让学生自行解答,做到对知识点的真正掌握。例如,对于动态规划(Dynamic Programming,DP)这个知识点,操作如下:①讲解该知识点的理论基础;②在杭电OJ(Online Judge)上布置2~3道针对DP的题目,要求学生在2个小时内完成;③对集训队员完成情况进行点评,并讲解题目;④在此基础上,布置10道DP题目,要求学生在5个小时内完成。

1.3 制订集训制度

针对参加集训的学生,制订详细的集训制度,主要包括:①出勤制度,规定签入、签出的时间,要求每位学生保证其出勤时间,不能迟到,有事请假,不能无故缺勤;②考核制度,要求学生做到出工出力,不能出现“身在曹营心在汉”的情况;③递补制度,任何学生违反了制度,都将被淘汰出集训队伍,转而由候补队员加入,给学生一定的威慑力。

1.4 合理安排集训计划

对普通院校而言,学生生源质量一般,基本都是零基础,学院采用循序渐进、分步走的策略,要求学生在掌握基本知识点的基础上,逐步提升难度,做到一步一个脚印,稳扎稳打。例如,按照如下的顺序制订计划:①在学生自学的基础上,强化计算机语言(C、C++等)的使用能力;②要求学生熟练掌握数据结构的基本操作;③要求学生熟练掌握基本算法的设计与实现;④要求学生掌握一定的数学知识(如数论、组合代数、计算几何等);⑤要求学生掌握更高难度的算法。

1.5 强力保障执行计划

为了让学生有良好的集训环境,应给予硬件和软件的保证,在硬件方面,有独立的集训教室、人手一台高配置电脑,高速畅通的网络环境,高清的投影仪、空调等。在软件方面,配备了有经验的教师和高年级学生给学生辅导,也积极参加第三方的暑假多校赛,例如杭电的多校赛、牛客网的多校赛、亚洲训练联盟的多校赛等。

1.6 疏导学生心理问题

高强度的集训会让学生在身体上感觉累,“攻坚克难”也会使学生在心理上压力较大,而压力的持续性会使学生感觉“身心俱疲”。这种状态将降低学生学习的积极性,使其集训状态下降,而单个学生的消极状态将传染给其他人,让整个集训团队的效率降低。面对这种可能出现的状况,教师需要不定期地对学生进行心理辅导,从各方面教育他们正确面对集训过程中遇到的困难和问题,例如讲励志故事、玩真心话大冒险游戏等,更重要的是教师要成为学生的朋友,让学生愿意倾诉他们的心里话。

2 对学生的作用

为了对比分析,选用两组学生作为分析样本:其中一组学生为集训队队员,人数为56人,其中2015级13人、2016级18人、2017级25人;另一组学生为学院对应的同年级学生,人数为300人,其中2015、2016、2017级各100人。为了说明方便,本文称后一组学生为非集训队。同时,为了使对比结果更加科学,两组样本的对比数据为相对数。

2.1 培养学生编程兴趣

兴趣是最好的老师,学生从集训队的“传帮带”氛围中,体会到了相互帮助、共同提升的乐趣,也培养了编程的兴趣。“三人行必有我师焉”,在集训队的氛围中,每位队员都充分和教师、队员进行沟通交流,各种思想碰撞会产生思维的灵感,而这些灵感有助于解决编程过程中的困惑,让队员们充分感受编程带给他们的快乐;采用循序渐进、由浅入深的策略,集训队员每做出一道题都会有很大的成就感,久而久之队员对编程的热情就越来越浓。以“你对编程感兴趣吗”为题进行数据统计,统计的结果见图1。该结果表明,集训队成员的编程热情远远高于非集训队学生的编程热情,其中,集训队员对编程非常感兴趣的比例高达98%,而非集训队员只有50%;没有集训队员对编程不感兴趣,而对编程不感兴趣的非集训队员占比6%。

图1 学生编程热情对比

2.2 养成编程习惯

高效能的习惯意味着踏上了成功的快车,只有行动才能捕获命运。养成良好的编程习惯,就要每天保持一定的编程时间,并持之以恒。集训队的队员每天制定的小目标包括:①给自己规定学习算法知识点的数量;②明确查看并理解经典算法的数量;③明确做算法题的数量;④相互讲解题。每天结束时,队员们均会总结每天的得失,也相互监督这些目标是否完成。本文以“你每天有几个小时用于编程”为题进行数据统计,统计的结果见图2。该结果表明,集训队成员每天的编程时间远远大于非集训队学生。进一步分析可以发现:集训队的成员每天都会主动编程,每天超过2小时的比例超过了35%,每天超过3小时的比例达14.29%;而非集训队的学生每天超过2小时的比例不足15%,每天超过3小时的比例只有5.43%。

图2 编程时长对比

以“截止到5月1号,你在各个OJ上做题的数量为多少”为题进行数据统计,为了使统计结果更加集中,主要统计了杭州电子科技大学的OJ、计蒜客、牛客网以及PTA这几个OJ平台上的做题数量,并对其求均值,统计的结果见图3。该结果表明,集训队员均会主动在OJ上做题,并随着习惯的养成,做题的数量均稳步上升。进一步对比可以发现,集训队和非集训队在做题的数量上差距是非常大的,当然这也可能与非集训队的学生平时没有使用这几个OJ平台有关。

2.3 提高学生编程能力

图3 编程数量对比

“量变引起质变”,学生持续努力做题,结果就是学生的编程能力水涨船高。本文统计2015级学生的数据结构和算法设计分析A这两门课程的期末考试成绩分布区间,对比结果见图4和图5。从图4可以看出,集训队学生的数据结构这门课程分数分布在80~99这两个区间的占比超过90%,而非集训队只有38.04%;集训队没有学生成绩不及格,而非集训队有4.35%的学生不及格。

图4 数据结构分数分布区间对比

图5 算法设计与分析A分数分布区间对比

从图5可以看出,集训队学生的算法设计与分析A这门课程分数分布在80~99这个区间的占比为84.62%,而非集训队只有35.37%;集训队没有学生成绩不及格,而非集训队有6.10%的学生不及格。综合图4和图5可知,作为大学本科程序设计的两门主要课程,集训队学生的成绩远远高于非集训队学生的成绩,这说明集训起到了重要作用。

为了进一步说明问题,笔者以学院2018年3月份参加“程序设计天梯赛”的30位学生作为样本进行内部对比。这30位学生分别由2015、2016和2017级组成,人数分别为7人、9人和14人。按照不同的年级,对比数据分别为各年级学生比赛所得分数的平均分和标准方差,统计对比结果见图6。从该图中可以看出,就平均分而言,2015级最高,2016级居中,2017级最低,这符合高年级学生分数更高的基本规律。但是,进一步分析后可以发现,2017级相对2016级的平均分差为-18.26,而2016级相对2015的平均分差为-25.39,这种现象也更说明了集训的重要性。再分析标准方差可以看出,虽然这是2017级第二个学期取得成绩,但其成绩的分布最稳定。

图6 程序设计天梯赛的成绩对比分析

2.4 提高学生的团队协作能力

在软件企业中项目开发都是以团队为单位,没有团队协作能力将举步维艰,每个成员都应该具有与其他成员协作的能力。ACM-ICPC、CCPC、程序设计天梯赛都是以3人或者10人作为一个团队进行竞赛的,而学院平时的集训也要求学生以团队形式进行。针对每个学生不同的特点,进行分工合作,这样有效地提高了他们的沟通能力和团队协作能力,具体表现为:①每个小组成员能够包容其他成员的失误;②解题思路能够得到小组成员的支持;③获得的资源能够共享;④组员之间相互给予了最大程度的信任;⑤把自己当做集体的一员,评价和管理自己的行为,并承担自己的责任。

2.5 提高学生的自学能力

作为相对本科教学难度更大的程序设计类竞赛,其涉及的知识面广且深,这就要求学生具备自学能力。通过集训,学生的自学能力也得到很大的提升,具体表现为:①对程序设计有强烈的兴趣爱好,经常对某一类问题尝试采用不同的算法进行解决;②有强烈的求知欲,能够主动、自主进行学习;③能够对已掌握的算法进行组织和归类,举一反三,解决新出现的问题。

3 结 语

程序设计类竞赛,其考核的知识点不论是广度还是深度,都远远超过了课程的一般要求。为了让学生能够在程序设计类竞赛中取得一定的成绩,学院采用在选拔学生的基础上,集中进行培训,并已经取得成绩,对比分析证明集训是非常有效果的。

猜你喜欢

集训队集训程序设计
基于SolidWorks和VBA的电机阶梯轴建模程序设计
2021年全国中学生数学冬令营赛前集训
医学专业“Python程序设计”课程教学改革总结与思考
国家单板滑雪U型场地技巧集训队备战北京冬奥会体能训练研究
世界技能大赛集训队创新管理模式探索
技能大赛赛前集训中各要素的关系研究
从细节入手,谈PLC程序设计技巧
一道IMO集训队测试题的探究
全国优秀乒乓球青少年大区集训竞赛模式研究
一道国家集训题的简证及推广