论文部分内容阅读
摘 要:为培养学生较高水平的程序设计能力和创新能力,该文探讨了将ACM竞赛引入程序设计类课程教学的方法,以ACM赛题为案例,驱动理论课讲授,培养学生的抽象建模思维和逻辑思维,通过使用ACM在线评判系统OJ,将教学实践环节从实验课堂延伸到课外,加强学生在综合运用知识解决实际应用问题方面的编程训练。
关键词:ACM竞赛 程序设计 教学教改
中图分类号:TP3-4 文献标识码:A 文章编号:1672-3791(2017)05(a)-0146-02
程序设计类课程是计算机专业人才培养计划中一系列与程序设计相关的核心课程,主要有C语言程序设计、C++面向对象程序设计、Java程序设计、数据结构和算法设计与分析等,一般以专业基础课或专业课的形式开设。程序设计类课程的教学效果,直接影响了人才培养目标的实现,在一定程度上决定了所培养的专业人才素质水平的高低,因此,各个学校普遍都很重视程序设计类课程的教学和教学建设。
然而,程序设计类课程由于理论性和实践性都比较强、学习难度大等特点,使得在教学过程中一直存在着较多的问题。一方面,程序设计教材偏重于语法和小型例题讲解,使得学生在根据实际问题建立模型和设计算法方面的抽象思维训练不够,很多学生能掌握程序设计的基本方法,但程序设计的水平并不高。另一方面,模块式实验项目的实践环节设置,使学生在综合运用知识解决实际问题方面的锻炼不足,加上实验课时的限制,因练习和投入时间的不够,也影响了学生程序设计能力的培养和提高。
在程序设计类课程教学中引入ACM竞赛模式,可以弥补传统教学方式的这些不足,促进学生程序设计能力和创新能力的提高。
ACM / ICPC (Association for Computing Machinery / International Collegiate Programming Contest)国际大学生程序设计竞赛,由计算机界具有悠久历史的权威性组织机构ACM学会主办,是世界上公认的规模最大、水平最高、参与人数最多的大学生程序设计类竞赛[1]。
1 以ACM竞赛题目驱动理论教学
首先,教师在课堂上将ACM赛事活动推介给学生。通过对竞赛的了解、练习和参与,让学生体会到学习的成就感,激发学生对程序设计的学习兴趣和学习动机,并且更明确课程的学习目标,以高水平的程序设计能力标准要求自己。
其次,教师在理论课授课时,引入ACM竞赛内容,可以挑选与授课内容知识点相关的典型竞赛题作为案例驱动教学,进行教学设计。ACM的赛题,题目类型广泛,涉及的知识面相对较广,一般是针对实际应用问题而设计[2],有一定的问题背景描述,对算法和程序的要求隐藏在背景中,因此,需要对实际问题进行分析建模,才能明确问题和梳理出算法思路。通过赛题的分析和算法设计过程的讲解,引导学生在抽象思维方面的训练,使学生把程序设计学习的重点更多地放在分析问题、抽象建模和算法设计等方面,而不是仅仅关注语法的学习。
通过将典型竞赛题目嵌入到理论教学,既带动相关语法的讲解,也引导学生进行抽象建模和逻辑思维方面的锻炼。同时,以有实际问题背景的ACM赛题做授课案例,让学生看到通过编程得到了实际问题的解决结果,看到了程序设计的广阔应用前景,增强了学生对它的学习兴趣和学习动力,变被动学习为发自内心的渴望求知的主动学习。
在作为教学案例的赛题选取上,一方面注重赛题的有趣性和实用性;另一方面,要注意题目对知识点的覆盖,以及难度适中。应当选取中等难度或难度稍微偏上的例子,以此向学生展示,相对复杂问题的分析建模和算法设计过程,既强化学生在程序设计思维方面的训练,也激发学生的好奇心和挑战困难的学习兴趣。
除了抽象思维和逻辑思维方面的训练,也注意引导学生在猜想与验证和逆向思维方面的训练。每道ACM赛题都有严格的题目形式,包括问题描述、输入样例和输出样例[2]。详细的题目输出样例,方便用于向学生展示逆向思维的问题求解分析方法,引导学生可以根据输出结果要求,逆向推理及猜想可能的算法,并对设计的算法进行静态运行的结果验证。这些都是高水平程序设计者需要锻炼和培养的基本能力和素质,要在这方面对学生进行引导和认识上的意识强化。
2 以ACM在线系统竞驱动实践教学
程序设计类课程是实践性较强的课程,一般都包括了一定学时的实验课时。但传统的基于单元知识点设计的实验题目,在实际应用价值、难度及综合性等方面往往不够,满足不了一些基础和水平较好的学生的学习需求,影响了学生在实践环节高水平程序设计能力培养方面的锻炼。可以从ACM题库中选取难度各异、知识点相关的、有一定实际应用价值的题目,让学生上机时完成,以适应不同层次水平的学生的需求。
再者,传统模式的实验课,学生练习成果的检查对教师是个问题。传统实验课中,教师主要靠查看程序运行结果和阅读程序的方式检查学生程序设计的正确性,不仅花费时间大,而且由于思维惯性,容易导致误判与参考答案不同的程序设计算法。针对这些问题,可以在实践环节引入ACM的在线评判系统做实验实训平台。
ACM竞赛经过多年的发展,国内外出现了很多优秀的Online Judge(简称OJ)系统。国内比较知名的OJ系统有北京大学的POJ、哈尔滨工业大学的HOJ、浙江大学ZOJ等;国外比较知名的系统有OJ SGU、UVa Online Judge等。OJ系统集成实时评判、答题统计、排名等功能[3]。
教师要求每个学生在OJ系统上注册自己的账号,上课时,让学生登录系统,在规定的时间内完成指定范围内的题目,并提交结果。OJ对提交程序的实时评判,包括程序结果的正确性、运行时间、占用内存资源和输出格式的判别。学生可以通过OJ系统,查看评判结果以及程序运行效率,以及根据这些反馈信息对程序进一步改进。教师也可以通过OJ系统查看学生做题数量和正确率,以了解学生的学习掌握程度。同时,通过ACM在线系统,可以将课程的实践环节从课堂延伸到课外,鼓励学生利用课余时间,多做竞赛题目练习。
ACM在线系统还提供了针对赛题的讨论交流功能,学生可以在上面找到对编程兴趣爱好浓厚的“志同道合”者,对练习过程中碰到的难题能及时地交流和讨论,或参考借鉴别人程序的思路,在一定程度上,降低了学习的难度。通过在程序爱好者中的交流与分享自己的学习成果,也让学生收获了成就感,增强了学生的信心,激发更浓厚的学习兴趣。ACM在线系统的运用,也解决了传统实验课教学由于课时少,学生人数多,问题多,学生碰到难题被卡住时,不能及时得到老师指导的问题。
通过加入ACM竞赛内容的实践环节训练,使学生具备扎实的编程基础和较高水平的编程能力,达到可持续发展的IT人才培养目标,在以后工作的实际应用中,碰到大型复杂程序设计问题时,能厚积薄发,自如地将所学专业知识综合运用发挥,快速的解决问题,适应专业的工作需要。
3 结语
在程序设计类课程中引入ACM竞赛内容,可以激发学生的学习兴趣和动力,变被动学习为主动学习。以ACM赛题驱动理论课讲授和实践环节,可改变传统讲授方式中对学生在抽象建模和邏辑思维方面训练引导不足的问题。大量的赛题练习,促使学生打下扎实的编程基础,对高水平的程序设计人才的培养有积极的促进作用。
参考文献
[1] 于世华,王荣芝.ACM竞赛探讨与技能型人才的培养[J].大学教育,2015(2):113-117.
[2] 朱月秀.基于ACM竞赛的C++程序设计课程教学改革[J].漳州师范学院学报:自然科学版,2012(1):113-117.
[3] 李环.基于ACM 竞赛的程序设计类课程教学改革研究[J].计算机教育,2016(3):115-117.
关键词:ACM竞赛 程序设计 教学教改
中图分类号:TP3-4 文献标识码:A 文章编号:1672-3791(2017)05(a)-0146-02
程序设计类课程是计算机专业人才培养计划中一系列与程序设计相关的核心课程,主要有C语言程序设计、C++面向对象程序设计、Java程序设计、数据结构和算法设计与分析等,一般以专业基础课或专业课的形式开设。程序设计类课程的教学效果,直接影响了人才培养目标的实现,在一定程度上决定了所培养的专业人才素质水平的高低,因此,各个学校普遍都很重视程序设计类课程的教学和教学建设。
然而,程序设计类课程由于理论性和实践性都比较强、学习难度大等特点,使得在教学过程中一直存在着较多的问题。一方面,程序设计教材偏重于语法和小型例题讲解,使得学生在根据实际问题建立模型和设计算法方面的抽象思维训练不够,很多学生能掌握程序设计的基本方法,但程序设计的水平并不高。另一方面,模块式实验项目的实践环节设置,使学生在综合运用知识解决实际问题方面的锻炼不足,加上实验课时的限制,因练习和投入时间的不够,也影响了学生程序设计能力的培养和提高。
在程序设计类课程教学中引入ACM竞赛模式,可以弥补传统教学方式的这些不足,促进学生程序设计能力和创新能力的提高。
ACM / ICPC (Association for Computing Machinery / International Collegiate Programming Contest)国际大学生程序设计竞赛,由计算机界具有悠久历史的权威性组织机构ACM学会主办,是世界上公认的规模最大、水平最高、参与人数最多的大学生程序设计类竞赛[1]。
1 以ACM竞赛题目驱动理论教学
首先,教师在课堂上将ACM赛事活动推介给学生。通过对竞赛的了解、练习和参与,让学生体会到学习的成就感,激发学生对程序设计的学习兴趣和学习动机,并且更明确课程的学习目标,以高水平的程序设计能力标准要求自己。
其次,教师在理论课授课时,引入ACM竞赛内容,可以挑选与授课内容知识点相关的典型竞赛题作为案例驱动教学,进行教学设计。ACM的赛题,题目类型广泛,涉及的知识面相对较广,一般是针对实际应用问题而设计[2],有一定的问题背景描述,对算法和程序的要求隐藏在背景中,因此,需要对实际问题进行分析建模,才能明确问题和梳理出算法思路。通过赛题的分析和算法设计过程的讲解,引导学生在抽象思维方面的训练,使学生把程序设计学习的重点更多地放在分析问题、抽象建模和算法设计等方面,而不是仅仅关注语法的学习。
通过将典型竞赛题目嵌入到理论教学,既带动相关语法的讲解,也引导学生进行抽象建模和逻辑思维方面的锻炼。同时,以有实际问题背景的ACM赛题做授课案例,让学生看到通过编程得到了实际问题的解决结果,看到了程序设计的广阔应用前景,增强了学生对它的学习兴趣和学习动力,变被动学习为发自内心的渴望求知的主动学习。
在作为教学案例的赛题选取上,一方面注重赛题的有趣性和实用性;另一方面,要注意题目对知识点的覆盖,以及难度适中。应当选取中等难度或难度稍微偏上的例子,以此向学生展示,相对复杂问题的分析建模和算法设计过程,既强化学生在程序设计思维方面的训练,也激发学生的好奇心和挑战困难的学习兴趣。
除了抽象思维和逻辑思维方面的训练,也注意引导学生在猜想与验证和逆向思维方面的训练。每道ACM赛题都有严格的题目形式,包括问题描述、输入样例和输出样例[2]。详细的题目输出样例,方便用于向学生展示逆向思维的问题求解分析方法,引导学生可以根据输出结果要求,逆向推理及猜想可能的算法,并对设计的算法进行静态运行的结果验证。这些都是高水平程序设计者需要锻炼和培养的基本能力和素质,要在这方面对学生进行引导和认识上的意识强化。
2 以ACM在线系统竞驱动实践教学
程序设计类课程是实践性较强的课程,一般都包括了一定学时的实验课时。但传统的基于单元知识点设计的实验题目,在实际应用价值、难度及综合性等方面往往不够,满足不了一些基础和水平较好的学生的学习需求,影响了学生在实践环节高水平程序设计能力培养方面的锻炼。可以从ACM题库中选取难度各异、知识点相关的、有一定实际应用价值的题目,让学生上机时完成,以适应不同层次水平的学生的需求。
再者,传统模式的实验课,学生练习成果的检查对教师是个问题。传统实验课中,教师主要靠查看程序运行结果和阅读程序的方式检查学生程序设计的正确性,不仅花费时间大,而且由于思维惯性,容易导致误判与参考答案不同的程序设计算法。针对这些问题,可以在实践环节引入ACM的在线评判系统做实验实训平台。
ACM竞赛经过多年的发展,国内外出现了很多优秀的Online Judge(简称OJ)系统。国内比较知名的OJ系统有北京大学的POJ、哈尔滨工业大学的HOJ、浙江大学ZOJ等;国外比较知名的系统有OJ SGU、UVa Online Judge等。OJ系统集成实时评判、答题统计、排名等功能[3]。
教师要求每个学生在OJ系统上注册自己的账号,上课时,让学生登录系统,在规定的时间内完成指定范围内的题目,并提交结果。OJ对提交程序的实时评判,包括程序结果的正确性、运行时间、占用内存资源和输出格式的判别。学生可以通过OJ系统,查看评判结果以及程序运行效率,以及根据这些反馈信息对程序进一步改进。教师也可以通过OJ系统查看学生做题数量和正确率,以了解学生的学习掌握程度。同时,通过ACM在线系统,可以将课程的实践环节从课堂延伸到课外,鼓励学生利用课余时间,多做竞赛题目练习。
ACM在线系统还提供了针对赛题的讨论交流功能,学生可以在上面找到对编程兴趣爱好浓厚的“志同道合”者,对练习过程中碰到的难题能及时地交流和讨论,或参考借鉴别人程序的思路,在一定程度上,降低了学习的难度。通过在程序爱好者中的交流与分享自己的学习成果,也让学生收获了成就感,增强了学生的信心,激发更浓厚的学习兴趣。ACM在线系统的运用,也解决了传统实验课教学由于课时少,学生人数多,问题多,学生碰到难题被卡住时,不能及时得到老师指导的问题。
通过加入ACM竞赛内容的实践环节训练,使学生具备扎实的编程基础和较高水平的编程能力,达到可持续发展的IT人才培养目标,在以后工作的实际应用中,碰到大型复杂程序设计问题时,能厚积薄发,自如地将所学专业知识综合运用发挥,快速的解决问题,适应专业的工作需要。
3 结语
在程序设计类课程中引入ACM竞赛内容,可以激发学生的学习兴趣和动力,变被动学习为主动学习。以ACM赛题驱动理论课讲授和实践环节,可改变传统讲授方式中对学生在抽象建模和邏辑思维方面训练引导不足的问题。大量的赛题练习,促使学生打下扎实的编程基础,对高水平的程序设计人才的培养有积极的促进作用。
参考文献
[1] 于世华,王荣芝.ACM竞赛探讨与技能型人才的培养[J].大学教育,2015(2):113-117.
[2] 朱月秀.基于ACM竞赛的C++程序设计课程教学改革[J].漳州师范学院学报:自然科学版,2012(1):113-117.
[3] 李环.基于ACM 竞赛的程序设计类课程教学改革研究[J].计算机教育,2016(3):115-117.