徐艳艳 陈志泊 王春玲
(北京林业大学信息学院,北京 100083)
作为农林院校的计算机专业,北京林业大学信息学院在教学中强调多学科交叉、夯实理论基础、重视实践教学效果,并致力于为各行各业培养信息化需要的专业人才。因此,北京林业大学信息学院在重视理论教学的基础上强化实践教学环节,着重培养学生用计算机解决实际问题的能力。
笔者在“程序设计”课程中不断探索教学改革经验,结合北京林业大学计算机专业的教育特点,借鉴国内外“程序设计”课程的先进经验,努力开拓教学新思路。笔者多年的教学实践经验证明,要学好“程序设计”课程,绝非熟悉语法和语义那么简单,因此应当改变基于语法的教学模式,采用由问题设计算法、由算法引导程序的基于算法的教学模式。这种教学模式能切实提高学生的专业核心能力,提高学生使用计算机解决实际问题的能力,让学生掌握程序设计的方法和技巧、养成良好的编程风范。
“程序设计”课程是计算机科学与技术专业的专业基础核心课程[1]。本课程对培养学生的逻辑思维能力、编程能力、独立解决问题能力有重要意义;对计算机专业的“数据结构”“数据库系统”“操作系统”“编译原理”和“软件工程”等课程的学习起到重要基础性作用。在传统的“程序设计”课程中,教师主要采用基于语法的教学模式。在这种教学模式下,教学内容主要是程序设计语言的语法和语义,教学手段主要采用多媒体课堂授课和单独设置实验课的方式。在多媒体课堂上,教师单向讲授;在实验课课堂上,学生根据教师之前的讲授内容练习相应题目。多媒体课堂和实验课课堂是分开设置的,教师的讲授和学生的练习被分隔开,考核的方式也采用传统的闭卷笔试形式。
传统的“程序设计”课程教学模式有以下弊端:①侧重语法和语义的讲授,导致学生虽然能看懂示例程序却不能编写程序解决实际的问题;②轻视对问题求解与算法的引导,导致课堂教学内容枯燥、缺少趣味性,使教师不能很好地与学生产生互动;③课堂教学和实验课教学分离,导致理论和实践的脱节,学生难以及时从实践中深化对理论的理解。总之,笔者认为基于语法的教学模式不能很好地培养学生独立思考问题和编写程序代码的能力。
通过长期的教学实践,经过反复的思考和研究,笔者认为必须改变这种基于语法的教学模式,用新的教学理念和方法培养学生。
在教学内容上,教师把基于语法的教学内容改为基于算法的教学内容,而基于算法的教学内容强调学生的动手实践能力。因此,教师应以上机编程为切入点,通过实例讲授程序设计的基本概念和方法,重点放在解题思路上,并针对具体问题进行分析,构建数学模型,最后得出算法并编写代码实现。
基于算法的教学模式强调问题求解、算法与编程,重视实践教学环节。因此,笔者把在多媒体教室授课改为在机房授课,并且平时实验以及考试使用在线评判系统(Online Judge System,简称OJ)。
1.机房授课
在传统的教学模式中,教师在多媒体教室上课,围绕书本和PPT 对“程序设计”课程进行口头讲授。这样的教学模式往往重视语法的传授,忽视了实践教学的环节。
在这种教学模式中,课堂教学和上机练习环节是相互脱离的。往往开课一段时间后,学生才能到机房上机操作练习。教师授课和学生上机练习时间上的不连贯、不同步,造成教师的教学与学生上机操作练习的脱节,使学生不能“趁热打铁”,导致教学效果的下降。上课地点改在机房后,教师的课堂教学与学生的上机操作练习紧密结合起来,使教与学同步进行,这种理论学习与实践操作的实时结合,不仅增强了学生学习的积极性,也使课堂教学得到了及时回馈,收到了较好的教学效果。
在机房授课时,教师将授课重点放在问题求解思路、算法和程序实现上,教师提出问题,引导学生考虑算法如何实现;学生依据教师的引导,动手编写程序解决问题。教师随时了解学生的答题进程、解答学生的疑问、指导学生调试程序。这样的教学过程,能让教师及时掌握学生的学习程度,从而及时修订教学内容、调整教学难度,同时能使学生多学多练,帮助学生从“要我学”转变为“我要学”。学生动手编写代码是课堂的主要内容,教师的精讲和答疑起到了辅助作用。这不仅让学生在实践中提高了使用计算机解决问题的能力,还能促使学生养成提前预习、独立解决问题的自学习惯。
2.运行在线评判系统
笔者在指导学生参加ACM(美国计算机协会)国际大学生程序设计竞赛的过程中,通过对优秀学生成长道路的反复思考和研究,感到有必要将“程序设计”课程同ACM 国际大学生程序设计竞赛训练结合起来,将竞赛氛围融汇到教学工作中。
ACM 国际大学生程序设计竞赛是由美国计算机协会(ACM)主办的一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛[2]。经过30多年的发展,该竞赛已经发展成为世界上规模最大、水平最高、参与人数最多的大学生程序设计竞赛。因为ACM 国际大学生程序设计竞赛的网络赛和现场赛一般在在线评判系统上举办,因此许多高校先后开发了自己的在线评判系统用来训练队员。北京林业大学借鉴浙江大学[3]、北京大学[4]和杭州电子科技大学的在线评判系统[5]的优点,有针对性地改进并开发了自己的基于JSP的在线评判系统[6]。北京林业大学的在线评判系统,对于训练ACM 竞赛队员起到了很好的基础作用。
除了训练竞赛队员,很多高校(北京大学、北京航空航天大学、北京邮电大学等)还使用在线评判系统举办计算机相关专业的研究生招生复试机试,而一些国际知名IT 企业也使用类似的形式选拔人才。如今,在线评判系统已成为公认的极具训练价值和选拔价值的评判系统。
经过与其他高校计算机相关专业教师的研讨和与一些IT 企业的沟通,笔者将在线评判系统引入到诸如“C语言”“面向对象程序设计(C++)”“Java语言”等本科生程序设计相关课程中,以提高学生的实践能力。具体做法如下:①在在线评判系统上布置作业及答题。在每周的实验课上,教师在在线评判系统上布置作业,而学生则根据自己的实际情况选择题目,并可随时提交解答的程序,同时还可得到教师的反馈意见。这样既能发现常见问题以便教师在课堂上统一讲解,又可以在一定程度上避免学生抄袭现象的发生。②指导学生每周在在线评判系统上做练习题。在线评判系统提供了大量的和课堂讲授知识相对应的优秀题目供学生日常练习使用。③扩充在线评判系统的题库。在线评判系统的题库需要及时的补充更新,笔者把高年级参加过ACM国际大学生程序设计竞赛的优秀学生组成助教队伍,利用他们扎实的理论基础和较高的编程水平,扩充了在线评判系统的题库。
“程序设计”课程需要学生动手编写大量的程序,学生上机作业量很大,在这种情况下,教师要人工批改作业已不切合实际,因此使用在线评判系统批改作业是非常合适的。它既能让学生实时得到反馈信息,又能把教师从繁重的作业批改中解脱出来。
传统的“程序设计”课程考核方式以闭卷笔试为主,题型有选择、填空、判断、读程序、程序填空、程序改错以及编写程序,等等。这种考核方式更多地依赖死记硬背,不能真正考察学生的编程能力。在这种考核方式中取得高分的学生,有可能只是记住了大量的语法,却并不具备良好的设计算法和动手编程的能力。
鉴于上述问题,笔者认为无论是期中考试还是期末考试,都要使用在线评判系统,目的是将考核方式由笔试改为机试。另外,教师可针对不同的知识点,要求学生在规定时间内在在线评判系统上提交完整的程序并通过测试,而学生则可实时了解自己解出题目的数量和成绩排名。对于学生没有通过测试的题目,教师会详细查看学生的答案(程序代码),并给出合理的成绩。这样的考核方式会考验学生的心理承受能力,有很好的激励作用,并且能检验出学生实际编程的水平。
基于算法的教学模式在北京林业大学计算机科学与技术专业2009级、2010级、2011级和2012级的“C语言”“面向对象程序设计语言(C++)”“Java语言”以及“问题求解与编程”课程教学中得以逐步实施,并取得了显著的教学成效。
从近几年的教学改革实践来看,学生对“程序设计”课程的学习兴趣变得越来越浓厚,而且学生的编程能力也得到显著提高。越来越多的学生报名参加北京林业大学ACM 爱好者协会组织的ACM 月赛、ACM 国际大学生程序设计竞赛选拔赛等活动。特别值得一提的是:北京林业大学于2011 年获得ACM 国际大学生程序设计竞赛亚洲赛区现场赛1枚铜牌,2012年获得2枚铜牌(学校排名29名)和一个荣誉提名奖。在百度之星及其他软件大赛中,北京林业大学学生也屡次取得一等奖等好成绩。
总之,笔者对“程序设计”课程的教学模式进行了大胆改革,把基于语法的教学模式转变为基于算法的教学模式。这种改革主要包括:在教学内容上,把以语法作为引导改为以算法作为引导;在教学手段上,把传统的多媒体教室授课改为机房授课;在考核手段上,把闭卷笔试改为在在线评判系统上机试。实践证明,在机房授课并在实验和考试中使用在线评判系统的教学模式更有利于培养学生的思考能力、提高学生的编程能力。
[1]教育部高等学校计算机科学与技术教学指导委员会.高等学校计算机科学与技术专业核心课程教学实施方案[M].北京:高等教育出版社,2011:23-47.
[2]刘汝佳.算法竞赛入门经典[M].北京:清华大学出版社,2009:I-IV.
[3]浙江大学ACM/ICPC 队.浙江大学在线评判系统[EB/OL].(2001-03-18)[2012-10-15].http://acm.zju.edu.cn.
[4]北京大学ACM/ICPC 队.北京大学在线评判系统[EB/OL].(2003-04-15)[2012-10-15].http://poj.org/.
[5]杭州电子科技大学ACM/ICPC 队.杭州电子科技大学在线评判系 统[EB/OL].(2005-05-18)[2012-10-15].http://acm.hdu.edu.cn/.
[6]北京林业大学ACM/ICPC 队.北京林业大学在线评判系统[EB/OL].(2005-06-01)[2012-10-15].http://bjfu.in/.