鄧彰超
浙江省新高考實(shí)施“7選3”模式后,技術(shù)成為其中的一門(mén)選考科目。算法與程序設(shè)計(jì)作為該科目選考的主要考核內(nèi)容,其難度和廣度有所提升,經(jīng)典算法如解析、枚舉、排序、查找遞歸等成為選考教學(xué)的重難點(diǎn)。在教研時(shí),同行們常會(huì)提出一些問(wèn)題:在學(xué)習(xí)這些經(jīng)典算法時(shí),如何讓學(xué)生真正經(jīng)歷計(jì)算機(jī)解決問(wèn)題的過(guò)程與方法?如何讓學(xué)生界定問(wèn)題、建模分析、設(shè)計(jì)算法解決問(wèn)題,形成科學(xué)穩(wěn)定的知識(shí)邏輯結(jié)構(gòu)?如何解決經(jīng)典算法學(xué)習(xí)中遇到的疑難問(wèn)題?如何通過(guò)這些疑難問(wèn)題的解決來(lái)培養(yǎng)和提升學(xué)生的思維能力?周以真教授指出,計(jì)算思維就是運(yùn)用計(jì)算機(jī)科學(xué)的基本概念去求解問(wèn)題、設(shè)計(jì)系統(tǒng)和理解人類(lèi)的行為,它涵蓋了計(jì)算機(jī)科學(xué)廣度的一系列思維活動(dòng)。其一般過(guò)程是注重理解問(wèn)題的本質(zhì),抽象問(wèn)題的特征,繼而構(gòu)造模型設(shè)計(jì)可自動(dòng)化執(zhí)行的算法來(lái)解決問(wèn)題。具體過(guò)程如圖1所示。
計(jì)算思維的提出,使高中信息技術(shù)課程的教學(xué)逐漸從注重實(shí)踐操作的技術(shù)素養(yǎng)層面上升到注重思維素養(yǎng)的培養(yǎng)層面,這就給經(jīng)典算法選考的學(xué)習(xí)和疑難問(wèn)題的解決提供了良好的方法論指導(dǎo)。筆者結(jié)合自己的教學(xué)實(shí)踐,分別從理解本質(zhì)確定目標(biāo)、設(shè)計(jì)任務(wù)講評(píng)歸納、合理建構(gòu)變式內(nèi)化與多元評(píng)價(jià)差異發(fā)展四個(gè)方面進(jìn)行了探究。
理解本質(zhì)并確定目標(biāo)
在學(xué)習(xí)經(jīng)典算法選考部分時(shí),教師需要解決的是與本算法相關(guān)的既往存留問(wèn)題和本課學(xué)習(xí)中的疑難問(wèn)題。所以,在實(shí)施計(jì)算思維經(jīng)典算法教學(xué)時(shí),教師首先應(yīng)回顧相關(guān)已學(xué)知識(shí)點(diǎn),其??汲ee(cuò)點(diǎn)則需通過(guò)思維引領(lǐng)精講總結(jié)的方式予以正本清源,讓學(xué)生理解這些疑難問(wèn)題的本質(zhì),清除障礙,進(jìn)而明確本堂課基于計(jì)算思維的學(xué)習(xí)目標(biāo)。
以經(jīng)典算法冒泡排序的學(xué)習(xí)為例,學(xué)業(yè)水平考試部分知識(shí)點(diǎn)與本課例相關(guān)的主要有賦值語(yǔ)句、選擇語(yǔ)句及多重循環(huán),教學(xué)經(jīng)驗(yàn)得出疑難點(diǎn)是多重循環(huán)的理解應(yīng)用。筆者在回顧、復(fù)習(xí)語(yǔ)法的基礎(chǔ)上將其結(jié)合枚舉算法中的“百錢(qián)百雞”問(wèn)題(如圖2),采取抽象思維形象化的方法,用連線(xiàn)的形式將抽象問(wèn)題形象地呈現(xiàn)出來(lái)(如圖3),讓學(xué)生理解多重循環(huán)的原理本質(zhì)。
分析:①當(dāng)控制外循環(huán)變量gj的取值不變,且控制中循環(huán)變量mj的取值也不變時(shí),內(nèi)循環(huán)變量xj需從1依次變化到100,同時(shí)形成100組解的形式,并進(jìn)行篩選判斷。②當(dāng)控制外循環(huán)變量gj的取值不變時(shí),中循環(huán)mj的取值需從1變化到33,且針對(duì)每一次中循環(huán)mj的取值變化,內(nèi)循環(huán)變量xj的取值均需從1變化到100,同時(shí)形成33×100組解的形式,并進(jìn)行篩選判斷。③外循環(huán)變量gj的取值可以從1依次變化到20,針對(duì)外循環(huán)變量每一次取值的變化,中循環(huán)變量mj的取值均需從1變化到33;同時(shí),針對(duì)中循環(huán)變量mj取值的每一次變化,內(nèi)循環(huán)變量xj的值均需從1變化到100;由此可形成20×33×100組解的形式,并進(jìn)行篩選判斷。
小結(jié):中循環(huán)變動(dòng)一次,內(nèi)循環(huán)需變化100次;外循環(huán)變動(dòng)一次,則中循環(huán)需變動(dòng)33次,同時(shí)內(nèi)循環(huán)需變化33個(gè)100次。學(xué)生通過(guò)連線(xiàn)為載體將抽象問(wèn)題形象化,經(jīng)由計(jì)算思維的方法過(guò)程,將多重循環(huán)的理解化難為易,達(dá)到理解問(wèn)題本質(zhì)的同時(shí)提升了思維能力。
學(xué)習(xí)目標(biāo)是教學(xué)的核心和靈魂,圍繞教學(xué)目標(biāo),才能順利開(kāi)展教學(xué)活動(dòng)和評(píng)價(jià)。所以,筆者在夯實(shí)基礎(chǔ)后,將冒泡排序算法學(xué)習(xí)的知識(shí)教學(xué)目標(biāo)分解成三個(gè)具體目標(biāo):①什么是冒泡排序;②如何編寫(xiě)程序?qū)崿F(xiàn)冒泡排序;③如何運(yùn)用冒泡算法解決實(shí)際問(wèn)題。關(guān)于什么是冒泡排序,筆者依據(jù)冒泡算法的問(wèn)題本質(zhì),按照計(jì)算思維處理問(wèn)題的模式,將問(wèn)題界定為三個(gè)子目標(biāo):①n個(gè)數(shù)據(jù)排序?qū)嵸|(zhì)就是尋找n-1個(gè)最值的過(guò)程;②如何找一個(gè)最值;③數(shù)據(jù)交換算法?;谶@樣的問(wèn)題本質(zhì),分解能更好地發(fā)展學(xué)生的計(jì)算思維,把學(xué)生較難理解的算法原理轉(zhuǎn)變?yōu)橐粋€(gè)個(gè)容易理解的、已知經(jīng)典的子問(wèn)題。同時(shí),這也為下一環(huán)節(jié)的算法程序的實(shí)現(xiàn)打下基礎(chǔ)。
設(shè)計(jì)任務(wù)并講評(píng)歸納
圍繞學(xué)習(xí)目標(biāo),筆者根據(jù)計(jì)算思維的特點(diǎn)來(lái)設(shè)計(jì)任務(wù),這里需注意兩點(diǎn):其一是根據(jù)學(xué)習(xí)目標(biāo),選取學(xué)生學(xué)習(xí)生活中熟悉的問(wèn)題切入,設(shè)計(jì)適合培養(yǎng)計(jì)算思維的任務(wù);其二是所設(shè)計(jì)任務(wù)的深度和廣度要符合學(xué)生的知識(shí)水平和認(rèn)知規(guī)律,方便學(xué)生運(yùn)用計(jì)算思維的方法展開(kāi)分析思考,進(jìn)而加深對(duì)算法思維的理解和對(duì)疑難點(diǎn)的突破。
在本課例的任務(wù)設(shè)計(jì)方面,基于學(xué)生的認(rèn)知規(guī)律,首先,筆者請(qǐng)學(xué)生看冒泡排序的Flash動(dòng)畫(huà),并引導(dǎo)學(xué)生說(shuō)出動(dòng)畫(huà)中所蘊(yùn)含的冒泡算法原理,即“看動(dòng)畫(huà),說(shuō)原理”環(huán)節(jié);接著,筆者又請(qǐng)一組學(xué)生頭戴寫(xiě)有自己出生日期后兩位的生日帽模擬冒泡排序Flash動(dòng)畫(huà),進(jìn)行排生日游戲,此為“演動(dòng)畫(huà)”環(huán)節(jié),使枯燥的算法原理鮮活地呈現(xiàn)出來(lái),加深了學(xué)生對(duì)冒泡算法的印象。為了揭示問(wèn)題的本質(zhì),筆者選取了四個(gè)數(shù)據(jù),采取小組合作分組探究的方式,將給定排序方向?yàn)閺那巴蠛蛷暮笸?、排序結(jié)果為升序和降序,進(jìn)行排列組合得到四種冒泡排序方式,對(duì)第一趟的排序結(jié)果、比較趟數(shù)、每趟比較次數(shù)以及比較交換規(guī)則分別進(jìn)行探究(如上頁(yè)圖4)。學(xué)生通過(guò)小組合作學(xué)習(xí),初步經(jīng)歷運(yùn)用計(jì)算思維展開(kāi)問(wèn)題的分析和思考。
在對(duì)這四種冒泡方式進(jìn)行小組講評(píng)后,筆者引導(dǎo)學(xué)生一起對(duì)這四種冒泡方式的比較趟數(shù)、每趟比較次數(shù)以及比較交換規(guī)則進(jìn)行異同總結(jié)(如圖5),這為學(xué)生理解算法的多樣性,進(jìn)一步理解算法原理和后續(xù)的疑難點(diǎn)——算法程序的實(shí)現(xiàn),打下了基礎(chǔ)。
以第四組為例,師生一起詳細(xì)探究歸納,旨在讓學(xué)生理解冒泡算法問(wèn)題的本質(zhì),即:n個(gè)數(shù)排序就是尋找n-1個(gè)最值的過(guò)程;尋找最值的過(guò)程就是從最后一個(gè)位置開(kāi)始,逐個(gè)往前,相鄰兩個(gè)數(shù)依次比較,讓最值自動(dòng)冒出來(lái);比較規(guī)則是,如果后面數(shù)大就交換兩者的值(如圖6)。
在這一任務(wù)教學(xué)中,筆者主要使用討論法、啟發(fā)法、歸納法等教學(xué)方法來(lái)培養(yǎng)學(xué)生的計(jì)算思維,從分組探究中逐步理解冒泡算法的原理過(guò)程。學(xué)生通過(guò)自主學(xué)習(xí)、小組合作探究體驗(yàn)計(jì)算思維的方法,在解決問(wèn)題完成任務(wù)中理解問(wèn)題本質(zhì)及提升計(jì)算思維。教師在完成任務(wù)過(guò)程中理性嚴(yán)密引導(dǎo),使學(xué)生變被動(dòng)學(xué)習(xí)為主動(dòng)學(xué)習(xí),積極參與到課堂中來(lái),提高了學(xué)習(xí)效率。
合理建構(gòu)并變式內(nèi)化
學(xué)生對(duì)一個(gè)知識(shí)點(diǎn)的掌握需要一個(gè)過(guò)程,對(duì)經(jīng)典算法中的疑難問(wèn)題理解突破就更需要不斷的積累。在算法與程序設(shè)計(jì)模塊的學(xué)習(xí)中,筆者常聽(tīng)到學(xué)生說(shuō):“老師,您講的內(nèi)容我們能聽(tīng)懂,但自己編程時(shí)卻錯(cuò)誤百出?!奔?xì)究其原因,很大程度是重難點(diǎn)問(wèn)題沒(méi)有建構(gòu)起清晰的知識(shí)結(jié)構(gòu),其次是思維強(qiáng)化訓(xùn)練不足。
就本課例而言,筆者綜合教學(xué)實(shí)踐及學(xué)生的反饋,得出冒泡算法程序編寫(xiě)的三個(gè)疑難問(wèn)題:①內(nèi)層for循環(huán),如何確定循環(huán)變量的初值和終值(即確定對(duì)應(yīng)數(shù)組元素的開(kāi)始下標(biāo)與結(jié)束下標(biāo));②到底是哪兩個(gè)數(shù)在比較?③相鄰兩數(shù)的“<”“>”符號(hào)的確定。
基于以上所述,筆者從前往后排,以排成結(jié)果為由小到大的升序形式為例,輔以磁體數(shù)字圓盤(pán)移動(dòng)來(lái)演示算法原理,通過(guò)計(jì)算思維的過(guò)程方法,逐一解決冒泡排序的三個(gè)疑難問(wèn)題。
第一步:在知道外循環(huán)變量i是解決尋找n-1個(gè)最大值的基礎(chǔ)上,提出如何找某一個(gè)最值的問(wèn)題,即疑難易錯(cuò)點(diǎn)①“如何確定內(nèi)層循環(huán)變量j的取值范圍”。筆者引導(dǎo)學(xué)生思考:首先,題設(shè)要求從前往后排,排序結(jié)果為升序,不妨先不考慮怎么比較和交換,即通過(guò)第一趟排序,第一個(gè)最大值肯定要被放置在最后面;接著,第二趟,第二個(gè)最值肯定要放在后邊第二位;依此類(lèi)推。所以,后面數(shù)組下標(biāo)每趟均需要變化一位,總結(jié)規(guī)律為n-i,同時(shí)注意到前面是不變的,即每趟尋找最值都是從第一個(gè)數(shù)據(jù)開(kāi)始找,從而疑難易錯(cuò)點(diǎn)①得到了解決:內(nèi)循環(huán)變量j的初值為1,終值為n-i(如圖7)。
第二步:在明確內(nèi)循環(huán)變量j取值范圍的基礎(chǔ)上,提出問(wèn)題:到底是哪兩個(gè)數(shù)在比較?筆者引導(dǎo)學(xué)生思考分析:既然題設(shè)排序方向?yàn)閺那巴?,?nèi)循環(huán)變量j的取值是從第一個(gè)數(shù)據(jù)開(kāi)始往后比,規(guī)則是兩兩比較,這里不妨?xí)翰豢紤]比較交換規(guī)則,易知是第一個(gè)數(shù)與第二個(gè)數(shù)比較,第二個(gè)數(shù)與第三個(gè)數(shù)比較,依次類(lèi)推。筆者總結(jié)規(guī)律為:當(dāng)前一個(gè)數(shù)據(jù)為a(j)時(shí),后一個(gè)數(shù)據(jù)必定為a(j+1),從而疑難易錯(cuò)點(diǎn)②得到了解決。具體思路歷程如圖8所示。
第三步:明確哪兩個(gè)數(shù)在比較,那么這兩個(gè)數(shù)比較交換的規(guī)則是什么呢?也就是“<”“>”符號(hào)的判斷。筆者引導(dǎo)學(xué)生思考分析:題設(shè)排序結(jié)果為升序,故第一趟排序是把最大數(shù)放在最后面,是找“大數(shù)”,又因?yàn)榕判蚍较驗(yàn)閺那巴?,因此比較交換的規(guī)則為相鄰兩個(gè)數(shù)當(dāng)前一個(gè)數(shù)比后一個(gè)數(shù)大就交換,程序表達(dá)為a(j)>a(j+1)(如圖9)。
綜上所述,冒泡算法程序的三個(gè)疑難問(wèn)題已經(jīng)得到了解決,思路清晰,學(xué)生也理解透徹??梢?jiàn),計(jì)算思維提供了重新審視程序設(shè)計(jì)教學(xué)的視角,將計(jì)算思維融入到程序設(shè)計(jì)教學(xué)中將會(huì)大大提高學(xué)生分析問(wèn)題、解決疑難的思維能力。
隨著學(xué)生思維能力的逐漸提升,為了加深其對(duì)知識(shí)的理解,筆者承前述分組探究活動(dòng)的鋪墊,對(duì)四種冒泡排序方式分別研究其對(duì)應(yīng)的三個(gè)疑難問(wèn)題(如圖10)。
至此,通過(guò)理性嚴(yán)密的引導(dǎo),學(xué)生切身經(jīng)歷了基于計(jì)算思維的冒泡算法疑難問(wèn)題解決過(guò)程,從中體會(huì)到一題多變及算法的多樣性,進(jìn)而更全面、更深入地理解了冒泡排序算法,培養(yǎng)了知識(shí)遷移和靈活運(yùn)用的能力。推而廣之,當(dāng)遇到其他類(lèi)似問(wèn)題時(shí),學(xué)生也可以嘗試運(yùn)用計(jì)算思維的方法去分析、解決問(wèn)題。學(xué)生要先能準(zhǔn)確地描述問(wèn)題,并將問(wèn)題按本質(zhì)有邏輯地分解為若干求解步驟;再?gòu)倪@些步驟中抽象出本質(zhì)性的操作模型,并尋求能通過(guò)計(jì)算機(jī)等工具自動(dòng)處理實(shí)現(xiàn)的方案;最后選擇一種有效方案,實(shí)現(xiàn)疑難問(wèn)題的解決。
多元評(píng)價(jià)差異發(fā)展
教師要建立多元化的評(píng)價(jià)體系,檢驗(yàn)學(xué)生知識(shí)的掌握程度和思維能力的水平。具體操作時(shí),如果學(xué)生基礎(chǔ)整體較弱,教師可以采取留白給學(xué)生填空鞏固,不要求完整代碼編寫(xiě),但一定要學(xué)生都參與前面問(wèn)題的界定、分析、解決過(guò)程,而不是直接給答案;如學(xué)生基礎(chǔ)較好,教師可以減少引導(dǎo)的部分,布置任務(wù)讓學(xué)生自主思考,減少編程調(diào)試時(shí)間。多元評(píng)價(jià),一方面是教師對(duì)學(xué)生進(jìn)行評(píng)價(jià),將過(guò)程性評(píng)價(jià)與總結(jié)性評(píng)價(jià)相結(jié)合,根據(jù)學(xué)生在學(xué)習(xí)過(guò)程中的表現(xiàn),利用計(jì)算思維解決問(wèn)題的能力,以編程作品的好壞為評(píng)價(jià)依據(jù),全面評(píng)估學(xué)生的信息技術(shù)知識(shí)和能力;另一方面是借助學(xué)習(xí)任務(wù)單與發(fā)展性評(píng)價(jià)表,引導(dǎo)學(xué)生進(jìn)行自評(píng)。例如,在冒泡復(fù)習(xí)課中,教師可以從教學(xué)目標(biāo)中選擇體現(xiàn)計(jì)算思維培養(yǎng)的內(nèi)容進(jìn)行具體的教學(xué)評(píng)價(jià)設(shè)計(jì),其發(fā)展性評(píng)價(jià)分為3個(gè)等級(jí)(如上表)。
學(xué)生自評(píng)時(shí),就能清楚地知道自己處于哪個(gè)級(jí)別,并及時(shí)反饋給教師,這樣教師就可以根據(jù)綜合評(píng)價(jià)的反饋來(lái)檢驗(yàn)教學(xué)效果,使得不同程度的學(xué)生都有所收獲,達(dá)到差異發(fā)展的教學(xué)目的。
結(jié)語(yǔ)
筆者將計(jì)算思維的概念滲透到高中信息技術(shù)課程教學(xué)中,并運(yùn)用計(jì)算思維的方法分析解決經(jīng)典算法選考學(xué)習(xí)中遇到的疑難問(wèn)題,嘗試引領(lǐng)學(xué)生在理解計(jì)算思維概念方法論的基礎(chǔ)上將其應(yīng)用推廣,經(jīng)實(shí)踐證明,取得了良好的教學(xué)效果。但計(jì)算思維是建立在計(jì)算機(jī)解決問(wèn)題層面上,屬于方法論層次的概念,教師若脫離了信息技術(shù)課程的具體內(nèi)容,單純討論計(jì)算思維的培養(yǎng),那也是空中樓閣。因此,教師要想真正將計(jì)算思維融入到經(jīng)典算法疑難問(wèn)題解決中,首先要精心備課,按問(wèn)題本質(zhì)建構(gòu)清晰的知識(shí)結(jié)構(gòu),同時(shí)去冗存精地準(zhǔn)備教學(xué)資源以利于把時(shí)間擠出來(lái)給學(xué)生思考、學(xué)習(xí)。其次是減少“滿(mǎn)堂灌”或形而上學(xué)的教學(xué)形式,不是直接告訴學(xué)生是什么,而應(yīng)與學(xué)生一起走過(guò)“問(wèn)題是怎么解決的”學(xué)習(xí)過(guò)程,要想方設(shè)法讓學(xué)生真正經(jīng)歷問(wèn)題解決的全過(guò)程,以此提升他們運(yùn)用計(jì)算思維解決疑難問(wèn)題的能力。