[ 摘要 ] :
在中学程序设计教学中,绝大多数的学生都觉得难学。笔者根据 J.Piaget 提出的建构主义理论 [1] ,融汇支架式教学( Scaffolding Instruction ) [2] 的思想同,创造了一种新的教学方法:框架填补法,并在不同的班和传统教学法对比教学,收到的效果大不一样。本文重点介绍的框架填补法不按传统的教材顺序,先从整体上让学生把握住程序的框架结构,再细化流程图,最终将自然语言转化为计算机语言,比较轻松地达到了大纲要求的教学目标。笔者将此法连续 3 年在不同年级十多个班的教学中进行了进一步的验证研究,并用“ t 检验”统计法对相关数据进行分析,证明了这种新的学习方式对于中学生编程学习有很大的帮助。
[ 关键词 ] :
编程建构主义、支架式教学、传统教学法、框架填补法、 t 检验
一、引言
(一)问题的提出
在教育部颁发的信息技术大纲中,要求中学生必须掌握一门计算机高级语言。但编程又是高中信息学中公认的难点。学生普遍反映学不懂,抵触情绪比较严重,甚至要求不纳入会考范围。
(二)解决问题的思路
在中学的教材中,学习的高级语言一般是 Pascal 。笔者参加过这种教材的三个版本的编写,觉得 Pascal 语言虽然相对于中学生来说比较难学,但如果教师能正确采用相应的教学方法,学习这门语言应该是不困难的。为此,作者经过在多年一线教学的经验积累,在以强调学生为主心、创造学习情景、让学生自主学习等原则下,创造了框架填补教学法。为了对比不同的效果,笔者选用了两个不同水平的班级:树人学校 2001 年入学的学生和重庆八中 2001 年入学的学生。树人学校的学生与普通中学水平相当,而八中学生水平是全市一流的。八中学生教学的方法是完全依据教材的进度及内容安排,称为传统教学法;在树人学校则采取框架填补法。将此两种方法对比教学后,觉得效果大不一样。随后的两年中,我根据实验个体性质进一步修改了该教学法,扩大了实验研究的对象,在总共 20 多个班中进行对比实验,并将测试数据经 t 检验,得到了非常显著的实验效果。
二、框架填补法
(一)理论依据
教育心理学的研究表明,学生在接受新知识或接受新技能培训时,如果有一个正确的、积极的心理准备 ( 求知欲 ) ,则其接收的效率将会高出被动接收效率的一至两倍。长期处于被动接受的状态还会产生压抑、厌倦、对抗、恐惧等情绪进入心理的误区,严重影响学习的效果。而中学生在编程学习的过程中,普遍表现出“厌学”、“难学”、“被动学”的现象。而出现这种现象的原因,主要是传统的编程教学模式设计以及在校大学生的学习模式为样本,在难度上进行了部分调整之后,按部就班地从最烦琐而且暂时无法应用的基本理论学起,让学生首先在心理上产生了一种抗拒的意识。但学生难以在开始阶段将离散的知识点系统地接受,等到开始了实际的编程练习时,早就将前面的知识忘记了,而且已经索然无味了。
要让学生能够学好编程,必须解决好几个关键问题:
培养学习的兴趣
创造学好编程的情景
变“老师灌”为“学生学”
改变现有传统的知识结构,创造新的目标框架
建构主义理论认为,“在学习过程中,要以学生为中心,在整个教学过程中要以教师为组织者、指导者、帮助者和促进者,利用情景、协作、会话等学习环境要素充分发挥学生的主动性、积极性和首创精神,最终达到使学生有效地实现对当前所学的知识的意义建构的目的”。 [3] 建构主义的教学方法比较多,其中,支架式教学( SI ) [2] 的特点非常适合中学信息学的编程教学。支架式教学要求为学生学习建构一种概念框架( CnceeptualFramework )。这种框架中的概念是为发展学习者对问题的进一步理解所需要的。为此,事先要把复杂的学习任务加以分解,以便于把学生的理解逐步引向深入。它与前苏联著名心理学家维果斯基的“最邻近发展区”理论是一脉相传。这个“最邻近发展区”中,学生的实际发展水平(第一个发展水平)就是他们有学好编程的想法,但是,烦琐的命令和语法让他们觉杂乱和烦琐,没法感知整个结构化程序设计的整体风格和结构。这时,老师就要指导他们达到潜在发展水平(第二个发展水平)之间的距离,即每个学生能够学好编程,但要在老师的帮助下从一个水平提升到另一个水平,这样不停地提高,真正使学生走在发展的前面。
为此,老师要设计“脚手架”,按学生目前水平和学习的主题,用“最邻近发展区”的要求建立框架,然后将学生引入问题情景。当进入了学习情景中后,学生会慢慢展现其独立探索的一面,他们会主动提出问题了,这时,老师要循序渐进地引导,同时指导他们协助学习。框架填补法正是在这种理念指导下,根据中学程序设计的特点而搭建框架,找到学生的“邻近发展区”,再发展到第二个发展水平,营造编程学习情景。
传统的编程学习是从复杂的语法格式开始,一步一步地“系统”地学习。但这种教学方法容易让学生一开始就陷入到复杂的的语法规则中,而且在学习这类知识时还不知道其有何用处、如何使用。因此,不少中学生直到学习到后面的顺序、分支、循环程序设计时才明白前面内容的意思。但是,大部分学生早在开始编程之前就已经丧失信心了。这种教学方法是“先细后粗”,让学生直到后面阶段才真正明白什么是程序。
框架填补法是支架式教学法在中学编程教学中的一种应用,它先从整体上让学生认识什么是程序,然后将每一个具体的程序(任务)用流程框架图画出,这只是一个“脚手架”,但足以让学生目的明确。接下来就是细化每一个框图,将每一个图分解成更加细小的任务。当任务小到一定程度时,便是一条不可再分解的语句了。到这个时候,学生便会比较轻松地接受这条语句。这种教学法不以具体的语法规则为教学重点,而是重在培养学生整体认识性,对于具体的语法规则就变成“任务驱动”的方式去学习了,很容易培养学生主动学习的能力。
(二)传统教学法的教学安排
传统教学法安全按照教学大纲要求,安排为 14 课时,学习的内容为:
◆计算机语言的分类( 1 课时)
◆ Pascal 语言的编辑界面( 1 课时)
◆ Pascal 语言的基本符号( 1 课时)
◆ Pascal 语言的程序格式( 1 课时)
◆标准函数和表达式( 1 课时)
◆输入输出语句( 1 课时)
◆顺序程序设计( 2 课时)
◆条件语句( 2 课时)
◆分支程序设计( 2 课时)
◆过程和函数( 2 课时)
笔者就按照这种教学设计,从最基本的内容一步一步讲下来。第一节课,学生学习计算机语言的分类时,由于介绍了大量的新东西,学习听得比较轻松,而且学习积极性高。在学习第二节课时,学生开始觉得比较空洞了。因为他们还不知道什么是程序就要进入编程界面去熟悉各种操作。第三节课就觉得很枯燥了,觉得好像在背很枯燥的英语单词,开始有人不听课了。从第四节课开始,学生满腔激情开始淡没,听得很吃力,又不知道记那么多的标准函数做什么,开始被动地接受东西了,反正教师讲什么就听什么,但不知道学了这些东西有什么用。到了第 7 节课左右,已经有 50% 左右的学生已经跟不上教师的进度,表现的状况是上机不能编写程序,上课听不懂。到了内容的末期, 60% 的学生完全听不懂教师讲的内容, 20% 的学生能听懂大部分,但不能编写程序。只有 20% 的学生能跟上教师的进度,在老师的帮助下能正确调试出程序。综合这个过程,将能跟上教学进度的学生比例曲线由下图表示:

(三)框架填补法的具体实现
笔者发现,不少学生在学完编程课程后连什么是程序都不知道。不少教师在讲授程序课时过多地沉溺于编写程序的规则上去了,一开始就让学生记忆很多符号和保留字,在编写程序时没有从整体上去把握思路,陷入到具体的语法中去了。于是,在树人学校的教学过程中,笔者没有按照大纲的顺序,而是以生活中的实例讲什么是程序,程序设计的思路,如何画流程图,如何将流程图细化,如何将自然语言转换成 Pascal 语言。到此为止,程序的源代码就出来了。
以这种方法,笔者的内容及课时安排如下:
什么是计算机语言,语言的分类( 1 课时,与传统教学法无异)
什么是程序,以生活中的事为例,让学生明白程序其实很简单。( 1 课时)
如,早晨起床的程序如下:
从床上醒来
穿衣
洗漱
吃早餐
收拾书包上学
马上有同学说第 2 、 3 、 4 步可以交换顺序。于是笔者告诉学生在编写程序时哪些步骤可以交换,哪些不能交换。学生记忆深刻。
用流程图来表示程序。( 2 课时)。在本课时里,不分顺序、分支以及循环三大章节的内容,全部纳在一起讲解。在这里,便开始搭框架了,是最粗略的框架,主要教学目的是让学生从整体上把握结构化程序设计思想。如:

笔者发现,经过这两节课后,将教材中的课后练习中较难的题让学生去完成流程图, 80% 左右的学生都能完成。这个结果让笔者倍感欣慰。
细化流程图( 2 课时)。
这一步很重要,主要让学生将粗略的流程图中的每一步细化,以适合程序设计的习惯。比如,“找出两个数中的最大数”就这样细化:

在这一步时,学生已经进入到了编程的情景中(虽然还没有编写代码,但他们的工作已经完成了编程过程中很重要的一个环节了),此时学生不会觉得这个过程费解,也就是说学生还保持着学习的兴趣。
将细化后的流程图转化为程序( 6 课时)
这一步的工作量最大,主要是将自然语言转化为计算机语言。比如,“给变量 A 读入一个数 5 ”就转化为“ A := 5 ;”。在这个程序上再将保留字、标准函数、输入输出语句教给学生,笔者发现出其的顺利,大部分同学可以借助教材进行语言转换了。这个过程中,教材只是作为查找语法及函数的资料。笔者当场在黑板上布置了一道作业题,大约 70% 的同学能够正确地完成,剩下的 30% 的同学或多或少地完成了部分,没有动不起笔的学生。而这道题,笔者在八中学生中测试的结果是仅 30% 左右的学生能写出程序。而更关键的是,树人学校的学生一直都没觉得学习编写程序是一件难事。
其实在进行这一步时,学生早就迫不及待地开始提问了:这个语句应该怎样完成?那个语句该怎么做?有些学生甚至自己在书上找答案了。这就已经变成主动要学了,到了这一步,老师讲述已经为辅了。
◆上机调试程序( 1 课时)。这一步其实在上一步就已经穿插进来了,学生只需记住几个常用的操作步骤就可以完成程序的编译。
扩展知识的讲解
在八中学生中,到最后一节课时,早就被“折磨”得痛苦不堪了,根本不敢扩展。而在树人学校,学生已经处于不同的高度了,笔者从结构化程序讲到面向对象程序设计,从 Pascal 讲到 VC ,从 J2EE 讲到 .NET ,让他们明白这些编程工具很多只是语法上的差异,关键是掌握编程的整体思想。
可以用下图来表示树人学校学生掌握知识水平的情况:

三、两种方法的对比
两种不同教学方法对比效果,由下表可见一斑:

四、框架填补法应用面的扩大研究
在上述两个不同学校的学生对比进行了实验后,我发现此法有相当的实用五实验之余的思考
由于改变了教学方法,不容质疑,框架填补法是帮助学生学习程序设计的好方法。通过这次成功的探索,我感觉在以后的教学中,除了这种教学方法的具体过程外,还有以下值得借鉴的地方:
1 要敢于打破教材的束缚,寻找最适合学生认知特点的教学方法。
2 在教学内容的体系上合理安排,让学生能够系统地、连贯地学习知识,有利于学生循序渐进地学习。
3 在某些知识点的教学上,应该让学生先从整体上把握全局思想,再具体到每一个知识点,让学生思维清晰。
4 兴趣是最好的老师,让学生对所学的知识保持永恒的兴趣,学习效率会大增。
结束语
框架填补法是在建构主义理论中支架式教学法的一种应用,它创立了学习编程的情景。学生在编写一个程序的过程中,先是明确了问题,搭好了框架,然后带着问题去查书,去找那些语法规则,然后相互讨论,最终以多种形式编写好程序。在教学的过程中,我发现实验班的学生往往会主动问问题,一般情况下我是引导方向,尽量让他们自己完成,其学习的主体性体现得比较突出。而对比班的学生几乎从不提问,主要原因是提不出问题。
两种方法的教学效果相差非常明显,但为什么现在的教材不改变教学模式呢?原因可能是这样: Pascal 语言一直都是大学的教材,很多年来大学教材都是按照最传统的模式编写,这对于大学生来说能够接受,其矛盾还不是很突出。后来将 Pascal 引入中学后,习惯上的模式难以改变,同时也为了追求“系统”的编写模式,所以给中学教学带来了很大的麻烦。笔者在框架填补法中很少用到教材,也没有刻意去区分顺序、分支、循环程序设计之间的差别,先给学生建立一个编写程序的“思想”,再让这个“思想”逐步成为具体的程序。
[ 参考文献 ] :
[1]Divid Jonassenetal. Constructivism and computer-mediated communication in Distance Education, The American Journal of Distance Education Vol.No.2,1995
[2]Divid Griffiths, Environmental Challenges: Making a Difference in the Classroom, Proceeding of CAL97
[3] 张建伟、陈琦 . “从认知主义到建构主义”,北京师范大学学报(社会科学版), 1996 年第 4 期