這篇文章是“為孩子寫一本編程書”連載中的第二篇文章,上一篇《如果要為孩子寫一本編程書》中談了為什么自己希望能為孩子們寫一本編程學習方面的書,以及關于如何教學的一些個人想法,有興趣的讀者可以參考。
我的兒子Ian學習編程已經快2周了,今天他完成了Playground(注:Playground是蘋果公司推出的一款在iPad上學習編程的App)上第一部分的學習內容——“命令 Commands”。他的進展讓我頗受鼓舞,雖然我以前也曾教10來歲的孩子學過編程,但對于一個6歲的孩子,老實說,一開始我并沒有十足的把握。要知道孩子相差一歲,他們的理解和認知能力都會有著天壤之別。而且,我知道自己的孩子并不是什么天才兒童,在與同齡的孩子一起學習20以內的加減法時,當其他孩子都已能熟練地進行心算,他卻還需要借助手指甚至腳趾的配合,才能珊珊來遲地給出答案。也正因此,他在編程學習方面的進步才讓我對自己的教學方法以及寫好這本書變得更有信心。
我要玩編程
在決定教Ian學習編程之后,我并沒有馬上開始,而是首先考慮如何才能引導孩子對于編程的學習興趣。而我知道,只有“玩”才是孩子們的天性,我需要找到一個能讓孩子玩編程的教學方法。為此,我比較了不同的編程語言,以及可以用于編程教學的網站、APP和其他資源,希望能夠找到那門最好玩的編程語言。最終,我選擇了Swift,一方面作為編程語言,它非?,F代且正得到廣泛的應用,使用它能夠做出非常美妙的東西,而另一方面結合Playground進行教學,真的可以讓學習編程變得非常有趣。
于是,我便在iPad上下載了Playground,備了課(主要是親自完成第一章節的學習內容,并構思如何為孩子進行必要的講解),然后挑了一個周末,把在一旁顯得有些無所事事的Ian叫到了身旁,略帶神秘地對他說:“爸爸來和你一起玩一個非常好玩的東西,好嗎?”
聽到“玩”,Ian馬上兩眼放光,湊上前來:“好啊,是什么呀?”
“我們要玩的是一個很厲害的東西,叫編程,只有很聰明的小孩才會玩哦”,接著我便拿出iPad,給他演示了Playground上的一個小游戲——通過簡單的命令,讓游戲中的主人公Byte,抓到一顆寶石。
Ian的興趣一下子便被這可以控制的生動動畫調動起來了,搶著也要來嘗試,嘴里不住嚷嚷“我要玩編程,我要玩編程”。
“好的,你先別急,讓爸爸先來教你怎么玩”,就這樣我便開始了我的第一節編程教學課。
Tips:興趣的引導對于孩子來說非常重要,城市中的孩子往往會背負很重的學習壓力,因此,我刻意地淡化了學習,而強調玩,希望以此激發孩子的學習熱情。當然,如果你只是希望自學編程或你的教學對象是大一點的孩子,則可以用更現實的編程應用場景或實例來激發他們的學習熱情。
認識編程
在孩子開始玩“編程”(正式教學)之前,我們有必要清楚地向孩子解釋什么是編程?
“編程是編寫程序(命令)的簡稱,這是你與計算機的一種交流方式,通過你編寫的這些命令,可以讓計算機去幫助你做很多有意思的事情,比如控制無人飛機(Playground的第一章節就會用到類似的例子),做出好玩的游戲,設計出無人駕駛的汽車,還能幫助我們去月球旅行等等等等?!?/p>
Ian似乎對我所解釋的編程定義很好奇,卻又有些似懂非懂,忙問“那學習編程之后是不是也能讓狗去做一些事情呢?”,孩子的發散思維很值得鼓勵,“我們一般說的編程,是讓計算機去做事情,但如果要讓狗做事情,可能就會更復雜些,你可能需要讓計算機與狗的大腦相連,然后再通過編程來讓狗也聽我們的話,這或許在你學得更深入后就能實現哦”
Tips:很多編程書雖然名字是教孩子編程,但往往一上來就會介紹編程語言,以及它們的語法等等,好像學編程就是學一門編程語言一樣。然而,對于孩子來說,這種做法其實并不可取。編程與我們今天做的很多創造性工作非常類似,學習編程更重要的是學習這樣一種思維方式,因此,我們應該首先站在更抽象和宏觀的角度來向孩子介紹編程,并同樣以孩子特有的發散的思維來加以引導,而不應過早將它與具體的某一門編程語言聯系起來,這樣反而會限制住學習者的思維,降低孩子們的學習熱情和興趣。
讓孩子愛上編程
孩子們的興趣是非常容易轉移的,特別是對年齡更小的孩子來說,要想一件事物始終能吊起他們的胃口很難,他們的注意力往往難以長時間集中,因此,你需要控制好教學的節奏,循序漸進地進行教學。
- 每天就學一點點:每次學習的過程,我都會控制在20分鐘-30分鐘以內(這對6歲左右的孩子適合,而對于年齡稍長的孩子,則可以適當將教學時間加長),這個時間正好可以完成Playground中一個獨立小節的學習,包含教一個知識點,并完成一個相對應的編程挑戰。而我基本上會每天或每隔一天給孩子教學一次,即使孩子興致很高我也不會一天內連續教授好幾課。因為我需要建立一種教學的節奏,每天花一點時間,持續地學習和實踐,比某一天上2-3小時的編程課,而后連續一周不去碰它要有效得多,當然也更容易持久。
- 激勵與反饋:每次完成一個小游戲(編程游戲)后,我都會大聲地將Playground中的那些激勵的話大聲朗讀出來。大多是“你真棒...”,“做得太好了...”,我也會自我發揮加上一些自己的評論,比如“你很聰明”,“你又進步了”,“下一次的挑戰會更難喲”等等,這常常是每次孩子學習完一個小節后最有成就感也是最高興的一刻,通過努力完成一項挑戰,然后獲得贊揚,并期待著下一次的挑戰,這可以說是一個完美的正反饋。
- 建立自我認知:游戲方式的教學以及適當的激勵往往能夠維持孩子短期內的學習熱情,但要讓編程真正成為孩子自己的興趣,卻絕非易事。我的方法便是給孩子貼標簽,賦予他“編程小超人”的稱號,并不斷地強化他的這種自我認知。比如在生活中我經常會叫他“編程小超人”,并總是對他編程技藝的增長大加贊賞,另外,我還特意為他設計了一張名片,上面顯著地寫著“編程小超人”的稱號。他非常喜歡,而當他將這些名片發給同學和朋友時,就是在不斷強化著自己是編程能手的意識。當然,在學習時,他也比以前變得更加積極主動了。
Tips:讓孩子自己愿意學習是最理想的,在開始階段切勿操之過急,影響孩子們的學習興趣。你也可以像我一樣做一張名片或畫一幅畫貼在家里顯著的地方,來鼓勵孩子們成為編程能手。關于如何為孩子設計一張名片的簡單方法,我也會在稍后穿插的設計教學中告訴大家。
準備工作
雖然我們的目標是最終教會孩子使用Swift語言做出一些有意思的東西,但現在,我們還不需要太多關注Swift語言本身,因為在Playground中的前面幾個章節,并不會出現一句有關Swift語言的語法,而是更強調在游戲中學習和掌握編程的基礎思維。因此,作為必要的準備工作,我們要做的僅僅是在iPad上下載Playground這個APP,并初步了解這個APP的使用方法。
一臺iPad
你只需要一臺iPad,便能使用Palyground教孩子編程了。當孩子完成所有課程,并能熟練掌握那些編程思想與技巧后,可以再從iPad轉移到個人PC或Mac上使用那些流行的IDE(集成開發環境)去創造更復雜有趣的應用。
Tips:很多家長對孩子使用iPad會很排斥,認為總是在玩或影響視力,但我想說,未來的孩子就是生活在這些電子設備的包圍之中的,盡早讓他們熟悉,并熟練地使用它們,就像過去我們要求孩子掌握寫字技能一樣重要。而學習這門課程并不需要在iPad上花費太多時間,Ian每次在iPad上完成一項任務所使用的時間,都不會超過30分鐘。
下載Playground
進入App Store,然后在搜索框內輸入“Playground”,回車,你便能看到這個應用了。點擊獲取安裝即可。
獲取課程
Playground中會不斷地推出新的編程教學課程,而我們所使用的就是名為Learn to Code的這一套教程。當我寫這篇文章的時候,已經出到了第三套課程 Learn to Code 3。我們可以選擇底欄中的“Featured”按鈕,然后選擇我們所需要的課程,在彈出頁面中點擊“Get”下載即可。
下載后的課程,通過點擊底欄上的“My Playgrounds”按鈕便能看到了。點擊任意已下載的課程便可以開始我們的編程教學了。(下圖中,我下載了Learn to Code的1-3的系列課程,以及Hour of Code課程,它是Code.org所推出的編程一小時活動中,使用Palyground進行編程教學的一節體驗課)
Tips: 由于網絡原因,部分課程可能下載緩慢,可以在早上網絡條件良好的情況下進行下載。另外,當每次Palyground版本更新(增加新功能)后,可能造成部分原有課程無法使用,你可能需要將它刪除,并重新獲取該課程。
界面與功能
安裝完成后,你一定迫不及待地開始使用Playground去探索編程世界了吧,先別著急,Playground雖然非常簡單易學,但我們還是有必要來簡單看一下Playground中界面以及那些最常用功能。
界面
Playground中的每一小節課程都是一個包含編程挑戰的小游戲,學習者通過輸入命令來控制游戲中的主人公Byte,去完成任務。我們以“命令”這一章節的第一小節為例,下圖中的任務目標就是要讓Byte去抓到他前方那顆紅寶石。整個界面分為左右兩個部分,左邊為學習內容區域以及編碼區域,右面則為可由命令控制的動畫演示區域。當學習者點擊編碼區域后,便可輸入命令(也可以通過選擇自動出現在底欄中的命令來快速輸入)。當完成命令輸入后,便可以通過動畫演示區內的“Run My Code”(運行我的代碼)按鈕來執行你所輸入的命令,并查看動畫演示的執行效果。如果你順利完成了任務,Playground便會提示過關的消息,并引導你進入下一小節的學習。
選擇你的英雄
Playground為我們設定了三個不同的主角,他們擁有不同的顏色、形狀和各自鮮明的性格。通過點擊動畫界面上的主人公,便可以進入動畫角色的選擇畫面,挑選那個你最喜歡的英雄去一起完成后面的挑戰吧。
常用功能
Playground里提供了很多有意思的附加功能,給你編程的結果動畫錄像,拍一張屏幕截圖,你都可以通過功能菜單進行嘗試。而下面這三個功能,我卻認為對編程教學有著特殊的幫助:
Reset Page:點擊菜單欄上的省略號圖標,會彈出Tools(工具選項),選擇“Reset Page”便能幫助你快速恢復到本節的初始狀態。這個功能非常有用,特別在學習的初期,孩子們很容易會將命令寫亂,而通過這個重置選項,便可以快速回到起始狀態,然后重新開始,這大大降低了孩子們出錯的成本,他們會很愿意重新嘗試,而不會因為需要反復恢復代碼而降低編程的樂趣。
Step Through My Code:點擊動畫演示區域左下方的儀表盤圖標,會顯示運行選項。Step Through(單步執行)是程序員們最常使用的調試手段,而在Playground中我們也可以使用這種方式來運行我們的命令,我們將能看到每一個動畫步驟與我們的一行代碼關聯起來,這能讓孩子們更方便地調試他們所寫的程序,也能幫助他們理解那些復雜的函數調用、判斷以及控制邏輯,比如if...else...,Loop、While等等。
Tips: 單步調試雖然是一個很好的調試手段,但我們不應該讓孩子們過度依賴這個功能,因為他們會為了避免犯錯,而選擇每寫一條命令就調試一次的方法,這樣做會降低編程的速度,更重要的,孩子們會減少全局的思考,而這恰恰是編程中非常重要的一種思考方式。因此,僅在學習語法或復雜控制邏輯,以及尋找編碼中錯誤的時候,才使用這個功能是我的建議。
插入預設代碼塊:點擊點擊菜單欄上的省略號圖標,會彈出預設代碼塊的選項,包含變量賦值、函數、循環結構等等。這使得孩子們一開始并不需要去死記那些枯燥的語法和關鍵字,只需要理解與這些圖標所對應代碼塊的作用,就可以輕松地使用它們進行編程了。
Tips:預設代碼塊很像程序員們經常使用的代碼自動生成功能,簡單輸入幾個英文單詞,或自定義的英文縮寫,便可生成整段預設的代碼結構。未來的編程一定會更加智能,而讓孩子們從體驗和熟悉使用預設代碼塊或許是一個很好的開始。
好了我們已經萬事俱備,在下一章里,我們將會從最簡單的“Commands (命令)”開始一起玩編程。