[摘要]本文介绍了程序设计课程逆向教学法的基本含义与主要特征,并对逆向教学实践活动进行了实例分析,最后探讨了逆向教学法需要注意的几个问题,主要是要安排足够的实践教学时间,加强“教”与“学”的互动,注意逆向教学与顺序教学相结合。
[关键词]程序设计课程;逆向教学;教学策略
在理工科的课程教学中,一般都是按照定义、概念、举例、习题这样的模式进行教学,而这样的教学模式给人一种感觉:要想学好这门课就需要记住许多的定义、概念、命令,而且非常抽象、深奥、难以理解。
程序设计课程实际上是一门实践性很强的课程,学习这门课程的目的是什么?通俗的说,就是要学会编写程序,应用实际工作中,而不是停留于理论。要会写程序单凭记住定义、概念、命令是远远不够的,还得要通过反复的练习、实践,才能掌握程序设计的要点、技巧,使编写的程序符合工程要求。
一、程序设计课程逆向教学法的提出
本文提出的程序设计课程的逆向教学法正是基于在实践中掌握程序设计理论、编程技巧这一想法,笔者在实际教学中进行了一些探索。
逆向教学是一种启发式思维的教学方法,它有悖于通常人们按顺向思维考虑问题的习惯,然而正是这一特点,使得许多靠顺向不能或是难以解决的问题迎刃而解,就如数学证明中的反证法。而一些顺向方法虽能解决的问题,在逆向方法的参与下,过程可以较大简化,效率可以明显提高,并进一步深化对问题的认识,提高学生学习的兴趣。例如,我们在讲数学课时,通常先向学生讲解一些数学概念或定义,再进行概念或定义的解释,然后举例加深对概念或定义的理解,最后通过做一些习题使所学知识得到巩固,这样一个数学概念的课程就告一段落。并不是所有的课程非得遵守这样的程式去教学,对于程序设计这样的实践性很强的课程,笔者认为可以从实际出发,先尝试从实践中寻找知识点,这样能更加直观地让学生知道,程序中所包含的概念、定义等知识和一些规律、技巧等。通过逆向教学,让学生一开始就摆脱固有程式的束缚,在实践中明白需要学习哪些知识、掌握知识点在实践中的应用规律,理清学习这些知识的目的和思路。然后让学生再回到理论上来,这样对理论知识就不会感到陌生、抽象,而且建立了一条理论与实践的纽带,对理论的印象更加深刻。
二、逆向教学探索实例
在以往的教学中,一些章节按顺向教学的方法,先进行理论知识的讲解,再进行实践教学,学生普遍反映非常抽象、难学。而按逆向教学法进行教学,抽象的概念就变得具体了,学习这些概念的思路就清晰了。在C语言程序设计课程中指针[1]这一章节相对来讲学习难度较大,在这一章节笔者对逆向教学法进行了实践应用和探索。
1、在教学中,按先易后难的顺序设计教学环节
为了让学生掌握“初始指针变量”与“用赋值表达式给指针变量赋值”的概念[2]及在表示方法上的区别,我们不是先讲概念、性质或特点,而是先让学生编写几个简单的程序,如:“输入任意两个数,按从大到小的顺序输出(使用指针变量)”,学生在编程的过程中,通过简单的应用,对涉及的概念、语法等有一定的了解,部分学生能掌握这些基本概念,并明确它的用法。通过实践发现学生存在概念混淆等共性问题,再进行作如下讲解:
语句“int x,*p=&x;”与“int x,*p;p=&x;”是等价[2]的。它们都定义x是int类型变量,定义变量p为指向int型数据的指针变量,前者初始化使p指向x,后者通过赋值操作使p指向x。但“int x,*p;*p=&x;”中的赋值语句是错误的。原因是把定义语句“int *p=&x”与赋值语句“*p=&x”相混淆了。
学生因为有了先前的实践环节,有针对性地听讲解分析,效果明显,讲解之后,学生基本掌握了这一知识。
2、针对抽象、易混淆的概念及关键的知识点按先进行程序实践验证的方法设计教学
“指针交换”和“指针所指变量值的交换”是指针学习过程中较抽象、易混淆的概念,又是指针使用的关键知识点。我们先让学生对两个类似的程序进行调试。
通过让学生对这些程序的调试、修改、运行及对所调程序不同结果的对比,使学生建立起指针交换的概念,对指针的性质有一个基本的轮廓,了解指针的基本用法,较好地掌握这些较抽象难懂的概念,为进一步的编程作好铺垫。同时我们在程序调试过程中设计了与学生互动环节,在调试前提醒学生调试程序所涉及的概念、所要掌握的知识点,对调试过程中出现的问题及时答疑,并对共性的问题加以分析。经对这一知识点考核情况分析,效果较好。
三、逆向教学实践效果检验
为探索逆向教学方法在实际教学中的效果,以便改进教学设计,我们向学生征求意见。学生反映该教学方法使他们对课程具有更好的感性认识,没有感觉枯燥,学习兴趣有所增强。这样的教学需要学生在每一个实践环节之前都要明确环节学习目标,通过实践发现自己不懂的或难以掌握的概念、定义、编程方法等,然后回到课本理论体系中,教师再系统地梳理有关章节,使学生对程序设计课程建立系统的概念,针对课程的难点、易混淆的知识点加以辅导,使需要掌握的理论知识得到加深。通过先实践的方法,使学生自主学习的能力得到培养。
在指针章节的教学结束后,通过对该章节内容进行测试,学生掌握知识点的情况各有不同,但从学生的综合成绩来看,有80%以上的学生对所学内容基本掌握。与以往教学情况相比,学生对所要掌握的概念、语法等知识更加清晰。
在C语言程序设计课程教学结束后,通过程序设计实战演练,学生的综合编程能力与以往相比有明显提高。采用顺序教学法往往会出现这样的情况:就是学生学完课程内容后,虽然对概念、定义、语法、编程有一定的了解和掌握,但要编程还是有较大的难度,一些学生在编程时无从着手。而逆向教学法的优点还体现在:在平时的实践教学环节中就已建立起综合应用编程所涉及的知识、技巧的概念。编程时更容易进入状态,其思路也更清晰。
四、逆向教学需要注意的几个方面
1、要安排足够的实践教学时间
由于逆向教学更注重实践教学,在课程安排时,应将更多的时间安排给实践环节,使学生有充分的实践时间,通过实践,明确编程所涉及的概念、语法等,培养学生通过自学、查阅资料等方式了解或掌握这些知识。在此基础上,进行系统的理论教学,梳理相关章节知识。
2、加强“教”与“学”的互动
基于逆向教学法的重点是实践,在这一重要环节中,不单纯是让学生自己动手编程、学习相关的理论,考虑到老师的教学时间是有限的,在有限的时间里,让学生少走弯路,提高学习效率,在教学设计中要注意到教学环节的互动性,加强对学生实践环节的指导,如:在操作实践中,教师在课前要提出下一实践环节涉及到的知识点、操作过程重点要掌握的内容、注意事项等。过程中,对学生提出的问题除答疑外,教师要将学生提出的问题作好记录,对普遍存在的共性问题进行集中讲解。对个性问题采取个别辅导。
3、逆向教学与顺序教学相结合
在程序设计课程的教学中,单纯靠一种方法进行教学达不到好的教学效果。一些记忆性的、易于接受的内容宜采用顺向教学方法,一些较抽象、难掌握的内容一般宜采用逆向教学。逆向教学中,可以采用部分内容逆向教学方式,也可以采用整个章节逆向教学。在整个程序设计课程的教学过程中灵活进行教学设计,以达到提高教学效果的目的。
教学方法的创新,是教学改革永恒的主题,程序设计课程的教学方法需要我们不断地探索,合理运用逆向教学法不但有助于优化课堂教学结构、提高教学效率、突破重难点、深化对教学内容的认识,更重要的是它能很好地培养学生的“逆向思维”能力、探究式的学习方式,更好地做到理论联系实际,从而提高综合应用能力。实践证明,逆向教学法在程序设计课程教学中的应用达到了提高教学效果、激发学生学习积极性的目的,然而这种教学方法的应用对教师在教学方法灵活运用、教学设计、教学互动方面提出了更高的要求。
[参考文献]
[1]谭浩强.C程序设计[M].北京:清华大学出版社,2003.
[2]赵建锋,何朝阳.C语言程序设计[M].北京:北京大学出版社,2006.
[作者简介]
郭伟青,硕士,浙江工业大学之江学院讲师,研究方向:计算机图形学、计算机信息安全、计算机基础教学