数学课程中的算法知识 “集中显性教学”与“分散隐性渗透”相结合
2013-07-20张桂芳宋乃庆
张桂芳,宋乃庆
(1.西南大学 数学与统计学院,重庆 400715;2.广西教育学院 数学与计算机科学系,广西 南宁 530023)
现行的高中数学课程标准已经将算法纳入基础知识的范畴,同时也指出,“算法除作为本模块的内容之外,其思想方法应渗透在高中数学课程其它有关内容中,鼓励学生尽可能地运用算法解决相关问题.”[1]然而,课程标准并没有对算法概念做界定,它虽然明确提出了“渗透”算法知识和思想的宏观要求,但没有具体的行动指南或说明,算法知识和思想的“渗透”只能依靠教材编写人员和教师的自主发挥.虽然各版本的数学教材各自给出了算法概念,但一线教师还是存在不少的疑惑,如,哪些课程内容可以与算法相结合,怎么结合;算法知识的渗透与其它部分的教学内容、教学目标如何协调……[2]而落实算法知识在数学课程中的渗透、实现中小学数学课程中“算法”内容与思想的整体连贯协调、促进学生算法知识的持续发展,是一个亟待解决的现实课题.这里试图对此进行一些探讨.
1 算法的层次性
为了获得对算法概念的清晰认识,这里将从当前数学教材对算法的界定开始.
人教版高中数学必修3,用二元一次方程组求解步骤说明了算法的含义,并指出,“这些步骤就构成了解一般二元一次方程组的算法,我们可以根据这一算法编制计算机程序,让计算机来解二元一次方程组.”并且这样解释算法概念:古代算法指用阿拉伯数字进行算术运算的过程;在现代指可以用计算机来解决的某一类问题的明确的、有限的程序或步骤,执行完算法就可以解决问题或获得满意的近似解[3].这些界定表明:解一般二元一次方程组的数学运算步骤构成了一个算法,即数学算法,而将这些算法翻译为计算机可以执行的操作步骤,就成为计算机算法,编制出来的计算机程序只是算法的计算机语言描述;当人们应用数学来解决问题时,首先是建立数学算法,然后为了利用计算机来代替人完成其中的某些工作,才需要进一步根据数学算法来开发计算机算法.
北师版高中数学必修3[4],给出的算法的界定是:“在解决某些问题时,需要设计出一系列可操作或可计算的步骤,通过实施这些步骤来解决问题,而这些步骤称为解决这些问题的算法.”此外,还界定了算法思想:通过“设计出一系列可操作的步骤、以便按顺序执行这些步骤之后能完成任务”的途径来解决问题的思想,就称为程序化思想或者算法思想.此后,在算法一章的“小结”中又对算法概念做了限定:本章所指的算法基本上是能在计算机上实现的算法……现代算法的作用之一是使用计算机代替人完成某些工作,这是学习算法的重要原因之一.这些界说把算法看成了可以“机械执行”的、步骤有限的问题解决的程序.这套教材中的算法主要侧重于数学算法,但也注意尽量让学生了解将数学算法转化为计算机算法交给计算机执行的重要性.
从这两个版本教材对算法概念的界定来看,至少可以获得几点认识:
(1)算法是用以解决问题的数学操作步骤序列.它指向问题解决,且具有不同的层次,既包含各种基本运算的操作程序,又包含那些将基本运算组合而成的复杂运算序列,如,解二元一次方程组的算法当中就含有多种基本算术运算.
(2)算法本身具有不同的层次,人们总是先有数学算法,然后才将它翻译为计算机算法的.解决问题的数学操作步骤的描述称为数学算法,而那些用计算机能够识别的方式对数学模型及它所要处理的数据进行的描述看做计算机算法.
(3)数学算法是一个比计算机算法含义更广的概念.首先,数学算法可以通过手工操作、机器或器具操作[5]实现.计算机算法是数学算法的运行方式之一,也是最先进、最有前景的方式.其次,也许一些数学算法暂时还不能或者不容易转换为计算机算法.比如,中国古代数学中蕴涵了丰富的算法思想[6],但那时还没有计算机、更没有相对应的计算机算法.再次,针对某一个问题,数学算法可能远远早于计算机算法出现(如天气预报算法)……
(4)算法的设计,就是将解决问题的过程设计为可计算、操作的有限步骤序列的过程.
(5)算法思想就是指,通过建立一个有限步骤序列来逼近问题的解决的思想,主要体现于将解决问题的过程算法化(即组成算法的那一系列步骤或程序的设计和开发)中,实际上就是如何选择、排定各种数学运算解决问题的过程,即构造数学应用的过程.
由此可见,算法本质上是数学的应用,是用数学知识解决问题的步骤或程序;算法的概念具有丰富的层次性.
2 算法思想在数学课程内容中的广泛分布
从数学的起源来看,人类创造的数学大体可分为两种类型,一种是以欧几里得的《几何原本》为代表的西方数学,它以形式化、公理化、演绎推理为思想特色;另一种是以中国《九章算术》为代表的东方数学,它以模型化、算法化、归纳推理为思想特色.正是站在中国古代数学蕴涵的丰富算法思想的基础上,吴文俊先生开创了举世公认的机器证明的“吴方法”.算法充斥着数学科学本身:几何中有计算方法,算术和代数更有计算方法,分析中也有无穷小的计算方法,统计中有各种数据处理方法……可以说,有数学计算,就有算法.从数学本体看来,算法是数学内在规定的组成部分.数学为各门科学提供的解决问题的方法,其实就是一种算法,甚至有学者说“数学是一门算法科学”[7].算法的渗透几乎可以结合所有的数学领域来分散实现.
事实上,很多国家都肯定了算法初步知识和思想作为公民的常识和素养[1]的观点,并且将算法作为中小学数学课程的必修内容[8].如,荷兰的数学课程将非标准的算法纳入了教学目标体系,鼓励学生独立思考与创造多样性的算法,小学阶段要求学生在理解算法的基础上应用计算器解决计算问题,中学阶段则要求在多种算法中进行选择.法国则从初中就要逐步导出编程及算法的概念,高中就要求学生讨论数值问题与算法,并通过算法的教学训练帮助学生把数学实验和数学推理结合起来,培养学生严谨的素质.而德国巴伐利亚州的中学(9~10年级)也教学数学算法及其开发、以及将解决问题的算法阐述成计算机程序、简单数值过程等的内容.美国从小学开始渗透算法思想,要求6~8年级的学生能够建构和分析进行分数、小数、整数运算的算法;高中则要求学生创造出算法程式,并进行分析.韩国也在其数学课程内容中安排算法内容,有部分渗透,也有专门介绍.日本高中数学教材也对算法思想作了较系统的介绍.可见,算法可以分布在基础教育不同阶段的数学课程里,研究者不应该仅仅局限于高中阶段来渗透算法知识和思想,而要重视学生算法能力的连贯培养,将有关算法的内容,适时、适量地穿插在各个阶段的数学教学中、或者提炼出来、或者适时点拨、或者仅仅是有意识地“埋下种子”.从而使整个数学课程里的算法内容,得到连贯的体现,并促进学生在算法方面的连贯发展.
3 高中数学课程中的算法内容——集中显性教学与分散隐性渗透
从计算机科学领域看,“学习计算方法的目的是为了使用它……而从计算方法的计算公式到在计算机上实际运行,两者之间还有距离,这是数学能力与计算机应用技术能力之间的距离,也与计算机的运行环境和编程工具有关.”[9]因而,很多计算方法(计算数学)著作及教材,一般都是立足于如何填补从“计算公式”到“在计算机上实际运行”两者之间的距离,将自己的主要任务和内容定为:根据所要解决的问题选择、修改或创建某种计算公式,给出部分基本常用的计算公式的算法描述,并引导学习者编制相应的程序交由计算机运行以获得问题的解,或者对这些基本算法进行改编.因而,其课程内容的基本点是顺序、选择、循环3种逻辑结构;内容主体是各种基本计算公式的算法描述;难点主要体现为,如何在算法描述中简洁地用“循环”和“迭代”等计算机操作执行计算公式规定的计算步骤;体例主要是采用案例驱动形式.另一方面,通过分析现行高中数学课程标准[1]及一些版本的高中数学教材中对“算法初步”内容的规定,不难看出,“一些计算公式的算法描述”、“将算法翻译为某种语言程序”、“运行程序”,也正是高中数学课程中算法部分的内容主体.这不禁让人们有一种“中学数学课程中的算法内容就是计算数学的微缩简化模型”的感觉.
从上述关于计算方法(计算数学)课程学习目的的描述以及各种著作的内容结构,可以看出,计算数学的灵魂在于算法的设计和开发.设计算法实际上就是建立合适的数学算法,而这一环节的实现要求设计者必须具备高超的应用数学解决问题的能力.因而,为算法的设计和开发奠定相应的数学基础(即善于根据问题建立相应的数学运算序列),应该成为数学学科的任务,而不能期望其它学科代劳.从基础教育的奠基性、数学教育本身的价值来看,这种算法的奠基性知识,才是基础教育阶段的数学课程与信息技术课程,与属于计算机专业的计算数学课程相互区别和联系的地方,也是基础教育阶段的数学课程应该为学生将来的发展和社会生活所应提供的基础知识.而如果仅仅固守于当前中国高中数学课程中设置的算法内容,就会局限于算法本体的学习,这是不够的.
如上,基础教育数学课程中的算法内容应该以“算法设计及其开发的数学基础”为核心.而这种数学基础其实分布很广,它至少应该包含两个部分:
(1)算法的本体知识(如算法的概念、算法的描述、算法的实现等);
(2)算法的设计开发知识(主体是应用数学解决问题的知识).
对此,中国现行的高中数学课程标准的处理是:将算法内容纳入到普通高中数学课程的“双基”范围之内,和强调对于计算的教学要重在算法的把握,而非“繁琐的计算、人为技巧化的难题和过分强调细枝末节的内容”[1].这实际上包含了3个处理:
(1)对于算法的本体知识的处理,即采用设置独立章节专门进行集中显性教学的形式,这在数学课程必修3当中的“算法初步”部分已经落实了.
(2)对于算法的设计开发方面的知识,则需要通过诸如“强调对于计算的教学要重在算法的把握、摒弃繁琐的计算、人为技巧化的难题和过分强调细枝末节的内容”、“把算法融入到数学课程的各个相关部分,整合的基本原则是有利于学生认识数学的本质”……的方式来落实.实际上就是在应用各种数学知识解决问题的过程中分散隐性“渗透”算法的教学形式.这两种处理,前者主要是通过课程设置、教材编写来体现的,而后者则只能在课程实施过程中通过广大数学教师的实践来体现.
(3)算法教学需要遵循的基本原则应是——“促进学生认识数学的本质”、理解数学思维方式,而不是纯粹地学习一些算法的外在形象.这就勾勒了一幅“算法不应仅仅作为一个独立的知识内容,还应该渗透在其它相关部分”的立体画面,里面经纬分明,显隐配合.
4 义务教育数学课程中的算法内容——分散渗透为主
为了获得对算法知识在整个中小学数学课程中的全局认识,还需要考察算法在小学及初中阶段如何进行渗透的问题.
《义务教育课程标准实验教科书·小学数学·三年级下册·教师用书》(人教版)在第五单元中提出了这样的教学建议:把计算教学融合在解决实际问题的过程中,让学生通过解决实际问题学习计算方法;让学生主动探索经历计算方法的形成过程,促进学生理解计算过程与算理,体会计算的意义和作用;加强估算,鼓励算法多样化.这些教学建议,既强调了“加强估算”、“提倡算法多样化”的课程理念,又体现了“算法就是数学应用”的本质.再如,义务教育数学课程标准在第一学段与第二学段的数与代数内容标准中也都对“与他人交流各自算法”做了要求,意在让学生理解自已和他人的多种算法,从而选择较合理的基本算法(算法优化).在义务教育数学课程标准[10]附录中所提供的实例,也隐含了算法思想的渗透.如例31[10],课程标准建议引导学生运用尝试的办法探索规律,解决问题,并建议提供3种参考解决方法:(1)列表法;(2)增减法;(3)列二元一次方程组法.此外,诸如心算和估算(除法中的试商等)、多位数加减法的竖式算法、分数的加减法(先通分再加减)之类的教学内容中就已经天然地渗透着算法知识和思想.可见,在小学阶段,算法知识的渗透,其核心是在解决问题过程中实现计算方法的多样化,在训练学生的基本运算技能的同时逐步培养一般化的算法思想.
初中阶段,在人教版数学教材(七上)的一元一次方程一章,配有下图(图 1),以帮助学生借助框图体会反思的过程.再比如,义务教育数学课程标准在第三学段提供了教学实例“估计方程的解”(用二分法借助计算器进行)[10].这里的目的不是要求出方程的精确解,而是让学生通过解决问题初步了解求方程的数值解的算法,感受应用数学解决问题的算法思想.这就为将来形成(解方程的)算法概念奠定了感性基础.此外,中国义务教育数学课程标准提出的各个学段的“问题解决”课程目标,均有类似这样的描述:“从不同角度寻求分析问题和解决问题的方法的过程,体验解决问题方法的多样性,掌握分析问题和解决问题的一些基本方法”,“在与他人合作和交流过程中,能较好地理解他人的思考方法和结论”“能针对他人所提的问题进行反思,初步形成评价与反思的意识”.可见,在初中阶段渗透算法知识和思想的途径,就是让学生感受和经历解决问题的思考方法的多样化,并适时提升学生的认识.
图1 教材配图
5 中小学数学课程中“算法”内容与思想的整体协调
由上,学生进入高中学习专门的算法内容之前,就已经在很多课程内容中对算法知识有所感受和积累了.研究者不应忽略这些基本经验的存在.算法初步知识和思想作为公民的常识和素养之一,就不应在学生的数学发展过程中出现断裂和凭空突击的情形.因此,数学课程需要落实学生的算法素养的培养与学生数学发展的整体协调,需要从小学起重视算法知识和思想的连贯培养、渗透,需要注重调动学生已有的数学算法经验、注重算法的开发和应用的学习,以提高学生的逻辑思维能力.另一方面,由于在义务教育阶段,算法知识主要是隐含在数与代数、图形与几何、统计与概率、综合与实践这些领域的各种具体课程内容背后的,具有潜隐性,所以这一阶段的算法内容主要呈现为分散“渗透”的形式,体现为数学算法的开发、多样化;学生主要是感受和积累经验.至于算法的集中教学,则只有等到学生具备相应的数学基础和计算机知识基础、逻辑思维发展到一定的程度才可以进行.正因为如此,中国的数学课程标准及各版本数学教科书,都把算法的集中教学安排在高中阶段.总之,要实现中小学数学课程中的“算法”内容与思想的协调,就要两手都要抓:(1)高中数学课程中的算法内容适合采用集中显性教学与分散隐性渗透相结合的方式;(2)义务教育数学课程中的算法内容,宜采用分散渗透为主的形式.
6 各阶段算法知识的教学——从经验到理论知识
综上,由于算法是高中数学课程的核心概念和基本思想之一,其教学自然也应该遵循课程标准的“注重体现基本概念的来龙去脉”的要求,主要以解决问题的过程为载体来学习设计程序框图、体会算法思想、掌握算法初步知识、提高逻辑思维能力.初中阶段则主要是初步感受算法思想.小学的算法发展,主要应定位为:感性积累一些具体算法实例、发展对运算、数量关系的理解等,这其中需要教师点拨、铺垫,将潜隐的和基本的算法知识转换为学生可以感受的形式,融入学生的基本数学活动经验中去.如,运用相逆的运算、数量关系解决问题,进行数量比较(数学课程标准教学实例2[10])等.即,在义务教育阶段,算法知识与思想的渗透,最终可能需要落实在算法多样化和优化意识的培养上.但由于义务教育阶段算法知识的潜隐性,合理的教学方式可能主要是分散点拨、启发、提炼的形式.这样,从小学到高中,各阶段算法知识的教学就体现为“从经验到理论知识”的上升历程.
总之,数学课程除了需要在高中阶段专门集中教学算法知识并在其它相关知识中渗透算法思想,还需要从小学起重视算法思想的连贯培养,实现算法知识的显性教学与隐性渗透的结合.在高中集中显性教学算法知识的同时,数学课程需要具有让学生在不同学段中积累算法知识与经验,将各学段相互联系,促成学生持续发展的全局视野.这是把握算法知识在整个基础教育数学课程中连贯一致、螺旋上升、逐步提高的发展脉络,是落实学生算法知识与相关数学知识的整体、协调发展的需要.
[1]中华人民共和国教育部.普通高中数学课程标准(实验)[M].北京:人民教育出版社,2003.
[2]陈国芳.高中数学新课程中算法教学现状的调查与分析[J].数学教育学报,2006,15(4):65.
[3]普通高中课程标准实验教科书《数学3》(必修)[M].北京:人民教育出版社,2004.
[4]普通高中课程标准实验教科书《数学3》(必修)[M].北京:北京师范大学出版社,2004.
[5]徐斌艳.学生算法概念建构中的认知结构研究[M].上海:华东师范大学出版社,2003.
[6]吴文俊.数学机械化[M].北京:科学出版社,2003.
[7]郝一江.结构不是数学的本质[J].数学教育学报,2004,13(1):38.
[8]鲍建生,周超.数学学习的心理基础与过程[M].上海:上海教育出版社,2009.
[9]张韵华.数值计算方法和算法[M].北京:科学出版社,2000.
[10]中华人民共和国教育部.义务教育数学课程标准(2011年版)[M].北京:北京师范大学出版社,2012.