你會發現從事IT行業的家長對孩子學編程這件事會更加重視,並不是他們希望子承父業,而是他們從學習編程中獲益良多,才早早地給孩子布局編程學習。
就像Michelle說的那樣:具備編程技能未來一定會幫助孩子獲得更多的機會和可能性。
Michelle是一位有四個孩子的IT工程師媽媽,她大學畢業於加州理工大學,之後攻讀了斯坦福博士學位。她說自己學編程比較晚,直到18歲,才寫出人生中第一個簡單程序。如今科技飛速發展,學會和機器打交道,已成一項很重要的普通技能。
為了培養正在上幼兒園的兒子的編程思維,Michelle專門為孩子設計了「樂高迷宮編程」,並給遊戲設計了難度等級,隨著孩子年齡的增長,難度等級會一點點上升。
她解釋說,就如同嬰兒學步,要學會像一個程式設計師那樣思考,是需要訓練很長時間的。對一個初學者而言,重要的不是某種程式語言的語法規則,而是要理解編程思維。理解所有程式語言的構成要素——即所有程式語言的共性。
所以,我設計的這款樂高迷宮遊戲靠的是手寫「代碼」而不是機寫「代碼」,遊戲有四個難度等級,囊括各種編程概念。我會一邊介紹玩法,一邊對設計理念和孩子的收穫進行詳盡描述。
推薦年齡段:幼兒園,小學,初高中
所需時間: 一個小時(包括製作素材的時間)
難點: 準備工作不難,等級3和等級4可能更適合五六年級和年齡更大一些的孩子。
材料: 列印紙、 剪刀、雙面膠、 樂高小人(或其他類似尺寸的小人)、 樂高或得寶積木(可選)。
操作指南:
列印「樂高迷宮編程」(在【宇航聊編程】對話框中回復「迷宮」,獲得素材),並把編程指令裁剪出來。
接下來,孩子就可以建立自己的迷宮了。共有5個迷宮可以選擇, 或者也可以用提供的空白方格製作一個自己的迷宮。 確定要選的迷宮類型後,有三種構建方式:
選項1——直接用列印出來的迷宮
如果孩子沒有樂高或得寶小人兒,Ta可以原封不動地使用PDF提供的迷宮。只需選一個自己喜歡的小人兒來完成「走迷宮」的過程。類似下圖這樣:
選項2——用樂高積木搭迷宮
如果孩子是個樂高迷,Ta 也可以發揮創意用樂高把迷宮中灰色部分擋住,就像這樣:
選項3——用德寶板子搭建迷宮
如果你有得寶的話,可以把迷宮剪出來,放在得寶板上,然後在迷宮通道旁用得寶積木蓋滿該板以形成牆壁。注意,要讓部件連接在一起,又要方便小人移動。
完成後,你的迷宮可能就是下圖這個樣子:
造好迷宮後,我們還需要製作一些「指令卡片」。像是這樣:
這些標籤上的指令都是編程過程中的常用指令,比如:向前移動、向左轉、開始、結束等等。
製作完成後,遊戲就可以正式開始了。
如果直接讓孩子在電腦上學習坐標系,他們很難理解。因為他們的左邊和遊戲角色的左邊並不是一回事,但玩熟練了第一個等級,他們就會學會怎麼樣去轉換這個坐標的視角了,這是學編程最基本的技能。
那怎麼樣教會他們用迷宮裡的小人的視角(坐標系)思考呢?首先,把小人擺在迷宮入口處,將所有綠色卡片分成三摞(向前走,向右轉,向左轉)。
孩子需要把自己認為小人需要遵從的指令列成長長一條。例如,在上面所示樂高迷宮裡,建築工人埃米特需要:向前走,向前走,向前走,向右轉,向前走……我讓6歲的兒子將這些編程指令排成長長一列。
本來我打算用兒子排好的「代碼」,直接把小人兒移出迷宮,不過他想自己來移動小人。於是,我想了個辦法,讓他一次只完成一個指令,然後邊執行指令,邊把卡片翻過來。這樣做的效果非常好,不會讓指令混亂。
我唯一提醒孩子的是要注意向左轉和向右轉的問題。當埃米特在最後一個拐角處,出現了BUG,他放了一個「向右轉」的牌子,但其實埃米特需要的是「向左轉」。我讓他把卡片放到埃米特手中,他立馬明白過來並改正了錯誤。如果不會英語的孩子玩這個遊戲,需要先認識一些簡單的英語。
在等級1中,告訴埃米特向前走5步,需要5張「向前走」指令。這一關中指令升級了,告訴孩子用「FOR循環」指令會方便很多。
比如向前走3步,原本需要3張向前走的卡,用「FOR」循環指令,只要在空格中寫上3,在「FOR」循環指令下接上「向前走」的指令,就代表「向前走」重複3次,如下圖。
這裡還要說一下格式。程式語言都會有格式要求。跟在「FOR」循環語句後的指令縮進了一些,這樣做讓代碼更容易讀。「FOR」循環語句的結尾需要一個「end」,表示該循環語句到此結束。雖然不是所有程式語言都需要這樣,但這樣做會讓孩子更加嚴謹。
用「IF」條件語句可不是機械地指揮小人往前走,向左轉或者向右轉那麼簡單了。這個指令是要教小人「思考」問題了。需要將樂高小人在任意位置可能遇到的情況都考慮在內,決策出最佳通用動作指令。孩子們可以挑戰自我,寫一個儘量簡短的程序解決迷宮難題。例如,左邊有路可走小人兒該怎麼辦,要是碰到死胡同了有該怎麼辦?
這需要孩子們能進行更為抽象的思考,你才能教他們「IF」條件語句。我是在大學第一次接觸到「IF」條件語句的,然後就一發不可收拾地將其應用到日常生活的方方面面。基本上,所有決定都能歸為決策樹。比如,我正拿不定主意去哪兒吃晚飯,我可能會這樣思考:
「IF 我朋友Mary有空,
—> then 我就和她一起吃泰國菜。
ELSE IF 公寓餐廳供應的餐食尚且說得過去,
—> then 我就去那兒隨便吃點兒。
ELSE—> 我就窩在公寓裡吃點兒麥片和冰淇凌。
END IF。」
謝天謝地,我後來改掉了這個「毛病」。
不過,學會這個思維方式的好處是,你考慮事情會更加全面,會把所有的可能性都考慮在內,評估一下每種情況下應該做什麼,以怎樣的優先級順序去做,明白什麼才是當務之急。很多成年人都不一定能分得清事情的輕重緩急,這個技能要是提前教給孩子,他能獲益終身。
那迷宮遊戲裡怎麼用這個「IF」語句呢?比如可以給小人兒下達這樣的指令:「IF面前無牆,向前走,結束。」但對於一些需要小人兒轉向的迷宮,那就需要下面這樣的代碼。
圖中的代碼翻譯過來,意思是:「若能左轉,就向左轉;否則若能右轉,就向右轉;再否則,若碰到了死胡同,則轉180度。排查過所有情況後,向前走。重複(repeat)。」
紅色代碼「while」開頭和紅色代碼「End」結尾,意味著是一個循環語句。只要小人還處在迷宮中,就會不停重複,然後執行一堆代碼。一直重複這些代碼直到走出迷宮才「End」。
這裡還有一個ELSE語句。這就是一個優先級的順序執行啦!「IF」後面跟的特定條件成立,就百分百執行IF部分的代碼,後面的代碼就廢了,直接跳到「End」。
「ELSE IF」語句指的是其後跟著的條件成立,並且之前出現的「IF」和「ELSE IF」之後的條件都不成立,就執行該「ELSE IF」部分的代碼。
「ELSE」指的是上述所有情況都不成立時,就執行該ELSE代碼語句,我的麥片配冰淇淋晚餐就是這種情況。
藍色「END」意味著「IF」條件語句的結束。
雖然等級3會讓孩子們覺得自己很厲害,但是換個迷宮,這套「代碼」可能就沒用了。而且很有可能小人兒會被卡在「無限循環」中,一遍又一遍地重複著同一個行為,無從逃脫。這時候,如果引進一個隨機數字產生器,讓小人兒走出任何迷宮。
如果在程序中給了「向左轉」優先選擇,也許小人會卡住,陷入一個死循環中,一直在同一路徑中重複向前走、向後走。要解決這一問題,但又能不引入諸如存儲變量一類更為複雜的概念,這時候可以利用隨機數字產生器移除優先選擇項。
例如,不說「若能左轉,就向左轉」,取而代之,我可以說「若能左轉,一半情況下向左轉」。這個「一半情況」就是隨機數字產生器函數,簡單點就是扔骰子可以代替。引入隨機性這一概念後,小人走的可能不是最符合邏輯的一條路,但是他也不會陷入死循環。
我「認為「這是一個適用於所有迷宮的可能的代碼之一(如下圖所示),但這並不是唯一「正確」的答案,可能也不是最佳正解。 在你家孩子嘗試用自己的代碼解決問題之前,我不建議你把該代碼展示給孩子。 編碼就是一個不斷試錯的過程,在程式設計師思考出新的可行代碼前,一遍又一遍的試驗和檢測是必不可少的。
四個等級都完成後,心智最成熟的孩子將會認識到:要是他們的樂高小人兒能記住自己走過的路,那他們就能系統前行,而不是漫無目的地瞎轉了。這可能會引發有關更高級的編程概念的討論,比如存儲器和存儲變量。
這個遊戲的價值就在於,孩子可以看到手頭面臨的特定問題,然後一步一步地讓樂高小人兒走出迷宮。教會孩子從不同於自身坐標的角度思考問題。讓孩子明白自己的左邊和迷宮裡樂高小人兒的左邊不完全是一回事兒,就算是年齡最小的孩子也能學會轉換坐標系的寶貴技能。
我們還可以通過這個遊戲看到,如果能先讓孩子了解手寫「代碼」,而不是機寫「代碼」,從數學的角度去真正了解編程,了解計算機,那麼,孩子就能了解到所有程式語言共通的那一部分,為今後的編程學習打下非常好的基礎。
好了,趕緊和孩子一起體驗一下吧~
長按下方二維碼,關注宇航聊編程
在公眾號對話框回覆:迷宮
即可領取——樂高迷宮素材
▼