高萍
以“想象、創(chuàng)作、分享”為主題的Scratch,趣味性、易學性、實踐性、創(chuàng)新性都適合中小學生,特別是作為簡單易學的編程工具,用拖動指令塊代替敲代碼,學生可以避開程序設(shè)計語言語法的學習和調(diào)試,集中精力對問題進行求解,這為學生計算機思維的培養(yǎng)提供了便利條件。筆者以《大魚吃小魚》一課為例,就如何培養(yǎng)學生的計算思維同大家一起探討。學生此前已經(jīng)學會了Scratch中常見的指令塊,本節(jié)課是Scratch的綜合應用課。課程任務是:在10秒鐘內(nèi)記錄大魚吃掉小魚的總條數(shù)。
● 利用面向?qū)ο蟮姆椒ǔ橄蟪鰡栴}求解的模型
計算思維作為一種思維過程,很難用知識描述的方式顯性呈現(xiàn)出來。其中方法是計算思維的重要內(nèi)容。計算思維的方法可分為數(shù)學方法和工程方法,其中數(shù)學方法涉及抽象、遞歸、證明、形式化表達等,工程方法包括系統(tǒng)方法、分治法、面向過程和面向?qū)ο蠓椒ǖ?。教師通過這兩類方法的傳授,把有關(guān)計算思維的相關(guān)思維特征和方法分解到每一個具體的教學內(nèi)容之中。
“大魚吃小魚”游戲?qū)崿F(xiàn)起來比較復雜,因為它不是一個結(jié)構(gòu)化很強的問題,沒有明確要求先做什么再做什么,前后邏輯性不是很嚴密,小魚在游,大魚也在游,時間還在走,當小魚碰到大魚,要被吃掉,其他小魚依然不受影響,繼續(xù)游,時間繼續(xù)走。程序中出現(xiàn)了幾個并行的流程時,如何進行任務統(tǒng)籌呢?如何貼近實際進行程序的優(yōu)化提高效益呢?利用求解的順序步驟很難解決問題,這需要從另外一個思路思考問題求解的方法——面向?qū)ο蟮姆椒?。把問題抽象出“對象+觸發(fā)事件”模型,分析游戲中涉及哪些對象,這些對象的初始狀態(tài)是什么,哪些對象是靜態(tài)的,哪些對象是動態(tài)的,動態(tài)對象的激發(fā)事件是什么,調(diào)試運行后,是否達到最初的預期,沒有達到如何優(yōu)化。學生從具體的事例中抽象出計算機能夠解決的模型,從而達到解決問題的目的。
教學片段1:
師:游戲中有哪些對象?
生:一條大魚,許多條小魚,背景,被吃小魚計數(shù)器、計時器。
師:它們初始狀態(tài)是什么?
生:計數(shù)器初始化為零,計時器初始化為零。舞臺背景選擇與“海底世界”類似的畫面;大魚初始位置為隨機(如圖1);小魚初始狀態(tài)為游動(如圖2)。
師:分析完后,有哪些對象處于初始狀態(tài)?并思考將要發(fā)生哪些事件?
生:事件1,當鍵盤上的方向鍵被按下的時候,大魚的游動會發(fā)生變化;事件2,當大魚碰到小魚的時候,小魚被吃掉,被吃小魚計數(shù)器自增1;事件3,如果計時達到10秒,游戲結(jié)束,并顯示被吃小魚的條數(shù)。
在Scratch教學中,如果教師不把分析的過程、思考的過程及優(yōu)化的過程呈現(xiàn)出來,那么學生也僅僅獲得知識,因缺乏必要的思維訓練,他們也無法獲得舉一反三、觸類旁通的能力以及普適的技能。讓學生從本質(zhì)上和全局上來建立對問題的解決思路,便于學生進入到類似問題的求解中。
● 利用約簡、仿真等方法抽象出事件的處理過程
計算思維的本質(zhì)是抽象和符號化,在Scratch數(shù)字作品創(chuàng)作過程中,無論是動畫故事的編制還是游戲的開發(fā),都需要把具體的問題抽象成符號或?qū)ο?,并使用指令塊把相應的問題“計算”出來。Jeannette M.Wing教授認為這種能將一個問題清晰、抽象地描述出來,并將問題的解決方案表示為一個信息處理流程的思維過程就是計算思維的訓練過程。計算思維是通過約簡、嵌入、轉(zhuǎn)化和仿真等方法,把一個看似困難的問題重新闡釋成一個人們知道怎樣解決的問題。計算機模擬大魚吃小魚這一現(xiàn)實問題,怎樣讓學生經(jīng)歷一個通過約簡、嵌入、轉(zhuǎn)化、仿真等方式進行化難為簡的過程,體會計算思維的本質(zhì)——抽象和自動化,是計算思維培養(yǎng)的突出表現(xiàn)。
教學片段2:
師:大魚(碰到鍵盤上的方向鍵)觸發(fā)什么事件?
學生操作如圖3所示。
師:如何模擬大魚吃掉小魚的情境?,F(xiàn)實中看到的場景是大魚張開嘴巴,小魚消失……
生:可以使用“碰到”大魚的時候,小魚“隱藏”的方式,模擬小魚被吃掉的場景(如圖4)。
師:很好,同學們已經(jīng)學會使用“仿真”方式來解決問題。其實計算機仿真是一種很好的思路。例如,實體機器人因為成本高,難以普及,所以市場上出現(xiàn)了仿真機器人,也能讓初學者體驗到機器人的搭建和傳感器應用等功能。當時間達到規(guī)定時間10秒時,游戲結(jié)束。
學生執(zhí)行如圖5所示操作。
在教師的引導下,學生對實現(xiàn)大魚游動的程序進行了簡化,抽象出通過按鍵控制大魚橫縱坐標值的變化,大魚吃小魚的場景,仿真為小魚碰到大魚時則消失,并抽象為Scratch功能塊——隱藏,計數(shù)變量自增1。學生在觸發(fā)事件的處理過程中,不斷使用簡化、仿真等計算思維的方法把現(xiàn)實問題轉(zhuǎn)化成Scratch的功能塊,從而達到利用計算機解決問題的目的。
● 利用糾錯優(yōu)化調(diào)試程序
計算思維是通過冗余、賭錯、糾錯的方式,在最壞的情況下進行預防、保護和恢復的一種思維。當學生在Scratch中編寫腳本進行程序設(shè)計時,糾錯優(yōu)化是始終伴隨其中的。當學生運行程序發(fā)現(xiàn)與預期的情況不同時,糾錯的行為就開始了,他們會去尋找到底哪里出現(xiàn)了問題,糾錯就是通過測試和調(diào)試去實現(xiàn),而糾錯同樣是計算思維的重要概念之一。
教學片段3:
師:在調(diào)試中,發(fā)現(xiàn)小魚游動的畫面非常機械,如何改進?
生:在小魚游動的程序中,添加 可以使小魚游動的畫面更加自如。
師:當小魚隱藏后,游戲重新開始時,原先被吃掉的小魚不再出現(xiàn),那么如何修改?
生:在小魚初始化程序塊中添加。
師:上述實現(xiàn)的是一條小魚,實際情況中,應該有好多小魚,那么如何修改?
生:其他小魚與第一條小魚的不同點是外觀不同(大小、形狀、顏色),相同點是功能相同(來回游動,碰到大魚消失)。
師:外觀不同,可以通過選擇圖庫中不同的角色,也可以復制原角色,利用Scratch自帶的圖片編輯工具填充不同的顏色區(qū)域。功能相同意味著腳本相同,可復制獲得,利用代碼復制可以簡化編程工作。調(diào)試運行后,發(fā)現(xiàn)復制腳本能讓許多小魚具有相同的位置和狀態(tài)。這么多小魚不可能從同一點出發(fā),不符合實際情況。利用隨機數(shù)字模塊可以解決小魚起點出現(xiàn)在相同位置的問題。
在《大魚吃小魚》一課中,當學生完成了大魚吃一條小魚的任務,吃其他小魚的情況,要重復做嗎?在同類問題再出現(xiàn)時,算法思維就可以介入,沒必要每次從頭思考,而是采用每次都行之有效的解決方案。看到問題的核心——各小魚的觸發(fā)事件相同,所以在Scratch中通過復制角色,就可以完成許多“功能”小魚的制作。如此設(shè)計后,發(fā)現(xiàn)每條小魚的“初始狀態(tài)”相同,這不符合實際情況。為了更加逼真體現(xiàn),筆者用隨機數(shù)設(shè)定小魚們出現(xiàn)的位置,同樣,調(diào)試糾錯的訓練也出現(xiàn)在小魚游動的程序塊中。
人之發(fā)展,首在思維,因此培養(yǎng)人的科學思維能力必然是教育的核心內(nèi)容。思維的培養(yǎng)不可能研究思維本身,只能借助載體來表達思維,從而揭示思維的內(nèi)在實質(zhì)??茖W的思維方式不是先天生成的,需要后天的培養(yǎng),如數(shù)學課中的邏輯思維、物理課中的實證思維。反過來,具備了某種思維能力的人,也會影響自身的行為模式。要想計算思維成為大眾的基本技能和普適思維,要經(jīng)過長期的培養(yǎng),更需要思維訓練的載體。作為基礎(chǔ)教育中的信息技術(shù)課程,其具備了得天獨厚的條件——學生可以近距離接觸計算機科學。本文中的Scratch教學就是一次有益的嘗試,通過一節(jié)Scratch綜合應用課,讓學生親歷了面向?qū)ο蠼鉀Q問題的方法,簡化、仿真等抽象手段實現(xiàn)觸發(fā)事件的過程,最后通過調(diào)試來糾錯優(yōu)化程序塊。學生在教師的引導下不斷思考如何解決問題并親歷計算思維之抽象及自動化的本質(zhì)。