论文部分内容阅读
摘 要:针对程序设计类课程教学中存在的问题及原因,在分析ACM平台特点的基础上,给出了基于ACM平台的程序设计课程理论和实践教学方法,提出了具体措施,实践中收到了较好的效果。
关 键 词:ACM;教学改革;程序设计课程
0引言
高等院校计算机相关专业的课程中程序设计类课程占了较大的比重,程序设计类课程的实践性很强,课程教学的最终目标是要求学生具有一定的程序设计能力。以往教学过程中主要强调程序设计语言的语法、实验内容也相应分成不同的模块,导致在教学过程中教师往往将重点偏向理论,忽视了理论和实际程序设计之间的联系,降低了实际程序设计能力的训练和考察,不能有效地培养也不能提高学生的程序设计水平。国际大学生程序设计竞赛(简称ACM) 是由美国计算机学会主办的,公认的规模最大、水平最高的程序设计竞赛。竞赛对程序设计语言和算法的学习使用作为整体来进行考察,将ACM 竞赛的平台与程序设计类课程的教学结合起来,提高学生的程序设计能力,是一个十分有意义的问题。
1传统程序设计类课程教学中的问题
1.1理论教学中的问题
高级语言程序设计(C、C )一直以来都是计算机相关专业的基础课程,也是公共计算机教学的主要课程。高级语言程序设计及其后续课程(数据结构,算法分析和设计)同属工科课程,实践性很强,对实践的要求很高。但是,传统的课程安排基本上都是以理论教学为主,只安排了较少的实践内容。以沈阳师范大学为例,实践教学的比例一般为三分之一左右。理论教学以语法为主线,主要强调学生对语法和典型例题的掌握。实践教学环节主要是模块化的内容,学生只要掌握一两个知识点即可完成实验。最后的考核以笔试为主,实践所占的比例很小。学生不需要调试程序,很多学生通过死记硬背也能得到比较高的分数。这种教学模式无法很好地考察实践能力,对程序设计能力的训练和提升也没有实质的帮助,不能激发学生的学习兴趣。
上述情况造成了计算机学科教学中的“学与用”的矛盾。一方面,基础的程序设计类课程距离实践运用相差甚远,学生学了很多基础语法和典型的数据结构及算法,却不能使用所学内容去解决实际问题,以至于很多学生学过了所有课程,考试得了很高的分数,却不会编写程序,学生因此觉得课程没有用处,不愿意去学习;另一方面,学生过分强调实践,关注和学习最新的计算机技术。虽然开始的时候能够学到一定的技术,但是随着学习和应用的深入,由于缺少基础课程的支撑,限制了学生水平的进一步提升。
1.2 实践教学中的问题
相比传统教学,程序设计类课程的实践教学得到了一定重视,但是无论是教学计划制订者,还是教师和学生,都将实践环节看作是理论教学的辅助手段。这可以从学时分配、课程内容的顺序,以及考核所占的比重中体现出来。
以往的实验基本是按照章节组织内容,主要考察单个的算法。 学生一般只关注对单个算法的理解和使用,对于从整体上掌握概念和应用多个算法解决相对复杂的问题关注的很少。验证性实验占实验内容的很大部分,对于软件开发过程中的分析、设计、实现,调试、测试等环节很少涉及。学生对实验内容没有整体的把握,综合设计能力不能有效地提高[1]。
传统实践教学对学生实验课内容的检查存在不足。学生的程序是否正确,只是学生使用自己想到的和实验指导书上提供的数据进行测试。实验指导书不可能提供严格的测试数据集,学生自己也往往不能够全面地考虑问题。并且现在的教学班人数普遍较多,教师不可能一一检查,传统方式根本无法发现程序中疏漏的情况和不易察觉的错误。由于精力有限,检查实验报告时教师很难区分是学生抄写过程中的错误,还是程序实现过程中的代码错误。另外,由于知识面限制和惯性思维的作用,教师有可能误判学生的不同于参考答案的算法。综上所述,传统的检查方式不能有效地发现程序中的非语法问题。同时,针对少数知识掌握比较好,实践能力较强的学生开发的不同于参考答案的程序,也不能提供较好的检查,而且不能对这部分学生的进一步提升提供帮助[2]。
受困于实践教学学时的限制,实践教学过程中很难安排具有难度和综合性的题目。为了解决这个问题,很多院校设置了课程设计环节。学生以分组的形式在要求的时间内完成指定的实验。课程设计的目的在于综合所学知识,提高学生的分析能力、设计能力和解决问题的能力,以及培养学生的团队精神和相互协作能力。但是实践过程中,由于教师精力和学术水平的限制,所选的题目与实际联系不够紧密、考核的方式以小组报告和小组答辩为主,不能够体现团队分工,常导致学生对课程设计缺乏兴趣,收效甚微。
2 ACM的特点
ACM是由美国计算机学会主办,其宗旨是考察大学生使用程序设计语言和算法分析和解决问题的能力。ACM的模式对培养程序设计能力、团队精神和创新意识都具有积极的作用。ACM 具有以下特点:
2.1 题目涉及面广,要求高
ACM题目涉及相当广泛的知识,包括程序设计语言、数据结构、算法、人工智能、离散数学等程序设计类课程的理论和方法。同时,为了提高参赛选手的兴趣,与实践相结合,ACM的题目注意生活化和趣味化,对数学建模、概率论、计算几何、组合数学等一般计算机专业没有开设的课程也有要求。参赛学生为了在比赛中取得好的成绩,需要学习和应用很多上述课程的知识,使学生将做题和学习结合在一起,提高了学生的学习兴趣,调动了学生的积极性。
2.2 对选手的团队配合能力有很高的要求
ACM竞赛中每支参赛队伍由不超过3名队员组成,每支队伍只会分配一台计算机。这就要求队员明确每个人的特长,合理地根据问题进行分工,提高解题的效率。对于没有明确解题算法的题目,要求队员讨论时有较高的对算法思路的描述能力以及对所提解决方案的合理论证能力。所有这些都要求队员具有较高的协作能力。
2.3 要求学生具有较高的抗压能力,能够快速地理解和解决问题
关 键 词:ACM;教学改革;程序设计课程
0引言
高等院校计算机相关专业的课程中程序设计类课程占了较大的比重,程序设计类课程的实践性很强,课程教学的最终目标是要求学生具有一定的程序设计能力。以往教学过程中主要强调程序设计语言的语法、实验内容也相应分成不同的模块,导致在教学过程中教师往往将重点偏向理论,忽视了理论和实际程序设计之间的联系,降低了实际程序设计能力的训练和考察,不能有效地培养也不能提高学生的程序设计水平。国际大学生程序设计竞赛(简称ACM) 是由美国计算机学会主办的,公认的规模最大、水平最高的程序设计竞赛。竞赛对程序设计语言和算法的学习使用作为整体来进行考察,将ACM 竞赛的平台与程序设计类课程的教学结合起来,提高学生的程序设计能力,是一个十分有意义的问题。
1传统程序设计类课程教学中的问题
1.1理论教学中的问题
高级语言程序设计(C、C )一直以来都是计算机相关专业的基础课程,也是公共计算机教学的主要课程。高级语言程序设计及其后续课程(数据结构,算法分析和设计)同属工科课程,实践性很强,对实践的要求很高。但是,传统的课程安排基本上都是以理论教学为主,只安排了较少的实践内容。以沈阳师范大学为例,实践教学的比例一般为三分之一左右。理论教学以语法为主线,主要强调学生对语法和典型例题的掌握。实践教学环节主要是模块化的内容,学生只要掌握一两个知识点即可完成实验。最后的考核以笔试为主,实践所占的比例很小。学生不需要调试程序,很多学生通过死记硬背也能得到比较高的分数。这种教学模式无法很好地考察实践能力,对程序设计能力的训练和提升也没有实质的帮助,不能激发学生的学习兴趣。
上述情况造成了计算机学科教学中的“学与用”的矛盾。一方面,基础的程序设计类课程距离实践运用相差甚远,学生学了很多基础语法和典型的数据结构及算法,却不能使用所学内容去解决实际问题,以至于很多学生学过了所有课程,考试得了很高的分数,却不会编写程序,学生因此觉得课程没有用处,不愿意去学习;另一方面,学生过分强调实践,关注和学习最新的计算机技术。虽然开始的时候能够学到一定的技术,但是随着学习和应用的深入,由于缺少基础课程的支撑,限制了学生水平的进一步提升。
1.2 实践教学中的问题
相比传统教学,程序设计类课程的实践教学得到了一定重视,但是无论是教学计划制订者,还是教师和学生,都将实践环节看作是理论教学的辅助手段。这可以从学时分配、课程内容的顺序,以及考核所占的比重中体现出来。
以往的实验基本是按照章节组织内容,主要考察单个的算法。 学生一般只关注对单个算法的理解和使用,对于从整体上掌握概念和应用多个算法解决相对复杂的问题关注的很少。验证性实验占实验内容的很大部分,对于软件开发过程中的分析、设计、实现,调试、测试等环节很少涉及。学生对实验内容没有整体的把握,综合设计能力不能有效地提高[1]。
传统实践教学对学生实验课内容的检查存在不足。学生的程序是否正确,只是学生使用自己想到的和实验指导书上提供的数据进行测试。实验指导书不可能提供严格的测试数据集,学生自己也往往不能够全面地考虑问题。并且现在的教学班人数普遍较多,教师不可能一一检查,传统方式根本无法发现程序中疏漏的情况和不易察觉的错误。由于精力有限,检查实验报告时教师很难区分是学生抄写过程中的错误,还是程序实现过程中的代码错误。另外,由于知识面限制和惯性思维的作用,教师有可能误判学生的不同于参考答案的算法。综上所述,传统的检查方式不能有效地发现程序中的非语法问题。同时,针对少数知识掌握比较好,实践能力较强的学生开发的不同于参考答案的程序,也不能提供较好的检查,而且不能对这部分学生的进一步提升提供帮助[2]。
受困于实践教学学时的限制,实践教学过程中很难安排具有难度和综合性的题目。为了解决这个问题,很多院校设置了课程设计环节。学生以分组的形式在要求的时间内完成指定的实验。课程设计的目的在于综合所学知识,提高学生的分析能力、设计能力和解决问题的能力,以及培养学生的团队精神和相互协作能力。但是实践过程中,由于教师精力和学术水平的限制,所选的题目与实际联系不够紧密、考核的方式以小组报告和小组答辩为主,不能够体现团队分工,常导致学生对课程设计缺乏兴趣,收效甚微。
2 ACM的特点
ACM是由美国计算机学会主办,其宗旨是考察大学生使用程序设计语言和算法分析和解决问题的能力。ACM的模式对培养程序设计能力、团队精神和创新意识都具有积极的作用。ACM 具有以下特点:
2.1 题目涉及面广,要求高
ACM题目涉及相当广泛的知识,包括程序设计语言、数据结构、算法、人工智能、离散数学等程序设计类课程的理论和方法。同时,为了提高参赛选手的兴趣,与实践相结合,ACM的题目注意生活化和趣味化,对数学建模、概率论、计算几何、组合数学等一般计算机专业没有开设的课程也有要求。参赛学生为了在比赛中取得好的成绩,需要学习和应用很多上述课程的知识,使学生将做题和学习结合在一起,提高了学生的学习兴趣,调动了学生的积极性。
2.2 对选手的团队配合能力有很高的要求
ACM竞赛中每支参赛队伍由不超过3名队员组成,每支队伍只会分配一台计算机。这就要求队员明确每个人的特长,合理地根据问题进行分工,提高解题的效率。对于没有明确解题算法的题目,要求队员讨论时有较高的对算法思路的描述能力以及对所提解决方案的合理论证能力。所有这些都要求队员具有较高的协作能力。
2.3 要求学生具有较高的抗压能力,能够快速地理解和解决问题