前言
想象一下,你像往常一样,正在一条熟悉的路上慢跑,突然脑中产生了一个想法—— 一款全新的杀手级移动应用!一路上,你甚至忘记了时间,一心想着要把这个想法付诸实践。但是该从哪里下手呢?你并不是一名程序员,而要成为程序员怎么也得花上几年的时间,何况时间就是金钱,等你真的成为程序员的时候,可能早已有人把它做出来了。于是就这样,你的灵感胎死腹中了。
现在来设想一个全然不同的世界,在那里,创建应用不需要有多年编程经验,艺术家、科学家、人道主义者、卫生保健工作者、律师、消防员、马拉松运动员、足球教练等各行各业的人,都可以自己动手创建应用。设想一下,在这个世界里,不必雇用专业程序员,就可以把想法转变为应用的原型;你还可以创建只属于你个人的应用,利用移动计算技术来满足自己独特的需求。
这就是App Inventor的世界,一个用于创建移动应用的可视化编程工具。实践证明,这种基于“块”语言的可视化编程方法,显著地降低了为安卓设备开发应用的门槛,就连孩子们也能够运用自如。让我们来想象一下,把电子游戏里的角色替换成你和你的朋友;或者做一款“买牛奶”的应用,当你下午3点钟之后路过某个超市时,手机会主动提醒你买牛奶;或者是一款问答应用,把它作为一种别出心裁的求婚方式,发给你的那一位:“问题4:你愿意嫁给我吗?如果愿意,按下按钮发送短信。”真的有人创建了一个类似的App Inventor应用来求婚,而对方居然说“愿意”!
面向手机的块语言
App Inventor是一款采用拖曳操作的可视化编程工具,主要用于构建运行在安卓平台上的移动应用。App Inventor提供了基于Web的图形用户界面设计工具,你可以用它设计应用的外观,然后像玩拼图游戏一样,将“块”语言拼在一起来定义应用的行为。
图P-1显示的代码块来自于一款应用的早期版本,它的开发者Daniel Finnegan是一名从未学过编程的大学生。你能猜出这是一款什么样的应用吗?
图P-1 一款自动回复短信的应用
这是一款短信“应答机”应用。开车时启动它,就可以对收到的短信进行自动回复。
相比传统的程序代码,这些代码块更容易理解,于是你立刻被深深地吸引住。结合自己的切身体会,你也提出了一些问题:能不能将收到的短信大声地读出来?我能自定义回复内容吗?能不能做一个像《美国偶像》(American Idol)那样的应用,让人们用短信来投票?以上所有问题的答案都是肯定的。这本书就是要告诉你怎么做。
用App Inventor做什么
可做的事情简直是太多了!
· 把开发当作游戏
为手机编写应用本来就很有意思,而使用App Inventor则更增添了探索和发现的乐趣。只需在Web浏览器中打开App Inventor,连上手机,并像图P-1中那样把一些块拼在一起,立即就能在手机上看到你的应用,并且能够与之交互。于是你开始编程,你发邮件给朋友们,让他们发短信来测试你的应用;或者用刚写好的应用来控制一个乐高NXT机器人;再或者拔下手机,走到户外,去验证一下应用中的位置传感器是否有效。
· 创建原型应用
有了创建一款应用的灵感,是吗?那就快速地创建一个原型,切莫随手记在餐巾纸上,或者干脆让它随风飘散。什么是原型呢?它是你构思的模型,是有待完善的作品。用文字来表达想法,就像是写一篇散文给你的朋友或爱人;而用App Inventor创建一个原型,就像是写给风险投资人的一首诗。因此我们说,对于移动应用的开发来说,App Inventor就像一张电子餐巾纸。
· 构建个性化应用
目前,在移动应用的世界里,我们只能被动接受那些推送过来的应用。你就没有抱怨过吗?我们更期待那种个性化的应用,或者至少让我们能够有所取舍。使用App Inventor,你就可以创建出更贴近自己需求的应用。例如,第3章的“打地鼠”游戏中,有一个随机移动的地鼠,每次触碰到它你都可以增加得分,你完全可以把教程中的地鼠替换成你想要的形象,比如你弟弟妹妹的照片,或者随便什么你能想到的东西,只要你喜欢!同样,在第8章的出题应用中,我们给出的问题都与美国总统有关,你可以轻而易举地将那些问题替换成你感兴趣的问题,比如,你最喜爱的音乐、你的家族历史,等等。
· 开发完整的应用
App Inventor不只是一个原型开发系统或界面设计器,它也可以用来创建各种完整的应用。它所使用的块语言提供了所有基础的编程指令,如循环语句及条件语句等,只不过是以“块”的方式来呈现而已。
· 教学
无论是对于初中、高中还是大学的学生,App Inventor都是一个非常出色的教学工具。它的出色不仅仅是对计算机科学而言,对于数学、物理、工商管理以及几乎任何其他学科来说,它也是一个了不起的工具。重要的是在创造中学习,而不是死记公式。例如,你创建了一个寻找最近医院(或商场)的应用;又比如,用马丁·路德·金和马尔科姆· X的视频或演讲的录音片段来创建一个多媒体的问答应用,远比写一段黑人历史的文章来得生动。我们坚信App Inventor以及本书将成为你学习中贯穿始终的强有力的工具。
为什么要用App Inventor
很多人说App Inventor之所以易用,是因为它采用了可视化操作界面以及可拖曳的块语言。但这背后究竟意味着什么呢?为什么App Inventor会易于使用?
· 无需记忆和输入指令
对于初学者来说,学习编程有两大困难:一是要输入代码,二是要面对那些计算机弹出的令人费解的错误信息。这种困难带来的挫折感,往往使初学者还没体会解决逻辑性问题的乐趣,就中途放弃了。
· 你要做的只是选择
在App Inventor中,组件和代码块被分门别类地放在不同的抽屉中,触手可得。编程的过程就是找到这些块并把它们拖到程序中来实现你预想的功能,你不需要记住那些指令或查阅参考手册。
· 限定代码块之间的匹配
同那些让程序员感到挫败的神秘错误信息相比,App Inventor的块语言从一开始就排除了很多犯错的机会。例如,如果一个代码块要求你输入数字,你就无法输入数字以外的任何字符。这虽然不能消除所有的错误,但起码会排除很多低级错误。
· 事件的即时处理
在传统编程语言诞生的那个年代,编写程序就是按照特定的顺序输入一组命令,就像厨师照着菜谱的流程做菜一样。但是在图形用户界面中,特别是在移动应用中,程序将不再按照某个特定的顺序执行,而是由那些随时可能发生的事件(例如,收到短信或来电)触发运行。因此,大多数的程序都不再采用这种菜谱的模式,取而代之的是对事件的处理。事件处理程序的工作方式是“当某事件发生时,做某事”。在传统的语言(如Java)中,你要了解类、对象,以及一种叫作“事件侦听器”的特殊对象,每个侦听器代表一个事件。而在App Inventor中,你可以拖曳出一个“事件块”来表示“用户点击按钮”或“收到短信”之类的事件。
适合创建哪些类型的应用
用App Inventor可以创建各种不同类型的应用。只需发挥你的想象力,就能创建出各种既有趣又实用的应用来。
· 游戏
一般人们都会从简单的应用开始,例如,第3章的“打地鼠”游戏,或者第2章的油漆桶应用(在朋友的脸上绘画)。然后随着不断进步,你可以开始按照自己的想法做一些更复杂的游戏,如“吃豆子”“太空侵略者”等。你甚至可以使用手机中的传感器,通过倾斜手机来控制游戏中角色的移动(第5章)。
· 教学类应用
App Inventor不仅限于制作简单的游戏,也可用于创建信息和教育类应用。第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开发工具是一款在线应用(非桌面程序),向所有人免费开放。只要你能联通网络,就可以在任何浏览器中使用它。你甚至不需要手机:内置的安卓模拟器可用于应用的测试。截至2014年9月,App Inventor已经拥有了190万注册用户,他们来自195个国家,并共同创建了将近500万个应用。
是谁创建了这些应用?他们是专职的程序员吗?有些是,但大多数不是。
其中最有说服力的例子是David Wolber教授的一门课程。Wolber教授是本书的作者之一,就职于旧金山大学。旧金山大学为商科及文科学生开设了一门计算机科学的基础课程,而App Inventor是这门课程的一部分。许多参加这门课的学生对数学是既恨又怕,而这门课恰恰满足了这些患有数学恐惧症的学生的核心需求,其中绝大多数学生连做梦也没想到他们会编写计算机程序。
尽管毫无经验可言,但学生们依然学会了App Inventor,并成功地创建了许多了不起的应用。一个英语专业的学生首创了“开车不发短信”应用;两个通信专业的学生创建了“安卓,我的车在哪儿?”应用(第7章);而一个国际研究专业的学生创建了“广播中心”应用(第11章)。有一天晚上,已经过了下班时间,一位艺术系的学生去敲Wolber教授办公室的门,询问他如何写一个条件循环。这让Wolber教授意识到,App Inventor已经极大地改变了计算机教育的格局。
媒体也开始关注这一意义非凡的变化。《纽约时报》称App Inventor为“DIY应用开发软件”。《旧金山纪事报》撰文报道了旧金山大学的学生们的工作:“谷歌让普通大众变成了应用的生产者。”《连线》杂志则采访了“开车不发短信”应用的作者Daniel Finnegan,并断言:“Finnegan的故事表明,编程大众化的时代已经到来。”
正如他们所说,这只猫已经跳出来了(第1章的应用里有一只小猫)。现在,在世界各地,App Inventor已经被列为初中及高中课程。来自28个国家的2500多位女生参加了“技术创新挑战”项目(一个面向高中女生的课外项目,http://www.technovationchallenge.org/);在高中开设的试点课程——计算机原理的预备课程(http://mobile-csp.org/)中,也加入了App Inventor的内容;在许多大学新开设的入门课程中,也都有App Inventor的一席之地。数千名爱好者、商人、求婚者以及“能工巧匠”们正漫游在App Inventor的网站上,创建自己的应用。你还等什么?开始行动吧,无需拥有编程经验!
排版约定
本书使用了下列排版约定。
· 楷体
表示新术语。
· 等宽字体(constant width)
表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。
· 加粗等宽字体(constant width bold)
表示应该由用户输入的命令或其他文本。
· 斜体等宽字体(constant width bold)
表示应当被用户自定义的值或上下文决定的值所替换的文本。
这个图标表示提示或建议。
这个图标表示测试环节以及测试说明。
使用代码示例
补充材料(代码示例、练习等)可以从https://appinventor.org/bookFiles下载。
本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很大一部分代码,否则无需联系我们获得许可。比如,用本书的几个代码片段写一个程序就无需获得许可,销售或分发O'Reilly图书的示例光盘则需要获得许可;引用本书中的示例代码回答问题无需获得许可,将书中大量的代码放到你的产品文档中则需要获得许可。
我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN。比如:“App Inventor 2 by David Wolber, Hal Abelson, Ellen Spertus, and Liz Looney(O'Reilly). Copyright 2015 David Wolber, Hal Abelson, Ellen Spertus, and Liz Looney, 978-1-491-90684-2.”
如果你觉得自己对示例代码的用法超出了上述许可的范围,欢迎你通过permissions@oreilly.com与我们联系。
Safari® Books Online
Safari Books Online(http://www.safaribooksonline.com)是应运而生的数字图书馆。它同时以图书和视频的形式出版世界顶级技术和商务作家的专业作品。技术专家、软件开发人员、Web设计师、商务人士和创意专家等,在开展调研、解决问题、学习和认证培训时,都将Safari Books Online视作获取资料的首选渠道。
对于组织团体、政府机构和个人,Safari Books Online提供各种产品组合和灵活的定价策略。用户可通过一个功能完备的数据库检索系统访问O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology以及其他几十家出版社的上千种图书、培训视频和正式出版之前的书稿。要了解Safari Books Online的更多信息,我们网上见。
联系我们
请把对本书的评价和问题发给出版社。
美国:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
O'Reilly的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是:
http://shop.oreilly.com/product/0636920034056.do
对于本书的评论和技术性问题,请发送电子邮件到:
bookquestions@oreilly.com
要了解更多O'Reilly图书、培训课程、会议和新闻的信息,请访问以下网站:
我们在Facebook的地址如下:
请关注我们的Twitter动态:
http://twitter.com/oreillymedia
我们的YouTube视频地址如下:
http://www.youtube.com/oreillymedia
致谢
催生App Inventor的动机是教育。基于这样的动机,我们坚持认为,通过主动学习,程序可以成为思想的载体,可以让那些奇思妙想变为现实。因此,App Inventor是不断发展的计算机及教育事业的一部分,这一事业始于20世纪60年代Seymour Papert及麻省理工学院Logo小组的努力,他们策划了众多的活动和计划来支持推广计算思维,其影响一直延续至今。
App Inventor的设计借鉴了此前的计算机辅助教育的研究成果,并立足于谷歌在线开发环境。可视化编程框架则与麻省理工学院的Scratch编程语言密切相关。App Inventor 2是基于Blockly的一个特殊实现,Blockly由谷歌公司Neil Fraser领导的团队开发。将可视化的块语言编译为安卓运行代码的编译器采用了Kawa语言框架,而Kawa是Scheme编程语言的方言,由Per Bothner开发,并由自由软件基金会发布,它是GNU操作系统的一部分。
我们在此感谢谷歌公司及App Inventor原创团队,他们为我们在旧金山大学、密尔斯学院以及麻省理工学院的工作及教学探索提供了支持。特别要感谢App Inventor技术主管Mark Friedman、项目经理Karen Parker,以及工程师Sharon Perl和Debby Wallach。
同样感谢麻省理工学院的App Inventor团队,他们一直致力于App Inventor的开发与完善。特别感谢技术主管Andrew Mckinney、技术全才Jeff Schiller、教育及推广主管Shaileen Pokress及Josh Sheldon、无名英雄Jose Domínguez工程师,以及贡献出宝贵假期的Franklyn Turbak和Ralph Morelli。
还要特别感谢旧金山大学的学生Cayla Shaver所做的非凡的编辑工作,以及为本书向App Inventor 2改版所提供的帮助。
最后,我们还要感谢我们各自家庭成员的支持:Ellen的丈夫Keith Golden, Hal的妻子Lynn Abelson, Liz的丈夫Kevin Looney, David的妻子Minerva Novoa。新妈妈Ellen还要感谢保姆Neil Fullagar的帮助。
电子书
扫描如下二维码,即可购买本书电子版。