趙輝
在已出版的Scratch教材《游俠傳》的序言中有一段話:在創(chuàng)作Scratch作品的時(shí)候,并不只是要求學(xué)生學(xué)習(xí)如何編寫計(jì)算機(jī)程序,而是學(xué)習(xí)如何創(chuàng)造性地思考,如何系統(tǒng)化地推理,而這些都是未來他們獲得成功和人生幸福的核心能力。計(jì)算思維是信息技術(shù)學(xué)科的核心思維,在Scratch實(shí)例教學(xué)中融入“計(jì)算思維”的思想,能有效地訓(xùn)練學(xué)生的創(chuàng)新意識(shí),培養(yǎng)其解決具體問題的能力。計(jì)算思維的具體內(nèi)容包括思維與歸納、程序與算法、抽象與自動(dòng)化、分解與建模、測(cè)試和調(diào)試等。根據(jù)Scratch課程的目標(biāo),筆者篩選出計(jì)算思維中的抽象、分解、算法、糾錯(cuò)和歸納五個(gè)核心要素開展教學(xué)實(shí)踐,并結(jié)合Scratch實(shí)例教學(xué)經(jīng)驗(yàn),總結(jié)出Scratch實(shí)例編程教學(xué)的常規(guī)教學(xué)流程圖(如圖1)。
Scratch課程的內(nèi)容不能枯燥地講解算法知識(shí)點(diǎn),教師應(yīng)該把知識(shí)點(diǎn)滲透到各個(gè)實(shí)例中,由一個(gè)個(gè)鮮活的實(shí)例層層遞進(jìn)知識(shí)點(diǎn),讓學(xué)生通過制作實(shí)例來學(xué)習(xí)編程,體驗(yàn)一個(gè)程序完整的開發(fā)過程,知道計(jì)算機(jī)程序解決問題的方法,從而發(fā)展學(xué)生的計(jì)算思維。所以,教學(xué)實(shí)例的選擇必須注重從學(xué)生的實(shí)際生活出發(fā),提煉生活中的問題,貼近學(xué)生的認(rèn)知,對(duì)案例的熟悉度和理解程度是對(duì)實(shí)例抽象和分解的基礎(chǔ)。筆者就以《口算軟件》為例,談?wù)凷cratch實(shí)例教學(xué)中滲透計(jì)算思維本質(zhì)教育的一般操作流程和策略方法。
抽象建模,形成思維
所謂抽象,是指通過忽略可有可無的細(xì)節(jié)來降低難度。將一個(gè)現(xiàn)實(shí)問題轉(zhuǎn)變成為計(jì)算機(jī)可以處理的問題。抽象是選擇案例后實(shí)施編程前的一項(xiàng)重要工作,學(xué)會(huì)抽象可以更容易找到Scratch編程的切入點(diǎn),更好地理清程序規(guī)則。
1.情境模擬,化抽象為具體
教師根據(jù)實(shí)例內(nèi)容與教學(xué)目標(biāo),有針對(duì)性地設(shè)計(jì)任務(wù)情境,并讓學(xué)生扮演角色模擬情境過程,在高度仿真的情境中感受程序抽象問題,讓抽象問題具體呈現(xiàn)出來。
首先筆者通過情境模擬二年級(jí)學(xué)生舉辦一個(gè)口算大賽。模擬過程:讓2位學(xué)生帶上頭飾,一位扮演二年級(jí)的學(xué)生,一位是扮演電腦小博士。教師說開始,并請(qǐng)電腦小博士出一道2個(gè)數(shù)相加和為20以內(nèi)的加法題,學(xué)生回答問題,電腦小博士思考后說:“恭喜!答對(duì)了”或“答錯(cuò)了!加油哦!”(如圖2)。筆者接下來讓學(xué)生“玩”程序,把剛才的仿真情境在電腦中重演一遍。隨后筆者提出問題:①程序里有幾個(gè)角色?②表演中的“學(xué)生”角色在哪里?學(xué)生經(jīng)過初步判斷得出四個(gè)角色分別是電腦小博士、加數(shù)、被加數(shù)、答案,后面是舞臺(tái)背景,里面包括“口算大賽”“+”“=”等元素。但這僅僅是理清了一部分角色,其中加數(shù)、被加數(shù)和答案并非是角色,這為后面埋下伏筆。在教師的引導(dǎo)下,學(xué)生觀察和思考后,得出表演中的實(shí)際角色“學(xué)生”就是軟件的使用者,在程序中可以不用出現(xiàn)。
用模擬情境的方式導(dǎo)入大大增加了學(xué)生的學(xué)習(xí)興趣。讓學(xué)生在“玩”中感知程序的操作方法及各對(duì)象的關(guān)系,從而把抽象的程序變得具體,并可以“觸摸”。
2.思維導(dǎo)圖,從無形到有形
思維導(dǎo)圖能很好理清程序中角色的關(guān)系,讓學(xué)生一目了然地了解現(xiàn)實(shí)生活和計(jì)算機(jī)世界的聯(lián)系,學(xué)會(huì)把無形的思維過程轉(zhuǎn)化為直觀有形的導(dǎo)圖。筆者通過情境模擬,并以問答的形式,引導(dǎo)學(xué)生思考程序所需要的角色;讓學(xué)生仔細(xì)觀察舞臺(tái)上的加數(shù)和被加數(shù),使其發(fā)現(xiàn)每次重新出題時(shí),加數(shù)和被加數(shù)發(fā)生變化。像加數(shù)和被加數(shù)這樣在程序運(yùn)行過程中沒有固定的值,隨時(shí)發(fā)生變化的量,稱為變量。從而引出本節(jié)課的重點(diǎn)——變量。筆者出示程序的思維導(dǎo)圖(如圖3),并層層提問,引導(dǎo)學(xué)生思考問題的關(guān)鍵點(diǎn)。以“圖”的方式來整體規(guī)劃,將現(xiàn)實(shí)生活中的對(duì)象與計(jì)算機(jī)要處理的對(duì)象一一對(duì)應(yīng),化無形為有形。
分解問題,理清思維
計(jì)算思維中分解的概念是把一個(gè)看起來困難的問題重新闡釋成我們知道怎樣去解決的問題。經(jīng)過分解后,這些零散的部分才能夠被理解和解決,從而降低大型實(shí)例的設(shè)計(jì)難度。學(xué)生通過分解問題,理清每個(gè)角色的動(dòng)作與編程思路,將難點(diǎn)進(jìn)行分解并一一突破,從而從無序狀態(tài)中脫離出來,找到解決問題的關(guān)鍵點(diǎn)。
1.簡(jiǎn)化自然語(yǔ)言,分解出程序步驟
筆者引導(dǎo)學(xué)生通過抓重點(diǎn)詞的方法,去葉存枝,有效地把握程序運(yùn)行的方向,這樣制作范例時(shí)思路會(huì)更加清晰。經(jīng)過抽象建模,筆者要求學(xué)生根據(jù)思維導(dǎo)圖,對(duì)編輯過程進(jìn)行自然語(yǔ)言描述。簡(jiǎn)化學(xué)生的自然語(yǔ)言描述,最后圈出重點(diǎn)詞:出題目、詢問、回答、思考、說。經(jīng)筆者引導(dǎo)后得出:“回答”是程序操作的個(gè)人行為。最后分解得出電腦小博士的程序步驟:出題目→詢問→判斷→說。
2.拆分執(zhí)行效果,細(xì)化出腳本模塊
學(xué)生操作程序并仔細(xì)觀察確定程序的四個(gè)主要問題,再在此基礎(chǔ)上細(xì)化出所需要的模塊:①加數(shù)和被加數(shù)的數(shù)值范圍如何賦值?②詢問框和答案如何顯示?③正確答案是如何計(jì)算出來的?④何時(shí)說“對(duì)了”或者“錯(cuò)了”?
其中問題④最復(fù)雜,它是電腦小博士的思考過程,也是步驟中的第三步“判斷”。為了幫助學(xué)生理清規(guī)則,筆者讓他們描述電腦小博士的思考過程,利用語(yǔ)文中“如果……否則……”的關(guān)聯(lián)詞來造句,從而理解條件判斷語(yǔ)句。
師:這個(gè)條件判斷的條件是什么?
生:題目回答正確。
師:怎么樣才算回答正確呢?(這也是比較難以理解的,因?yàn)閷W(xué)生難以體會(huì)到電腦的思考過程是如何)什么情況下算答對(duì)?
生:答案與回答進(jìn)行比較時(shí)。
從而教師引出邏輯運(yùn)算符腳本模塊:等于號(hào)(=)。最后,將其梳理為“當(dāng)……時(shí),角色會(huì)……”的Scratch語(yǔ)言結(jié)構(gòu),得出使用判斷腳本模塊。當(dāng)答案和回答相等時(shí),電腦小博士會(huì)說“答對(duì)了”!否者會(huì)說“答錯(cuò)了”!分析一系列問題后,學(xué)生細(xì)化腳本模塊。
提煉算法,訓(xùn)練思維
算法是通過一種清晰定義的步驟來解決問題的方法。之前抽象和分解起到了鏈接自然描述語(yǔ)言和軟件編程語(yǔ)言的作用。在此基礎(chǔ)上,要針對(duì)每個(gè)小問題,形成解決問題的算法。此時(shí)放手讓學(xué)生在Scratch中進(jìn)行程序設(shè)計(jì)是很困難的,因?yàn)榉种Ш脱h(huán)很難表達(dá)清楚,為此筆者借助流程圖突破重難點(diǎn)來提煉算法。
1.流程圖護(hù)航,自主“擺弄”
“擺弄”是Scratch編程學(xué)習(xí)的精髓。由于學(xué)生設(shè)計(jì)經(jīng)驗(yàn)不足,所以筆者給出流程圖(如圖4),這樣能更有效、更規(guī)范地描述算法,引導(dǎo)學(xué)生在Scratch中找到相應(yīng)的代碼塊。學(xué)生已經(jīng)知道所需的腳本模塊,通過流程圖和所需模塊,嘗試自主搭建,體驗(yàn)“擺弄”模塊的樂趣。學(xué)生通過細(xì)化腳本模塊,查看流程圖,思路基本形成,這為自主完成奠定了基礎(chǔ),為自主學(xué)習(xí)提供了支點(diǎn)。
2.重難點(diǎn)突破,吃透算法
“口算軟件”的重難點(diǎn)是:搭建條件判斷語(yǔ)句,從而對(duì)變量有初步的認(rèn)識(shí)。為了解決“條件如何搭建”的問題,學(xué)生展開了激烈的討論,并討論得出了多種算法設(shè)計(jì)。雖然不同的算法執(zhí)行的效果會(huì)略有差別,但重要的是學(xué)生在討論和不斷擺弄的過程中,拓展了思路,發(fā)展了計(jì)算思維,這才是教師期望達(dá)到的目的。案例中要讓程序自動(dòng)出題,需要利用循環(huán)結(jié)構(gòu),通過比對(duì)執(zhí)行效果,學(xué)生會(huì)非常容易理解循環(huán)算法,并能合理利用。
糾錯(cuò)調(diào)試,鞏固思維
“糾錯(cuò)”是Scratch教學(xué)中另一個(gè)重要的環(huán)節(jié),貫穿了整個(gè)課程的學(xué)習(xí)過程。從學(xué)生設(shè)計(jì)腳本程序時(shí),糾錯(cuò)的行為就始終伴隨著,更體現(xiàn)了“擺弄”的重要性。學(xué)生在調(diào)試作品時(shí),需要像計(jì)算機(jī)執(zhí)行程序一樣去思考執(zhí)行語(yǔ)句,理解執(zhí)行每一步模塊應(yīng)該出現(xiàn)的現(xiàn)象,并與實(shí)際的執(zhí)行結(jié)果進(jìn)行比較。當(dāng)發(fā)現(xiàn)效果與預(yù)想的有偏離時(shí),就要不斷地糾錯(cuò),調(diào)整程序,采用不同的算法實(shí)現(xiàn)效果,在“構(gòu)思—編程—測(cè)試—調(diào)試”的過程中進(jìn)行糾錯(cuò),反復(fù)磨練,這樣學(xué)生不僅在知識(shí)、技能上會(huì)有進(jìn)步,在計(jì)算思維上也會(huì)有所提升。
1.閱讀腳本,糾錯(cuò)更自主
閱讀是人類的基本技能之一,但在信息技術(shù)教學(xué)中常常被忽視,在程序調(diào)試時(shí),它是一種行之有效的方法。隨著程序?qū)W習(xí)的深入,學(xué)生發(fā)現(xiàn)運(yùn)行錯(cuò)誤,想要尋找問題的根源,卻因?yàn)槌绦虼a模塊數(shù)量的增加而無法找到出錯(cuò)代碼。為此,筆者引導(dǎo)學(xué)生一邊讀代碼,一邊添加“注釋”,這是一種糾錯(cuò)思維,也很好地解決了問題腳本定位的問題。例如,邊讀“口算軟件”腳本邊注釋?!包c(diǎn)擊綠旗開始,將變量加數(shù)和被加數(shù)賦值為0到20之間的一個(gè)隨機(jī)數(shù)值”(注釋:出題);“如果加數(shù)+被加數(shù)=回答”(注釋:判斷);“就詢問請(qǐng)回答并等待”(注釋:詢問);“如果正確‘恭喜,答對(duì)了’,否則就說‘答錯(cuò)了,加油’”(注釋:說)。這是一道題目的出題過程,要讓程序重復(fù)出題,則需要再讓這段程序腳本重復(fù)執(zhí)行。學(xué)生經(jīng)過讀一讀和注釋后,再加上教師的引導(dǎo),就會(huì)發(fā)現(xiàn)腳本中的錯(cuò)誤,不斷調(diào)整角本。
2.小組協(xié)作,調(diào)試更有效
教師為學(xué)生提供如何調(diào)試程序的學(xué)習(xí)單。對(duì)“口算軟件”這個(gè)程序先進(jìn)行調(diào)試,觀察并記錄錯(cuò)誤的現(xiàn)象,找出錯(cuò)誤語(yǔ)句后,學(xué)生相互討論,分析解決這些問題的方法,修改程序,重復(fù)調(diào)整的環(huán)節(jié),直到程序完全正確。
例如,在《口算軟件》教學(xué)中,程序出現(xiàn)不能正常出題,或者出題內(nèi)容不是1到20之間的一個(gè)隨機(jī)數(shù),學(xué)生應(yīng)該先找到問題語(yǔ)句,并對(duì)其進(jìn)行分析,填寫糾錯(cuò)學(xué)習(xí)單(如表1),記錄程序中的錯(cuò)誤現(xiàn)象和錯(cuò)誤語(yǔ)句,再考慮“如何修正”;如果不會(huì)修正,則可以通過小組協(xié)作來解決問題,或者請(qǐng)教師單獨(dú)指導(dǎo)調(diào)試。學(xué)生通過對(duì)程序的糾錯(cuò)調(diào)試,不僅鍛煉了自身的計(jì)算思維能力,而且對(duì)知識(shí)進(jìn)行了鞏固,為拓展埋下了伏筆。
歸納總結(jié),沉淀思維
歸納是去情境化的過程,讓學(xué)生剝離實(shí)例學(xué)習(xí)所運(yùn)用的各種編程技巧和方法,能通過類比的方法,把握共性問題,將一個(gè)問題的解決方法遷移到另一個(gè)問題中,形成一種內(nèi)在的思維能力。經(jīng)過前面四步,學(xué)生已經(jīng)初步形成了計(jì)算思維能力,但這種思維能力并不成熟和穩(wěn)定,需要在教師的引導(dǎo)和任務(wù)支配下才能完成,因此,學(xué)生需要借助歸納、實(shí)踐來強(qiáng)化和鞏固學(xué)習(xí)結(jié)果。
1.分析方案,再用變量歸納總結(jié)
經(jīng)過這種去情境化的過程后,學(xué)生就可以接受更多的挑戰(zhàn)性任務(wù),進(jìn)行創(chuàng)意計(jì)算作品的自由創(chuàng)作。本節(jié)課主要的學(xué)習(xí)內(nèi)容是“變量”應(yīng)用,變量強(qiáng)大的功能為學(xué)生提供了挑戰(zhàn)性的任務(wù),讓學(xué)生的創(chuàng)新力超前發(fā)展,使其在實(shí)現(xiàn)想法過程中獲得成功的喜悅。教師再增加拓展環(huán)節(jié):我們?yōu)椤翱谒丬浖碧睃c(diǎn)功能吧,為腳本添加一個(gè)“評(píng)分方案”。學(xué)生思考變量的起始分值和分值變化,并填寫完成表2。再創(chuàng)作為程序的升級(jí)環(huán)節(jié),筆者通過一系列的問題和表格來引導(dǎo)學(xué)生運(yùn)用變量控件解決問題。在創(chuàng)作的過程中,學(xué)生不僅要對(duì)變量進(jìn)行識(shí)記和理解,更需要對(duì)變量進(jìn)行深入的分析和靈活的運(yùn)用,這對(duì)學(xué)生的計(jì)算思維提出了更高的要求。
2.作品展示,分享、交流、沉淀思維
作品展示是對(duì)學(xué)生的肯定,也是學(xué)生再學(xué)習(xí)的一種方式。學(xué)生介紹作品,不僅是展示自己的機(jī)會(huì),也是對(duì)知識(shí)進(jìn)行歸納總結(jié)。經(jīng)過思考和學(xué)習(xí)后,學(xué)生的作品比原來更有想法、更豐滿了(如圖5)。學(xué)生在分享和交流中,不僅鍛煉了語(yǔ)言表達(dá)能力,理清了思路,也獲得了快樂,沉淀了思維。
教無定法,教師只有在教學(xué)設(shè)計(jì)時(shí)融入計(jì)算思維,不斷地改善自己的程序設(shè)計(jì)教學(xué)策略,提高學(xué)生學(xué)習(xí)編程的熱情和積極性,才能讓學(xué)生在自主、協(xié)作、交流、分享的過程中,促進(jìn)思維的發(fā)展,才能讓“計(jì)算思維”在編程實(shí)例教學(xué)中落地生根,讓每一位學(xué)生學(xué)會(huì)創(chuàng)造性地思考。