你正在一条日常行驶的路上,只是一路慢行,突然被一个念头击中——你的下一款杀手级移动应用。在回家的路上,你甚至不再关心时间,你只想让你的想法立即变为现实。但究竟如何做呢?你不是程序员,要成为一名程序员,也得需要几年的时间,而时间就是金钱,而且......甚至,有人可能已经把它做出来了。就这样,你的设想胎死腹中了。

现在想象一个不同的世界,在那里创建应用程序并不需要多年的编程经验,艺术家、科学家、人道主义者、卫生保健工作者、律师、消防员、马拉松运动员、足球教练,以及社会各界人士都可以自己创建应用程序。想象一下,在这个世界里,你不必雇用程序员,就可以将想法转化为应用的原型,你可以为自己量身定做应用程序,也可以满足您个人对于移动计算的要求。

这就是App Inventor的世界,谷歌公司新的用于构建移动应用的可视化编程工具。基于可视“积木”的编程方法,事实证明,即便是对于孩子,也是成功的。App Inventor大大降低了为Android手机和设备开发应用的门槛。如果一个视频游戏里的人物看起来像你和你的朋友;或者一款“你去取牛奶了吗?”的应用程序,如果你就在一家杂货店附近,它会在下午3点以后提醒你;或者一个恶作剧应用,其实是你送给你的另一半的求婚的惊喜,“问题4:你愿意嫁给我吗?如果接受,按下按钮发送短信。”真的有人创建了一款App Inventor应用并如此求婚,而对方居然说是的!面对以上情境,你的感觉如何?

一种适用于移动电话的区块式开发语言

App Inventor是一个可视化,可拖拽的编程工具,用于在Android平台上构建移动应用程序。利用基于web的图形化的用户界面生成器,您设计了应用程序的用户界面(显然是可视的),接下来您可以像玩拼图游戏一样,通过把这些“积木”拼的在一起,来定义应用程序的行为。

插图0-1中积木显示的是一名大学生Daniel Finnegan创建的一款应用的早期版本,,这名学生此前从未学习过编程。你能说出这个app是做什么用的吗?

一位非计算机专业新生在App Inventor课上创建的应用

这是一款文字“应答机”应用。如果你在开车时启动了它,它会对你收到的文字进行自动响应。

因为这些积木比传统的编程代码更容易理解,你马上开始关心,对照现实世界的实用性,你可能会问:我是否可以让它把收到的文字大声读出来?我可以定制我的回复吗?我可以写一个应用程序,让人们用文字来投票吗,像“美国偶像”那样?以上所有问题的答案都用“是”。我们将在这本书中告诉您怎样做。

你可以用App Inventor来做什么?

游戏

为您的手机创建应用程序充满了乐趣,而App Inventor更增加了探索和发现的乐趣。只需在Web浏览器中打开App Inventor,连上手机,并像图0-1中那样把一些积木拼在一起。您可以立即在手机上看到你创建的应用,并与之交互。于是你开始编程了,但您也会发电子邮件,让朋友给您发信息来测试您的程序;或者你用刚写好的应用来控制乐高NXT(可编程)机器人;再或者您拔下手机电源,到外面散步,并顺便看看您的应用对位置传感器的使用是否正确。

建立原型

对某个应用有了一个想法吗?你可以快速地建起一个原型,而不是把它记在餐巾纸上,或让它飘到空中。建立原型是一种部分地、粗略地实现你的想法的工作模式。用文字来表达一个想法,就像写一篇散文给朋友或爱人;而考虑建立一个App Inventor的原型,却像写给风险投资人的诗歌。这样一来,对于移动应用的开发来说,App Inventor就像一张电子餐巾纸。

构建个性化应用

当前的移动应用领域,我们被迫接受某些推送过来的应用。有谁没抱怨过吗?我们期待一款个性化的应用,或者至少让我们可以有所选择?使用App Inventor,你可以创建一个贴近你自己需求的应用。在第三章中,您将构建一个MoleMash(打鼹鼠)游戏,让你通过触摸一个随机移动的鼹鼠而得分。你可以把本教程中的鼹鼠形象替定制成你想要的任何东西,比如你可以捣碎你兄弟或姐妹的照片,有谁会在乎呢?在第八章,你会写一个提问的应用,询问与美国总统有关的问题,但你可以轻松地定制它,来提问你想要的任何话题,从您最喜爱的音乐到您的家族病史。

开发完整的应用

App Inventor不仅仅是个原型系统或界面设计工具,你可以用它创建完整的、通用的应用。语言中提供了所有基础的编程组块,如循环和条件,只是以“块”的方式呈现。

教与学

无论你是在读初中、高中还是大学,App Inventor都是一款伟大的教学工具。它的伟大不仅仅是对计算机科学而言,对与数学、物理、创业以及几乎任何其他学科来说,它都是一个了不起的工具。关键在于你通过创建来学习,而不是死记公式,比如说,你创建一个寻找最近医院(或商场!)的应用。与其写一段关于黑人历史的散文,不如用一段马丁•路德•金和马尔科姆•X的视频或演讲创建一个多媒体的提问应用。我们相信App Inventor,以及而这本书,是学习整个课程的一个伟大的工具。

为什么要用App Inventor

很多人说之App Inventor所以易用,是因为界面可视化及可拖拽。但是这意味着什么呢?为什么App Inventor易用?

你不必记住和输入那些指令。对于初级程序员来说,最大的挫折来自于要输入代码,以及计算机弹出的令人费解的错误消息。这种挫折阻碍了很多初学者,让他们来不及体会解决问题的快乐,那些有趣的逻辑性问题。

你有多种选择的可能性

在App Inventor中,组件和模块被分类放置在抽屉中,触手可得。在编程时,对于您想实现的某种功能,你可以找到一个适合的模块,并把它拖到你的程序里。你不必记住那些指令或查阅编程手册。

有些模块需要插入其他的模块

与那些挫败程序员的神秘的错误信息相比,App Inventor的块语言从一开始就排出了很多犯错的机会。例如,如果一个功能模块要求输入一个数字,你将无法输入文字。这虽然不能消除所有的错误,但它肯定有帮助。

直接处理事件

在设计传统编程语言的时候,编程就像照着菜谱或指令集开展工作一样。但随着图形界面的采用,特别是对于那些事件可能随时发生(例如,接收短信或电话)的移动应用来说,大多数程序都没有菜谱,取而代之的是对事件的处理。事件处理程序的工作方式是:“当这种情况发生时,应用程序做到这一点。”在传统的语言如Java中,你要了解类、对象,以及一种叫做侦听器的特殊对象,这个侦听器用来传递一个简单的事件。使用App Inventor,你可以拖出一个“when”模块来表达“当用户点击这个按钮...”或“当收到一个文本......”这样的事件。

你可以创建怎样的应用?

你可以创建多种不同类型的App Inventor应用。发挥你的想象力,你可以创建各种有趣的且有用的应用。

游戏

人们往往从简单的应用起步,例如像MoleMash(第3章)这样的游戏,或者像在你朋友的脸上画漫画这样的应用(第2章)。随着你的进步,你可以做属于你自己的更复杂版本的游戏,如吃豆人与太空侵略者。你甚至可以使用手机传重力感器,用倾斜手机的方式让角色移动(第5章)。

教育软件

创建应用不仅限于简单的游戏。您也可以创建训练和教育类应用。您可以创建一个测验应用(第8章),以帮助您和您的同学在考试前更好地复习,或者一个“出一份考卷”的应用(第10章),甚至可以让你的用户自己来出一份考卷(想想那些长途旅行的家长们会多么喜欢这个应用!)。

位置感知应用

因为App Inventor提供了访问GPS的定位传感器的功能,您可以构建一个确定你所处位置的应用,你也可以建一个应用,帮你记住停车位置(第7章),或者一个应用,能够在音乐会或大型会议时显示你的朋友或同事的位置,或您个人的在学校、工作场所或博物馆的定制化周游应用。

高科技应用

您可以创建以下应用:扫描条形码、交谈、倾听(识别字)、播放音乐、制作音乐(第9章)、播放视频、检测手机的方向和加速度、拍照以及拨打电话。从技术能力上讲,智能手机如同瑞士军刀,并且,一群谷歌工程师一直在不懈努力,借助于App Inventor,他们让技术变得更易于掌握。

短信息应用

“开车不发短信”(第4章)只是你能创建的短信处理类应用的一个例子。您也可以编写一个应用程序,定期发送“想念你”给你的亲人,或像“广播中心”(第11章)那样的应用,帮助协调大型活动。想要一个这样的应用吗?让你的朋友通过短信来为某件事投票,就像“美国偶像”节目那样。您可以使用App Inventor来创建它。

控制机器人的应用

第12章展示了如何创建一个应用来充当乐高机器人的控制器。您可以把手机当做远程遥控器,或者你可以编写程序让它成为机器人的“大脑”,随机器人一起到处周游。机器人与手机之间通过蓝牙进行通信,App Inventor的蓝牙组件让你能够创建类似的应用来控制其他的蓝牙设备。

复杂应用

App Inventor大大降低了编程的门槛,并让您在几小时内创建出很炫的高科技应用。但这门语言也提供了循环、条件以及其他创建逻辑复杂的应用所必须的编程和逻辑结构。当你尝试创建一个应用时,你会惊讶地发现这些逻辑问题是多么的有趣。

基于web的应用

App Inventor也可以实现应用与Web之间的通信。你可以写一个应用从Twitter或RSS订阅上抓数据,或者打开亚马逊书店的浏览器页面,通过扫描条形码来查询一本书的线上价格。

什么人能够创建应用?

App Inventor免费提供给任何人使用。它在线(而不是直接在您的计算机上)运行,可以用任何浏览器进行访问。你甚至连手机都不需要:你可以在一个内置的Android模拟器上测试你的应用。截至2011年1月,有数以万计的活跃App Inventor用户和数以十万计的应用。

谁是这些应用的构建者?从一开始他们就是程序员了吗?

有些人是,但大多数人不是。其中最能说明问题的经验是,本书的合著者大卫•威尔伯在旧金山大学(USF)所教授的一门课程。在USF,App Inventor是作为计算机科学通识教育课程的一部分,主要针对商务和人文学院的学生。许多学生参加学习是因为他们讨厌或害怕数学,课程符合对可怕的数学必修课的要求。绝大多数学生连做梦都没想到他们会编写计算机程序。

尽管他们缺乏以往的经验,但学生们成功地学习了App Inventor并创建了了不起的应用。英语专业的学生创建的第一个“开车不发短信”的应用;两个通信专业的学生创建了“Android,我的车在哪儿?”;而一个国际研究专业的学生创建了“广播中心”应用(第11章)。一天晚上,当一个艺术专业的学生在下班后去敲Wolber办公室的门,询问怎么写一个while循环时,他知道,App Inventor已经极大地改变了局面。

媒体也了解到了此事的重大意义。《纽约时报》称App Inventor为“DIY应用创建软件”;《旧金山大学记事》撰文报到了USF学生们的工作;“Google将应用制造带给了大众。”《无线》杂志描写了Dannidl Finnegan——“开车不发短信”的作者,并写到“Finnegan的故事有力地说明:编程普及的时代正在来临。”

如他们所说,这只猫已经出来了(你的首个应用里有一只小猫)。现在App Inventor已经在高中开课;在“技术创新挑战”——一个在旧金山湾区的面向高中女生的课后项目,西雅图湖畔学校以及几所大学里的新的入门课上。现在有数千名爱好者、商人、婚介人以及能工巧匠们正漫游在的App Inventor网站和论坛上(https://appinventor.googlelabs.com/forum/)。想要开始行动吗?没有变成经验是必须的!

本书中使用的惯例

本书采用了如下的通用惯例

粗体绿色文本代表程序块

斜体表示email地址、URL地址、文件名、路径名,如果是第一次出现,则表示强调的术语。

固定宽度表示Python代码及组件、属性、变量及函数名。

这个图标表示对正在开发的应用的测试指令。

这个图标表示一条提示、建议或一般性注释。

如何使用本书

本书可作为初中、高中及大学课程的教科书,或作为有抱负的应用开发者的入门书。全书分为两部分:一部分是关于如何构建特定应用的教程,而App Inventor手册部分的编排更像是一部典型的编程教科书。随着你学习的不断深入,教程的复杂性也在增加,从第一章的“你好,喵呜”——每次点击都让小猫发出叫声,到一个支持Web的应用:让您通过扫描一本书,就可以从亚马逊的Web服务上获得相关信息(查看资讯第13章)。

从概念上来说,按照顺序来使用教程是有利的,但是当你开始感到轻松的时候,你可能想跳着看。本教程对于指令及模块的设置提供了渐进式的帮助,你可以参考Inventor手册部分的章节,将有助于巩固您对概念的理解。

手头有本书的优点是,App Inventor的开发环境占满了电脑屏幕,没有多少空闲的屏幕来显示教程。我们设想当人们跟随教程来创建每个应用的时候,他们的书就放在手边。因此我们希望,人们能在远离电脑的情况下拿起这本书,并全神贯注地阅读更多Inventor手册中的概念性章节。

对于教师和学生来说,这本书可以作为计算机科学入门课程的教科书,或者,对于任何需要通过建造来学习的课程,本书都是一个资源。依我们的经验,“阅读教程→讨论→创作”这样的顺序会取得最好的效果。所以,第一步你可以分配本教程中的一两个应用作为任务,要求学生只要能够按部就班地把应用建起来就好。然后你可以在Inventor手册中指定某个章节,并进行一些课堂讨论和演讲,让学习的过程慢下来。第三阶段要鼓励学生探索:在每次教程结束的时候,建议学生对做过的应用进行一些改变,不必详细说明,然后紧接着,指定一个创造性的任务,让学生对应用提出自己的想法,然后实现它们。

你也可以从下面链接下载每章的文件,里面有例子的完整代码:https://examples.oreilly.com/0636920016632/.

致谢

作为App Inventor原动力的教育观坚持认为,通过主动学习,计算可以成为那些迷人的强大思想的载体。因此,App Inventor是不断发展的计算机及教育事业的一部分,这一事业始于1960年代西摩•帕尔特及MIT的Logo小组的努力,透过众多旨在支持计算思维的活动及计划,可见其影响一直延续至今。

App Inventor的设计借鉴了以前的教育计算机化(教育电算化?)研究,并立足于谷歌在线开发环境的技术成果。可视化编程框架与MIT的scratch编程语言密切相关。在具体实现上基于开放的模块,这是由MIT的Scheller教师培育计划所发布,并源于MIT Ricarose Roque的研究论文。我们感谢Scheller计划的Eric Klopfer与Daniel Wendel使得开放模块成为可能,并感谢他们在工作中所提供的协助。为Android上的实现而充当视觉模块语言翻译的编译器使用了Kawa语言框架,而Kawa是Scheme编程语言的方言,由Per Bothner开发,并由自由软件基金会发布,它是GNU操作系统的一部分。

作者要感谢谷歌和App Inventor团队在USF、米尔斯学院及MIT所给予我们的工作的支持以及教学上的努力。特别感谢App Inventor技术主管Mark Friedman,项目经理Karen Parker,与工程师Sharon Perl和Debby Wallach。

我们还欠了特别感谢我们的O'Reilly的编辑,Courtney Nash 和Brian Jepson,以及Kathy Riutzel,Brian Kernighan,Debby Wallach,以及Rafiki Cai,感谢他们的反馈和见解。

最后,我们还要感谢我们各自的配偶支持:Ellen的丈夫Keith Golden;Hal的妻子Lynn Abelson; Liz的丈夫Kevin Looney,David的妻子,Minerva Novoa。新妈妈Ellen还感谢保Neil Fullagar的帮助

提示:这里提供了用于体验的开发环境 www.17coding.net。