蘭心
希望那些不夠了解編程的父母,能夠重新思考編程思維,明白編程思維是一個可以融入日常生活的理念。
不打算做程序員,也要學編程嗎
尤馬可能不是世界上最小的程序員,但他一定是最受矚目的程序員之一。11歲的他,已經連續參加了兩屆蘋果公司組織的WWDC開發者大會,因為他已經在蘋果的應用商城發布了7款應用。6歲時,尤馬開始自學編程,并感到很有趣;8歲時,他就開始編程給同學制作賀卡,還會因為找不到合適的餐廳突發奇想設計一款軟件。他的靈感,總是來源于生活。
很多父母羨慕別人家的孩子,于是急匆匆地把自家孩子送到編程班去學習。先別急!雖然各種編程早教班很熱,但熱潮背后,更需要父母冷靜思考。程序是為生活服務的,比如那些App可以使生活更便利。既然如此,孩子學習程序的目的,也是為了能夠用一些工具,來解決生活中的具體問題。比如,我們如果把大的問題分割成小的問題,并且思考如何把代碼合理地安排在不同的位置,通過怎樣的設定輸出什么樣的結果……這個過程中體現出的邏輯分析能力,比編程本身更有價值。
所以,程序并沒有大多數人想象的那么神秘,我們甚至可以把它想象成一個普通的學習過程。小學的時候,我們查字典學習漢字、成語,之后學習用這些字詞造句、撰寫文章。編程也一樣,孩子明白了“指令”,再用“指令”的各種組合方式拼成一整套程序,都是類似的過程。
在這個過程中,體現的是孩子整合信息和解決問題的雙重能力。因為這兩項能力對孩子很重要,所以借由這兩個基本能力衍生出的編程思維,才對孩子更有幫助。但是,讓孩子了解編程思維,不一定非報學習班,生活中的游戲和親子互動,也可以達到同樣的效果。
優爸是一名資深程序員,可能是受到熏陶,他不到3歲的女兒優優居然理解什么是“計算機語言”。優爸工作時,優優拿著爸爸的手機當玩具,無意間按出了Siri,小家伙愣了。“抱歉,我沒有聽清楚您的指令!”機器人的聲音讓優優既恐懼,又好奇,她把手機還給爸爸,眼巴巴地等待爸爸的解釋。
“手機和你說話呢!”優爸對優優說,“但是,它只能說很少的話。她可以和你打招呼、給你播放音樂、回答簡單的問題……”優優聽懂了手機的話,然后試著說出“唱歌”和“你幾歲了?”這樣簡單的話,聽到Siri的回答后,優優高興得不得了。
為了讓孩子更好地明白“指令”的含義,優爸說:“爸爸平時會對你說‘穿衣服或者‘吃飯,你收到信息后就開始做事。手機也是這樣的,如果你用它聽得懂的話和它說話,它就能回答問題。”
接下來,優爸把孩子帶到客廳,用地磚當棋盤,和孩子玩兒起了“指令”游戲。優爸當指揮者,給孩子示范了“向前走一格”“向后走一格”“向左走兩格”“向右走兩格”等動作,然后指揮優優在棋盤里走動。優爸每發出一格指令,孩子就要執行動作。輪到優爸當棋子時,優優就試著模仿爸爸發號施令。
慢慢地,父女玩兒熟了基本操作,優爸就試著把游戲升級:“優優,爸爸站在這個格子里,你能指揮我去摸一下跑步機嗎?”優優指揮著爸爸先往前走,再往左移動,走到跑步機前停下來,順利地完成任務。優爸又升級了游戲,讓優優試著發出更復雜的指令,比如“先倒一杯水,再給媽媽送過去”。剛開始,優優難免會設計錯程序,也會下錯指令,但是,看到爸爸沒有朝著自己想象的方向移動時,孩子能夠及時地修改自己的指令,最后指揮爸爸完成任務。
反復游戲的過程中,孩子真正地理解了自己“指令”和爸爸“行動”之間的關系,下達的指令也越來越明確,不僅鍛煉了自己的表達能力和思考能力,也對“結構化程序思維”有了更深的體會。孩子哪怕不知道這是什么,但是,只要她體會過,就會懂得這種思考的妙處。
理解“條件句”,用更多的程序設計生活
足夠細心的父母們會發現,孩子們的生活中,很多時候會用到“編程語言”。優爸拉著優優的手過馬路,優優念起了兒歌:“如果是綠燈,請走過去;如果是紅燈,請等一等……”優爸笑了,這不是編程中的“if”條件語句嗎?這小家伙,居然也知道“條件”是怎么回事。
于是,優爸在經常玩兒的“棋盤”游戲中,增加了一些設置。他在一些格子中放置了障礙物,并且規定路過某種障礙物時的相應動作:如果遇到帽子,跳過去;如果遇到的不是帽子,就撿起來。優優很快理解了“條件”的概念,模仿爸爸在游戲中增加條件指令:如果遇到紅色的東西,向右轉;如果遇到綠色的東西,倒退一步。
經過改良的游戲,變得更有趣。優爸經常帶著一群小朋友,在寬敞的地方玩兒這個游戲。每個人都有自己的條件設置,大家把所有的條件畫在紙上,用簡單的圖標表示,小朋友也看得懂。誰在游戲中迷路了,就去看“游戲手冊”,或者在大人的幫助下完成任務。每個孩子都很有熱情,他們可以把自己的想法加入游戲中,親自設計游戲,這種成就感是沒有人能夠取代的,這也是編程思維的魅力所在!
幾輪下來,優爸被孩子們的創意打動,他們不僅會設計“if”語句,表示如果某個小朋友做什么動作,大家都要做同樣的動作。孩子們還會設計相反的動作,一個小朋友居然說:“如果我站著,你們就要蹲下;如果我蹲下,你們就要跳起來!”這個細節讓優爸相當驚訝,能夠設計出這樣的游戲,證明孩子已經理解了條件的含義。有時候,游戲結果和孩子們設想的不一樣時,他們會主動改變條件。看似在修改游戲,其實是在修改自己的思考方式。在一次次修改中,他們的思維更加靈活、縝密,也更有邏輯性。
有一天,優爸意外地發現了編程思維的另一個好處。在編程中,有一種程序模式叫作順序執行,就是將命令一條條地依次去做,直到執行完。這個理解起來容易,做起來卻有難度。比如,我們會發現,幼兒園階段的孩子,每天早晨如果沒有大人幫忙,都會非常忙亂。不是忘記刷牙,就是忘記帶書包、水壺。優爸和孩子玩兒編程游戲時,突然想“為何不把每天早晨要做的事情設計成一個順序執行的程序呢?”想到這兒,他先畫了一個大人版的流程圖,列舉了大人每天早晨要做的幾件事,按照順序畫給孩子看。其中,他還故意畫錯了一步,問優優:“你看,這是每天早晨媽媽要做的事,你能找出這個過程中的錯誤嗎?”
優優看了看,對爸爸說:“媽媽說起來第一件事是去衛生間上廁所,然后是刷牙!所以不能是先吃飯后刷牙。”孩子能明顯地指出“bug”,證明她懂得什么是順序執行。而且,她有時能夠記住媽媽的點滴吩咐,只是不能把所有的事情統合起來思考,往往會有漏洞。所以,大人的任務就是要修補一個個漏洞,輔助孩子將程序執行得更好。
優爸先是用畫圖的方式,把早晨要做的事畫出流程,然后邀請優優在鉛筆畫上涂色,加深印象。最后,他們一同把這幅畫貼在兒童房的門上,孩子起床后第一時間就能看到,然后自然會開始行動。用編程整理忙亂的早晨,原來這樣簡單。
希望那些不夠了解編程的父母,能夠重新思考編程思維,明白編程思維是一個可以融入日常生活的理念,是可以通過反復設計優化,把生活變得更有趣的一項工具。