在推动计算机教学体系改革的一系列活动中,教学方法是关系到教学成败的重要问题[1],教学方法对于培养学生的信息技术能力与创新能力、提高教学质量具有重大意义。基于程序设计课程实践性强、逻辑性强、抽象性强等特点,传统、单一的讲授教学法并不适合大多数程序设计课程,如何正确运用恰当的教学方法对于激发学生自主学习、培养计算思维、创新能力与动手能力具有更加重要的意义。
一、当前程序设计教学方法改革的必要性
(一)传统教学模式、教学方法与程序设计的学科特点不相适应
多媒体课件以其生动性和方便性在高校计算机教学过程中被广泛应用。然而程序设计是逻辑性和实践性很强的一门课程,仅仅依靠投影大屏幕和多媒体课件的教学思路无法适应程序设计灵活多变的学科特点,不能对学生创造性思维和自学能力的培养起到积极的作用。还有一些教师过分依赖电子课件,教师变“照本宣科”为“照课件宣科”,容易挫伤学生的学习积极性。另外由于播放电子课件信息量大、速度快,学生没有得到思考的空间,学习效果并不理想,而且学生无法做到边听课边做笔记,印象较浅,容易遗忘。
(二)学生的动手实践能力较弱
很多高校在教学过程中更多地注重程序设计语言理论知识的学习而忽视了工程技能的培养。这样就会导致教师和学生偏重于编程语言语法的教学而对计算思维的培养和工程实践重视不够,导致重语法轻算法,实际工程开发能力薄弱。这就要求教师需要布置大量既包含基本知识点又有一定创新性和拓展性的上机实验,才能帮助学生实现从知识到技能的转换,巩固所学的理论知识。
二、程序设计教学方法改革的意义
不断探讨研究和推广新的教学方式,将更有效的新教学方式应用于计算机教学,是不断提高教学水平的好方法。程序设计课程的特点是理论与实践相辅相成,理论是基础,实践是手段,应用是目的[2]。很多学生上课能听懂,但是自己动手编程时感到无所适从。传统的“在学中用”的教学方法,其重点往往局限于讲解基本概念、语句格式、语法等内容,学生往往会考试但解决实际问题的能力较差。若采用“在做中学”的教学方法,以一个应用实例为前导,例如讲授讲解程序设计时以找最大(小)值、素数、排序、求阶乘、求一元二次方程的根等案例形式导入知识点,这样学生就比较容易接受和掌握所学的知识和内容,实践技能也在做中得到了锻炼和培养。教学方法是在教学过程中教师和学生为了实现共同的教学目标,完成共同的教学任务,运用的行为方式与手段的总称[2]。教学方法既是一门科学又是一门艺术,良好的教学教学方法对于学习兴趣的激发和学习效果有着明显的作用,尤其是程序设计教学方法对于培养工程实践能力和计算思维起着重要的作用。具体体现在:一是教师的教法不仅关系到教学效果,同时也影响着学生的学习方法,采用什么样的教学方法对于培养学生的思维模式和知识结构也具有重要的影响。二是程序设计教学法的研究与探索能够促进本学科教师的教学水平与教学能力,提高教学质量。三是程序设计教学方法的改进能够引发学生的学习兴趣和学习成就感,促进多种教学资源的合理使用,取得最佳教学效果[3]。
三、程序设计常用教学方法
(一)案例教学法
案例教学是根据教学目的和教学内容的要求,通过引入并分析各种案例来开展教学活动的教学方法。案例教学法教学过程是:案例设计—案例分析与讨论—案例实现—归纳总结知识点。案例教学法与传统的举例说明有着本质区别。传统的举例说明一般是用来验证教师讲授理论知识的正确性,举例是为理论服务的。而案例教学法最突出的特点是讲课开始于实例,从实例中提出问题,通过分析问题、发现规律、提炼理论,再从理论回到实践,应用理论去指导实践[4]。在程序设计中首先引入案例,例如在选择结构这一章,设计一个猜数游戏,产生一个随机数,输入一个整数,与之比较,提示是大了、小了还是猜中了,这个案例涉及三个分支处理;基于同一个猜数案例,加深难度,引入循环,产生一个随机数,循环输入一个整数与之比较,提示大了、小了还是猜中了,直到猜中为止,涉及的if多分支语句、while循环语句、随机数函数rand在案例中也一并掌握了。另外,一般计算机理论课程教学采用的方式是先理论,后实际;先抽象,后具体;先一般,后个别。其实,对程序设计课程可以适当采用这样的方式:从实际到理论,从具体到抽象,从个别到一般,从零碎到系统。这样的教学方式更加符合人们对客观事物的认知发展规律。
(二)任务驱动教学法
任务驱动法适合实施探究式教学,与简单的案例教学不同,它是采用项目化教学方式,即教师不是围绕知识点去设计每个单独的案例,而是针对课程教学内容设计一个项目,这个项目由若干模块组成,并能够覆盖课程的不同理论知识[5]。任务驱动教学法有助于培养学生分析、解决问题的能力以及动手能力[6]。任务驱动法的教学过程主要有(1)创设情景、提出任务;(2)分析任务、发现问题;(3)明确思路、把握重点;(4)自主探究、解决任务;(5)检查结果、总结经验[7]。任务驱动教学法对教师的业务水平提出了更高要求,教师不仅要转变教学观念,而且对课程需要有很深的理解[8],不能单纯按学科体系安排教学内容,而是根据解决问题的思路,跳跃式地结合多种知识。软件开发是多种技术的综合体现,仅仅通过案例教学局部讲清楚每个知识点,学生的综合应用能力仍然不强。此时,教师通过创设、分析与解决任务必然能激发学习兴趣,取得满意的教学效果。在C语言程序设计课程中以计算学生成绩平均分为例,首先用一维数组和循环结构计算全班50人某一门课程的平均分,继续增加问题的复杂度,计算50个学生8门课程的平均分,这时需要采用50行8列的二维数组,再引出新问题和新任务,编写函数计算出每个学生的平均分,并把每位学生的平均分带回主函数输出,此时就要采用数组名或指针变量作函数参数,传递整个实参数组给函数进行处理,并引出函数如何带回多个返回值的问题。任务驱动法循序渐进、由浅入深地引入新知识点,在解决问题的过程中旧知识在此过程中也得到了巩固。
(三)演示教学法
演示教学法就是借助投影仪或网络教学管理软件等,直观地通过教师的示范性操作进行学习。这种教学方法是学习计算机软件使用方法和操作步骤的一种重要且而行之有效的教学方法,在程序设计教学中同样非常有用。教学中光是依靠PPT课件来分析和讲解程序和算法是远远不够的,而是要当堂编程并演示程序运行结果,让学生直观地看到程序运行的过程和效果。实践证明这种方法非常生动,能够有效地激发学生的学习兴趣,并且在现场编程过程中,高级语言程序设计的知识点、语法、算法也在这一过程中一并得到掌握,另外通过编译,分析和查找语法错误和逻辑错误,可以提高学生的分析能力,实现计算思维的培养。以C语言指针变量作函数参数为例,演示教学法可以分4步实施:(1)分析指针变量作函数参数的4种一般形式。(2)设计一个案例,例如编制一个函数fun,实现将一个数组的数组元素逆序交换,在主函数中输入数组元素,调用函数,最后在主函数中输出逆序交换后的数组元素。(3)现场编程分别演示实参、形参同为数组名;实参为数组名,形参为指针变量;实参为指针变量,形参为数组名;实参形式同为指针变量这4种情况。(4)归纳总结知识点,让学生举一反三编程实现其他功能的函数。
四、新型程序设计教学方法简介
(一)慕课教学法
“慕课”这一大规模在线课程始于2011年,有勇敢之城(Udacity)、课程时代(Coursera)与教育在线(edX)三大供应商。2013年7月上海交通大学加盟MOOCs三大平台之一的课程时代Coursera,成为加入Coursera的第一所中国内地高校,和耶鲁、MIT、斯坦福等世界一流大学共建、共享全球最大在线课程网络[7]。“慕课”(MOOCs),顾名思义,“M”代表Massive(大规模),与传统课程只有几十个或几百个学生不同,一门MOOCs课程多达上万人;第二个字母“O”代表Open(开放),以兴趣导向,凡是想学习的,都可以进来学,不分国籍,只需一个邮箱,就可注册参与;第三个字母“O”代表Online(在线),学习在网上完成,不受时空限制,第四个字母“C”代表Course,即课程的意思[7]。MOOC以连通主义理论和网络化学习的开放教育学为基础。课程的范围不仅覆盖了广泛的科技学科,例如数学、统计、计算机科学、自然科学和工程学,也包括了社会科学和人文学科。在“慕课”的世界里,视频课程被切割成10min甚至更小的“微课程”,由许多个小问题穿插其中连贯而成,就像游戏里的通关设置,只有答对才能继续听课。利用“慕课”的平台,可以获取全球的优质课程,实现更大范围的资源共享。除了传统课堂上人们所惯常使用的录像资料、阅读材料和练习题外,“慕课”还会为网友提供互动的论坛,在师生之间搭建一个交流的平台[8]。“慕课”不同于网络公开课,互动性更强,“慕课”的出现,为教学设计提供了一种改革的可能———教师可以将在线视频作为教学的线上环节,要求学生在课堂外先“听课”,课堂内侧重深入的分享、探讨和问题解决,真正实现“翻转课堂”。这一模式将促进教师对教学的反思,以及对教学模式的探索、研究,有助于推动教师角色转变,从一个讲授者、讲解者真正变为学习的激励者、启发者,学习也将变得更加有效[8]。“慕课”课程所带来的是挑战、思考和实践,而不仅是课程的变化。在程序设计课程中将来也可以引入“慕课”模式,利用现代网络技术,开发针对不同知识点的程序设计教学视频,提供在线测试题、上机练习题,程序阅读题、在线提交与批改实验报告等,通过论坛实现师生之间、学生之间的与交流与互动,通过全方位的教学方式改变教学方法,共同提高教学质量。
(二)翻转教学法
利用视频来实施教学在多年以前人们就进行过探索,当今网络技术发达,计算机教学也可以通过网络向外扩展,如开展网络教学和将教学视频上传网络等,供学生在校外学习。如2006年创立的可汗学院、2009年创立的点对点大学、2010年创立的人人学院等。他们都是与慕课相类似的组织。美国的耶鲁等大学已经开始进行这样的尝试,并且已经获得很好的效果。所谓翻转课堂,就是教师创建视频,学生在家中或课外观看视频中教师的讲解,回到课堂上师生面对面交流和完成作业的这样一种教学形态。“翻转课堂”特点有:第一,教学视频短小精悍,通过网络发布的视频,具有暂停、回放等多种功能,可以自我控制,有利于学生的自主学习。第二,教学信息清晰明确,把内容集中在屏幕上,配合讲解的画外音。每一个视频都针对一个特定的问题,有较强的针对性,查找起来也比较方便;视频的长度控制在在学生注意力能比较集中的时间范围内,符合学生身心发展特征。第三,重新建构学习流程。老师提供了视频,在课前对学生进行“信息传递”,在课堂上通过互动来完成“吸收内化”,教师在课堂上给予有效的辅导,教师更多的责任是去理解学生的问题和引导学生去运用知识,同学之间的相互交流更有助于促进学生知识的吸收内化过程。第四,复习检测方便快捷,学生观看了教学视频之后,是否理解了学习的内容,视频后面紧跟着的四到五个小问题,可以帮助学生及时进行检测,并对自己的学习情况作出判断[9]。由于程序设计知识点繁杂,概念抽象,视频教学和翻转教学也特别适合程序设计的教学。有效实施翻转教学法的前提是根据教学内容和教学大纲,划分出各个章节的知识点,如if语句、switch语句、for循环语句、while循环语句、数组、函数、指针等,将每个知识及其典型案例用屏幕录像软件录制成10min左右的微视频,上课前提前发布给学生在课外观看,上课时通过师生互动辅导学生完成上机编程作业,解答学生在编程中遇到的问题。先看录像后讲课,这是“翻转课堂”的教学视频与传统的教学录像最大的不同之处。一个最显著的变化将是,翻转课堂,从以教师为中心真正转变为以学生为中心,这实际上是一种传统与现代的结合体,但其效果远好于传统教学。
五、程序设计教学方法的合理选择与思考
课堂教学中并非独立地应用一种教学方法,而是在不同的教学阶段,根据教学内容,教学对象的不同,选用适合的教学方法进行教学,让学生在“做中学”,使每一位学生收到最好的学习效果。采用讲授法讲解时,还要布置一些课堂或课后练习,避免光听不练,理论与实践脱节。例如介绍完递归函数的思想后,再布置编程题用递归函数实现将十进制整数转换成八、十六进制,这样既使用了编程技术又掌握了数制转换的方法,可谓一举两得。三种基本的程序结构、数组、函数等概念通常是通过案例教学法来讲解,在采用“案例教学”法教学时还要注重知识的脉络,讲清楚知识的结构和教学主线。期末应当布置课程大作业,例如编写学生信息管理系统,让学生将各章的知识融合在一起,体现链表、结构体、文件等章节知识的综合应用。指针是C语言的重点和难点。数组、指针、函数三者又是密切联系的。多种“分散跳跃式”的知识特别适合采用“任务驱动法”,设计一个任务,在解决任务的过程中综合运用数组、指针、函数等,使学生抓住用指针作函数参数,传递数组元素这一教学主线,就可以突破指针这一教学难点。慕课、微课程、翻转课程等在线课程模式,以及线上、线下结合的课程模式无疑将引发“学习的革命”,给高等教育人才培养和教学方式带来深刻变化。程序设计课程如何运用这一模式,改变教学方法,提高教学质量,需要更多的思考和实践。以“慕课”冲击为契机,加快大学教学、管理的根本变革,实现两者的融合才是更好的姿态。计算机技术更新极快,学生的自学能力才是最重要的能力,在程序设计的教学中不能只满足于教会学生编程技能,还要注重创新能力的培养,创新能力本质是提高学生创造性地分析、解决问题的能力。因此教师还要教给学生归纳总结、触类旁通的学习方法。例如,编程语言都有顺序、选择、循环三种基本程序结构,都有数据类型、运算符与表达式、数组、函数等概念;教会学生归纳和总结,在多门编程课程中触类旁通,将会使学生在将来的工作中立于不败之地。
六、结束语
在教学过程中教师要根据教学内容的实际需要采用灵活多样的教学方法,并与企业的实际应用结合,这样才能收到更好的教学效果。同时,教师还可以采用多元化立体教学方式,使得学生在理论、实践、课堂、课外和社会上得到全面体验。教师要注重从知识到技能的转换,加强实践环节的练习,多布置个性化、有创作性的上机作业,启发学生创新性思维,鼓励学生用不同方法解决实际问题,从而达到创新能力和编程实践能力的培养。
作者:丁海燕 单位:云南大学信息学院