前言

2018-02-24 15:51 更新

你正在一條熟悉的路上慢跑,突然被一個(gè)念頭擊中——下一款殺手級的移動(dòng)應(yīng)用。一路上你甚至不再關(guān)心時(shí)間,只想讓你的想法立即變?yōu)楝F(xiàn)實(shí)。但究竟如何下手呢?你還不是一名程序員,要想成為程序員,也得需要幾年的時(shí)間,而時(shí)間就是金錢,而且......甚至,有人可能已經(jīng)把它做出來了。就這樣,你的設(shè)想胎死腹中了。

現(xiàn)在想象一個(gè)不同的世界,在那里,創(chuàng)建應(yīng)用無需多年的編程經(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ù)來滿足你個(gè)人的需求。

這就是App Inventor的世界,谷歌公司的新型可視化編程工具,用于構(gòu)建移動(dòng)應(yīng)用。事實(shí)證明,基于可視“塊”語言的編程方法,即便是對孩子來說,也是成功的。App Inventor大大降低了為Android手機(jī)和設(shè)備開發(fā)應(yīng)用的門檻。想象一下,視頻游戲里的角色變成你和你的朋友;或者一款“買牛奶”的應(yīng)用,當(dāng)你在下午3點(diǎn)以后路過某個(gè)超市時(shí),它會(huì)提醒你;或者一款測驗(yàn)應(yīng)用,其實(shí)是一種別出心裁的求婚形式,發(fā)給你的另一半“問題4:你愿意嫁給我嗎?如果愿意,按下按鈕發(fā)送短信。”真的有人用這種App Inventor應(yīng)用來求婚,而對方居然說是!

移動(dòng)電話專用的塊語言

App Inventor是一個(gè)可視化,可拖拽的編程工具,用于在Android平臺(tái)上構(gòu)建移動(dòng)應(yīng)用。利用基于web的圖形化的用戶界面生成器,可以設(shè)計(jì)應(yīng)用的用戶界面(外觀),然后像玩拼圖玩具一樣,將“塊”語言拼在一起,來定義應(yīng)用的行為。

插圖0-1顯示了一款應(yīng)用的早期版本中使用的塊語言,創(chuàng)作者Daniel Finnegan是一名從未學(xué)過編程的大學(xué)生。你能說出這個(gè)應(yīng)用的功能嗎?

{%}

圖 0-1 用App Inventor塊語言來定義應(yīng)用的功能

這是一款短信“應(yīng)答機(jī)”應(yīng)用。開車時(shí)啟動(dòng)它,就可以對收到的短信進(jìn)行自動(dòng)回復(fù)。

可以看到,比起傳統(tǒng)的程序代碼,這些塊語言更易于理解,因此你立即受到吸引,結(jié)合自己的實(shí)際經(jīng)驗(yàn),你可能會(huì)問:能不能把收到的短信大聲讀出來?我可以定制我的回復(fù)嗎?我能否建一個(gè)應(yīng)用,像“美國偶像”那樣,讓人們用短信來投票?以上所有問題的答案都是肯定的。這本書將要告訴你怎樣做到。

用App Inventor做什么?

為手機(jī)寫應(yīng)用充滿了樂趣,而App Inventor更增加了探索和發(fā)現(xiàn)的樂趣。只需在Web瀏覽器中打開App Inventor,連上手機(jī),并像圖0-1中那樣把一些塊拼在一起,立即就能在手機(jī)上看到你的應(yīng)用,并與之交互了。于是你開始編程,你會(huì)發(fā)郵件給朋友們,讓他們發(fā)短信來測試你的應(yīng)用;或者用剛寫好的應(yīng)用來控制一個(gè)LEGO NXT機(jī)器人;再或者拔下手機(jī),走到戶外,去驗(yàn)證一下應(yīng)用中是否正確地使用了位置傳感器。

建立原型

對應(yīng)用有想法了,是嗎?快速地創(chuàng)建一個(gè)原型,而不是隨手記在餐巾紙上,或干脆讓它隨風(fēng)飄散。原型是想法的模型,不夠完整,也不夠精致。用文字來表達(dá)一個(gè)想法,就像寫一篇散文給朋友或愛人;而建一個(gè)App Inventor的原型,就像寫首詩歌給風(fēng)險(xiǎn)投資人。這樣一來,對于移動(dòng)應(yīng)用的開發(fā)來說,App Inventor就像一張電子餐巾紙。

構(gòu)建個(gè)性化應(yīng)用

在當(dāng)前的移動(dòng)應(yīng)用世界里,我們被迫接受那些推送過來的應(yīng)用。你沒抱怨過嗎?我們期待個(gè)性化的應(yīng)用,或者至少讓我們能夠調(diào)整它的功能。使用App Inventor,可以創(chuàng)建貼近自己需求的應(yīng)用。例如,第三章的MoleMash(打地鼠)游戲中,有一個(gè)隨機(jī)移動(dòng)的地鼠,每次觸碰到它都可以得分,你可以把地鼠的形象替換成你喜歡的,比如你兄弟姐妹的照片,而不必在乎別人是否喜歡;第八章的測驗(yàn)應(yīng)用,詢問與美國總統(tǒng)有關(guān)的問題,但你可以輕松地修改問題,任何話題都可以,從你最喜愛的音樂到家族史。

開發(fā)完整的應(yīng)用

App Inventor不只是一個(gè)原型系統(tǒng)或界面設(shè)計(jì)器,也可以用于創(chuàng)建各類完整的應(yīng)用。它所使用的塊語言提供了所有基礎(chǔ)的編程指令,如循環(huán)及條件,只是以“塊”的方式來呈現(xiàn)。

教學(xué)

無論你是中學(xué)生還是大學(xué)生,App Inventor都是一個(gè)偉大的教學(xué)工具。它的偉大不僅僅是對計(jì)算機(jī)科學(xué)而言,對與數(shù)學(xué)、物理、創(chuàng)業(yè)以及幾乎任何其他學(xué)科來說,它都是一個(gè)了不起的工具。重要的是在創(chuàng)造中學(xué)習(xí),而不是死記公式,例如,你創(chuàng)建了一個(gè)尋找最近醫(yī)院(或商場)的應(yīng)用;又比如,用馬丁?路德?金和馬爾科姆?X的視頻或演講片段來創(chuàng)建一個(gè)多媒體測驗(yàn)應(yīng)用,遠(yuǎn)比寫一段黑人歷史的文章來得生動(dòng)。我們堅(jiān)信App Inventor以及本書將成為你學(xué)習(xí)中貫穿始終的偉大工具。

為什么要用App Inventor

很多人說App Inventor之所以易用,是因?yàn)樗梢暬牟僮鹘缑?,以及可拖拽的塊語言。但這究竟意味著什么呢?為什么App Inventor會(huì)易于使用?

無需記憶并輸入指令

對于新手來說,編程最大的挫折在于兩點(diǎn),一是要輸入代碼,二是面對計(jì)算機(jī)彈出的令人費(fèi)解的錯(cuò)誤消息。這種挫折讓很多初學(xué)者來不及體會(huì)解決邏輯性問題的樂趣,就中途放棄了。

你有多種選擇的可能性

在App Inventor中,組件和塊被分門別類地放在不同的抽屜中,觸手可得。編程的過程,就是找到這些塊,并把它們拖到程序中,來實(shí)現(xiàn)你預(yù)設(shè)的功能,無需記住那些指令或查閱手冊。

限定塊之間的匹配

與那些挫敗程序員的神秘的錯(cuò)誤信息相比,App Inventor的塊語言從一開始就排出了很多犯錯(cuò)的機(jī)會(huì)。例如,某功能塊要求輸入數(shù)字,就無法輸入文字。這雖然不能消除所有的錯(cuò)誤,但肯定是有幫助的。

直接處理事件

使用傳統(tǒng)編程語言時(shí),程序的執(zhí)行就像照著菜譜做菜一樣,是順序執(zhí)行一系列的指令。但使用圖形界面的應(yīng)用,特別是移動(dòng)應(yīng)用,事件可能隨時(shí)發(fā)生(例如,接收短信或電話),多數(shù)程序都不采用菜譜的形式,取而代之的是對事件的處理。事件處理程序的工作方式是:“當(dāng)某事件發(fā)生時(shí),程序要做這件事?!痹趥鹘y(tǒng)的語言如Java中,你要了解類、對象,以及一種叫做偵聽器的特殊對象,每個(gè)偵聽器代表一個(gè)事件。在App Inventor中,用“when”塊來表示事件,像“當(dāng)用戶點(diǎn)擊按鈕...”或“當(dāng)收到短信時(shí)...”這樣的事件。

你可以創(chuàng)建怎樣的應(yīng)用?

用App Inventor可以創(chuàng)建各種不同類型的應(yīng)用。發(fā)揮你的想象力,就可以創(chuàng)建出各種既有趣又實(shí)用的應(yīng)用。

游戲

人們往往從簡單的應(yīng)用開始,像第3章的“打地鼠”游戲,或第2章的在朋友臉上繪畫的應(yīng)用。隨著不斷進(jìn)步,可以開始按照自己的想法做一些更復(fù)雜的游戲,如吃豆人與太空侵略者等。你甚至可以使用手機(jī)的傳感器,通過傾斜手機(jī)讓游戲中的角色移動(dòng)(第5章)。

教育軟件

App Inventor不僅限于制作簡單的游戲,也可用于創(chuàng)建信息和教育類應(yīng)用。第8章的“測驗(yàn)”應(yīng)用可以幫助學(xué)生們在考試前更好地復(fù)習(xí),第10章的“出題”應(yīng)用,允許用戶為自己出一份考卷(想想那些長途旅行的家長們會(huì)多么喜歡這個(gè)應(yīng)用?。?/p>

位置感知應(yīng)用

因?yàn)锳pp Inventor提供了訪問GPS位置傳感器的功能,因此可以構(gòu)建一個(gè)定位應(yīng)用——知道自己在哪兒;也可以建一個(gè)停車應(yīng)用,幫你記住停車位置(第7章);或者一個(gè)找人應(yīng)用,在音樂會(huì)或大型會(huì)議時(shí),顯示你的朋友或同事的位置;或者一個(gè)定制的游覽應(yīng)用,為你所在學(xué)校、工作場所或博物館預(yù)置游覽路線。

高科技應(yīng)用

您可以創(chuàng)建以下應(yīng)用:掃描條碼、交談、傾聽(文字識(shí)別)、播放音樂、制作音樂(第9章)、播放視頻、檢測手機(jī)的方向和加速度、拍照以及撥打電話。從技術(shù)上講,智能手機(jī)就像一把瑞士軍刀,并且谷歌的工程師們一直致力于讓App Inventor的技術(shù)更易于掌握。

短信息應(yīng)用

“開車不發(fā)短信”(第4章)只一個(gè)短信處理類應(yīng)用的簡單案例,還可以編寫應(yīng)用,定時(shí)向親友們發(fā)送“想念你”一類的問候,或像“廣播中心”(第11章)那樣的應(yīng)用,幫助協(xié)調(diào)大型活動(dòng)。需要這樣的應(yīng)用嗎?讓你的朋友用短信來投票,就像“美國偶像”節(jié)目那樣。這些應(yīng)用都可以用App Inventor來完成。

控制機(jī)器人的應(yīng)用

第12章展示了如何創(chuàng)建應(yīng)用來充當(dāng)LEGO機(jī)器人的控制器。把手機(jī)當(dāng)做遙控器,或者為機(jī)器人編寫一個(gè)“大腦”伴隨它到處游走。機(jī)器人與手機(jī)之間依靠藍(lán)牙通信,App Inventor的藍(lán)牙組件也可以創(chuàng)建類似的應(yīng)用,來控制其他的藍(lán)牙設(shè)備。

復(fù)雜應(yīng)用

App Inventor大大降低了編程的門檻,幾小時(shí)內(nèi)就可以創(chuàng)建出很炫的高科技應(yīng)用,但這門語言的功能并不簡單,它同樣提供了循環(huán)、條件以及其它程序及邏輯結(jié)構(gòu),來實(shí)現(xiàn)邏輯較為復(fù)雜的應(yīng)用。在嘗試創(chuàng)建應(yīng)用的過程中,你會(huì)驚奇地發(fā)現(xiàn)這些邏輯問題是多么的有趣。

基于web的應(yīng)用

App Inventor也提供了應(yīng)用與Web之間的通信手段??梢詫懸粋€(gè)應(yīng)用從Twitter或RSS訂閱上抓取數(shù)據(jù),或者打開亞馬遜書店的Web頁面,通過掃描條碼來查詢一本書的線上價(jià)格。

什么人能夠創(chuàng)建應(yīng)用?

App Inventor免費(fèi)提供給任何人使用。它在線運(yùn)行(不是桌面程序),可以在任何瀏覽器中訪問。你甚至不需要手機(jī):內(nèi)置的Android模擬器可用于應(yīng)用的測試。截至2011年1月,App Inventor已經(jīng)擁有了幾萬個(gè)活躍用戶以及幾十萬個(gè)應(yīng)用。

是誰創(chuàng)建了這些應(yīng)用?他們是程序員嗎?有些人是,但大多數(shù)人不是。其中最有說服力的例子是David Wolber教授的一門課程。Wolber教授是本書的作者之一。在舊金山大學(xué)(USF),App Inventor是計(jì)算機(jī)科學(xué)通識(shí)課的一部分,主要針對商務(wù)和人文學(xué)院的學(xué)生。許多參加這門課的學(xué)生對數(shù)學(xué)是既恨又怕,而這門課恰恰滿足了學(xué)生們懼怕數(shù)學(xué)的核心需求,絕大多數(shù)學(xué)生連做夢也沒想到他們會(huì)編寫計(jì)算機(jī)程序。

盡管毫無經(jīng)驗(yàn)可言,但學(xué)生們依然學(xué)會(huì)了App Inventor并成功地創(chuàng)建了偉大的應(yīng)用。英語專業(yè)的學(xué)生首創(chuàng)了“開車不發(fā)短信”應(yīng)用;兩個(gè)通信專業(yè)的學(xué)生創(chuàng)建了“Android,我的車在哪兒?”;而一個(gè)國際研究專業(yè)的學(xué)生創(chuàng)建了“廣播中心”應(yīng)用(第11章)。有一天晚上,在下班后,一個(gè)藝術(shù)專業(yè)的學(xué)生去敲Wolber教授辦公室的門,詢問怎么寫一個(gè)while循環(huán),此時(shí)此刻他意識(shí)到,App Inventor已經(jīng)極大地改變了技術(shù)的格局。

媒體也開始關(guān)注這一意義非凡的變化。《紐約時(shí)報(bào)》稱App Inventor為“DIY應(yīng)用創(chuàng)建軟件”;《舊金山大學(xué)記事》撰文報(bào)到了USF學(xué)生們的工作:“Google讓大正成為應(yīng)用的生產(chǎn)者”?!稛o線》雜志描寫了Daniel Finnegan——“開車不發(fā)短信”的作者,并寫到“Finnegan的故事有力地說明:編程普及的時(shí)代正在來臨?!?/p>

如他們所說,這只貓已經(jīng)跳出來(第一章應(yīng)用里有一只小貓)?,F(xiàn)在App Inventor已經(jīng)在高中開課;在“挑戰(zhàn)技術(shù)創(chuàng)新”的課后項(xiàng)目中(面向舊金山灣區(qū)的高中女生),在西雅圖湖畔學(xué)校,以及幾所大學(xué)的入門課上,都有App Inventor的一席之地。有數(shù)千名愛好者、商人、婚介人以及能工巧匠們正漫游在App Inventor的網(wǎng)站和論壇上(http://appinventor.googlelabs.com/forum/)。想要開始行動(dòng)嗎?不必?fù)碛芯幊探?jīng)驗(yàn)!

本書中使用的慣例

本書采用了如下的通用慣例:

粗體綠色文本:代表程序塊

斜體:表示email地址、URL地址、文件名、路徑名,強(qiáng)調(diào)首次出現(xiàn)的術(shù)語。

等寬字體:表示Python代碼,組件、屬性、變量及函數(shù)的名稱。

 這個(gè)圖標(biāo)表示:測試環(huán)節(jié)以及測試說明。

 這個(gè)圖標(biāo)表示:提示、建議或一般性注釋。

如何使用本書

本書可作為初高中及大學(xué)課程的教科書,或有志向的開發(fā)者的入門書。全書分為兩部分:第一部分是一整套創(chuàng)建具體應(yīng)用的教程,第二部分是App Inventor指南(手冊),后者的編排更像是一部經(jīng)典的編程教科書。隨著學(xué)習(xí)的不斷深入,教程的復(fù)雜性也在增加,從第一章的“Hello,貓咪!”——每次點(diǎn)擊都讓小貓發(fā)出叫聲,到一個(gè)支持Web的應(yīng)用:通過掃描書上的條碼,就可以從Amazon Web Service上獲得相關(guān)信息(第13章)。

從理論上將,最好是按教程的順序來學(xué)習(xí),但如果你覺得很輕松,那么也可以跳著看。本教程手把手地教你創(chuàng)建應(yīng)用的每一個(gè)具體步驟,并提供塊語言的截圖來幫助理解,你還可以參考App Inventor指南部分的章節(jié),將有助于鞏固對概念的理解。

手頭最好有本參考書,因?yàn)锳pp Inventor的開發(fā)環(huán)境占滿了電腦屏幕,留給顯示教程的空間極其有限。我們設(shè)想人們將書放在手邊,并跟隨教程完成每個(gè)應(yīng)用的學(xué)習(xí)和創(chuàng)建過程。然而我們同樣希望人們能在遠(yuǎn)離電腦的情況下,花時(shí)間來系統(tǒng)地閱讀更多App Inventor指南中的章節(jié)。

對于教師和學(xué)生來說,這本書可以作為計(jì)算機(jī)科學(xué)入門課程的教科書,或者任何一門靠創(chuàng)造來學(xué)習(xí)的課程的參考資料。依我們的經(jīng)驗(yàn),“閱讀教程→討論→創(chuàng)作”這樣的順序會(huì)取得最好的效果。所以,第一步先讓學(xué)生完成教程中的一兩個(gè)應(yīng)用,不必要求太高,只要能按部就班地完成就好;第二步可以指定App Inventor指南中的某個(gè)章節(jié),在課堂上進(jìn)行討論和演說,來減緩學(xué)習(xí)的進(jìn)度;第三步要鼓勵(lì)學(xué)生探索:讓學(xué)生按照每一章末尾的改進(jìn)建議,在沒有具體指導(dǎo)的前提下,對應(yīng)用做出修改;最后,指定一個(gè)創(chuàng)造性的任務(wù),讓學(xué)生對應(yīng)用提出自己的想法,然后實(shí)現(xiàn)它們。

每章的文件及例子的完整代碼都可從這里下載:http://examples.oreilly.com/0636920016632/

致謝

創(chuàng)建App Inventor開發(fā)工具的動(dòng)機(jī)是教育,基于這樣的動(dòng)機(jī),我們堅(jiān)持認(rèn)為,通過主動(dòng)學(xué)習(xí),程序可以成為那些閃光的強(qiáng)大思想的載體。因此,App Inventor是不斷發(fā)展的計(jì)算機(jī)及教育事業(yè)的一部分,這一事業(yè)始于20世紀(jì)60年代Seymour Papert及MIT的Logo小組的努力,他們設(shè)計(jì)了眾多的活動(dòng)和計(jì)劃,來支持計(jì)算思維,其影響一直延續(xù)至今。

App Inventor的設(shè)計(jì)借鑒了此前的計(jì)算機(jī)輔助教育的研究成果,并立足于谷歌在線開發(fā)環(huán)境??梢暬幊炭蚣芘cMIT的scratch編程語言密切相關(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í),并感謝他們在工作中所提供的協(xié)助。將視覺化的塊語言翻譯為Android上的實(shí)現(xiàn)的編譯器使用了Kawa語言框架,而Kawa是Scheme編程語言的方言,由Per Bothner開發(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,感謝他們的反饋和見解。

最后,我們還要感謝我們各自的配偶的支持:Ellen的丈夫Keith Golden,Hal的妻子Lynn Abelson,Liz的丈夫Kevin Looney,David的妻子Minerva Novoa。新媽媽Ellen還要感謝保姆Neil Fullagar的幫助。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)