注重实践的程序设计课程教学
2014-07-01孙瑜
孙瑜
(西安科技大学 计算机学院,陕西 西安 710054)
注重实践的程序设计课程教学
孙瑜
(西安科技大学 计算机学院,陕西 西安 710054)
怎样让学生感兴趣,怎样做才能唤醒学生的力量,提高学习的积极性,是课程改革能否成功的一个关键。“程序设计不是听会的,也不是看会的,而是自己上机练会的。”动手才是化难为易的金钥匙,实践是能力赖以生长的土壤,实践出真知,实践长能力。
程序设计;实践;兴趣
《C/C++语言程序设计》是计算机学科体系中的核心课程之一,主要讲授程序设计语言的基本知识和程序设计方法,使学生了解高级程序设计语言的结构,掌握程序设计的思想和方法,以及基本的程序设计过程和技巧,具备初步的分析问题和利用计算机求解问题的能力。课程核心是培养程序设计能力,加强实践是培养设计能力的重要途径。本文基于教学中存在的问题,从案例驱动教学、注重实践教学等两方面探究如何在实际教学中提高学生的学习积极性和思维能力,实现学生从单纯的程序编写到解决实际问题能力的转变。计算机程序设计类课程实践性很强。实践性强体现为无论多简单或多复杂的程序设计问题都要形式化为数学式子或相应的操作步骤,最终都要编写程序,开发出能够解决相应问题的计算机软件;学习该类课程既要注意学习好理论,更要注重进行实际上机操作的训练,运用理论知识进行程序设计解决实际问题,做到理论与实践相结合。
一、教学难点
本文对2011、2012和2013年度参加C和VB二级考试的一年级理工类学生做了抽样统计(数据来源为西安科技大学大学教务处),结果表明报考率和通过率差强人意,尤其是C语言,9个班级中通过率在50%以上的只有3个班级,最低的通过率仅为17.3%。通过问卷调查的方式获悉学生普遍对C语言的学习有畏惧心理。程序设计类课程理论性抽象性较强,语法知识繁多,结构复杂,调试程序更是初学者的“拦路虎”,学生往往难以理解程序设计的思维方式,对教学内容似懂非懂,而掌握良好的程序设计方法则更加困难;采用传统的教学方法讲解课本上的内容难以调动学生的学习积极性。主要原因主要有以下三方面:第一,教学重理论轻实践,过分注重计算机语言语法知识的讲解,轻视了算法设计、逻辑思维和编程方法的培养;第二,学生计算机编程能力有待提高,大多数学生基本上是初次接触计算机程序设计,习惯采用数学思考方式来进行程序设计,还没有真正掌握计算机编程的基本思路;第三,实验课时不足,实践课时通常是理论课时的一半,大部分专业是16个学时,这样的学时安排远远不能满足学生能力培养的需求。教学要以学生为中心,要让学生容易接受理解。教师只有从学生的角度体会“学”之困惑,反思“教”之缺陷,才能明了如何通过“教”帮助学生学习,体现现代教育以人为本的思想。程序设计基础课程对许多学生来说,是第一次接触编程,因此,学生往往难以理解程序设计中分析问题、解决问题的方式,尤其是抽象思维。所以,教师不但要研究教学内容,更要研究教学对象——学生,根据学生的学习特点,研究教学内容传授中重点和难点的解决办法。
二、教学组织方式
程序设计基础教学内容的组织方式主要有两种:以语言知识为主线、以程序设计为主线。目前普遍采用的方式是前者,经过一些高校多年的探索实践,以程序设计为主线的组织方式也取得了成功的经验。以语言知识为主线的教学内容组织方式往往以上述语言表达模块为单位,同时考虑程序设计的学习进程来组织教学内容。典型的教学内容组织路线是:概论-数据类型和表达式(标准类型)—分支—循环—数组—函数—指针—结构—文件。以程序设计为主线的方式则重点围绕学生程序设计能力培养,以程序设计的学习进程为主,打破语言模块的完整性,循序渐进地组织相关教学内容。在教学中,以语言知识为主线的教学内容组织方式重视语法知识的完整性,侧重以语法的理解带动程序设计能力的培养;以程序设计为主线的方式则更加强调编程实践,侧重以编程带动对语法知识的深入理解。因此,以程序设计为主线的教学组织方式往往按照程序设计的渐进学习进程,结合实际案例来组织和实施教学,将程序开发过程的相关内容贯穿和渗透到每个知识点的讲授中去。一种以程序设计为主线的教学内容组织路线是:概论—初识程序设计—语句级控制(分支与循环)—数组应用—模块级控制(函数)—指针、结构应用—程序设计进阶(递归、链表结构)—文件应用。在采用以程序设计为主线的实施方式时,可以将课程内容分为若干渐进式的程序设计学习阶段。在每个阶段的教学过程中,通过案例讲解程序设计的思想和方法,引出知识点,必要时再使用多种方法(如多媒体动画)进行深入的讲解与分析,并通过布置思考题和实验题,让学生通过学习思考和大量的上机练习培养编程能力,掌握知识。
三、问题驱动式教学
问题驱动教学是围绕教学目标,通过完成事先设置的相关联任务(例题)来达成教学目标的实现。在开课前,对典型的例子演示运行结果,激发学生的学习兴趣,明确学习任务和目标;在课堂上,将本次课程的内容和知识点通过几个具体的任务表现出来,引导学生在完成任务的过程中掌握所涉及到的理论知识,并注重反例教学,让学生“吃一堑,长一智”。这种教学方式学习目的明确,任务清晰,能极大地调动学生的学习积极性,对教学效果的提高起到非常明显的促进作用。
图1 问题驱动的教学流程
四、模仿创新教学
模仿创新即通过模仿而进行的创新活动。在《C/C++语言程序设计》课程中,模仿体现在学生根据教师所给程序进行验证分析,碰到类似的情况和功能实现可以参照相应的程序;创新是在所给验证性实验的基础上,根据新要求,实现新程序,并能综合应用所学知识实现复杂功能程序。课程实验教学将学生学习到的理论知识应用到实际问题。考虑到学生的基础不同,应尽量设计有层次和梯度的实践训练内容,使不同水平的学生都能得到最大可能的提升。每次的实际教学设计中,可以把实验内容分成三部分:验证、改编和综合。
1.验证程序。结合案例教学方法,针对每次上课所学知识点的不同,分别提供给学生一些已包括所学知识点、实现实际问题、可直接运行出结果的有吸引力的案例,即源程序,让学生自己执行程序和查看结果,根据源程序和运行结果分析其程序中所包含的知识点及程序具体实现的功能,加强学生分析问题的能力。有时候源程序中包含一些常见错误,让学生发现问题,调试程序,带来成就感。
2.改编程序。在已给程序的基础上,提出具体的功能改编要求,学生需要结合已学知识修改相应的程序,从而实现新功能。例如,学生可以通过改编“猜数字游戏”源程序,实现“提示猜测数字大小、每个数字最多猜7次”等功能。
3.综合程序。在学习了基本的程序设计知识后,通过综合程序练习同学们运用知识解决问题的能力,例如象棋游戏、成绩管理系统、智能排序等综合程序。基于案例的教学方式有时教师遇到问题暂时卡住时也可问学生如何解决,学生会很有兴趣积极地帮助教师完成该案例的调试,这样真正做到上下交互,教学相长。这种教学方式忌只放PPT,要当场分析和编程,不能用解说代码代替实际开发,这样学生就更感兴趣学习编程了。
五、课外补充
1.建立“程序设计学习QQ群”。责任教师申请一个学习程序设计类课程的QQ群,所有的辅导老师和学习这门课程的学生都加入群。开学初老师把QQ群公布给学生,让学生课后每次上QQ都能看到群里的讨论。在QQ群里,学生与老师,学生与学生之间随时随地在网上进行讨论、答疑。在学习群里“能者为师”,学生之间经常互相解答问题,这样既提高了学生的知识水平和问题的回复率,也减轻了辅导老师的工作量。
2.定期组织学习小组之间的编程竞赛。每个班按10人左右分成若干个学习小组,老师为组织者和裁判,在教学大纲的范围内出题进行小组之间的编程竞赛,由老师出一个相同的题目,小组内的成员之间通过小组群,互相协作,共同参与,最后由组长整理提交程序的结果,老师做裁判,又快又准完成程序设计的小组为胜,获胜的小组成员每人都获得平时成绩加4分的奖励。这种编程竞赛方式能充分调动每个小组成员参与的积极性,提高学生的学习兴趣,同时又能激发了学生的团队合作精神。
3.制作“微课”形式的视频。仿照“做游戏学英语”的形式,制作各知识点的微课视频,在网上共享,以备学生课下自主学习。
[1]吴文虎.我怎么讲好“程序设计基础”这门课[J].中国大学教学,2011,(12):10-12.
[2]王洪波.杏坛英华——北京大学青年教师优秀教案集[M].北京:国家图书馆出版社,2009.
[3]教育部高等学校计算机科学与技术教学指导委员会.高等学校计算机科学与技术专业核心课程教学实施方案[M].北京:高等教育出版社,2009.
[4]何钦铭.“程序设计基础”课程教学实施方案[J].中国大学教学,2010,(5):62-65.
[5]刘芳.《C语言程序设计》教学存在的问题及改进[J].教育理论与实践,2012,32(36):51-52.
[6]孙慧然.“程序设计基础课”理论与实验教学的改革与实践[J].实验技术与管理,2012,29(4):299-300.
G633.6
A
1674-9324(2014)22-0178-02
西安科技大学计算机学院教改项目:2013-JG-01。