周玳珈
程序設(shè)計(jì)課程以編程語言來描述和解決問題,從而揭示計(jì)算機(jī)如何解決具體問題的方法,是非常適合培養(yǎng)學(xué)生計(jì)算思維的課程。目前,部分學(xué)校在高中階段開設(shè)了信息學(xué)奧賽培訓(xùn)或國家課程標(biāo)準(zhǔn)選修課《算法與程序設(shè)計(jì)》,但前者為面向少部分學(xué)生的“精英教育”,后者則理論性較強(qiáng)。如何將程序設(shè)計(jì)課程設(shè)計(jì)成面向廣大學(xué)生的常態(tài)課程,培養(yǎng)學(xué)生的計(jì)算思維能力,并提高其思考與決策水平,形成解決實(shí)際問題的能力,是一個(gè)值得解決的問題。筆者所在學(xué)校的信息技術(shù)教研組對(duì)此進(jìn)行了實(shí)踐探索,并通過對(duì)學(xué)習(xí)工具、課程結(jié)構(gòu)及學(xué)習(xí)活動(dòng)的合理選擇或科學(xué)設(shè)計(jì),實(shí)現(xiàn)了面向全體學(xué)生的程序設(shè)計(jì)常態(tài)課,取得了一定的效果。
● 基于圖形化編程的學(xué)習(xí)工具選擇
目前,各中學(xué)開設(shè)的程序設(shè)計(jì)課主要有信息學(xué)奧賽培訓(xùn)課與國家課程標(biāo)準(zhǔn)選修課《算法與程序設(shè)計(jì)》兩種形式,它們采用的編程語言前者為C語言或PASCAL語言,后者為VB語言,因此,這兩種形式均需要學(xué)習(xí)程序代碼且面向數(shù)學(xué)解決問題。這樣的形式不僅使學(xué)習(xí)活動(dòng)缺乏生動(dòng)性,而且在面對(duì)各類問題時(shí),也不利于對(duì)學(xué)生進(jìn)行識(shí)別、分析、抽象、建模并設(shè)計(jì)系統(tǒng)解決方案的計(jì)算思維的培養(yǎng)。
基于以上分析,筆者所在學(xué)校在高一年級(jí)開設(shè)了面向全體學(xué)生的程序設(shè)計(jì)常態(tài)課,采用圖形化編程軟件Scratch和圖形化編程平臺(tái)App Inventor作為學(xué)習(xí)工具。這兩種工具均是采用鼠標(biāo)拖動(dòng)模塊到程序編輯欄的搭積木式的工作方式,是帶圖形界面的可視化編程語言,其操作難度低,適合各能力層次的學(xué)生。利用Scratch可以創(chuàng)建故事、動(dòng)畫、游戲、音樂、視頻,適合模擬各種現(xiàn)實(shí)生活場(chǎng)景,創(chuàng)設(shè)各種虛擬任務(wù)。App Inventor則是一個(gè)完全在線開發(fā)的Android編程環(huán)境,它可以用于設(shè)計(jì)安卓手機(jī)應(yīng)用的外觀及行為,設(shè)計(jì)完成的應(yīng)用程序既可以在計(jì)算機(jī)模擬器中運(yùn)行,也可以直接安裝在手機(jī)上運(yùn)行,它為學(xué)生探索并創(chuàng)新如何利用程序滿足真實(shí)的學(xué)習(xí)、工作或生活需求提供了強(qiáng)有力的計(jì)算設(shè)計(jì)平臺(tái)和更寬闊的思維發(fā)展空間。值得一提的是,Scratch的程序編寫界面和App Inventor有相似之處,學(xué)生能夠很方便地從Scratch這一較為簡(jiǎn)單的工具過渡到比較復(fù)雜的App Inventor,從而很好地從解決虛擬問題過渡到對(duì)真實(shí)問題的解決和現(xiàn)實(shí)應(yīng)用的設(shè)計(jì)中來。
● 基于程序設(shè)計(jì)思想的課程結(jié)構(gòu)設(shè)置
筆者觀摩了不少程序設(shè)計(jì)選修課,教師為了便于開展教學(xué)、提高學(xué)習(xí)活動(dòng)的可操作性,大多都以面向?qū)ο蟪绦蛟O(shè)計(jì)工具的應(yīng)用為主線設(shè)計(jì)教學(xué),如“制作一個(gè)計(jì)算器”“制作成績(jī)排序軟件”等,或花費(fèi)許多精力在程序界面的設(shè)計(jì)上。在這些課堂中,雖有程序設(shè)計(jì)的知識(shí),但工具的學(xué)習(xí)和應(yīng)用的主線過于分明,其結(jié)果是學(xué)生對(duì)程序設(shè)計(jì)課的印象,就是在記憶一個(gè)個(gè)應(yīng)用程序的名稱。
培養(yǎng)學(xué)生的計(jì)算思維,關(guān)鍵在于使其形成面對(duì)問題時(shí)能分析如何利用計(jì)算機(jī)科學(xué)知識(shí)獲得最佳策略的意識(shí)和能力,懂得如何合理組織數(shù)據(jù),能夠運(yùn)用最優(yōu)算法設(shè)計(jì)解決問題的方案等。因此,選擇正確的程序結(jié)構(gòu)、使用合理的數(shù)據(jù)結(jié)構(gòu)、優(yōu)化解決問題的算法等程序設(shè)計(jì)思想的學(xué)習(xí)和鍛煉是培養(yǎng)計(jì)算思維最關(guān)鍵有效的方法。

筆者所在學(xué)校的程序設(shè)計(jì)常態(tài)課是以程序設(shè)計(jì)思想為線索進(jìn)行課程結(jié)構(gòu)規(guī)劃的(如左上表),與課程中各個(gè)教學(xué)專題對(duì)應(yīng)的則是以“大話西游”為創(chuàng)作大主題而設(shè)計(jì)的若干個(gè)課堂實(shí)踐案例及課堂導(dǎo)學(xué)案,其中課堂導(dǎo)學(xué)案的內(nèi)容組織便是以程序結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)和算法等知識(shí)目標(biāo)為導(dǎo)向。例如,在教學(xué)專題“選擇結(jié)構(gòu)”時(shí),筆者安排了一個(gè)設(shè)計(jì)捕捉游戲的任務(wù),讓學(xué)生依次經(jīng)歷“發(fā)現(xiàn)任務(wù)中的分支選擇—認(rèn)識(shí)計(jì)算機(jī)程序的選擇結(jié)構(gòu)及其表達(dá)方式—選擇編程工具中的恰當(dāng)指令實(shí)現(xiàn)選擇結(jié)構(gòu)—編程實(shí)現(xiàn)任務(wù)”這一思維過程(如圖1)。在這個(gè)過程中,學(xué)生不是一開始就投入到工具的學(xué)習(xí)中,而是先學(xué)會(huì)分析問題可以用什么策略或步驟,再思考如何用計(jì)算機(jī)的方式進(jìn)行表達(dá),最后以合理、有效的方式解決問題。
因?yàn)橛?jì)算思維是運(yùn)用計(jì)算機(jī)科學(xué)相關(guān)思想方法形成問題解決方案的過程中產(chǎn)生的一系列思維活動(dòng),因此“問題”是培養(yǎng)計(jì)算思維的基本立足點(diǎn)。基于問題,才能引發(fā)關(guān)于問題的界定、問題特征的抽象、為解決問題而建立數(shù)據(jù)模型等一系列計(jì)算思維活動(dòng);基于問題,也才能發(fā)揮計(jì)算思維的最大效益,即培養(yǎng)學(xué)生分析和解決現(xiàn)實(shí)問題的能力。

筆者所在學(xué)校以“大話西游”作為整個(gè)程序設(shè)計(jì)課程的創(chuàng)作大主題,并根據(jù)該主題設(shè)計(jì)了許多生動(dòng)有趣的學(xué)習(xí)活動(dòng)及任務(wù),如制作一個(gè)孫悟空變臉的動(dòng)畫劇場(chǎng),制作悟空抓妖怪的追捕游戲,開發(fā)一個(gè)關(guān)于中國名著《西游記》知識(shí)測(cè)驗(yàn)的手機(jī)APP等。在課堂導(dǎo)學(xué)案中,每一個(gè)學(xué)習(xí)活動(dòng)首先都由若干個(gè)問題引起,即稱之為“前置問題”;每個(gè)學(xué)習(xí)活動(dòng)后期也都會(huì)有問題引發(fā)學(xué)習(xí)延伸,則稱之為“拓展問題”。
例如,在教學(xué)專題“循環(huán)結(jié)構(gòu)”中,學(xué)生要完成一個(gè)制作迷宮游戲的學(xué)習(xí)任務(wù)(如上頁圖2)。為了完成該任務(wù),學(xué)生需要學(xué)習(xí)“循環(huán)結(jié)構(gòu)”的相關(guān)知識(shí),也需要運(yùn)用已學(xué)過的“選擇結(jié)構(gòu)”的相關(guān)知識(shí)。在學(xué)習(xí)活動(dòng)的開始環(huán)節(jié),教師提出前置問題:打開走迷宮的示例程序,嘗試用鍵盤控制對(duì)象從起點(diǎn)走到終點(diǎn),并思考以下幾個(gè)問題。
①這個(gè)程序和你玩過的哪類游戲相似,它們具備什么功能(或特征)?②要使對(duì)象受鍵盤控制,并在碰到迷宮的黑線時(shí)做出反應(yīng),需要做哪些判斷或選擇?實(shí)現(xiàn)這些判斷或選擇可以使用哪種程序結(jié)構(gòu)和Scratch指令?③要讓對(duì)象一直受鍵盤的控制,需要怎么做?④要讓對(duì)象一直受鍵盤的控制,直到遇到某個(gè)條件,就結(jié)束鍵盤控制,需要怎么做?
前置問題的設(shè)計(jì)重在幫助學(xué)生抽象出解決問題的數(shù)據(jù)模型。問題①在于引導(dǎo)學(xué)生找出迷宮游戲的典型特征,完成問題的界定及問題特征的提取;問題②引導(dǎo)學(xué)生發(fā)現(xiàn)可以利用所學(xué)習(xí)過的程序設(shè)計(jì)知識(shí)“選擇結(jié)構(gòu)”來實(shí)現(xiàn)判斷和選擇功能;問題③~④啟發(fā)學(xué)生尋找實(shí)現(xiàn)持續(xù)執(zhí)行或持續(xù)執(zhí)行直到實(shí)現(xiàn)某條件的辦法,進(jìn)而學(xué)習(xí)程序設(shè)計(jì)新知識(shí)“循環(huán)結(jié)構(gòu)”。對(duì)問題②~④的思考,有助于學(xué)生建立解決問題的結(jié)構(gòu)模型。
又如,在教學(xué)專題“應(yīng)用系統(tǒng)的程序設(shè)計(jì)”的第一個(gè)學(xué)習(xí)活動(dòng)“悟空學(xué)藝——72變”中,要求學(xué)生在App Inventor中綜合應(yīng)用前面學(xué)習(xí)的程序設(shè)計(jì)基本知識(shí),設(shè)計(jì)一個(gè)帶畫板功能的手機(jī)App程序,其中有一個(gè)功能是設(shè)置畫筆為粗線條或細(xì)線條(畫筆寬度固定)。課堂導(dǎo)學(xué)案中提供現(xiàn)成的程序參考,教師在學(xué)習(xí)活動(dòng)后期提出拓展問題:根據(jù)人對(duì)應(yīng)用工具的操作習(xí)慣,畫板應(yīng)該可提供畫筆的逐步調(diào)節(jié)粗細(xì)的功能(而不是固定粗細(xì)),請(qǐng)你利用學(xué)過的程序設(shè)計(jì)知識(shí),結(jié)合App Inventor中相關(guān)的組件及其屬性,實(shí)現(xiàn)這一功能。
拓展問題的設(shè)計(jì)在于引導(dǎo)學(xué)生實(shí)現(xiàn)課內(nèi)知識(shí)到現(xiàn)實(shí)應(yīng)用的遷移,以上問題將引導(dǎo)學(xué)生思考并發(fā)現(xiàn)可以通過定義全局變量,并利用變量的數(shù)值遞增或遞減進(jìn)而賦值給畫筆的寬度屬性來實(shí)現(xiàn)所需功能(如圖3)。

再如,在教學(xué)專題“應(yīng)用系統(tǒng)的程序設(shè)計(jì)”的另一個(gè)學(xué)習(xí)活動(dòng)“西游回憶錄”中,筆者通過讓學(xué)生制作一個(gè)關(guān)于中國名著《西游記》的知識(shí)學(xué)習(xí)與測(cè)試手機(jī)App程序,學(xué)習(xí)應(yīng)用“列表”這一靜態(tài)存儲(chǔ)結(jié)構(gòu)。在學(xué)習(xí)活動(dòng)后期,筆者同樣提出拓展問題:思考可能出現(xiàn)的用戶需求,并嘗試改良答題程序,提高其使用價(jià)值。
為此,有學(xué)習(xí)小組利用“列表”在原來答題程序上增加提示功能,這一來可以提高用戶的答題率,二來還可以讓用戶學(xué)習(xí)更多拓展知識(shí)(如P41圖4)。
● 結(jié)束語
回顧過去一學(xué)年開展的程序設(shè)計(jì)課,筆者通過合理選擇學(xué)習(xí)工具、科學(xué)設(shè)置課程結(jié)構(gòu)以及精心設(shè)計(jì)學(xué)習(xí)活動(dòng),大大提高了程序設(shè)計(jì)課程的教學(xué)可實(shí)施性和學(xué)習(xí)可操作性,從而實(shí)現(xiàn)了課程常態(tài)化并使全體學(xué)生都有機(jī)會(huì)接觸程序設(shè)計(jì)。而且圖形化的編程工具、滲透程序設(shè)計(jì)思想方法的課程架構(gòu)以及強(qiáng)調(diào)問題解決的學(xué)習(xí)活動(dòng)等,更好地培養(yǎng)了學(xué)生利用計(jì)算機(jī)科學(xué)知識(shí)界定、分析和有效解決問題的意識(shí)和能力,最終促進(jìn)了對(duì)學(xué)生計(jì)算思維這一核心素養(yǎng)的培養(yǎng)。