面向三种典型程序语言的中小学计算思维课堂设计研究

2018-12-18 08:59方海光汪时冲张鸽刘嘉琪
中小学信息技术教育 2018年11期
关键词:编程技术编程算法

方海光 汪时冲 张鸽 刘嘉琪

当前,在中小学信息技术课的教学中,教师主要倾向于对计算机基本操作以及常用软件的讲解,课堂教学枯燥乏味,学习者的学习积极性也不高。相对古板的教学模式以及陈旧的教材,也影响了信息技术课程的教学效果。

编程教育可以补充当前中小学信息技术课程的不足,满足不同学生的兴趣需求。同时,编程在对学生计算思维的培养方面有着优势,一方面编程要求用计算机解决问题,另一方面编程有助于培养学生“学会学习”的能力。特别是近些年我国中小学呈现出三种典型程序语言的教学普及化。其中,Scratch 是一种儿童可以创造性地设计出属于自己的作品的程序。[1]App Inventor是快速开发移动应用的设计工具,它通过积木式的堆叠法来完成Android程序。教育者可以利用App Inventor的教育功能和代码块拼接编程的特点,并通过拖曳积木的方式编写属于自己的应用。[2]Python 语言是一种面向对象、直译式计算机程序设计语言。同时Python 是开源的语言,具有丰富和强大的类库,同时具有优良的可扩展性和平台可移植性。[3]

相关研究

有研究指出,结合我国学生发展核心素养,计算思维是指能够采用计算机领域的学科方法界定问题、抽象特征、建立结构模型、合理组织数据;通过判断、分析与综合各种信息资源,运用合理的算法形成解决问题的方案;总结利用计算机解决问题的过程与方法,并迁移到与之相关的其他问题解决过程中。国际教育技术协会(ISTE)、美国计算机科学教师协会(CSTA),以及来自高等教育、产业界和中小学教育的专家提出关于计算思维的操作定义,认为计算思维是一种问题解决的过程。包括(但不限于)以下几点:(1)按照能够方便使用计算机和相关工具解决问题的方式表述问题;(2)按逻辑组织和分析数据;(3)利用抽象的方法表示数据,例如模型和模拟;(4)通过算法的思想(一系列有序的步骤)生成自动化的解决方案;(5)通过识别、分析和实施各种可能的解决方案,以实现最有效的步骤与资源的组合;(6)概括该问题的解决过程,并迁移到其他相关问题中。[4]

Scratch、App Inventor、Python三种典型程序语言存在很多的差异性,具体包括如下三个方面。

(1)抽象能力要求层次不同。Scratch与App Inventor作为“块”语言,使用积木式编程方式,对于学生的抽象能力要求较低,这符合小学生和初中生的思维方式。其中,Scratch对于学生的抽象能力要求最低,几岁的儿童知道模块的功能也可以实现简单的编程。App Inventor一般与手机程序联系在一起,这要求学生对于多媒体界面以及通信连接要有所了解,对于学生的抽象能力要求更进一步。Python虽然语法较为简单,但属于面向对象的语言,仍然有继承、重载、派生等概念,对于学生的抽象能力要求虽然达不到C++语言等高级语言的层面,但相对于Scratch和App Inventor已经提升了一个高度。

(2)逻辑组织和分析数据要求不同。在分析一个问题的时候,Scratch需要的逻辑组织要求最低,体现在模块的明确性,每一个模块的功能都很明确,与此同时分析一个问题时,需要何等数据直接输入在模块中即可。App Inventor主要是页面设计,如设计一个呼叫功能的安卓应用,学生需要清楚地整理出在手机上此功能需要哪些按钮,按钮需要什么模块,虽然同样是模块化语言,但比Scratch要求的逻辑组织更进一步。Python作为高级语言,对于问题的逻辑组织要求更高,对于任何一个问题的分析,如何转化为程序语言,使用哪个模块库去实现是需要较高的积累以及逻辑要求。

(3)设计算法的要求不同。对于学习Scratch和APP Inventor的学生而言,学生有些情况下是凭自己的兴趣去设计一个作品,学生并不知道什么是算法,但是学生可以在教师的引导下写出做作品的步骤,潜在地训练其对于分解问题以及设计算法的能力。对學习Python的学生而言,算法是这门语言的核心,学生需要掌握一些常见的算法,如汉诺塔算法、背包问题、贪心算法,这些算法本身就涉及数学基础,对于小学生和初中生比较难以理解。

编程技术支持的计算思维课堂模型分析

1.编程技术培养计算思维的需求分析

虽然其他学科也可以培养计算思维,但是编程技术对于计算思维的培养是有其独特的优势的。编程技术作为必须在计算机上实现的语言,本身就是人们用计算机去解决问题的一种技术手段,不论何种程序语言,都会涉及算法。

用编程技术去培养计算思维,首先需要确定学生的阶段,7岁儿童和17岁少年的思维层次是不一样的,适合的程序语言也不相同。根据问题的逻辑递进会选择不同的程序语言,对于计算思维的侧重点也不相同。本研究对于计算思维进行细分,考虑到学生的年龄以及认知程度的差异,对三种典型语言的适用范围进行了评价。如前表所示。

计算思维内化在编程技术应用过程中,而计算思维并不是程序化的,要将它概念化,让计算思维成为思考问题的一种方式。让编程成为解决其他学科问题的一种手段,这是开展编程教育的意义,也是信息技术学科体现自身价值的重要环节。

2.编程技术支持计算思维的课堂要素分析

计算思维的本质是抽象与自动化,其主要体现在形式化、模型化、自动化和系统化四个方面。编程本身是抽象的,形式化、模型化的最核心要求便是抽象分析问题。在编程之前对于编程对象以及编程的流程进行抽象有利于更快捷地编写出程序,这个前期准备工作就是计算思维的锻炼。程序化和系统化方面,不论是块语言还是面向对象、面向过程的语言,编程的循环、条件控制或者迭代方面便是程序化的体现。块语言对于积木的整合,面向对象的语言对于类的整合是系统化的体现。

抽象与自动化可以形成一个固定流程,如提出问题、抽象描述问题、分解问题、编程解决问题、问题的评估、总结等。

程序语言在中小学不同阶段有区别,计算思维的培养方面也会有区别,中间的流程可以大致一样但是也会有不同的侧重点。如初级阶段对于提出问题这方面可能要求更高,中级阶段可能偏向于抽象描述问题,高级阶段可能侧重于分解问题或者优化算法,同一流程在教学过程中也会有不同的创新因素。

3.编程技术支持计算思维的课堂模型

基于之前的需求分析、要素构成的分析,可以构建如下编程技术支持计算思维的课堂模型。

(1)编程技术从语言本身层次分为应用语言、高级语言、汇编语言和机器指令,在学生年龄段上分为小学、初中和高中。

(2)不同阶段学生的抽象能力要求不同,所以在教学过程中问题逻辑和教学侧重点不同,培养的计算思维不一样。不同语言的抽象能力不一样,越低级的语言对于学生的抽象能力要求越高,考虑到中小学生日常的学习压力,所以一般选择应用语言与高级语言。

(3)编程技术培养计算思维有一个基础的流程,计算思维作为使用计算机解决问题的一种思维模式,一般是提出问题、抽象描述问题、设计算法、编程解决的过程,之后会有对算法的评估,以找出最优的算法,最后是课后总结。这样几个步骤的大体流程是编程技术与计算思维联系的核心环节。

编程技术支持的计算思维课堂模型

本研究中的三种语言都可以用基于计算思维的教学模式应用在课堂中。具体的基于计算思维的教学模式如图所示。

在这个教学模式当中,问题的提出是以主题或者一个项目开始的。问题提出后,抽象出问题的几个关键点并进行分解是很重要也很有挑战性的任务,在这个过程中学生自主探究可能会遇到问题,教师可以选择适当地进行思维引导。不同的主题和项目由不同的语言来实现,例如小学的情境趣味性编程选择以Scratch为主,手机应用由App Inventor来实现,数据分析与挖掘可以选择Python来完成。之后学生进行算法的设计,并根据算法进行编程,在此过程中很重要的一点是排除错误,在解决问题的过程中学生可以学会一门语言并且可以对自己的算法进行优化。每个人都基本上完成之后,学生进行汇报,分享自己的方案。最后是重构优化,重构优化是对算法以及代码结构的调整,目的是优化项目的效果以及效率,不断地更新迭代算法以及代码并且保留最优的方案。至此,一个主题或者项目告一段落,下一个主题或者项目较之前一定会有个难度的递进,可能是语法层面上的也可能是算法层面上的,如此循环往复进行每一节计算思维的课堂设计。

本研究根据三种中小学教学中的典型语言,以计算思维为基础,通过对典型语言的对比研究,发现了不同语言对于计算思维培养侧重点不同,从而给出编程技术培养计算思维的课堂模型,以及教师可以采取的编程教学的模式。不足之处在于,现如今编程技术与计算思维之間联系的紧密程度能达到多少并不确定,初级、中级、高级的编程教学针对不同年级的学生是否可能出现跨越性并不可知。高中课标中明确以Python为主,但是如何从Scratch或者App Inventor等语言过渡到Python尚不明确。在下一阶段笔者将聚焦到更加具体的编程教育当中,选择其中一门代表性语言进行研究,以探究培养计算思维的具体方法。

参考文献

Warren Buckleitner. Why “Scratch” is significant [M]. Childrens Technology Review, 2007:15,6,87.

魏志宏,郭守超,邓常梅,李莉,赵丙科,周庆国. App Inventor:一种开源的信息技术课堂学习工具[J]. 现代中小学教育,2015,31(04):80-84.

郑戟明. Python程序设计课程中计算思维的应用[J]. 大学教育,2016(08):127-129.

CSTA, ISTE. Operational definition of computational thinking for K-12 education[OL]. http://csta.acm.org/Curriculum/sub/CompThinking.html.

猜你喜欢
编程技术编程算法
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
复杂零件的数控加工工艺及编程技术分析
纺织机上诞生的编程
基于MapReduce的改进Eclat算法
Travellng thg World Full—time for Rree
进位加法的两种算法
基于计算机软件工程的数据库编程技术
C语言编程技术的分析研究