方其桂 梁祥
经过多年教学实践表明,手机应用程序(APP)编程相对VB、C++等编程而言更容易吸引学生。其中一个主要原因是,编写好的APP程序直接下载到移动设备中,可以立即运行、使用和展示,学生能够立即体验到编程的价值。目前制作APP的计算机编程软件有很多种,中小学大多选择App Inventor软件,学生用“搭积木”的方式就可以设计出好玩的APP;此软件易读懂、易编写,也易理解,可以让学生在很短的时间内就能掌握编程语言,体会到计算机编程的乐趣;此软件无须记忆和输入指令,很容易就给学生带来成就感,为中低年级学生培养计算思维提供很好途径。
中小学开展APP编程教育,要避免“唯编程技能训练”的学科中心取向,着力培养学生跨学科的创新精神和实践能力。在教学模式上,非常适合采用《普通高中信息技术课程标准(2017年版)》(下文简称“新课标”)中倡导的项目学习,培养学生的自主学习能力。
采用项目学习来学习APP编程,需要按照规范的步骤来进行。以新课标提供的教学范例为例,主张采用的教学流程主要包括范例展示、项目设计、方案交流、项目实施、交流评价。[1]然而,根据我们的教学观察和实践经验,单纯采用此类教学过程,周期过长,教学时间不足,会导致所谓项目分析、设计、交流容易流于形式,从而弱化知识学习、思维训练和创新能力的培养。事实上,人们经常提到的项目教学本质上是一种正向项目教学,其实施过程一般从需求分析开始,进一步提出可选方案的设计,并进行遴选,设计出详细方案并实现,最后分享和评价作品。此过程体现了产品“设计—生产—消费”的一般过程。与之相反,还有一种是逆向(反向)的项目教学,即逆向工程教学。逆向工程教学主张从现有产品的使用或测试开始,倒推产品的设计方法,然后重新设计或复原一个作品。[2]就APP编程教育而言,两种类型的教学模式都有应用价值,但有关逆向工程教学的探讨才刚刚开始。[3][4]有鉴于此,我们主张将逆向工程方法融入项目学习当中,将知识学习和包含计算思维在内的思维训练渗透教学过程。
经过改造,我们主张的项目学习主要包括如下步骤:项目选题、项目体验、程序规划、算法设计、知识渗透、程序编写、项目延伸。
基于逆向工程教学理论,我们探究的项目学习主要包括如下步骤:项目选题、项目体验、程序规划、算法设计、知识渗透、程序编写和项目延伸,在课堂教学中按照这几个主要环节实施。
项目学习的核心是项目,好的项目会激发学生的学习积极性,让学生积极主动学习。好的项目选题,可以促进学生在跨学科问题领域,有机地融合、应用多学科知识,培养其解决综合性实际问题的能力。因此,项目选题尤为重要,如图1所示,中小学APP编程教育选题需要关注以下三方面问题。
图1 项目选题
1. 贴近真实
只有贴近真实生活情境的综合性问题才能凸显项目的价值,真实项目是用来解决人们在实际生活中遇到的各种问题,只有这样学生才会有兴趣。在课堂教学中,为了使一个大的项目落实,即让学生在有限的教学时间内完成项目,可以采用微项目形式教学:将项目的细枝末节内容适当去除,保留主要的内容。例如,现在越来越多人爱上了走路,运动的同时,可以随时查看自己行走的步数,并与好友进行运动量的比较。那么,这个计步器是如何实现的呢?除了从手机的应用市场里去下载,可不可以自己设计一个呢?答案当然是肯定的。有了真实的项目情境,教学更容易激发学生的求知欲望,学生的学习兴趣更加高涨。
2.贴近学生
开发的项目必须贴近学生,帮助学生解决其自身、家庭和周边的问题,只有这样,才会让其体验项目完成的价值。同时,要开发的项目需要和学生的能力、基础相匹配,也就是在限定的上课时间里,学生能完成任务;让学生体验到成功的喜悦,有成就感。例如,学生在学习APP编程时,可以从学科知识入手,设计一个“数学加加看”APP,或是“成语接龙”APP,或是英语学习小工具,或是涂鸦画板,让学生认识到可以利用信息技术轻松、有趣地完成学习任务。
3.贴近目标
随着新课标颁布,计算思维已经成为信息技术教学的重要教学目标,而移动APP开发可以很好地培养学生的计算思维。开发的教学项目必须是为计算思维培养服务。项目本身只是学习的工具、载体,而不是最终的学习目标。
结合目前中小学普遍开展的研学旅行活动,基于以上三点,我们选择开发“研学旅行工具箱APP”项目,教师共设计了6个微项目选题,分别是“旅游景点初选择”“方向指南好寻路”“运动计步心有数”“音乐陪伴不寂寞”“趣玩游戏乐逍遥”“识别植物很容易”。这些微项目可以独立完成,也可整合成一个大的项目。
通常有一定实用价值的APP都较为复杂,在教学中教师难于用语言描述。因此最好先让学生体验,初步感知项目,深入了解程序功能,引发问题思考。在“旅游景点初选择” 项目中,可以提供一个完整的项目案例,学生可以先玩一玩,然后再根据自己的需求对该项目案例进行部分修改,如改变景点的图片、景点的介绍等。让学生初步了解APP规划、设计、制作、测试的一般步骤及流程。与从零开始引导学生分析项目需求、设计项目方案不同,本步骤充分体现了逆向工程教学思想,从体验感悟开始,逐步理解目标对象和设计方法,有利于提高教学效率。
1.运行程序
上课时,将要完成的APP作品的源程序提供给学生,让学生下载到移动设备中运行,了解该APP程序的主要功能、运行方式等,以便学生对学习目标有初步感性认识。如果项目不是很复杂,此环节可以删除,因为先让学生体验程序,对学生的思维就有一定的限制,不容易超越已经体验到的程序。
2.问题思考
思维训练是编程教育的重要目的,在学生基本了解APP程序后,教师要引导学生尽可能从多个角度对其提出问题。学生提出的问题越多,说明其思考得越深入,后期实际实施项目时就会越容易。在此环节,教学建议采取分组教学模式,一方面鼓励学生多提问题,另一方面通过组内讨论,将学生提出的大多数问题在组内解决掉。对于组内无法解决的问题,教师通过集中讲解的方式解决。这个环节主要培养学生发现问题、分析问题的能力。
3.需求分析
在设计任何产品之前一定要进行需求分析。在教学中,教师先组织学生讨论交流,当收到不同的需求之后,不要马上动手做功能分析,而是认真地进行需求归纳、分析。一方面要引导学生寻找出最有价值的需求,去除不必要的功能需求的干扰;另一方面对必要的需求进行梳理、分类。
程序规划是从现实出发的思考、想象和谋划,进而确定和安排实现项目目标所必需的各种活动和工作流程。规划过程中要收集资料、明确工具和技术等,还要写出项目计划书和相关辅助文件。在传统教学模式中,教师一般不太注重这个环节,而在项目学习中,程序规划是学习中最重要的一个环节,通过规划可以厘清学习目标、方法和主要步骤。一般而言,APP编程规划主要包括功能规划、界面规划、组件规划等。
1.功能规划
依据需求分析的最终方案,确定移动APP的主要功能。一般来说,每款移动APP程序具有多种功能,因此要明确功能的主次,及其之间的关系。对于中小学APP编程,由于学生的学习能力和学习时间有限,一般不建议开发多种功能的APP,一个APP解决一个问题为好。需要注意的是,即使是最简单的程序,功能规划也是必不可少的。为便于教学,上课时,教师可以让学生将规划的结果填入课前设计的导学案中。
2.界面规划
根据不同的使用习惯,手机APP一般是设计竖形界面,平板APP一般设计横形界面。确定界面的版式之后,即对界面中的内容进行设计,即界面上由哪些元素组成,分别放置在什么位置,大小是如何设置,界面如何布局更加美观等。对于中小学生开发的APP,其界面一般不宜太复杂。在规划时,教师可以让学生先在纸上勾画草图,然后小组内讨论确定最终的程序界面,使之更美观,更切合人们的使用习惯。
3.组件规划
App Inventor开发工具中,提供了多种组件。根据程序解决问题的需要,在用户界面中需要通过文本输入框、按钮等组件来执行相应功能。同时根据程序交互和实现的需要,在用户界面中需要用标签来显示标题;需要有按钮执行相应功能,用“音效”播放声音,用“视频播放器”播放视频,通过加速度感应器检测手机是否摇晃等。组件规划重点要培养学生STEAM意识,以及综合应用多学科知识的能力。上课时,教师放手让学生通过自主探究、小组讨论等,选择合适的组件,分组说明组件选择理由,从而培养学生逻辑思维能力和语言表达能力。
算法设计是编程的核心,其重要性不言而喻。在解决问题时,需要设计出一系列可操作或可执行的步骤,通过实施来解决问题,这些步骤就是解决该问题的算法。APP编程是用于解决实际问题,所以在动手编程之前,需要设计出相应的算法,即对项目的执行顺序、方法与流程做细致的设计。
1. 编程思路
针对前面的规划,教师要初步厘清问题解决的主要思路,尤其是程序的主要、核心部分,帮助学生分析出解决问题的主要方法。在“运动计步心有数”微项目中,分别提出三个问题:(1)计步器是依据什么计步的?(2)如何通过按钮控制计步的状态?(3)如何让计步器清零?通过这种层层深入的方式,学生自主分析出“计步器”程序的编程思路。
2.算法流程
对于简单程序,让学生用自然语言描述主要的编程步骤即可。对于相对复杂的程序,一般最好还是用流程图,因为它的描述更清晰、更规范。在“运动计步心有数”项目中,加速度传感器感应到手机每晃动一次,变量“摇晃次数”加1次,摇晃2次(即前后摆臂各1次)相当于走了1步;由此可知程序的整体流程和执行顺序,用流程图设计出如图2所示的算法流程。在实际教学时,如果学生水平较高,让其使用流程图绘制软件自主绘制出流程图;对于水平一般的学生,教师可以将大部分流程图绘制好,留小部分让学生补充,以达到提高教学效率的目的;如果学生水平确实不高,教师也可以直接出示流程图并进行讲解。
图2 算法设计
项目学习是为了解决真实问题而设计的,不只是为了掌握技能,但也并非完全抛弃技术,而是在项目框架内,融入恰当的知识与技能。项目学习中要对过程所需要的知识进行详细介绍,给学生搭建脚手架,便于其能顺利编写程序。在教学时,学生正好有学习知识的需要,其学习就有了主动性,学习效率自然得到提升,这比课堂开始时就介绍知识更容易被学生容易接受。实际教学中,学生可以通过以下方式获取相关知识。
1.学生自主学习
教师准备与本活动相关的知识材料,形式可以是纯文字、图片、表格,有需要时,还可以让学生自主学习。由于学生学习能力、兴趣等限制,这类材料数量不宜多。
教师还可以准备多媒体材料,包括与项目有关的微课、课件。微课尽可能简短,且为每个知识点准备不同的微课,以便学生各取所需,随需随学,让学生学习效率得到提升。
当然,网络是个很好的知识来源,教师可以让学生通过网络搜索获取所学知识,培养其数字化学习的能力。
2.教师集中讲解
对于一些不易理解的知识、容易出错的操作技术,教师最好能利用一部分时间来集中讲解,让全体学生突破难点。
此环节是项目的主体,让学生完成程序编写。对于简单程序,让学生独立完成;对于复杂的程序,可以让学生分组协作完成。在此环节,教师要加强巡视,对于遇到困难的学生及时给予指导。
1.设置组件
规划好程序后,要先添加组件,并设置组件属性。对于大多数APP,需要设置背景、添加标签、输入文本框、按钮等组件。例如,在“音乐陪伴不寂寞”项目中,根据App Inventor 软件的组件特点,需选择适当的组件,实现音乐播放软件的功能实现,如图3所示。
图3 设置组件
2.逻辑设计
在添加设置好组件属性后,根据算法,对组件进行逻辑设计,即编写程序代码。手机APP编程主要是通过拖动代码块进行程序架构,并设置各代码块的参数实现程序的具体功能。如图4所示,在“音乐陪伴不寂寞”项目中,在加速度传感器1被晃动时,即执行逻辑代码中“zd.mp3”音乐文件播放,并且进行震动1000毫秒。随后进行随机切换列表中的某一歌曲。从而实现“摇一摇”手机后,有切换音乐声和手机微震动,随后实现随机切换歌曲的功能。将设计意图转成程序代码是整个教学的重点,特别是对学生计算思维能力的培养有重要意义。
图4 逻辑设计
在这个环节中,对APP程序进行使用测试,通过实际使用,发现其不足之处,分析问题所在,对项目方案进行优化,再进一步巩固学习成果,培养其知识应用能力。
1.展示分享
让学生邀请其他同学、朋友或家人一起使用开发好的APP,然后与他们一起讨论其中存在的问题,并记录下来。通过展示分享能培养学生信息交流的能力,也促进学生收集有效信息能力。
2.程序完善
编写好的程序通过自己和他人试用,会发现其存在这样或那样的问题,针对这些问题进行调试、改进,使其更加完善。程序的测试过程要考虑多种特殊情况,如边界情况、输入出错等,目的是培养学生发现问题与解决问题的能力。
3.创意设计
在完成模仿开发后,适当做些改变和探索,如控制手机横屏时转动画面,或给APP换一个自己喜欢的图标,可以改成自己录制的视频等。创意无限是针对不同程度水平的学生提升拓展的空间。让不同的学生在项目的基础上,开发出实用的创意作品。
在教学实践过程中,该项目活动深受学生喜爱,他们学习编程的兴趣较高。在具体作品的创作中,学生个人实践能力、创新意识、团队合作精神都得到较好的培养,并且开发的作品能够得到他人的认同。学生的多学科融合学习与动手操作能力得到较大的提高。教学时,要兼顾学生的认知水平,既要有趣又要在学生能力范围之内,还要适当增加学生感兴趣的应用程序设计。
基于项目学习的中小学APP编程,在课堂教学的主要环节中,教学的重点是对项目规划分析,这个环节一般需要教师引领学生开展,只有规划分析透彻了,学生才有明确的思路和方法进行后续学习。
当然,中小学APP编程教育目前还处于起步阶段,在教学中存在不少困难。大多数中小学信息技术教材还没有将其列入其中,课程缺乏成熟、有效的项目。教师本身对APP编程还缺乏认知,对项目学习的教学理念、教学流程还不熟悉,教师对此有畏难情绪。另外,一个好的项目学习最好是在两节课内完成,目前的教学安排不容易得到保证。这些因素使得中小学APP编程教育暂时没有得到广泛开展。
实践研究表明,小学高年级与中学各年级比较适合开设App Inventor课程,尤其7—9年级。通过项目学习,教学取得了较好的学习效果,但仍需注意细节问题。
1.教学任务
在教学中,教师需要先激发学生的兴趣,让学生充分体验利用App Inventor编写制作程序的乐趣,不宜从零开始要求学生完成一个完整的APP开发项目,而可以先提供“半成品”给学生进行修改、完善,并鼓励他们将自己的作品分享给家长与朋友。在项目教学过程中,每一阶段均需设置一定量的明确任务,任务设置要合理,可操作性强。在学生打下一定的基础后,逐步加大难度,提高课堂任务的综合性。如让学生自主设计项目,引入与Arduino开源硬件的互动,让学生体验到用手机、平板控制外接智能设备的乐趣。
2.教学引导
在优化与改进程序过程中,要引导学生发现和提出问题,通过交流和讨论形成可行的改进方案。在此过程中,教师要穿插相关知识内容的点拨和归纳分析。如变量的不同定义方法、程序的边界控制、交互式界面设计要素和原则等。实际教学时,教师应给学生提供导学案(最好是基于平台的电子导学案),引导学生按照设定的学习路径进行自主学习,同时给出获取帮助的途径,让学生能够随时找到学习资源。
3.教学辅助
鉴于学生起点不同,教师可以事先制作相关重难点内容的微课、进阶学习和学习任务单,支持不同水平的学生学习。也可以通过设计不同层次的任务让学习水平有差异的学生均有不同的收获。这些教学辅助资源尽可能存放于教学平台,让学生按照自己的学习习惯,快速获取资源。
4.教学活动
项目学习的主体是学生而不是教师,因此在课堂上,教师通过设计各种活动形式,让学生各种感官全方位参与学习。课堂之内,学生活动可分为两类,一是集体活动(演示、比赛、评价),二是个体活动(观摩、阅读、欣赏、聆听、绘图、测量、动手、记录、触摸、尝试、搭建、表演、游戏、实验、实践、思考、猜想)。课堂之外,还可为学生设计基于集体和家庭环境的信息技术活动。
5.教学评价
在评价主体上要尽量实现多元评价,尤其需要发挥APP作品可移动分享的优势,让同学、家长都参与进来。教师可以添加APP制作的构思、作品的风格、实践过程中所遇到的问题等方面作为评价内容,设计APP作品评价量来完成对学生作品评价;可以利用数字化学习平台交流、撰写心得体会、学生面对面交流等方式进行评价。
在中小学APP编程项目学习模式下,先带领学生体验APP,由体验产生疑问,然后通过规划分析、算法设计,实现制作项目。在分析和实现的过程中层层推进,解决问题。整个过程循序渐进,带领学生将一个个有创意的想法分析规划,形成方案,利用流程图理清思路,并编写程序形成作品,使学生体验编程的乐趣,将培养学生的计算思维落到实处。学生通过创新拓展,思考解决问题的不同方法,可以制作出更具创意的APP程序。
中小学APP编程教育能体现STEAM教育思想,让学生亲身经历项目的选题、分析、规划和实施,直到最后的评价、完善。在这个学习过程中,学生通过小组协作,一起主动探究问题、解决问题,体验利用综合学科知识解决各种实际问题,创新精神和实践能力得到培养。