王鳴九
2006年,周以真教授系統(tǒng)地提出了計(jì)算思維的定義、概念和特征。從2010年5月起,計(jì)算思維開(kāi)始融入大學(xué)計(jì)算機(jī)基礎(chǔ)課程,以培養(yǎng)高素質(zhì)的研究型人才。而在中學(xué)信息科技課程中,各地教師也已開(kāi)展了諸多實(shí)踐,除了融入原有的計(jì)算機(jī)編程課程外,廣州、深圳、重慶的很多教師以Scratch、Kodu等為載體,將計(jì)算思維的培養(yǎng)融入其中,以此來(lái)體現(xiàn)學(xué)科價(jià)值。筆者所在學(xué)校近年來(lái)也一直在開(kāi)展計(jì)算思維融入初中信息技術(shù)課的實(shí)踐研究,本案例所描述的是利用Scratch載體,結(jié)合傳感器,針對(duì)計(jì)算思維的抽象、分解、算法和糾錯(cuò)等核心概念開(kāi)展教學(xué)實(shí)踐。
案例描述
這是七年級(jí)Scratch課程中的一個(gè)案例,學(xué)生將通過(guò)三課時(shí)的學(xué)習(xí),利用Scratch及其外設(shè)傳感器,通過(guò)程序設(shè)計(jì)來(lái)模擬現(xiàn)實(shí)生活中的抓娃娃機(jī)。在第一課時(shí),學(xué)生們已經(jīng)接觸了Scratch傳感器,并學(xué)習(xí)了如何將滑桿應(yīng)用到Scratch作品中。本文重點(diǎn)探討第二課時(shí)中關(guān)于計(jì)算思維的落實(shí),主要體現(xiàn)在以下幾個(gè)教學(xué)環(huán)節(jié)。
1.抽象
首先,筆者請(qǐng)學(xué)生描述生活中抓娃娃機(jī)的游戲過(guò)程,學(xué)生一般會(huì)給出如下描述:通過(guò)搖動(dòng)手柄來(lái)控制爪子前后左右移動(dòng),然后對(duì)準(zhǔn)要抓的娃娃后,按下按鈕爪子就會(huì)下降,當(dāng)下降到一定高度后,爪子就會(huì)合上,無(wú)論是否抓到娃娃,爪子都會(huì)回到出口處的上方。接著,結(jié)合PPT,如圖1所示,筆者依次拋出這樣四個(gè)問(wèn)題,請(qǐng)學(xué)生思考:第一,爪子是由什么控制的?第二,手柄可以讓爪子在什么方向上移動(dòng)?第三,如何讓爪子下降?第四,爪子何時(shí)會(huì)上升?
學(xué)生們稍作思考便能回答,且答案也近乎統(tǒng)一,即爪子是由手柄控制的,手柄可以前后左右移動(dòng),當(dāng)按下按鈕時(shí)爪子會(huì)下降,當(dāng)下降到一定高度時(shí)爪子會(huì)上升。
筆者拋出這四個(gè)問(wèn)題目的在于引導(dǎo)學(xué)生通過(guò)觀察、思考,將現(xiàn)實(shí)生活中的對(duì)象,與計(jì)算機(jī)中處理的對(duì)象進(jìn)行一一對(duì)應(yīng)。如圖2所示,手柄和按鈕對(duì)應(yīng)Scratch傳感器上的滑桿和按鈕;爪子和娃娃對(duì)應(yīng)Scratch中的角色。
此環(huán)節(jié)就體現(xiàn)了計(jì)算思維中的“抽象”概念——將現(xiàn)實(shí)生活中的對(duì)象轉(zhuǎn)為計(jì)算機(jī)可以處理的對(duì)象,將一個(gè)現(xiàn)實(shí)問(wèn)題轉(zhuǎn)變?yōu)橛?jì)算機(jī)可以處理的問(wèn)題。而采用的教學(xué)策略是層層提問(wèn),促進(jìn)學(xué)生思考,引導(dǎo)學(xué)生去描述現(xiàn)象和問(wèn)題。
2.分解
計(jì)算思維中分解的概念是將一個(gè)復(fù)雜的大問(wèn)題分解為若干個(gè)易于解決和實(shí)現(xiàn)的小問(wèn)題。
在這個(gè)案例中,爪子的行為最復(fù)雜,直接讓學(xué)生去編程實(shí)現(xiàn)是很困難的。為了幫助學(xué)生理清思路,如圖3所示,筆者將爪子的行為分解為五個(gè)步驟:左右移動(dòng)、下降、合上、回到原位、松開(kāi)。當(dāng)學(xué)生拿到學(xué)習(xí)單后,就要去思考:在什么情況下,爪子左右移動(dòng);在什么情況下,爪子會(huì)下降;又是在什么情況下,爪子會(huì)合上……
學(xué)生通過(guò)思考和課堂交流,了解到爪子的一系列行為都是有觸發(fā)條件的,而他們的腦中對(duì)這些條件的認(rèn)識(shí)也變得清晰了:當(dāng)調(diào)節(jié)滑桿時(shí),爪子可以左右移動(dòng);當(dāng)按下按鈕時(shí),爪子會(huì)開(kāi)始下降;當(dāng)下降到一定高度時(shí),爪子會(huì)合上;當(dāng)爪子合上后,開(kāi)始上升并回到原位;當(dāng)回到原位后,爪子開(kāi)始松開(kāi)。
在引導(dǎo)學(xué)生對(duì)案例進(jìn)行分解時(shí),筆者采用的教學(xué)策略是提供學(xué)習(xí)支架,以“當(dāng)……時(shí)候,爪子做……”的形式設(shè)計(jì)表格,啟發(fā)學(xué)生思考,進(jìn)行課堂交流,引導(dǎo)學(xué)生發(fā)現(xiàn)每一個(gè)行為都是有對(duì)應(yīng)的觸發(fā)條件的,同時(shí)也為進(jìn)一步提煉算法打下基礎(chǔ)。
3.算法
計(jì)算思維中另一個(gè)重要的概念就是算法,算法是有窮規(guī)則的集合,是用規(guī)則制定了某一特定類(lèi)型問(wèn)題的運(yùn)算序列,或者是任務(wù)執(zhí)行與問(wèn)題求解的一系列步驟。而算法又有很多種描述方式,在經(jīng)過(guò)抽象和分解后,學(xué)生們已經(jīng)可以用自然語(yǔ)言去描述這個(gè)案例。但僅憑借自然語(yǔ)言,學(xué)生在Scratch中進(jìn)行程序設(shè)計(jì)是很困難的,因?yàn)榉种Ш脱h(huán)是很難用自然語(yǔ)言描述清楚的,因此,借助流程圖描述算法就是筆者采取的教學(xué)策略。
以爪子的左右移動(dòng)和下降這兩個(gè)行為為例,在自然語(yǔ)言描述的基礎(chǔ)上,筆者給出流程圖如圖4所示,虛線(xiàn)框中的條件判斷和循環(huán)結(jié)構(gòu),對(duì)應(yīng)到Scratch中,就是“重復(fù)執(zhí)行直到傳感器按下按鈕”。在按下按鈕之前,都是由滑桿來(lái)控制爪子的移動(dòng),而左右移動(dòng),在計(jì)算機(jī)中對(duì)應(yīng)的就是爪子的x坐標(biāo)發(fā)生變化,因此,可以通過(guò)設(shè)定爪子的x坐標(biāo)來(lái)實(shí)現(xiàn)水平移動(dòng)。
因?yàn)閷W(xué)生程序設(shè)計(jì)經(jīng)驗(yàn)不足,所以給出流程圖以及Scratch中對(duì)應(yīng)的腳本,這樣能夠幫助學(xué)生更有效、更規(guī)范地描述算法,引導(dǎo)學(xué)生在Scratch中找到對(duì)應(yīng)代碼塊,進(jìn)行腳本編寫(xiě)。同樣,判斷爪子何時(shí)合上以及判斷是否碰到娃娃,筆者給出如圖5所示的流程圖。
與爪子左右移動(dòng)同理,所謂爪子下降,就是將爪子的y坐標(biāo)減小,這是一個(gè)重復(fù)執(zhí)行的過(guò)程,結(jié)束的條件是下降到一定高度,用y坐標(biāo)小于某一個(gè)數(shù)值來(lái)實(shí)現(xiàn)。而當(dāng)爪子合上后,需要進(jìn)行一次判斷,如果碰到了娃娃,那么就進(jìn)行廣播,以便“告知”娃娃在接收到這個(gè)廣播后可以執(zhí)行的后續(xù)行為,如跟隨爪子。
4.糾錯(cuò)
其實(shí),當(dāng)學(xué)生在Scratch中編寫(xiě)腳本進(jìn)行程序設(shè)計(jì)時(shí),糾錯(cuò)是始終伴隨其中的。當(dāng)學(xué)生運(yùn)行程序,發(fā)現(xiàn)與預(yù)期不同的情況發(fā)生時(shí),糾錯(cuò)的行為就開(kāi)始了,他們會(huì)去尋找到底哪里出現(xiàn)了問(wèn)題,糾錯(cuò)是通過(guò)測(cè)試和調(diào)試去實(shí)現(xiàn)的,糾錯(cuò)同樣是計(jì)算思維的概念之一。
在這個(gè)環(huán)節(jié)中,筆者采用的教學(xué)策略有兩種,一是提供傳感器使用微視頻,二是指導(dǎo)學(xué)生學(xué)會(huì)添加注釋。有的學(xué)生對(duì)傳感器上的滑桿和按鈕如何應(yīng)用還不清楚,那么,就可以在Moodle平臺(tái)上下載微視頻教學(xué)資源并反復(fù)觀看,從而解決Scratch中傳感器的使用問(wèn)題。
部分學(xué)生有些功能是實(shí)現(xiàn)了,但是在運(yùn)行觀察中發(fā)現(xiàn)存在問(wèn)題,而想要尋找問(wèn)題出在哪里的時(shí)候,卻因?yàn)榇a塊數(shù)量的增加很難快速查找定位。對(duì)此,應(yīng)指導(dǎo)學(xué)生學(xué)會(huì)為代碼塊添加注釋功能,根據(jù)代碼所實(shí)現(xiàn)的功能添加注釋?zhuān)ㄈ鐖D6),這樣便于排錯(cuò)過(guò)程中快速定位,尋找問(wèn)題所在。
案例反思
1.本案例的優(yōu)點(diǎn)及不足
本案例最顯著的優(yōu)點(diǎn)就在于抽象和分解這兩個(gè)環(huán)節(jié),筆者通過(guò)問(wèn)題設(shè)計(jì)、層層提問(wèn)、提示引導(dǎo),幫助學(xué)生把一個(gè)現(xiàn)實(shí)生活中的問(wèn)題轉(zhuǎn)變?yōu)榭梢杂糜?jì)算機(jī)處理的問(wèn)題,并且將復(fù)雜的大問(wèn)題分解為多個(gè)簡(jiǎn)單的小問(wèn)題,讓學(xué)生在解決問(wèn)題中培養(yǎng)計(jì)算思維。
筆者之所以選擇“抓娃娃機(jī)”,也是出于對(duì)學(xué)生最近發(fā)展區(qū)的考慮,這個(gè)例子是學(xué)生生活中熟悉并且能夠很好理解的,所以在引導(dǎo)學(xué)生對(duì)案例進(jìn)行抽象和分解時(shí),學(xué)生有很高的參與度。
這節(jié)課的不足之處在于,筆者僅考慮了案例本身的難點(diǎn),卻忽視了學(xué)生接觸Scratch只有半個(gè)學(xué)期,編程經(jīng)驗(yàn)不足這樣一個(gè)事實(shí),因此,沒(méi)能充分預(yù)設(shè),在編程環(huán)節(jié)沒(méi)有給予學(xué)生更多幫助。任務(wù)是明確的,學(xué)生也清楚最終成品應(yīng)該是怎樣的,但在對(duì)作品進(jìn)行反復(fù)運(yùn)行和糾錯(cuò)時(shí)就顯得很費(fèi)力,沒(méi)有能夠獲得及時(shí)的輔導(dǎo)。
2.從計(jì)算思維角度進(jìn)行教學(xué)設(shè)計(jì)的一般方法
類(lèi)似的案例也有不少,如利用傳感器的滑桿制作平板接球游戲,利用傳感器的光感信號(hào)控制發(fā)射子彈制作射擊游戲等。
雖然案例的內(nèi)容和實(shí)現(xiàn)作品的技術(shù)手段各不相同,但可以得出此類(lèi)教學(xué)設(shè)計(jì)的一般方法,即選擇案例→抽象建?!纸鈫?wèn)題→形成算法→糾錯(cuò)調(diào)試。
第一步,案例的選擇要貼近學(xué)生認(rèn)知,對(duì)案例的熟悉程度和理解程度是對(duì)問(wèn)題抽象和分解的基礎(chǔ)。
第二步,幫助學(xué)生將現(xiàn)實(shí)生活中的對(duì)象轉(zhuǎn)換為計(jì)算機(jī)可以處理的對(duì)象,將一個(gè)現(xiàn)實(shí)問(wèn)題轉(zhuǎn)變?yōu)橐粋€(gè)計(jì)算機(jī)可以處理的問(wèn)題,也就是抽象的過(guò)程。
第三步,分解問(wèn)題,引導(dǎo)學(xué)生將一個(gè)大而復(fù)雜的問(wèn)題分解為若干個(gè)更易實(shí)現(xiàn)和解決的小問(wèn)題。
第四步,在分解的基礎(chǔ)上,針對(duì)每個(gè)小問(wèn)題,形成解決問(wèn)題的算法。
第五步,運(yùn)行程序進(jìn)行觀察和測(cè)試,對(duì)出現(xiàn)的異?,F(xiàn)象進(jìn)行糾錯(cuò),而糾錯(cuò)的過(guò)程會(huì)反復(fù)進(jìn)行。
相信各地對(duì)計(jì)算思維開(kāi)展研究的教師們,在思考和實(shí)踐計(jì)算思維與信息科技課程融合中也會(huì)有很多案例,筆者由衷地希望可以相互學(xué)習(xí)和交流。