張渤 田容光
目前,初中編程教學(xué)仍然面臨不少困難,有的是對(duì)教材教學(xué)內(nèi)容陌生造成的,有的是對(duì)教學(xué)起點(diǎn)定位不同造成的。對(duì)于編程和算法部分的教學(xué)內(nèi)容,我們首先應(yīng)該明確這部分教學(xué)內(nèi)容的設(shè)計(jì)意圖和培養(yǎng)目標(biāo),然后考慮根據(jù)學(xué)情如何具體實(shí)施。編程教學(xué)的核心是培養(yǎng)學(xué)生的學(xué)科核心素養(yǎng)——計(jì)算思維,那就要明確什么是計(jì)算思維,以何內(nèi)容和方式培養(yǎng)計(jì)算思維。
● 明確計(jì)算思維的范疇
綜合歐美國(guó)家計(jì)算科學(xué)課程和我國(guó)信息技術(shù)專家的觀點(diǎn)來(lái)看,都提到計(jì)算思維是一種跨越數(shù)學(xué)、工程、計(jì)算機(jī)等多學(xué)科領(lǐng)域的思維方式,所以不能把計(jì)算思維的計(jì)算簡(jiǎn)單理解為“計(jì)算機(jī)”或者“數(shù)據(jù)計(jì)算”。計(jì)算思維的實(shí)質(zhì)是把一個(gè)看起來(lái)困難的問(wèn)題重新闡釋成一個(gè)我們知道如何解決的問(wèn)題。由此可以看出,計(jì)算思維首先是思維培養(yǎng),其次才是計(jì)算機(jī)語(yǔ)言編程問(wèn)題。
由此可見(jiàn),教材或教學(xué)設(shè)計(jì)不能拋出具體問(wèn)題(或項(xiàng)目要求)就提供程序,而是要循序漸進(jìn)地從提出問(wèn)題、分析問(wèn)題、抽象建立模型開(kāi)始,通過(guò)一個(gè)一個(gè)活動(dòng),帶領(lǐng)學(xué)生梳理完成項(xiàng)目的具體思路,優(yōu)化方案,最終實(shí)現(xiàn)運(yùn)用計(jì)算機(jī)解決實(shí)際問(wèn)題或者設(shè)計(jì)開(kāi)發(fā)作品。
計(jì)算機(jī)解決問(wèn)題的思路完全來(lái)自于“人”,所以我們關(guān)注的首先是解決問(wèn)題的思路和方法,不是具體的編程語(yǔ)句或代碼。學(xué)生只有有了“想法”,才能告訴計(jì)算機(jī)怎么做,將來(lái)才有可能寫(xiě)出屬于自己的程序。正因?yàn)橛辛讼敕?,學(xué)生才可能讀懂教材上代碼的內(nèi)涵,而不是單純地記憶程序語(yǔ)句。學(xué)生思維水平提升了,才有可能達(dá)到知識(shí)創(chuàng)新,學(xué)會(huì)選擇合適的方式分析、解決現(xiàn)實(shí)世界的復(fù)雜問(wèn)題,從而真正理解計(jì)算機(jī)在現(xiàn)實(shí)世界中的優(yōu)勢(shì)和局限,才能促進(jìn)信息技術(shù)的發(fā)展。
從另外一個(gè)角度來(lái)看,如果教學(xué)時(shí)一上來(lái)就拿出代碼給學(xué)生,反而會(huì)限制學(xué)生的思維水平和關(guān)注點(diǎn)。因?yàn)樽鳛槌鯇W(xué)者,學(xué)生不可能用程序代碼這種自己不熟悉的方式來(lái)表述自己的解決思路,過(guò)早地看到代碼可能會(huì)導(dǎo)致其思考焦點(diǎn)轉(zhuǎn)移到陌生的程序語(yǔ)法學(xué)習(xí)中去。
● 學(xué)習(xí)內(nèi)容的界定
基于項(xiàng)目的學(xué)習(xí),是因“需”定“學(xué)”的學(xué)習(xí)方式。完成項(xiàng)目需要用到什么,教材(或教學(xué)設(shè)計(jì))就提供相應(yīng)的內(nèi)容。所以,基于項(xiàng)目的學(xué)習(xí),看上去不會(huì)像“編程語(yǔ)言教學(xué)”一樣,系統(tǒng)地從基礎(chǔ)知識(shí)、基本數(shù)據(jù)類型、基本結(jié)構(gòu)等內(nèi)容講起。
初中Python教學(xué)的定位是體驗(yàn)和簡(jiǎn)單應(yīng)用,不是系統(tǒng)開(kāi)發(fā)。而且,我們的課程既要早發(fā)現(xiàn)、早培養(yǎng)有志于IT行業(yè)的從業(yè)者,也要考慮到大眾化的群體將來(lái)就業(yè)需要的基本知識(shí)和素養(yǎng),系統(tǒng)的語(yǔ)言學(xué)習(xí)不應(yīng)是中學(xué)教學(xué)的本意,而且在初中階段有限的時(shí)間內(nèi)也不可能將它完成。所以,我們可以根據(jù)學(xué)情在教材的基礎(chǔ)上做適當(dāng)調(diào)整,但不宜拓展太多,因?yàn)閷?duì)于普通水平的學(xué)生來(lái)講,不適合難度過(guò)高的程序代碼設(shè)計(jì)。在教學(xué)設(shè)計(jì)(教材)中能用簡(jiǎn)單代碼解決的,力求不用函數(shù)或第三方庫(kù)等方式,這一方面是避免知識(shí)面過(guò)大,另一方面是考慮到簡(jiǎn)單內(nèi)容的靈活運(yùn)用有助于學(xué)生思維的培養(yǎng)。
為了面向更多的學(xué)生,在進(jìn)行教學(xué)設(shè)計(jì)時(shí),可以參照教材中基本項(xiàng)目和科學(xué)探究、技術(shù)探索等不同梯度的內(nèi)容,根據(jù)本地學(xué)生的實(shí)際情況和評(píng)價(jià)要求靈活進(jìn)行選擇,一般情況下基本項(xiàng)目是必學(xué)內(nèi)容,科學(xué)探究、技術(shù)探索等可以根據(jù)學(xué)情做一定程度的取舍??紤]到Python的特性,部分內(nèi)容可以適當(dāng)增加不同的表述方式,如Python中兩個(gè)變量的值交換這種顛覆傳統(tǒng)的方式。但是,這些內(nèi)容也只是為了引導(dǎo)學(xué)生了解Python的設(shè)計(jì)是靈活的,不能理解為擴(kuò)大知識(shí)面。其實(shí)Python有很多更靈活的內(nèi)容,但是對(duì)初中學(xué)生來(lái)說(shuō)不易推廣。Python的學(xué)習(xí)要考慮延續(xù)性,初中學(xué)生無(wú)法做到對(duì)Python進(jìn)行全面系統(tǒng)學(xué)習(xí)。
對(duì)于學(xué)習(xí)內(nèi)容的設(shè)置,我們不妨看一下這樣一個(gè)事例:我們從小學(xué)一年級(jí)開(kāi)始學(xué)習(xí)漢字,但是在不同學(xué)段,對(duì)識(shí)字難度、數(shù)量、應(yīng)用熟練度乃至學(xué)習(xí)方式等要求都是不同的。學(xué)習(xí)編程也是如此,不能有一步到位的想法。任何時(shí)候,都要清晰地認(rèn)識(shí)到,我們是成年人,學(xué)生是未成年人,要考慮他們的思維水平和學(xué)習(xí)接受能力。正如我們都學(xué)習(xí)過(guò)數(shù)學(xué),但是我們沒(méi)有都成為數(shù)學(xué)家一樣,我們不可能通過(guò)初中教學(xué)讓所有人都成為IT工程師,培養(yǎng)他們具備信息時(shí)代數(shù)字公民的基本素養(yǎng)才是我們最重要的任務(wù)。所以,體驗(yàn)和簡(jiǎn)單應(yīng)用,是相對(duì)符合初中教學(xué)要求的。
● 教材應(yīng)用的靈活性
為了便于初中學(xué)生特別是初一年級(jí)學(xué)生的學(xué)習(xí),編程教學(xué)的設(shè)計(jì)需要做很多折中,如縮短變量名,以降低輸入錯(cuò)誤導(dǎo)致的時(shí)間浪費(fèi);選擇擲硬幣等簡(jiǎn)單生動(dòng)又具備思維深度的活動(dòng),以吸引學(xué)生;選擇經(jīng)典的算法案例,以拓展學(xué)生思維等。
當(dāng)然,大家完全可以根據(jù)自己學(xué)生的情況進(jìn)行調(diào)整和拓展。任何人都無(wú)法做到對(duì)同一問(wèn)題窮盡其解決方案,我們只需要關(guān)注教學(xué)的核心是培養(yǎng)學(xué)生思維即可。所以,通常情況下解決方案只是列舉一例,給學(xué)生留下更大的自由空間發(fā)揮自己的聰明才智。
還需要注意的是,為了培養(yǎng)學(xué)生建立抽象模型的能力,要重點(diǎn)引導(dǎo)學(xué)生如何把具體問(wèn)題抽象成數(shù)學(xué)問(wèn)題乃至計(jì)算機(jī)問(wèn)題,這是計(jì)算思維的根本所在。
● 善用編程語(yǔ)言的靈活性
Python是一門靈活性很強(qiáng)的編程語(yǔ)言,并且隨著人工智能的發(fā)展,其發(fā)展勢(shì)頭極其迅猛。但是,功能強(qiáng)大不等于說(shuō)它所有的特點(diǎn)都適合教學(xué)。例如,使用列表的sort方法可以實(shí)現(xiàn)快速排序,但是學(xué)生無(wú)從知曉排序的原理是什么,對(duì)其思維的提升并無(wú)益處,所以選擇經(jīng)典的冒泡排序等算法作為案例進(jìn)行示范更有價(jià)值。通過(guò)學(xué)習(xí)、討論,引導(dǎo)學(xué)生了解計(jì)算機(jī)排序的方法,觀察其優(yōu)缺點(diǎn),并提出改進(jìn)建議。這樣,學(xué)生將經(jīng)歷一個(gè)從無(wú)到有、從有到優(yōu)的思維過(guò)程,有助于提升其思維水平。類似的案例還有很多,不逐一列舉,提出這個(gè)問(wèn)題的目的不是反對(duì)Python的靈活性,而是要說(shuō)明強(qiáng)大的功能應(yīng)該在學(xué)生掌握基本思維和方法之后給出才是合適的。所以類似的內(nèi)容,適合在科學(xué)探究或技術(shù)探索等提升內(nèi)容中來(lái)設(shè)計(jì),提供給學(xué)有余力的學(xué)生。同時(shí),因?yàn)椴挥猛卣固鄡?nèi)容,學(xué)生就能夠?qū)⒕杏谀承┗A(chǔ)內(nèi)容的學(xué)習(xí),可以加深理解并提高學(xué)習(xí)效果。
教學(xué)案例的選擇需要考慮生活化、趣味性、應(yīng)用價(jià)值以及效果反差等多個(gè)因素,需要激發(fā)學(xué)生的求知欲。如采用37%法則了解算法,可能有的教師會(huì)很意外,但這樣是為了提醒學(xué)生,看似無(wú)解的問(wèn)題不見(jiàn)得就無(wú)法優(yōu)化,只要潛心研究、認(rèn)真思考,再學(xué)習(xí)掌握必要的知識(shí),很多問(wèn)題是可以解決或者優(yōu)化的。桶排序、素?cái)?shù)等內(nèi)容看起來(lái)是比較無(wú)聊低效的勞動(dòng),但其實(shí)都有其存在的價(jià)值,并且現(xiàn)在仍然在用,如搜索引擎的關(guān)鍵字搜索、大型圖書(shū)館的圖書(shū)檢索,仍然是桶排序與其他快速排序等方法結(jié)合使用,超大素?cái)?shù)目前仍在金融行業(yè)的加密傳輸中發(fā)揮作用。我們的教學(xué)要引導(dǎo)學(xué)生認(rèn)識(shí)到,算法都有價(jià)值,也各有優(yōu)缺點(diǎn),通過(guò)學(xué)習(xí)不僅能掌握其特點(diǎn)從而在面對(duì)現(xiàn)實(shí)問(wèn)題時(shí),可以做出合理選擇,而且在這個(gè)學(xué)習(xí)過(guò)程中可以使自身的計(jì)算思維素養(yǎng)得到發(fā)展。
總之,我們應(yīng)該靈活使用教材、設(shè)計(jì)開(kāi)展教學(xué),在低年級(jí)要重視思維發(fā)展,避免只關(guān)注語(yǔ)言知識(shí)的夯實(shí),掌握多少語(yǔ)法、多少編程技巧都不是重點(diǎn),讓算法學(xué)習(xí)生動(dòng)有趣起來(lái)、讓學(xué)生思維得到提升才是我們更應(yīng)該關(guān)注的。
蒼山點(diǎn)題
把代碼編程引入初中教材,這是信息技術(shù)課程發(fā)展的一件大事。其現(xiàn)實(shí)意義是,高中已經(jīng)開(kāi)始以Python編程為基礎(chǔ)進(jìn)行各模塊的學(xué)習(xí),無(wú)論是數(shù)據(jù)與計(jì)算、信息系統(tǒng)與社會(huì),還是數(shù)據(jù)結(jié)構(gòu)、算法與程序設(shè)計(jì)、人工智能等,都與編程非常貼近。再者,高中還是擺脫不了高考的限制,及早地從初中甚至小學(xué)了解編程、體驗(yàn)算法是一種積極的課程發(fā)展策略。
第一篇文章,針對(duì)山東省的初中兩冊(cè)教材(各一個(gè)單元的算法與程序設(shè)計(jì))的編程教學(xué)內(nèi)容進(jìn)行了教學(xué)組織與實(shí)踐總結(jié)。為什么要進(jìn)行Python教學(xué)其實(shí)毋庸置疑,關(guān)鍵是如何進(jìn)行教材處理,如何針對(duì)實(shí)際進(jìn)行學(xué)時(shí)安排,如何對(duì)教學(xué)內(nèi)容進(jìn)行輕重規(guī)劃,這些是需要在實(shí)踐中不斷嘗試、調(diào)整與創(chuàng)新的。本文給我們最大的啟發(fā)是,把教材當(dāng)資源,而不是當(dāng)教案,教學(xué)需要根據(jù)實(shí)際來(lái)組織實(shí)施。
第二篇文章,探討了編程教學(xué)的幾個(gè)核心問(wèn)題,如計(jì)算思維與編程代碼并非是相等的,學(xué)習(xí)內(nèi)容不宜系統(tǒng)化進(jìn)行計(jì)算機(jī)語(yǔ)言學(xué)習(xí),教材設(shè)計(jì)是提供一種教學(xué)的模型并非是窮盡的方案,Python的特色學(xué)習(xí)要適當(dāng),不能過(guò)于超出基礎(chǔ)的算法規(guī)范等。本文給我們的啟示是,使用教材進(jìn)行教學(xué)設(shè)計(jì)需要首先明確教材的意圖,與適當(dāng)?shù)慕逃^念、方法相結(jié)合,而不是孤立地看教材、盲目地用教材。
編程教育還有很多期待解決的理論問(wèn)題與實(shí)踐問(wèn)題,如語(yǔ)言代碼學(xué)習(xí)與程序算法學(xué)習(xí)的關(guān)系如何協(xié)調(diào),知識(shí)學(xué)習(xí)與技能培養(yǎng)的輕重如何分配,計(jì)算思維如何落地等,希望讀者們也能夠多實(shí)踐、多交流,一起讓編程教育更有效益。