通过这款拖放框架学习 Android 开发

App Inventor 是一个编程框架,用于使用可视化积木语言构建 Android 应用程序。
347 位读者喜欢这个。
3 cool machine learning projects using TensorFlow and the Raspberry Pi

Opensource.com

在 1990 年代后期我开始进行课堂计算机研究时,我首先要做的是将一些计算机带入教室。我的导师获得了一笔拨款,用于在我们进行研究的中学安装六台第一代 Bondi Blue iMac。当我们带着那些诱人的糖豆形机器进入学校时,我对寻找参与者的担忧烟消云散。

那时,任何地方的计算机,尤其是在中学教室里,仍然相对不常见,我们能够将它们的新颖性转化为与我们教育干预的直接互动。

App Inventor 使快速轻松地投入构建手机和平板电脑的移动应用程序成为可能。

如今,计算机普及得多,学生们通常携带的移动设备的计算能力远超第一代 iMac。虽然仍然有一部分学生(成人和青少年)对计算机科学非常感兴趣,他们会坐在任何可用的设备前,但仅仅是使用计算机的新鲜感和参与感不足以吸引那些可能擦肩而过的孩子们。

仍然有可能通过引人入胜的基于设备的教育来吸引学生,但现在您需要使用学习者一直使用的移动设备。这就是 App Inventor 的闪光点。

移动编程框架

App Inventor 是一个编程框架,用于使用可视化积木语言(类似于 ScratchSnap)构建 Android 应用程序。它最初由 Hal Abelson 和 Mark Friedman 在 Hal 从麻省理工学院休假到 Google 工作期间原型设计,并且从最初基于 Java 的前端和 USB 调试器演变为使用 Blockly 库的基于 Web 的前端。

App Inventor 使快速轻松地投入构建手机和平板电脑的移动应用程序成为可能。

在典型的入门练习中,学习者构建一个简单的音板应用程序——点击猫的图片,手机播放“喵”的声音。构建框架后,学习者可以用他们想要的任何声音替换该声音,添加额外的按钮,并构建一个带有他们想要的任何有趣音效的自定义音板。一旦他们的第一个应用程序构建完成,学习者倾向于立即向他们的同伴(尤其是那些尚未从事 App Inventor 项目的同伴)炫耀他们的作品,播放他们录制的任何幽默声音。

正是这种现象,即新手程序员立即炫耀他们构建的东西——一个可以在任何 Android 设备上运行的合法的独立应用程序——使 App Inventor 成为当今计算机编程教学如此引人注目的平台。也许有一天,手工构建的移动应用程序会像早期的 iMac 曲棍球鼠标一样被淘汰,但那一天尚未到来。

事件驱动方法

App Inventor 鼓励学习者采用事件驱动的方法来思考他们的程序。这种模型对于现代编程非常有用(考虑一下现代程序在事件分发循环内部完成多少工作)。通过跳过执行完成的 main() 的概念,我们可以直接深入询问诸如“当用户按下此按钮时应该发生什么?”之类的问题。这可能是一种非常自然的教学编程概念的方式,尤其是在基于项目的方法中。

App Inventor 环境有两个主要部分:客户端和服务器,两者都是在 Apache 2.0 许可证下 开源 的。

虽然您可以运行自己的实例(如果您想构建以某种方式扩展语言的自定义块,这尤其酷),但大多数用户使用在 appinventor.mit.edu 上运行的免费实例。Web 客户端围绕 Blockly 库构建,Blockly 库是另一个源自 Google 的开源项目。Blockly 被设计为一种元语言,一个用于为 Web 构建基于块的编程语言的框架。我经常使用 Maze Blockly 谜题作为基于块的编程和像程序员一样思考的入门介绍,但 Blockly 也可用于生成 JavaScript 代码

Example of the Maze Blockly puzzle

opensource.com

在服务器端,App Inventor 是一个大型 Java 服务器,构建在 Google App Engine 容器中运行。服务器处理诸如存储人们的工作、登录凭据等平凡的事情,以及更令人兴奋和有趣的编译过程,通过该过程,用户的块表示被转换为 Android 软件包 (APK) 文件,这些文件可以下载和运行。

除了编程界面之外,用户还需要有一个执行上下文。最简单的选择是在他们的 Android 设备上安装一个 特殊的伴侣应用程序。伴侣应用程序可以与他们的 App Inventor 会话配对,并将提供他们工作的实时更新实例。在实践中,我发现一些学校的 WiFi 环境无法支持这一点,因为它需要在用户的计算机和设备之间建立对等网络连接)。在这些情况下,可以使用手机和计算机之间的 USB 调试器连接,也可以在计算机本身上运行模拟器。如果可用的设备短缺,让学生先在模拟器上工作是有道理的,然后他们可以轮流将他们的应用程序上传到手机。学生还可以通过将他们的代码导出为 APK 并直接安装到设备上来工作(前提是手机上允许第三方未签名应用程序),但该工作流程很慢。这就是为什么最好使用实时更新,尤其是对于伴侣应用程序,因为 USB 连接可能非常棘手(有时需要安装驱动程序,并且始终需要安装 Android 调试桥)。

App Inventor 的实践应用

Starting to program the "Appy Bird" app

opensource.com

设计环境允许用户使用界面小部件(例如按钮、输入字段和画布(可以包含可移动的精灵或直接绘制))构建屏幕。设计环境还允许激活特定于手机的输入,例如方向/摇晃感应、摄像头,甚至是对远程 API 的 Ajax 请求。

如上所述,编程环境在很大程度上是事件驱动的。当某些事情发生时,通常是点击或每 N 毫秒的时钟节拍,就会触发代码块。该块可以包含标准的命令式语言结构(循环和分支),并且可以设置应用程序全局变量状态。也可以定义具有局部参数和返回值(或操作全局状态的参数和返回值)的函数,这对于简单的应用程序来说是一种常见的新手方法。

Programming the pig's movements

opensource.com

Setting the global failspeed

opensource.com

例如,这是 Flappy Bird 克隆版“Appy Bird”的动画例程——精灵每时钟节拍移动一次。此外,在时钟节拍时,精灵的速度会减少一个常数值(模拟向下加速),并且在屏幕点击时,速度会设置为向上(正)常数值。通过调整游戏的节拍率和加速度,可以微调以获得最令人满意的游戏体验。

在介绍 App Inventor 时,Appy Bird 游戏有点复杂,但对于有更多经验的人(或想在几周的入门工作后继续构建游戏的人)来说,这是完全可以实现的。

Playing the Appy Bird game

opensource.com

虽然构建一个交互式的飞猪游戏很有趣(或者可能在三年前 Flappy Bird 流行文化风靡一时时很有趣),但 App Inventor 提供了对移动设备独有的许多其他功能的处理。例如,您的学生可能会喜欢构建一些响应设备倾斜方向的东西(例如通过倾斜在迷宫中移动大理石精灵),记录手机正在经历的 G 力(并通过 直接绘制到画布 来绘制图形),或与手机的 SMS 系统交互,以自动回复所有来电短信,内容为“对不起,我现在正在开车,稍后我会回复您”,只要手机的行驶速度超过某个速度(由其 GPS 计算)。

我的一位学生构建了一个工具,允许学生拍摄他们社区中壁画的地理标记照片,并上传到 Google Fusion Table(然后在地图叠加层上显示壁画,供班级和学校查看)。直接绘制画布(学生在其中学习计算机显示器的奇怪坐标系)对于数学专业的学生来说可能非常引人入胜。我给出的一个常见挑战是:“在用户点击的任何地方绘制一个正方形”,扩展为“让用户选择一个数字 N,然后在他们点击的地方绘制规则的 N 边形”,最终达到“使用应用程序存储系统来记住用户所做的绘图,以便他们可以稍后重新加载和编辑它。”(请注意,当应用程序在调试模式下运行时,应用程序存储会被擦除,因此需要直接加载 APK 才能真正测试此功能)。

教授 App Inventor 的 3 个技巧

有很多关于使用 App Inventor 教授编程概念的优秀资源,例如 David Wolber 的著作《App Inventor 2:创建您自己的 Android 应用》和 appinventor.mit.edu 上的资料。

此外,我发现了一些原则,您可以将这些原则应用于任何 App Inventor 课程,无论您是教年幼的孩子还是成年学习者。这些原则源于基于项目的探究式学习模型,该模型用于 6 至 12 年级的数学和科学教育(这自然与我在 1990 年代后期使用那些 iMac 进行的研究相一致)。

1. 使用一个简单的项目来吸引您的学习者,该项目概括了一些编程概念,但不要首先明确地教授该概念。

在教学中,常见的做法是先讲解一个想法,然后提供一个实验室或问题集来例证该概念。我更喜欢颠倒这种关系;作为老师,我知道我的学生已准备好学习 if/then/else 结构,但我不需要在白板前开始向他们解释。相反,我可以利用基于块的语言的优势:语法错误非常难以创建,并且块往往是自文档化的。如果我创建一个需要语言结构的简单挑战,我通常可以让学生弄清楚这些结构如何在解决挑战的服务中工作。作为一个具体的例子,在他们完成上面描述的简单猫音板练习后,我挑战我的学生让猫在按钮被按下五次后停止喵喵叫。有很多方法可以实现这一点,但所有方法都需要跟踪某种状态并根据该状态做出决定。之后,我将做一个简短的讲座,总结他们所做的事情,然后回到一个新的挑战:在沉默的猫被再次点击五次后,它应该说“停止它”。最终,此程序与 FizzBuzz 作业没有太大区别(除了它不使用模数算术),但它更具吸引力。

这个使用 App Inventor 进行教学的单一而简单的原则非常强大且重要。虽然计算机科学领域的许多人都在讲课然后演示的教育环境中学得很好,这种环境在教育中普遍存在,但更多数量级的人对这种教学方式没有很好的反应。一般来说,当听众对主题有足够的了解,以至于他们可以立即理解它时,讲座更有用——也就是说,他们在您谈论它时看到了它的实用性。

2. 让您的学生有机会以不同的方式变得聪明。

有些人想学习编程,因为他们想制作游戏、讲故事或构建巧妙的互动。如果您以提供创造性表达的方式构建作业,您将不断地对您的学生构建的东西感到惊讶。在实践中,这主要意味着确保您选择的基础项目在许多方向上都是可扩展的。音板可以很容易地演变成一个多按钮合成器面板,它可以体现一个记住序列的游戏,或者它可以只包含很多非常巧妙的声音和有趣的图像。如果您给您的学生关于他们可以构建的不同想法,然后给他们时间来构建有趣的东西,他们不仅会扩展他们自己的理解,他们通常还会遇到您进度中的下一个重要概念(例如在音板课程序列中,循环或功能分解,具体取决于学生详细说明的功能)。

3. 鼓励小组合作。

这与前两点一致:如果您允许丰富的基于项目的学习体验,您的学生将在小组中更好地一起工作和学习,尤其是能力和兴趣异质混合的小组。重要的是密切关注您的小组的运作方式,并鼓励频繁的角色切换(例如,谁在操作键盘,谁在提问和监控进度,谁在设计互动)。

如果您将这三个原则应用于 App Inventor 的教学(或任何类型的编程教育),您的学生可能会更积极地参与课程,并且会不断让您惊讶于他们可以使用相对较少的语言结构构建多少东西。

Blue-haired Eric next to a slate shingle with a cow and the word "welcome" painted upon it.
我是一名技术专家、教育家、交叉女权主义者和乐观主义者。  

评论已关闭。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.