成功在“错误”的碰撞中生成
2021-08-30黎启韶
黎启韶
程序在开发的过程中充满着“试错”与“纠错”,这也是不断完善“程序”与深化“编程语言”认识的必然过程。笔者在App Inventor编程教学中,以学生的一次“错误”为契机,让学生开展自主探究、自主纠错的尝试,从而使其了解了如何利用App Inventor中的“语音识别器”与调用第三方翻译API的方法,实现了编译人工智能语音翻译程序的案例,同时让学生体验了程序开发中“关注用户、简化操作、注重体验”的设计原则与认知,为树立正确的程序开发理念夯实了基础。
项目引领激内需
大量的实践证明,项目式学习对激发学生的学习内需、提升课堂参与度有着无可比拟的效果。笔者在设计本课时也使用了项目式学习的教学方式:小明同学打算在新冠疫情过后,跟随父母到英国旅行,如何利用编程知识帮助不會讲英语的小明一家,开发一款软件来解决与外国人交流的问题。学生在情境任务的驱动下表现了极大的兴趣,而且由于对App Inventor已经有了一定的认识,所以通过小组讨论很快得出了解决方案:使用App Inventor内置的“Yandex语言翻译器”组件实现文字翻译功能。
巧设“波澜”起悬念
在学生的“共识”下,教师通过“电子课堂”下发了“探究任务单”(如下表),让学生两人一组开展初步探究。
在“探究任务单”的设计上,笔者注重依据功能选取组件,这能够帮助学生沟通功能与组件之间的逻辑关系,让他们易于开展逻辑设计,这也是培养学生计算思维的一种有效做法。
在学习本课之前,学生已认识了App Inventor大部分组件的功能作用,并懂得该类组件逻辑设计的规范,而且也填写过“探究任务单”,所以填写已学过组件时驾轻就熟。可是到填写“Yandex语言翻译器”组件时,由于书本没有详细介绍用法,学生便不知道如何填写。“这个问题我们该怎么办?”教师问道。为了帮助教师解决问题,学生们又展开了讨论与研究,突然有个学生说道:“书上没有的问题可以到百度上找答案。”学生纷纷认同,并希望笔者允许他们到“百度”上寻找答案。
可以说,学生对“Yandex语言翻译器”的疑问是笔者意料之中的,在教学中就是要设置这样的“波澜”才能激发学生进一步探究的冲动。让学生知道通过什么“方法”“手段”和“途径”获取答案,比直接给予他们“答案”重要得多。
成功“遇错”促提升
在学生的强烈请求下,笔者同意了他们的做法,之后,学生在百度中找到了相关的教学视频。通过视频的指引,学生知道了在使用Yandex语言翻译器代码块时,需要按照Yandex平台的接入规则填写“发送请求”与“返回结果”的参数,因此他们也补充填写了第一份“探究任务单”中缺失的内容。紧接着学生们便开展了程序的设计,但在调试中学生惊奇地发现“程序”无法进行有效翻译,是不是“组件设计”与“逻辑设计”存在问题导致的呢?笔者指引学生再次检查,可是学生发现他们选用的代码块和使用的参数都与教学视频中一模一样,究竟是什么原因造成了问题呢?学生陷入了沉思。笔者这时向学生提示,是不是Yandex语言翻译器在使用上发生了限制,导致翻译功能不能使用?并向学生提供了Yandex翻译的中文官网地址,引导学生一查究竟。
果然,答案就藏在Yandex的中文官网中,原来Yandex平台之前是免费提供翻译功能,但2019年4月1日之后这个政策取消了,开发者需要申请API_ID和API_KEY才允许调用翻译功能。而学生在百度上找到的教学视频是在2019年4月前发布的,若简单地复制视频中的做法,当然就无法实现翻译了。
适度的“错误”是不断完善自我行为的“催发剂”,学生在程序开发过程中往往会遇到不可知的错误,但只要正确引导,鼓励他们反复检查、自我纠错,他们就会获得知识之外的能力发展。
巧加点拨助创新
接着,笔者又提供了第二个教学视频让学生自主学习,引导学生注册Yandex平台的API_ID和API_KEY,再思考如何把这两个关键元素加入到编程中。程序的逻辑设计如下图所示。
在如图所示的“逻辑设计”中,需要在原来的代码块中增加两个全局变量,并在“Yandex翻译器获得译文”代码块中执行这两个变量,执行时利用文本代码块将变量指定为自己申请的API_ID和API_KEY,当Yandex平台接收到相关数据并审核通过后,可以允许程序调用Yandex翻译功能,否则Yandex平台不会向程序返回翻译结果。同时,Yandex平台会发送一个含有返回值的响应代码到程序中,只有返回值“等于200”的“响应代码”才表示Yandex平台成功“接收”和“返回”了数据,因此在逻辑设计中还需要运用“判断”代码块判断返回值是否等于200。学生也把这个作为Yandex翻译器的注意事项补充到第一份“探究任务单”中。
通过调整逻辑设计,所有的学生的测试都成功了,学生们兴奋不已。但是教师又提出了问题:“每次输入文字都这么麻烦,有没有方法让翻译器的操作变得更简单?”正在兴奋中的学生顿时又安静了下来。突然有一个声音叫出来:“用‘语音识别器。”这时学生又一次恍然大悟,对!“语音识别器”可以实时将录音转化为文字,再将文字翻译成英文,这样就方便多了。“还能不能添加更实用的功能?”教师又一次提问。“还可以添加‘音频播放器,把翻译结果通过手机读出来,这样就更方便了。”学生立刻回答道。通过这样的一问一答,既让学生运用了旧知进行创新,又让他们明白了程序开发中需要充分考虑用户的体验,简化操作的道理。
结语
本节课通过一次“错误”的碰撞,让学生的思维与能力得到了考验与发展,教师自始至终均没有正面给出任何一个答案,学生两次的“恍然大悟”均是在教师一次一次的设疑中实现的。知识是学会的,不是教会的,只有让学生在课堂中自主、自立,放飞思维,他们才会学得深、学得透。当然,Yandex翻译的功能仍存在很多问题,如有学生告诉笔者,他在官网上看到,Yandex只允许免费申请的API_ID和API_KEY使用15天,如果要继续使用则要续费。笔者告诉这位学生,其实程序开发是“一理通百理”,只要明白了App Inventor调用Yandex API的原理,就会懂得调用“百度翻译API”等第三方平台的方法,只要敢于探索与尝试,所有的异想天开就都有可能实现。