余新樹
教育部公布的《普通高中信息技術(shù)課程標(biāo)準(zhǔn)(2017年版)》明確了信息技術(shù)學(xué)科核心素養(yǎng),界定計(jì)算思維是“運(yùn)用計(jì)算機(jī)科學(xué)領(lǐng)域的思想方法在形成問題解決方案的過程中產(chǎn)生的一系列思維活動(dòng)”。很多教師投入很大的熱情學(xué)習(xí)Python語言,以為將程序設(shè)計(jì)語言由VB或C等換成Python語言,就可以實(shí)現(xiàn)計(jì)算思維的培養(yǎng),但如果程序設(shè)計(jì)語言的教學(xué)未關(guān)注解決問題的思維,只是程序語言的調(diào)整,那只會(huì)是“穿新鞋”走“老路”,又回到教編程語言的語法、語句上來。
筆者多年來嘗試用作品案例教學(xué)法來培養(yǎng)學(xué)生的計(jì)算思維,將程序設(shè)計(jì)語言教材涉及的基本結(jié)構(gòu)、語句、方法和思想等按從易到難分解重構(gòu),編成一個(gè)個(gè)有知識(shí)和能力水平梯度的程序作品案例。學(xué)生在作品案例提供的情境中學(xué)習(xí)用計(jì)算機(jī)可以處理的方式發(fā)現(xiàn)問題,界定問題,抽象建模,分解問題,設(shè)計(jì)算法形成解決方案,進(jìn)行半成品加工,總結(jié)方法,提升能力。實(shí)踐出真知,編程課程運(yùn)用作品案例教學(xué)法,學(xué)生不僅學(xué)會(huì)了程序語言設(shè)計(jì)的語句,更學(xué)會(huì)了用計(jì)算機(jī)編程解決問題的計(jì)算思維,學(xué)生既見“樹木”(程序語句),又見“森林”(算法思維),計(jì)算思維得到有效培養(yǎng)。案例教學(xué)法的一般教學(xué)流程為:案例體驗(yàn)—抽象建?!纸鈫栴}—設(shè)計(jì)算法—半成品加工—總結(jié)遷移。
學(xué)生運(yùn)行程序,顯示本機(jī)IP地址,網(wǎng)絡(luò)雙方均輸入對(duì)方IP地址,即可通過單擊表示錘子、剪刀、布的相應(yīng)按鈕體驗(yàn)網(wǎng)絡(luò)版猜拳游戲的樂趣,如下圖所示。以往猜拳教學(xué),為了降低程序難度迎合學(xué)生的學(xué)情,往往設(shè)計(jì)的是單機(jī)版猜拳游戲,但單機(jī)版猜拳游戲相當(dāng)于是自己的左手與右手猜拳,游戲的可玩性不高,現(xiàn)在改為網(wǎng)絡(luò)猜拳游戲后,增加了游戲的互動(dòng)性,學(xué)生玩得興致勃勃,創(chuàng)設(shè)了很好的生活情境。
抽象的目的是去除細(xì)節(jié),提取關(guān)鍵信息,將現(xiàn)實(shí)生活中的信息轉(zhuǎn)變?yōu)橛糜?jì)算機(jī)可以表示的信息,實(shí)現(xiàn)現(xiàn)實(shí)世界問題向計(jì)算機(jī)可以解決問題轉(zhuǎn)化的重要一步。生活中的猜拳游戲是用手的不同形狀來分別表示錘子、剪刀和布,但在VB程序界面中既可以用顯示文字的按鈕(commandButton控件)來表示錘子、剪刀和布,也可以用不同形狀的圖像(Image控件)來表示錘子、剪刀和布。作品案例既創(chuàng)設(shè)了生活情境,也在情境中蘊(yùn)含了學(xué)生需要解決的問題和學(xué)習(xí)的知識(shí),而發(fā)現(xiàn)問題是學(xué)生思維培養(yǎng)的開始。學(xué)生在體驗(yàn)了游戲后,很自然地發(fā)現(xiàn)問題:單擊表示錘子、剪刀、布的按鈕,計(jì)算機(jī)如何顯示相應(yīng)的圖像?教師啟發(fā)學(xué)生觀察猜拳作品的界面組成,思考兩個(gè)問題并填寫下表:①按鈕控件和圖片控件是如何表示錘子、剪刀、布三種信息的?②按下按鈕如何顯示相應(yīng)的圖片?
學(xué)生通過分析上表,結(jié)合前面學(xué)過的控件數(shù)組知識(shí),很快理解了“拳”圖像控件數(shù)組名稱為quan,index的值1代表錘子,2代表剪刀,3代表布,這樣就可用圖像控件數(shù)組元素quan(1).picture、quan(2).picture、quan(3).picture來表示錘子、剪刀、布?!安氯卑粹o控件數(shù)組名稱為caiquan,index的值1代表出錘子,2代表出剪刀,3代表出布,當(dāng)按下相應(yīng)按鈕時(shí),根據(jù)返回的index的值,quan(index).picture就可以表示所出拳的圖像。通過抽象建模,把現(xiàn)實(shí)猜拳問題轉(zhuǎn)化為計(jì)算機(jī)控制數(shù)組來表示,就可以用數(shù)學(xué)的問題來解決。
分解是計(jì)算思維的一種重要的解決問題的方法,通過分解把復(fù)雜問題分解成簡單問題,把整體問題分解成局部問題,再從解決簡單問題或局部問題入手找到解決問題的突破口?;谧髌钒咐姆纸馐菫榱俗寣W(xué)生對(duì)案例作品設(shè)計(jì)有整體了解,關(guān)注的是整體設(shè)計(jì)能力。根據(jù)前面體驗(yàn)游戲時(shí)的經(jīng)驗(yàn),學(xué)生把猜拳游戲分解為三個(gè)問題——本方如何出拳、網(wǎng)友如何出拳、如何判定勝負(fù),再自頂向下逐步細(xì)化三個(gè)問題。
1.本方出拳(單擊按鈕事件):①單擊錘子、剪刀、布任一按鈕,同時(shí)按鈕失效不能再按直到本局結(jié)束為止;②本機(jī)顯示相應(yīng)出拳的圖像;③將本機(jī)出拳對(duì)應(yīng)的數(shù)字信息發(fā)給網(wǎng)友。
2.網(wǎng)友出拳(接收數(shù)據(jù)事件):①接收并保存網(wǎng)友發(fā)送來表示出拳的數(shù)字信息;②顯示網(wǎng)友出拳的圖片。
3.判定勝負(fù)(計(jì)時(shí)器觸發(fā)事件):①判斷如果雙方都已出拳,如本機(jī)勝則本機(jī)勝數(shù)加1;②判斷如果雙方都已出拳,如網(wǎng)友勝則網(wǎng)友勝數(shù)加1。
學(xué)生體驗(yàn)游戲后能分解出這些動(dòng)作,從形象思維過渡到抽象思維,能力有一定的發(fā)展,但問題還未理清。教師提出問題:“先出拳的一方,如果出拳圖形立即在對(duì)方顯示,而對(duì)方還未出拳,那先出拳的就吃虧了,什么時(shí)候顯示網(wǎng)友出拳的圖像才合適?”學(xué)生很容易想到:應(yīng)該是雙方都出拳后再顯示對(duì)方出拳圖像最公平,只要本方未出拳,另一方即使先出拳并發(fā)送了出拳信息,也不應(yīng)該顯示。
因此,上述第2、3個(gè)問題調(diào)整為:
2.網(wǎng)友出拳(接收數(shù)據(jù)事件):接收并保存網(wǎng)友發(fā)送來表示出拳的數(shù)字信息。
3.判定勝負(fù)(計(jì)時(shí)器觸發(fā)事件):①判斷如果雙方都已出拳,則顯示網(wǎng)友出拳的圖像;②判斷如果雙方都已出拳,如本機(jī)勝則本機(jī)勝數(shù)加1;③判斷如果雙方都已出拳,如網(wǎng)友勝則網(wǎng)友勝數(shù)加1。
雖然事先采取自頂向下逐步細(xì)化設(shè)計(jì)各模塊功能,但在實(shí)際編程過程中仍會(huì)出現(xiàn)一些新問題,問題分解會(huì)在編程的整個(gè)過程中多次發(fā)生,直到問題被解決,而問題分解難度取決于作品案例的復(fù)雜度,這是常規(guī)解題式教學(xué)無法比擬的。因此基于作品案例的教學(xué),讓學(xué)生在發(fā)現(xiàn)問題、分解問題的過程中逐步形成解決問題方案,培養(yǎng)了計(jì)算思維。
問題分解關(guān)注的是從全局角度自頂向下逐步細(xì)化的設(shè)計(jì)能力,而算法設(shè)計(jì)關(guān)注的是從局部角度應(yīng)用所學(xué)知識(shí)解決具體問題。算法是解決問題的明確步驟,是具體的操作過程。在理清了本方出拳、網(wǎng)友出拳、判定勝負(fù)三個(gè)問題后,算法設(shè)計(jì)聚焦于用所學(xué)的IF語句來解決“判定勝負(fù)”問題。借助流程圖,學(xué)生進(jìn)一步理清思路和步驟,為后繼進(jìn)行半成品程序加工掃清障礙。對(duì)于“判定勝負(fù)”問題,確定IF語句中“勝利的條件”是本問題的難點(diǎn)。教師以“本機(jī)勝利”條件為例讓學(xué)生小組合作,討論歸納本機(jī)勝利的條件。各小組通過列表法,列出雙方所有出拳情況及對(duì)應(yīng)的數(shù)值,分析表示網(wǎng)友出拳的netnum變量值、本機(jī)出拳的localnum值和本機(jī)勝負(fù)情況,根據(jù)本機(jī)勝的情況總結(jié)出本機(jī)勝利的條件:(netnum=1 and localnum=3) or (netnum=2 and localnum=1) or (netnum=3 and localnum=2)。有的小組比較三種勝利情況后還進(jìn)一步簡化出本機(jī)勝利的另一種條件表示:(netnum-localnum=1) or (netnum-localnum=-2)。隨后學(xué)生根據(jù)此種列表法舉一反三推導(dǎo)出“網(wǎng)友勝利”的條件。通過流程圖描述算法和列表總結(jié)法推理出勝利條件,學(xué)生的計(jì)算思維得到了培養(yǎng)。
半成品加工是指根據(jù)教學(xué)目標(biāo)的需要,保留作品整體的真實(shí)性、情境性和完整性,將作品的某些關(guān)鍵局部“留白”,讓學(xué)生應(yīng)用課堂所學(xué)知識(shí)將留白部分補(bǔ)充完善成為成品。本成品加工是培養(yǎng)學(xué)生知識(shí)遷移能力和解決問題能力的一種很重要的方法,這種方法既保留了程序作品整體設(shè)計(jì)代碼供學(xué)生學(xué)習(xí)借鑒,又讓學(xué)生在短時(shí)間內(nèi)學(xué)習(xí)編程語句等知識(shí),應(yīng)用程序語句實(shí)踐練習(xí)和深化基本結(jié)構(gòu)、語句命令等概念理解,達(dá)到知識(shí)與技能、方法和能力雙培養(yǎng)的目標(biāo)。
由于上節(jié)課學(xué)生已經(jīng)學(xué)習(xí)了局域網(wǎng)QQ程序案例,懂得了使用VB中winsoca控件進(jìn)行網(wǎng)絡(luò)信息的收發(fā)原理,作品案例建立兩個(gè)窗體,一個(gè)窗體(form1)模擬本機(jī),端口綁定1001,另一個(gè)窗體(form2)模擬網(wǎng)友,端口綁定1002,這樣學(xué)生運(yùn)行程序時(shí)就可以模擬本機(jī)和網(wǎng)友猜拳,方便學(xué)生調(diào)試程序代碼。程序調(diào)試正確后刪除模擬網(wǎng)友的form2窗體,就可與網(wǎng)友進(jìn)行網(wǎng)絡(luò)游戲。教師首先指導(dǎo)學(xué)生閱讀“本機(jī)出拳”“網(wǎng)友出拳”“判定勝負(fù)”三個(gè)問題程序代碼,引導(dǎo)學(xué)生讀懂三個(gè)事件中語句或語句組的功能,而不必太關(guān)注語句語法,閱讀程序的過程,也是思維活動(dòng)的過程。由于本節(jié)課重點(diǎn)是用IF語句來解決如何“判定勝負(fù)”問題,將“雙方都已出拳條件”“本機(jī)勝條件”和“網(wǎng)友勝條件”留白,學(xué)生根據(jù)前面環(huán)節(jié)所設(shè)計(jì)的算法和總結(jié)的條件,用IF語句不斷調(diào)試直至實(shí)現(xiàn)程序功能后,雙方輸入對(duì)方網(wǎng)址,就可以進(jìn)行網(wǎng)絡(luò)版猜拳游戲,在游戲中感受到成功的喜悅和自豪。通過半成品作品加工,學(xué)生既學(xué)會(huì)案例程序的整體解決方案,又應(yīng)用所學(xué)概念、知識(shí)解決了特定情境的問題,計(jì)算思維得到了培養(yǎng)。
歸納總結(jié)是從具體化情境中提煉出一般性知識(shí)和方法的過程,通過總結(jié),學(xué)生不僅深刻領(lǐng)會(huì)了所學(xué)知識(shí)內(nèi)涵,還懂得了應(yīng)用知識(shí)在情境化場景中解決問題的方法,形成了解決問題的思維。本節(jié)作品案例教學(xué)通過列表法、問題分解法、流程圖描述法逐步形成問題解決方案,通過半成品加工策略實(shí)現(xiàn)算法,學(xué)生的思維由抽象到具體,計(jì)算思維能力培養(yǎng)落到實(shí)處。
教學(xué)有法,教無定法。教師只有深刻領(lǐng)會(huì)計(jì)算思維概念的內(nèi)涵和外延,才能在生活中發(fā)現(xiàn)計(jì)算思維的用武之地,在教學(xué)中創(chuàng)設(shè)有趣的案例作品,融入計(jì)算思維,讓學(xué)生在問題化情境中發(fā)現(xiàn)問題,自主、協(xié)作探究,形成問題解決方案,學(xué)會(huì)編程思想和方法,促進(jìn)計(jì)算思維的發(fā)展。