你正在一條熟悉的路上慢跑,突然被一個(gè)念頭擊中——下一款殺手級(jí)的移動(dòng)應(yīng)用。一路上你甚至不再關(guān)心時(shí)間,只想讓你的想法立即變?yōu)楝F(xiàn)實(shí)。但究竟如何下手呢?你還不是一名程序員,要想成為程序員,也得需要幾年的時(shí)間,而時(shí)間就是金錢,而且......甚至,有人可能已經(jīng)把它做出來(lái)了。就這樣,你的設(shè)想胎死腹中了。
現(xiàn)在想象一個(gè)不同的世界,在那里,創(chuàng)建應(yīng)用無(wú)需多年的編程經(jīng)驗(yàn),藝術(shù)家、科學(xué)家、人道主義者、衛(wèi)生保健工作者、律師、消防員、馬拉松運(yùn)動(dòng)員、足球教練,以及社會(huì)各界人士都可以自己創(chuàng)建應(yīng)用。想象一下,在這個(gè)世界里,不必雇用程序員,就可以將想法轉(zhuǎn)化為應(yīng)用的原型;你可以創(chuàng)建自己專屬的應(yīng)用,利用移動(dòng)計(jì)算技術(shù)來(lái)滿足你個(gè)人的需求。
這就是App Inventor的世界,谷歌公司的新型可視化編程工具,用于構(gòu)建移動(dòng)應(yīng)用。事實(shí)證明,基于可視“塊”語(yǔ)言的編程方法,即便是對(duì)孩子來(lái)說(shuō),也是成功的。App Inventor大大降低了為Android手機(jī)和設(shè)備開(kāi)發(fā)應(yīng)用的門檻。想象一下,視頻游戲里的角色變成你和你的朋友;或者一款“買牛奶”的應(yīng)用,當(dāng)你在下午3點(diǎn)以后路過(guò)某個(gè)超市時(shí),它會(huì)提醒你;或者一款測(cè)驗(yàn)應(yīng)用,其實(shí)是一種別出心裁的求婚形式,發(fā)給你的另一半“問(wèn)題4:你愿意嫁給我嗎?如果愿意,按下按鈕發(fā)送短信?!闭娴挠腥擞眠@種App Inventor應(yīng)用來(lái)求婚,而對(duì)方居然說(shuō)是!
App Inventor是一個(gè)可視化,可拖拽的編程工具,用于在Android平臺(tái)上構(gòu)建移動(dòng)應(yīng)用。利用基于web的圖形化的用戶界面生成器,可以設(shè)計(jì)應(yīng)用的用戶界面(外觀),然后像玩拼圖玩具一樣,將“塊”語(yǔ)言拼在一起,來(lái)定義應(yīng)用的行為。
插圖0-1顯示了一款應(yīng)用的早期版本中使用的塊語(yǔ)言,創(chuàng)作者Daniel Finnegan是一名從未學(xué)過(guò)編程的大學(xué)生。你能說(shuō)出這個(gè)應(yīng)用的功能嗎?
圖 0-1 用App Inventor塊語(yǔ)言來(lái)定義應(yīng)用的功能
這是一款短信“應(yīng)答機(jī)”應(yīng)用。開(kāi)車時(shí)啟動(dòng)它,就可以對(duì)收到的短信進(jìn)行自動(dòng)回復(fù)。
可以看到,比起傳統(tǒng)的程序代碼,這些塊語(yǔ)言更易于理解,因此你立即受到吸引,結(jié)合自己的實(shí)際經(jīng)驗(yàn),你可能會(huì)問(wèn):能不能把收到的短信大聲讀出來(lái)?我可以定制我的回復(fù)嗎?我能否建一個(gè)應(yīng)用,像“美國(guó)偶像”那樣,讓人們用短信來(lái)投票?以上所有問(wèn)題的答案都是肯定的。這本書將要告訴你怎樣做到。
為手機(jī)寫應(yīng)用充滿了樂(lè)趣,而App Inventor更增加了探索和發(fā)現(xiàn)的樂(lè)趣。只需在Web瀏覽器中打開(kāi)App Inventor,連上手機(jī),并像圖0-1中那樣把一些塊拼在一起,立即就能在手機(jī)上看到你的應(yīng)用,并與之交互了。于是你開(kāi)始編程,你會(huì)發(fā)郵件給朋友們,讓他們發(fā)短信來(lái)測(cè)試你的應(yīng)用;或者用剛寫好的應(yīng)用來(lái)控制一個(gè)LEGO NXT機(jī)器人;再或者拔下手機(jī),走到戶外,去驗(yàn)證一下應(yīng)用中是否正確地使用了位置傳感器。
對(duì)應(yīng)用有想法了,是嗎?快速地創(chuàng)建一個(gè)原型,而不是隨手記在餐巾紙上,或干脆讓它隨風(fēng)飄散。原型是想法的模型,不夠完整,也不夠精致。用文字來(lái)表達(dá)一個(gè)想法,就像寫一篇散文給朋友或愛(ài)人;而建一個(gè)App Inventor的原型,就像寫首詩(shī)歌給風(fēng)險(xiǎn)投資人。這樣一來(lái),對(duì)于移動(dòng)應(yīng)用的開(kāi)發(fā)來(lái)說(shuō),App Inventor就像一張電子餐巾紙。
在當(dāng)前的移動(dòng)應(yīng)用世界里,我們被迫接受那些推送過(guò)來(lái)的應(yīng)用。你沒(méi)抱怨過(guò)嗎?我們期待個(gè)性化的應(yīng)用,或者至少讓我們能夠調(diào)整它的功能。使用App Inventor,可以創(chuàng)建貼近自己需求的應(yīng)用。例如,第三章的MoleMash(打地鼠)游戲中,有一個(gè)隨機(jī)移動(dòng)的地鼠,每次觸碰到它都可以得分,你可以把地鼠的形象替換成你喜歡的,比如你兄弟姐妹的照片,而不必在乎別人是否喜歡;第八章的測(cè)驗(yàn)應(yīng)用,詢問(wèn)與美國(guó)總統(tǒng)有關(guān)的問(wèn)題,但你可以輕松地修改問(wèn)題,任何話題都可以,從你最喜愛(ài)的音樂(lè)到家族史。
App Inventor不只是一個(gè)原型系統(tǒng)或界面設(shè)計(jì)器,也可以用于創(chuàng)建各類完整的應(yīng)用。它所使用的塊語(yǔ)言提供了所有基礎(chǔ)的編程指令,如循環(huán)及條件,只是以“塊”的方式來(lái)呈現(xiàn)。
無(wú)論你是中學(xué)生還是大學(xué)生,App Inventor都是一個(gè)偉大的教學(xué)工具。它的偉大不僅僅是對(duì)計(jì)算機(jī)科學(xué)而言,對(duì)與數(shù)學(xué)、物理、創(chuàng)業(yè)以及幾乎任何其他學(xué)科來(lái)說(shuō),它都是一個(gè)了不起的工具。重要的是在創(chuàng)造中學(xué)習(xí),而不是死記公式,例如,你創(chuàng)建了一個(gè)尋找最近醫(yī)院(或商場(chǎng))的應(yīng)用;又比如,用馬丁?路德?金和馬爾科姆?X的視頻或演講片段來(lái)創(chuàng)建一個(gè)多媒體測(cè)驗(yàn)應(yīng)用,遠(yuǎn)比寫一段黑人歷史的文章來(lái)得生動(dòng)。我們堅(jiān)信App Inventor以及本書將成為你學(xué)習(xí)中貫穿始終的偉大工具。
很多人說(shuō)App Inventor之所以易用,是因?yàn)樗梢暬牟僮鹘缑?,以及可拖拽的塊語(yǔ)言。但這究竟意味著什么呢?為什么App Inventor會(huì)易于使用?
對(duì)于新手來(lái)說(shuō),編程最大的挫折在于兩點(diǎn),一是要輸入代碼,二是面對(duì)計(jì)算機(jī)彈出的令人費(fèi)解的錯(cuò)誤消息。這種挫折讓很多初學(xué)者來(lái)不及體會(huì)解決邏輯性問(wèn)題的樂(lè)趣,就中途放棄了。
在App Inventor中,組件和塊被分門別類地放在不同的抽屜中,觸手可得。編程的過(guò)程,就是找到這些塊,并把它們拖到程序中,來(lái)實(shí)現(xiàn)你預(yù)設(shè)的功能,無(wú)需記住那些指令或查閱手冊(cè)。
與那些挫敗程序員的神秘的錯(cuò)誤信息相比,App Inventor的塊語(yǔ)言從一開(kāi)始就排出了很多犯錯(cuò)的機(jī)會(huì)。例如,某功能塊要求輸入數(shù)字,就無(wú)法輸入文字。這雖然不能消除所有的錯(cuò)誤,但肯定是有幫助的。
使用傳統(tǒng)編程語(yǔ)言時(shí),程序的執(zhí)行就像照著菜譜做菜一樣,是順序執(zhí)行一系列的指令。但使用圖形界面的應(yīng)用,特別是移動(dòng)應(yīng)用,事件可能隨時(shí)發(fā)生(例如,接收短信或電話),多數(shù)程序都不采用菜譜的形式,取而代之的是對(duì)事件的處理。事件處理程序的工作方式是:“當(dāng)某事件發(fā)生時(shí),程序要做這件事?!痹趥鹘y(tǒng)的語(yǔ)言如Java中,你要了解類、對(duì)象,以及一種叫做偵聽(tīng)器的特殊對(duì)象,每個(gè)偵聽(tīng)器代表一個(gè)事件。在App Inventor中,用“when”塊來(lái)表示事件,像“當(dāng)用戶點(diǎn)擊按鈕...”或“當(dāng)收到短信時(shí)...”這樣的事件。
用App Inventor可以創(chuàng)建各種不同類型的應(yīng)用。發(fā)揮你的想象力,就可以創(chuàng)建出各種既有趣又實(shí)用的應(yīng)用。
人們往往從簡(jiǎn)單的應(yīng)用開(kāi)始,像第3章的“打地鼠”游戲,或第2章的在朋友臉上繪畫的應(yīng)用。隨著不斷進(jìn)步,可以開(kāi)始按照自己的想法做一些更復(fù)雜的游戲,如吃豆人與太空侵略者等。你甚至可以使用手機(jī)的傳感器,通過(guò)傾斜手機(jī)讓游戲中的角色移動(dòng)(第5章)。
App Inventor不僅限于制作簡(jiǎn)單的游戲,也可用于創(chuàng)建信息和教育類應(yīng)用。第8章的“測(cè)驗(yàn)”應(yīng)用可以幫助學(xué)生們?cè)诳荚嚽案玫貜?fù)習(xí),第10章的“出題”應(yīng)用,允許用戶為自己出一份考卷(想想那些長(zhǎng)途旅行的家長(zhǎng)們會(huì)多么喜歡這個(gè)應(yīng)用?。?。
因?yàn)锳pp Inventor提供了訪問(wèn)GPS位置傳感器的功能,因此可以構(gòu)建一個(gè)定位應(yīng)用——知道自己在哪兒;也可以建一個(gè)停車應(yīng)用,幫你記住停車位置(第7章);或者一個(gè)找人應(yīng)用,在音樂(lè)會(huì)或大型會(huì)議時(shí),顯示你的朋友或同事的位置;或者一個(gè)定制的游覽應(yīng)用,為你所在學(xué)校、工作場(chǎng)所或博物館預(yù)置游覽路線。
您可以創(chuàng)建以下應(yīng)用:掃描條碼、交談、傾聽(tīng)(文字識(shí)別)、播放音樂(lè)、制作音樂(lè)(第9章)、播放視頻、檢測(cè)手機(jī)的方向和加速度、拍照以及撥打電話。從技術(shù)上講,智能手機(jī)就像一把瑞士軍刀,并且谷歌的工程師們一直致力于讓App Inventor的技術(shù)更易于掌握。
“開(kāi)車不發(fā)短信”(第4章)只一個(gè)短信處理類應(yīng)用的簡(jiǎn)單案例,還可以編寫應(yīng)用,定時(shí)向親友們發(fā)送“想念你”一類的問(wèn)候,或像“廣播中心”(第11章)那樣的應(yīng)用,幫助協(xié)調(diào)大型活動(dòng)。需要這樣的應(yīng)用嗎?讓你的朋友用短信來(lái)投票,就像“美國(guó)偶像”節(jié)目那樣。這些應(yīng)用都可以用App Inventor來(lái)完成。
第12章展示了如何創(chuàng)建應(yīng)用來(lái)充當(dāng)LEGO機(jī)器人的控制器。把手機(jī)當(dāng)做遙控器,或者為機(jī)器人編寫一個(gè)“大腦”伴隨它到處游走。機(jī)器人與手機(jī)之間依靠藍(lán)牙通信,App Inventor的藍(lán)牙組件也可以創(chuàng)建類似的應(yīng)用,來(lái)控制其他的藍(lán)牙設(shè)備。
App Inventor大大降低了編程的門檻,幾小時(shí)內(nèi)就可以創(chuàng)建出很炫的高科技應(yīng)用,但這門語(yǔ)言的功能并不簡(jiǎn)單,它同樣提供了循環(huán)、條件以及其它程序及邏輯結(jié)構(gòu),來(lái)實(shí)現(xiàn)邏輯較為復(fù)雜的應(yīng)用。在嘗試創(chuàng)建應(yīng)用的過(guò)程中,你會(huì)驚奇地發(fā)現(xiàn)這些邏輯問(wèn)題是多么的有趣。
App Inventor也提供了應(yīng)用與Web之間的通信手段??梢詫懸粋€(gè)應(yīng)用從Twitter或RSS訂閱上抓取數(shù)據(jù),或者打開(kāi)亞馬遜書店的Web頁(yè)面,通過(guò)掃描條碼來(lái)查詢一本書的線上價(jià)格。
App Inventor免費(fèi)提供給任何人使用。它在線運(yùn)行(不是桌面程序),可以在任何瀏覽器中訪問(wèn)。你甚至不需要手機(jī):內(nèi)置的Android模擬器可用于應(yīng)用的測(cè)試。截至2011年1月,App Inventor已經(jīng)擁有了幾萬(wàn)個(gè)活躍用戶以及幾十萬(wàn)個(gè)應(yīng)用。
是誰(shuí)創(chuàng)建了這些應(yīng)用?他們是程序員嗎?有些人是,但大多數(shù)人不是。其中最有說(shuō)服力的例子是David Wolber教授的一門課程。Wolber教授是本書的作者之一。在舊金山大學(xué)(USF),App Inventor是計(jì)算機(jī)科學(xué)通識(shí)課的一部分,主要針對(duì)商務(wù)和人文學(xué)院的學(xué)生。許多參加這門課的學(xué)生對(duì)數(shù)學(xué)是既恨又怕,而這門課恰恰滿足了學(xué)生們懼怕數(shù)學(xué)的核心需求,絕大多數(shù)學(xué)生連做夢(mèng)也沒(méi)想到他們會(huì)編寫計(jì)算機(jī)程序。
盡管毫無(wú)經(jīng)驗(yàn)可言,但學(xué)生們依然學(xué)會(huì)了App Inventor并成功地創(chuàng)建了偉大的應(yīng)用。英語(yǔ)專業(yè)的學(xué)生首創(chuàng)了“開(kāi)車不發(fā)短信”應(yīng)用;兩個(gè)通信專業(yè)的學(xué)生創(chuàng)建了“Android,我的車在哪兒?”;而一個(gè)國(guó)際研究專業(yè)的學(xué)生創(chuàng)建了“廣播中心”應(yīng)用(第11章)。有一天晚上,在下班后,一個(gè)藝術(shù)專業(yè)的學(xué)生去敲Wolber教授辦公室的門,詢問(wèn)怎么寫一個(gè)while循環(huán),此時(shí)此刻他意識(shí)到,App Inventor已經(jīng)極大地改變了技術(shù)的格局。
媒體也開(kāi)始關(guān)注這一意義非凡的變化。《紐約時(shí)報(bào)》稱App Inventor為“DIY應(yīng)用創(chuàng)建軟件”;《舊金山大學(xué)記事》撰文報(bào)到了USF學(xué)生們的工作:“Google讓大正成為應(yīng)用的生產(chǎn)者”?!稛o(wú)線》雜志描寫了Daniel Finnegan——“開(kāi)車不發(fā)短信”的作者,并寫到“Finnegan的故事有力地說(shuō)明:編程普及的時(shí)代正在來(lái)臨?!?/p>
如他們所說(shuō),這只貓已經(jīng)跳出來(lái)(第一章應(yīng)用里有一只小貓)?,F(xiàn)在App Inventor已經(jīng)在高中開(kāi)課;在“挑戰(zhàn)技術(shù)創(chuàng)新”的課后項(xiàng)目中(面向舊金山灣區(qū)的高中女生),在西雅圖湖畔學(xué)校,以及幾所大學(xué)的入門課上,都有App Inventor的一席之地。有數(shù)千名愛(ài)好者、商人、婚介人以及能工巧匠們正漫游在App Inventor的網(wǎng)站和論壇上(http://appinventor.googlelabs.com/forum/)。想要開(kāi)始行動(dòng)嗎?不必?fù)碛芯幊探?jīng)驗(yàn)!
本書采用了如下的通用慣例:
粗體綠色文本:代表程序塊
斜體:表示email地址、URL地址、文件名、路徑名,強(qiáng)調(diào)首次出現(xiàn)的術(shù)語(yǔ)。
等寬字體:表示Python代碼,組件、屬性、變量及函數(shù)的名稱。
這個(gè)圖標(biāo)表示:測(cè)試環(huán)節(jié)以及測(cè)試說(shuō)明。
這個(gè)圖標(biāo)表示:提示、建議或一般性注釋。
本書可作為初高中及大學(xué)課程的教科書,或有志向的開(kāi)發(fā)者的入門書。全書分為兩部分:第一部分是一整套創(chuàng)建具體應(yīng)用的教程,第二部分是App Inventor指南(手冊(cè)),后者的編排更像是一部經(jīng)典的編程教科書。隨著學(xué)習(xí)的不斷深入,教程的復(fù)雜性也在增加,從第一章的“Hello,貓咪!”——每次點(diǎn)擊都讓小貓發(fā)出叫聲,到一個(gè)支持Web的應(yīng)用:通過(guò)掃描書上的條碼,就可以從Amazon Web Service上獲得相關(guān)信息(第13章)。
從理論上將,最好是按教程的順序來(lái)學(xué)習(xí),但如果你覺(jué)得很輕松,那么也可以跳著看。本教程手把手地教你創(chuàng)建應(yīng)用的每一個(gè)具體步驟,并提供塊語(yǔ)言的截圖來(lái)幫助理解,你還可以參考App Inventor指南部分的章節(jié),將有助于鞏固對(duì)概念的理解。
手頭最好有本參考書,因?yàn)锳pp Inventor的開(kāi)發(fā)環(huán)境占滿了電腦屏幕,留給顯示教程的空間極其有限。我們?cè)O(shè)想人們將書放在手邊,并跟隨教程完成每個(gè)應(yīng)用的學(xué)習(xí)和創(chuàng)建過(guò)程。然而我們同樣希望人們能在遠(yuǎn)離電腦的情況下,花時(shí)間來(lái)系統(tǒng)地閱讀更多App Inventor指南中的章節(jié)。
對(duì)于教師和學(xué)生來(lái)說(shuō),這本書可以作為計(jì)算機(jī)科學(xué)入門課程的教科書,或者任何一門靠創(chuàng)造來(lái)學(xué)習(xí)的課程的參考資料。依我們的經(jīng)驗(yàn),“閱讀教程→討論→創(chuàng)作”這樣的順序會(huì)取得最好的效果。所以,第一步先讓學(xué)生完成教程中的一兩個(gè)應(yīng)用,不必要求太高,只要能按部就班地完成就好;第二步可以指定App Inventor指南中的某個(gè)章節(jié),在課堂上進(jìn)行討論和演說(shuō),來(lái)減緩學(xué)習(xí)的進(jìn)度;第三步要鼓勵(lì)學(xué)生探索:讓學(xué)生按照每一章末尾的改進(jìn)建議,在沒(méi)有具體指導(dǎo)的前提下,對(duì)應(yīng)用做出修改;最后,指定一個(gè)創(chuàng)造性的任務(wù),讓學(xué)生對(duì)應(yīng)用提出自己的想法,然后實(shí)現(xiàn)它們。
每章的文件及例子的完整代碼都可從這里下載:http://examples.oreilly.com/0636920016632/。
創(chuàng)建App Inventor開(kāi)發(fā)工具的動(dòng)機(jī)是教育,基于這樣的動(dòng)機(jī),我們堅(jiān)持認(rèn)為,通過(guò)主動(dòng)學(xué)習(xí),程序可以成為那些閃光的強(qiáng)大思想的載體。因此,App Inventor是不斷發(fā)展的計(jì)算機(jī)及教育事業(yè)的一部分,這一事業(yè)始于20世紀(jì)60年代Seymour Papert及MIT的Logo小組的努力,他們?cè)O(shè)計(jì)了眾多的活動(dòng)和計(jì)劃,來(lái)支持計(jì)算思維,其影響一直延續(xù)至今。
App Inventor的設(shè)計(jì)借鑒了此前的計(jì)算機(jī)輔助教育的研究成果,并立足于谷歌在線開(kāi)發(fā)環(huán)境??梢暬幊炭蚣芘cMIT的scratch編程語(yǔ)言密切相關(guān),在具體實(shí)現(xiàn)上依賴于Open Blocks,它由MIT的Scheller教師培育項(xiàng)目發(fā)布,并源自MIT 的Ricarose Roque的研究論文。我們感謝Scheller項(xiàng)目的Eric Klopfer與Daniel Wendel讓Open Blocks成為現(xiàn)實(shí),并感謝他們?cè)诠ぷ髦兴峁┑膮f(xié)助。將視覺(jué)化的塊語(yǔ)言翻譯為Android上的實(shí)現(xiàn)的編譯器使用了Kawa語(yǔ)言框架,而Kawa是Scheme編程語(yǔ)言的方言,由Per Bothner開(kāi)發(fā),并由自由軟件基金會(huì)發(fā)布,它是GNU操作系統(tǒng)的一部分。
作者要感謝谷歌和App Inventor團(tuán)隊(duì)在USF、米爾斯學(xué)院及MIT所給予我們的工作的支持以及教學(xué)上的努力。特別感謝App Inventor技術(shù)主管Mark Friedman,項(xiàng)目經(jīng)理Karen Parker,與工程師Sharon Perl和Debby Wallach。
我們還需特別感謝O'Reilly的編輯們,Courtney Nash、Brian Jepson,還有Kathy Riutzel、Brian Kernighan、Debby Wallach以及Rafiki Cai,感謝他們的反饋和見(jiàn)解。
最后,我們還要感謝我們各自的配偶的支持:Ellen的丈夫Keith Golden,Hal的妻子Lynn Abelson,Liz的丈夫Kevin Looney,David的妻子Minerva Novoa。新媽媽Ellen還要感謝保姆Neil Fullagar的幫助。
更多建議: