思维方法的迁移与程序设计教学
赵明阳
从中学信息技术学科知识的特点出发,结合中学生的心理特征可知,程序设计教学对学生计算思维的提升作用最为显著。程序设计课程在提高学生的逻辑思维能力和创造思维能力方面,有着独特的优势,但它有一定的学习难度,加上高考的影响和其他因素的制约,使得很多学生不愿意深入学习,进而很难达到掌握知识、发展智力的效果。因此有必要通过分析学生的心理特征,充分调动其内在潜力,从学生思维方法的迁移角度,进行分析研究。
● 从心理学观点剖析程序设计的教学
教学中让学生学习感到吃力、难以理解的知识可以分成兩类:一类是知识本身的难度较大,即与原有知识的梯度或跨度较大,如物理的力学、数学的排列组合等;一类是知识难度不大,但其与原有的知识系统联系甚少,学生不适应,如数学的平面解析几何、二进制等。程序设计教学即属于后者,在进行程序设计教学时,学生能听得懂,但当自己动手编程的时候会遇到很多问题,致使不少学生放弃学习,原因就是学生没有完成这类思维方法的迁移。
中学阶段是学生智力发展的关键时期,学生的抽象思维以经验型为主,逐渐向理论型转化。这种转化从属于认识规律,从量变到质变,从许多小的质变构成大的质变,这种思维水平由经验型向理论型转变的契机是借助于学生思维过程中的某种适应方法来实现的,笔者认为这种适应的方法就是一种迁移的结果。所以,在学习的初始阶段,每个学生都需要一段时间,下一番功夫来适应,这种适应即是完成思维方法的迁移。
有效的教学方法往往是归纳出有关问题的相同点和不同点,让学生深入认识和记忆。由于兴趣和记忆效率对事物的相同点和不同点是等同的,学生首先感兴趣和最容易记住的是事物截然相反的性质。利用此心理特点,可以分析一下解题过程:数理化等科目的题解与程序设计的前提都是对所用到的知识进行理解和掌握,这是共同点,数理化等科目题目的解题过程是抓住已知条件,发现题目的规律和特点,依据定理、公式,经过几步运算或推理,得出结果或结论;程序设计的过程是抓住已知条件,发现规律,建立数学模型,找到算法,画出流程图,编写程序,让计算机通过程序运行得出结果或结论。明显的差异在于编程是找出算法,这种算法,在很多情况下和数学习惯是不同的,所以,笔者认为在进行程序设计训练时,要给学生提供较多的感性材料,让学生观察、熟悉、记忆、想象,抓好学习基础,突破学习难点,掌握规律、方法,促进思维的转化。
● 实现思维迁移的几点体会
1.掌握事物的属性
学生在学习的时候很少能静下心来细细分析事物的属性,这就需要教师在教学中引导学生正确认知客观事物,并掌握事物的属性。例如,在程序设计的学习中,学生刚接触变量的时候,比较难理解它的属性,因为在数理化各科中,用字母代表某一概念、事物或某一数值,在题目中字母一旦被确定,就始终不变,即建立起一一对应的关系。而在学习程序设计的赋值语句中出现s=s+a或a=a+1等情况时,s和a的值是不断变化的,这就是教师在教学中要突破的重点难点,即加深学生对变量动态属性的理解和记忆。在教学中,教师可让学生进行一些多数据的练习,如a=a+b,b=b+a等类型,使学生逐步适应语句的特点,充分理解变量“变”的属性。
2.培养和激发学生学习的兴趣
学生刚开始学习程序设计时,对一切都感到很新鲜,教师要珍视这种好奇心,防止学生热心学习的劲头减弱和消失。鉴于学生学习数学的习惯,教师可以先找一些算法与数学方法相近的题目(学生对这类题目更感兴趣,所以更容易接受并掌握),减弱他们学习编程的畏惧心理,使其对编程有似曾相识之感,这样,不但能保持学生原有的兴趣,还能不断诱发他们新的学习兴趣。此类题目一方面可以结合数理化等教材习题,如初中几何的面积、高中几何的体积、物理的路程长度等,另一方面也可以选择与数学方法接近又带有一定兴趣的例题,范例如下。
例题:从一楼到二楼总共有16级台阶,每次上楼可以跨一级或二级台阶,计算从一楼到二楼共有多少种不同的走法?
数学方法:a1=1,a2=2,…,推导出通项公式an=an-1+an-2
数列为1,2,3,5,8……
在程序设计中则可以利用数组、迭代、递归等三种方法来解决。
计算机设计程序题目多数比较抽象,教师可联系实际,联系数理化知识进行讲授,让学生明白这种抽象是合理的、必须的,是符合数学习惯的。教师要启发学生从实际事物中找出规律,从具体的事物中推想合乎道理、合乎逻辑的算法,然后再上机检验。这种合乎思维规律的教学,对知识的理解和掌握、对学生学习兴趣的培养以及能力的发展都是极有好处的。
3.重点突破,逐步巩固
学生通过多年的数理化学习,已经形成较完整的思维习惯和解题方法。数理化的解题方法,如综合法、分析法、归纳法和反证法等,虽然方法各异,但其解题过程基本类似,都没有分支,没有循环,没有对中间结果的判断,每一步都是向着最终目标前进。
在程序设计教学中,需要学习程序的三种基本控制结构:顺序结构、分支结构和循环结构。顺序结构的执行过程是按照顺序执行,它和数学学科的思维习惯基本相同,学生容易接受和理解;分支结构中有一个判断框,根据判断框中的条件成立与否选择执行的分支;循环结构是封闭型的结构,循环的执行是在一定的条件下进行的,在执行有限次之后退出。分支结构、循环机构和学生的思维习惯不同,从顺序结构到分支和循环结构,是一个突变和升华。例如,在一个程序中如果出现3个独立的条件转移语句就可能出现8种(23=8)不同的执行路径,面对这么多种可能,学生普遍感到困难。对判断的选择,对何时返回循环体、何时退出循环,学生都不习惯,他们体会不到这种方式对程序的必要性,掌握不了分支和循环的思考方法,处于盲目和被动阶段,容易产生畏惧情绪,因此这部分内容是程序设计教学的突破点。当然,尽管程序设计与数学学科差异很大,但二者绝不是不相关,它们的数学模型都是一致的,这也是本文所谈的思维迁移能够实现的前提。
以解线性方程组为例,数学解题有多种形式,中学生常用的是加减消元法,编程常用的是高斯消元法。单独用笔解方程,加减消元法显然优越于高斯消元法,计算机之所以采用这种古老的方式,是因为这种方法程序更易于编写,计算机的运算速度快。数学采用加减消元法是利用人脑思维极易判断该方程系数关系选择先消去的元,而计算机没有思维,只能识别、判断和控制,因此,在程序设计的教学中,对程序设计的首要任务就是编制易读、易理解的程序,然后再优化。
4.培养发散思维
学生在学习了一系列的算法后,在解题过程中总会想着利用已知算法去套用,长此以往会形成思维的惰性。所以,教师一方面要引导学生对所学算法进行分析、归纳,让学生明白每种算法都有各自的特征与适用范围,而每道题也都有各自的特点,不能生搬硬套;另一方面,要提倡一题多解,激励学生对算法进行优化、创新,纠正惰性思维,使学生处于“愤”和“悱”之境,打破原有模式,尝试各种组合,激发学生的灵感和顿悟,启迪其发散思维。
例题:有n门课程,选修每一门课程都能得到一定的学分。但在选修课程时,必须先选修它的直接选修课,每一门课程最多有一门直接选修课程,如想要选修数据结构,必须先选修C语言,此时的C语言就是数据结构的直接选修课。问:对给定的n门课程、学分以及直接选修课程,怎样安排选课能达到最高的学分?
该题可以引导学生先从搜索的角度去思考,然后转换模型成树,再到二叉树,学生自然会发现其实可以用树形动态规划来解决这道题。所以,适时转换模型可以促进问题的深入,转换模型实际上是转换思维方式,也是发散性思维的一种体现。
5.注重概念教学
注重教材中的概念,这是必须坚持的,因为一定数量的相关概念、概念的性质、概念与概念之间关系所产生的定理、定律及其数量关系构成一个体系,学生只有不断学习,才能逐步理解,并掌握这个体系,直到完成这门学科的学习任务。相较于数理化学科,程序设计学习周期短,因此更要注重概念教学,教师绝不应该把精力放在几条语句的学习上,而要让学生理解和记忆教材所述的概念,掌握概念的内涵和外延,掌握概念之间的区别和联系,达到教材所规定的深度。
例如,在学习VB语言程序设计时,初学者常常会出现类似a+b=5的错误,究其原因,主要是概念混淆,是对表达式、變量的意义不理解和被学习习惯影响。所以,教师除了讲透概念之外,对如变量和数组的异同,对表达式和关系式的异同,对运算符和关系符的区别都要讲深、讲透。
以“求1+2+3+…+100的程序”为例,对程序分析如下:这是求100个数字的累加和,所以要设计一个计数器i、一个累加器s。因为计数器和累加器在以后会经常被用到,所以教师在分析程序时,应强调计数器和累加器,并且介绍其特点和功能以及在程序中的位置意义。凡需要应用或者有可能应用到计算机术语的地方要尽量用计算机专用语言,并力求让学生理解和掌握。本文所强调的注重概念教学,除对知识的理解、记忆之外,还通过若干概念及其相互关系让学生逐步在大脑中形成一个体系,从而实现思维的迁移。
程序设计教学难度相对较大,因此有必要加强对教学的研究,有必要加强横向交流,以提高教师的业务水平和教学效率,为学生将来的应用和深入学习打下良好的基础。