归于算法,始于算理

冯友梅

天津师范大学教育学部副教授,博士,硕士生导师。主要研究方向为信息科技课程与教学、思维可视化理论与实践。近年来围绕以上两个研究方向在《电化教育研究》《中国电化教育》《现代教育技术》等期刊上发表论文20余篇,主持全国教科规划教育部重点项目等省部级课题四项,主编及参编教材多部,多次被评为全国优秀培训教师。

魏宁

北京市东城区教育科学研究院研修员,《中国信息技术教育》杂志特约撰稿人/专栏作者。

归于算法——发展学生的计算思维应该“教什么”?

魏宁:冯教授您好,很高兴有机会和您聊一聊有关计算思维的话题。作为学科核心素养,近年来,计算思维受到了广大信息科技教师的普遍关注,如何培养、发展学生的计算思维,已经成为信息科技课程教学的重要任务,您对此有何看法?

冯友梅:的确,计算思维是重要的学科核心素养,称得上是课程的核心教学目标。特别是在当前计算思维的培养已经常态化的情况下,甚至要求每节课都有自己明确的计算思维培养目标。这就需要我们思考:应该如何通过课程内容的学习系统、有计划地培养、发展学生的计算思维?

在当前的教学实践中,存在这样一种现象,就是每当提到计算思维的培养,所有人都觉得非常重要,但一说到具体怎么做,又会感觉到计算思维有点“虚”,感觉就像飘在空中,很难落地,不易找到一个具体的解决方案。

较为普遍的一种认识和做法是:在教学过程中让学生多经历问题解决的过程,在这个过程中去培养计算思维。例如,把计算思维从思维过程的角度拆分成若干要素——抽象、分解、建模等,让学生通过抽象、分解、建模等一系列思维活动达成对计算思维的培养。

但这样做存在的问题是,无法把计算思维拆分到很细的粒度,做不到每节课都有明确的计算思维培养目标。其结果就是老师们虽然知道每节课的教学都是面向计算思维的,但又说不清楚这节课为计算思维的发展做出了什么具体的贡献,也无法形成一个计算思维培养的系统的、有规划的教学体系。

魏宁:因此,需要换一个角度去思考?

冯友梅:计算思维的培养属于思维教学,多年来,我们一直是把思维教学和知识教学拆分成两条线来进行的。但在教学实践中会观察到,如果一个学生对知识的掌握能够系统、深入,达到深度学习的层次,他的思维必然处于高水平。从这个角度来看,就需要反思,将思维教学和知识教学分开是否合理呢?

事实上,教学中知识与思维分离这一假设,源自认知心理学中关于学习核心机制中的“信息加工”隐喻,并且是通过与计算机科学简单类比得出的。它把学习解释为一个程序加工的过程,这个时候程序本身就是思维过程,而内容与过程则是割裂的。

相比之下,皮亚杰的发生认识论所揭示的“思维过程和思维内容是本质上不可分割的统一整体”这一观点显然更为合理,也就是说,在思维培养的过程中,思维和知识,即思维过程和思维内容是不能分开或者说不能截然分开的。以此作为核心理论依据,我们就可以把计算思维的培养归结为特定的知识结构的培养。这就是我们所说的“面向知识的教学”,当然,在这里,从面向思维的教学“回归”到面向知识的教学,并不是一种简单的回归,而是一种哲学上的“否定之否定”。

原来的知识教学,大家总会诟病说“有知识无能力”“有知识无智慧”,因为它更多的是一种面向知识点的教学,教的是一个个散点,缺乏一种知识结构。因此,对于计算思维的教学,就要想办法把它转换成面向特定知识结构的教学,最终实现知识结构和思维结构的内在统一,从而发展学生的计算思维。

同时,还要关注知识结构中知识点与知识点之间的关联,让每节课的知识点都能融入已有的知识结构中,最后形成复杂、整体的知识结构,这样才能与高水平的思维和智慧相匹配。

魏宁:从这个角度出发,您认为能够支撑计算思维发展的知识结构是什么样的?

冯友梅:我觉得可以用一个二维描述框架来说明,它包括计算概念和计算策略两个维度。我稍微解释一下:如果把信息科技学科的所有学科对象的集合定义为“信息科技世界”,从这个世界自身的角度看,处于支撑地位的知识就包括了信息科技世界内部的各种对象及其属性的知识、各类信息系统运行过程及其控制机制的知识,而从人与信息科技世界关系的角度看,则包括了各种实践过程及其目标的知识。所谓的策略性知识体系就“镶嵌”于以上各类知识之中。我们可以把策略性知识体系称为“计算策略”,这是知识结构中的核心,而把所有处于支撑地位的知识称为“计算概念”。这两类知识作为静态知识的基础,支持动态计算思维过程的运转,达成动态统一,这就是计算思维描述框架中两个维度的由来(如下页图)。

可以预见的是,以上策略性知识体系,也就是支撑计算思维发展的知识结构一旦在学生头脑中形成,就可以向其他学科和生活领域迁移,从而表现出高水平的计算思维。

魏宁:具体的计算概念和计算策略该如何提取呢?

冯友梅:计算概念和计算策略可以采取自上而下与自下而上相结合的方式来提取。

首先,从基础教育阶段的上游学科——计算机科学与技术学科中寻找依据和线索。其实,在高等教育领域,自20世纪90年代起就开始追问:“作为一门学科,计算机科学与技术应该让学生了解哪些富有智慧的核心思想?”“计算机科学与技术学科中具有共同、本质特征的内容是什么?”经过多年的提炼,目前较为公认的学科核心概念包括算法、程序、硬件、软件、效率、安全性等,学科核心知识领域包括离散结构、程序设计基础、算法和复杂性、操作系统、网络计算、图形学和可视化计算、信息系统、软件工程等,学科核心方法包括分解、封装、模块化、递归、迭代、折衷、重用等。

上述的计算机科学与技术学科的核心概念、核心知识领域就是提取计算概念维度核心要素的重要依据,而核心方法则是提取计算策略维度核心要素的重要依据。

其次,还要以基础教育阶段信息科技学科的基本理念和学生特点为依据,将上游学科核心知识领域、核心概念和方法做取舍、调整后向下映射,最终形成计算概念和计算策略维度的核心要素集合。

魏宁:最终的核心要素包含什么?

冯友梅:作为支撑计算思维发展的知识结构的核心,计算策略维度包含13个核心要素——分治、减治、变治、封装、重用、可视化、迭代、统筹、折衷、贪心、蛮干、回溯、动态规划(如下页表)。这些策略在信息科技课程中都可以找到相应的实例,如“信息系统自顶向下的开发过程”“网络体系结构”“递归算法”中包含了分治策略,“折半查找算法”“快速排序算法”中包含了减治策略,“蒙特卡洛算法”中包含了变治策略,等等。

计算概念是计算策略的支撑,大致包括对象与属性、过程与控制、目标与实践三个维度。

这样以计算策略、计算概念两个维度及其核心要素构成计算思维二维描述框架,将有助于将计算思维的培养落到实处。

魏宁:以上您为我们呈现了发展学生计算思维的知识结构—— 一个包含计算概念和计算策略的二维描述框架。通过这些核心要素的分解、渗透,就能解决发展计算思维应该“教什么”的问题,同时让每节课的教学目标落在实处。

冯友梅:这也就是针对计算思维培养和发展的一个核心观点——将信息科技学科的知识结构还原为计算方法和策略,也就是我们常说的算法,以解决发展学生计算思维应该“教什么”的问题,我把它称作“归于算法”。

魏宁:它是如何落实到每一节课上的呢?

冯友梅:通俗地说就叫以点带面,通过这种形式,让每一节课都能有明确的计算思维培养目标。如果我们形成了知识意义上的计算思维,也就是二维描述框架里面的各个核心要素,并且这些核心要素又可以一层一层细分,那么我们就能够让每一节课都有明确的计算思维培养要素,进而对整体的面向计算思维培养的信息科技教学进行系统的、精确化的教学设计。

始于算理——发展学生的计算思维应该“怎么教”?

魏宁:冯教授,前面我们通过对支撑计算思维发展的知识结构的探讨,明晰了这一结构中的计算概念、计算策略及其核心要素,进而提出了发展计算思维应该教什么——“归于算法”。那接下来的问题就是,在课堂上,学生怎样才能掌握这些核心要素?教师又该“如何教”呢?

冯友梅:是的,我们刚才提到了一个核心观点——培养和发展计算思维需要将信息科技学科的知识结构还原为算法,其中最为核心的是形成计算策略维度的13个核心要素,这样就解决了发展学生计算思维“教什么”的问题,接下来的问题就是,算法类的知识、策略该“如何教”?

要想弄清楚这个问题,首先要明确算法属于一种什么类型的知识。我们不妨换一个角度来理解这个问题,这次信息科技课程的确立,一个重要的特征就是课程名称中的“科”字,在课程理念中,也强调了“体现‘科’‘技’并重”,即科学原理和实践应用并重。那么,信息科技课程中的“科”与物理、化学等科学课程有何区别呢?

魏宁:很多老师会期待,信息科技课程的确立,能让课程增加科学的“味道”,更多地向物理、化学等科学类课程靠拢。

冯友梅:是这样的,但如果仔细观察的话,就会发现,信息科技课程中的科学原理与物理、化学等科学课程中的科学原理,在本质上是不同的。

我举一个例子,直观地看,信息科技课程中的互联网基本原理与生物课程中的光合作用原理都属于科学原理。但科学类课程中的科学原理源自自然世界,是自然世界中存在的自发性规律。而信息科技学科本质上属于技术学科,它的使命是改造自然世界。从严格意义上说,信息科技课程中存在的是技术原理,而不是科学原理,它针对的是人工自然对象,从源头或本质上来说就是问题解决方案,也就是算法。

所以,要想在信息科技课程中去探寻科学原理,并不是向科学课程去靠拢,而是不局限于技术的表层功能,把表层功能的傻瓜化“面纱”撕掉,深入到更底层去关注技术的内部结构以及运行机理,看看是如何实现这些功能的。从培养和发展学生计算思维的角度考虑,也是一样的道理,如果我们只关注技术的表层功能,以及如何使用它的话,将很难理解计算策略是如何发挥作用的,很难为计算思维的发展提供有力的支撑。

但是,技术的表层功能和底层的算法,往往是一个互补的过程。表层越“傻瓜”,它的底层的运行机理越复杂,其中蕴含的方法和策略也更多,技术的智慧就体现在这里。

魏宁:也就是说,对于信息科技课程来说,这些技术底层的算法就是它的“科学原理”。那么,我们能否借鉴科学类课程中科学原理的教学流程来教算法呢?

冯友梅:这个问题非常重要,我认为不能。我们知道,在科学类课程中,科学原理通常依照“现象感知—原理理解(探究)—应用迁移”这一教学流程展开。这是因为科学知识是人类认识世界的成果,科学原理是它的重要组成部分,在上述教学流程中,学生可以把具体的科学现象和抽象的科学原理关联起来,实现科学原理的内化,也可以通过自主探究,经历科学原理的发现过程,来习得科学原理。

但信息科技课程中的科学原理,也就是算法,它在本质上是人类改造世界的成果,也就是问题解决方案。试想,我们如果采用科学类课程的教学流程,会出现什么结果呢?我们以互联网基本原理为例,多半会是这样一个过程:首先让学生感受生活中的互联网应用场景,引导学生思考它的内部原理,再通过类比、动画等方式让学生理解这一原理,最后用掌握的原理解释相关现象或解决相关问题。但问题是,在以上过程中,学生经历的是对“互联网基本原理”的认识,而没有经历“互联网基本原理”的创造过程,他们很难理解互联网中的每一层是做什么的、如何开展协作,更难领会到计算策略的核心要素——分治、封装、统筹等。毕竟,学生所习得的是作为表象的科学原理,而不是作为本质的问题解决方案。简言之,如果照搬科学类课程中的科学原理教学过程,学生将很难真正理解信息科技课程中的科学原理——算法,也就难以使计算思维到有效发展。

魏宁:那么,应该通过什么样的教学方法,才能让学生通过对信息科技课程中科学原理也就是算法的学习,更好地理解其中的计算策略呢?

经典小说推荐

杂志订阅