方海光 汪時(shí)沖 張鴿 劉嘉琪
當(dāng)前,在中小學(xué)信息技術(shù)課的教學(xué)中,教師主要傾向于對計(jì)算機(jī)基本操作以及常用軟件的講解,課堂教學(xué)枯燥乏味,學(xué)習(xí)者的學(xué)習(xí)積極性也不高。相對古板的教學(xué)模式以及陳舊的教材,也影響了信息技術(shù)課程的教學(xué)效果。
編程教育可以補(bǔ)充當(dāng)前中小學(xué)信息技術(shù)課程的不足,滿足不同學(xué)生的興趣需求。同時(shí),編程在對學(xué)生計(jì)算思維的培養(yǎng)方面有著優(yōu)勢,一方面編程要求用計(jì)算機(jī)解決問題,另一方面編程有助于培養(yǎng)學(xué)生“學(xué)會學(xué)習(xí)”的能力。特別是近些年我國中小學(xué)呈現(xiàn)出三種典型程序語言的教學(xué)普及化。其中,Scratch 是一種兒童可以創(chuàng)造性地設(shè)計(jì)出屬于自己的作品的程序。[1]App Inventor是快速開發(fā)移動(dòng)應(yīng)用的設(shè)計(jì)工具,它通過積木式的堆疊法來完成Android程序。教育者可以利用App Inventor的教育功能和代碼塊拼接編程的特點(diǎn),并通過拖曳積木的方式編寫屬于自己的應(yīng)用。[2]Python 語言是一種面向?qū)ο蟆⒅弊g式計(jì)算機(jī)程序設(shè)計(jì)語言。同時(shí)Python 是開源的語言,具有豐富和強(qiáng)大的類庫,同時(shí)具有優(yōu)良的可擴(kuò)展性和平臺可移植性。[3]
相關(guān)研究
有研究指出,結(jié)合我國學(xué)生發(fā)展核心素養(yǎng),計(jì)算思維是指能夠采用計(jì)算機(jī)領(lǐng)域的學(xué)科方法界定問題、抽象特征、建立結(jié)構(gòu)模型、合理組織數(shù)據(jù);通過判斷、分析與綜合各種信息資源,運(yùn)用合理的算法形成解決問題的方案;總結(jié)利用計(jì)算機(jī)解決問題的過程與方法,并遷移到與之相關(guān)的其他問題解決過程中。國際教育技術(shù)協(xié)會(ISTE)、美國計(jì)算機(jī)科學(xué)教師協(xié)會(CSTA),以及來自高等教育、產(chǎn)業(yè)界和中小學(xué)教育的專家提出關(guān)于計(jì)算思維的操作定義,認(rèn)為計(jì)算思維是一種問題解決的過程。包括(但不限于)以下幾點(diǎn):(1)按照能夠方便使用計(jì)算機(jī)和相關(guān)工具解決問題的方式表述問題;(2)按邏輯組織和分析數(shù)據(jù);(3)利用抽象的方法表示數(shù)據(jù),例如模型和模擬;(4)通過算法的思想(一系列有序的步驟)生成自動(dòng)化的解決方案;(5)通過識別、分析和實(shí)施各種可能的解決方案,以實(shí)現(xiàn)最有效的步驟與資源的組合;(6)概括該問題的解決過程,并遷移到其他相關(guān)問題中。[4]
Scratch、App Inventor、Python三種典型程序語言存在很多的差異性,具體包括如下三個(gè)方面。
(1)抽象能力要求層次不同。Scratch與App Inventor作為“塊”語言,使用積木式編程方式,對于學(xué)生的抽象能力要求較低,這符合小學(xué)生和初中生的思維方式。其中,Scratch對于學(xué)生的抽象能力要求最低,幾歲的兒童知道模塊的功能也可以實(shí)現(xiàn)簡單的編程。App Inventor一般與手機(jī)程序聯(lián)系在一起,這要求學(xué)生對于多媒體界面以及通信連接要有所了解,對于學(xué)生的抽象能力要求更進(jìn)一步。Python雖然語法較為簡單,但屬于面向?qū)ο蟮恼Z言,仍然有繼承、重載、派生等概念,對于學(xué)生的抽象能力要求雖然達(dá)不到C++語言等高級語言的層面,但相對于Scratch和App Inventor已經(jīng)提升了一個(gè)高度。
(2)邏輯組織和分析數(shù)據(jù)要求不同。在分析一個(gè)問題的時(shí)候,Scratch需要的邏輯組織要求最低,體現(xiàn)在模塊的明確性,每一個(gè)模塊的功能都很明確,與此同時(shí)分析一個(gè)問題時(shí),需要何等數(shù)據(jù)直接輸入在模塊中即可。App Inventor主要是頁面設(shè)計(jì),如設(shè)計(jì)一個(gè)呼叫功能的安卓應(yīng)用,學(xué)生需要清楚地整理出在手機(jī)上此功能需要哪些按鈕,按鈕需要什么模塊,雖然同樣是模塊化語言,但比Scratch要求的邏輯組織更進(jìn)一步。Python作為高級語言,對于問題的邏輯組織要求更高,對于任何一個(gè)問題的分析,如何轉(zhuǎn)化為程序語言,使用哪個(gè)模塊庫去實(shí)現(xiàn)是需要較高的積累以及邏輯要求。
(3)設(shè)計(jì)算法的要求不同。對于學(xué)習(xí)Scratch和APP Inventor的學(xué)生而言,學(xué)生有些情況下是憑自己的興趣去設(shè)計(jì)一個(gè)作品,學(xué)生并不知道什么是算法,但是學(xué)生可以在教師的引導(dǎo)下寫出做作品的步驟,潛在地訓(xùn)練其對于分解問題以及設(shè)計(jì)算法的能力。對學(xué)習(xí)Python的學(xué)生而言,算法是這門語言的核心,學(xué)生需要掌握一些常見的算法,如漢諾塔算法、背包問題、貪心算法,這些算法本身就涉及數(shù)學(xué)基礎(chǔ),對于小學(xué)生和初中生比較難以理解。
編程技術(shù)支持的計(jì)算思維課堂模型分析
1.編程技術(shù)培養(yǎng)計(jì)算思維的需求分析
雖然其他學(xué)科也可以培養(yǎng)計(jì)算思維,但是編程技術(shù)對于計(jì)算思維的培養(yǎng)是有其獨(dú)特的優(yōu)勢的。編程技術(shù)作為必須在計(jì)算機(jī)上實(shí)現(xiàn)的語言,本身就是人們用計(jì)算機(jī)去解決問題的一種技術(shù)手段,不論何種程序語言,都會涉及算法。
用編程技術(shù)去培養(yǎng)計(jì)算思維,首先需要確定學(xué)生的階段,7歲兒童和17歲少年的思維層次是不一樣的,適合的程序語言也不相同。根據(jù)問題的邏輯遞進(jìn)會選擇不同的程序語言,對于計(jì)算思維的側(cè)重點(diǎn)也不相同。本研究對于計(jì)算思維進(jìn)行細(xì)分,考慮到學(xué)生的年齡以及認(rèn)知程度的差異,對三種典型語言的適用范圍進(jìn)行了評價(jià)。如前表所示。
計(jì)算思維內(nèi)化在編程技術(shù)應(yīng)用過程中,而計(jì)算思維并不是程序化的,要將它概念化,讓計(jì)算思維成為思考問題的一種方式。讓編程成為解決其他學(xué)科問題的一種手段,這是開展編程教育的意義,也是信息技術(shù)學(xué)科體現(xiàn)自身價(jià)值的重要環(huán)節(jié)。
2.編程技術(shù)支持計(jì)算思維的課堂要素分析
計(jì)算思維的本質(zhì)是抽象與自動(dòng)化,其主要體現(xiàn)在形式化、模型化、自動(dòng)化和系統(tǒng)化四個(gè)方面。編程本身是抽象的,形式化、模型化的最核心要求便是抽象分析問題。在編程之前對于編程對象以及編程的流程進(jìn)行抽象有利于更快捷地編寫出程序,這個(gè)前期準(zhǔn)備工作就是計(jì)算思維的鍛煉。程序化和系統(tǒng)化方面,不論是塊語言還是面向?qū)ο?、面向過程的語言,編程的循環(huán)、條件控制或者迭代方面便是程序化的體現(xiàn)。塊語言對于積木的整合,面向?qū)ο蟮恼Z言對于類的整合是系統(tǒng)化的體現(xiàn)。
抽象與自動(dòng)化可以形成一個(gè)固定流程,如提出問題、抽象描述問題、分解問題、編程解決問題、問題的評估、總結(jié)等。
程序語言在中小學(xué)不同階段有區(qū)別,計(jì)算思維的培養(yǎng)方面也會有區(qū)別,中間的流程可以大致一樣但是也會有不同的側(cè)重點(diǎn)。如初級階段對于提出問題這方面可能要求更高,中級階段可能偏向于抽象描述問題,高級階段可能側(cè)重于分解問題或者優(yōu)化算法,同一流程在教學(xué)過程中也會有不同的創(chuàng)新因素。
3.編程技術(shù)支持計(jì)算思維的課堂模型
基于之前的需求分析、要素構(gòu)成的分析,可以構(gòu)建如下編程技術(shù)支持計(jì)算思維的課堂模型。
(1)編程技術(shù)從語言本身層次分為應(yīng)用語言、高級語言、匯編語言和機(jī)器指令,在學(xué)生年齡段上分為小學(xué)、初中和高中。
(2)不同階段學(xué)生的抽象能力要求不同,所以在教學(xué)過程中問題邏輯和教學(xué)側(cè)重點(diǎn)不同,培養(yǎng)的計(jì)算思維不一樣。不同語言的抽象能力不一樣,越低級的語言對于學(xué)生的抽象能力要求越高,考慮到中小學(xué)生日常的學(xué)習(xí)壓力,所以一般選擇應(yīng)用語言與高級語言。
(3)編程技術(shù)培養(yǎng)計(jì)算思維有一個(gè)基礎(chǔ)的流程,計(jì)算思維作為使用計(jì)算機(jī)解決問題的一種思維模式,一般是提出問題、抽象描述問題、設(shè)計(jì)算法、編程解決的過程,之后會有對算法的評估,以找出最優(yōu)的算法,最后是課后總結(jié)。這樣幾個(gè)步驟的大體流程是編程技術(shù)與計(jì)算思維聯(lián)系的核心環(huán)節(jié)。
編程技術(shù)支持的計(jì)算思維課堂模型
本研究中的三種語言都可以用基于計(jì)算思維的教學(xué)模式應(yīng)用在課堂中。具體的基于計(jì)算思維的教學(xué)模式如圖所示。
在這個(gè)教學(xué)模式當(dāng)中,問題的提出是以主題或者一個(gè)項(xiàng)目開始的。問題提出后,抽象出問題的幾個(gè)關(guān)鍵點(diǎn)并進(jìn)行分解是很重要也很有挑戰(zhàn)性的任務(wù),在這個(gè)過程中學(xué)生自主探究可能會遇到問題,教師可以選擇適當(dāng)?shù)剡M(jìn)行思維引導(dǎo)。不同的主題和項(xiàng)目由不同的語言來實(shí)現(xiàn),例如小學(xué)的情境趣味性編程選擇以Scratch為主,手機(jī)應(yīng)用由App Inventor來實(shí)現(xiàn),數(shù)據(jù)分析與挖掘可以選擇Python來完成。之后學(xué)生進(jìn)行算法的設(shè)計(jì),并根據(jù)算法進(jìn)行編程,在此過程中很重要的一點(diǎn)是排除錯(cuò)誤,在解決問題的過程中學(xué)生可以學(xué)會一門語言并且可以對自己的算法進(jìn)行優(yōu)化。每個(gè)人都基本上完成之后,學(xué)生進(jìn)行匯報(bào),分享自己的方案。最后是重構(gòu)優(yōu)化,重構(gòu)優(yōu)化是對算法以及代碼結(jié)構(gòu)的調(diào)整,目的是優(yōu)化項(xiàng)目的效果以及效率,不斷地更新迭代算法以及代碼并且保留最優(yōu)的方案。至此,一個(gè)主題或者項(xiàng)目告一段落,下一個(gè)主題或者項(xiàng)目較之前一定會有個(gè)難度的遞進(jìn),可能是語法層面上的也可能是算法層面上的,如此循環(huán)往復(fù)進(jìn)行每一節(jié)計(jì)算思維的課堂設(shè)計(jì)。
本研究根據(jù)三種中小學(xué)教學(xué)中的典型語言,以計(jì)算思維為基礎(chǔ),通過對典型語言的對比研究,發(fā)現(xiàn)了不同語言對于計(jì)算思維培養(yǎng)側(cè)重點(diǎn)不同,從而給出編程技術(shù)培養(yǎng)計(jì)算思維的課堂模型,以及教師可以采取的編程教學(xué)的模式。不足之處在于,現(xiàn)如今編程技術(shù)與計(jì)算思維之間聯(lián)系的緊密程度能達(dá)到多少并不確定,初級、中級、高級的編程教學(xué)針對不同年級的學(xué)生是否可能出現(xiàn)跨越性并不可知。高中課標(biāo)中明確以Python為主,但是如何從Scratch或者App Inventor等語言過渡到Python尚不明確。在下一階段筆者將聚焦到更加具體的編程教育當(dāng)中,選擇其中一門代表性語言進(jìn)行研究,以探究培養(yǎng)計(jì)算思維的具體方法。
參考文獻(xiàn)
Warren Buckleitner. Why “Scratch” is significant [M]. Childrens Technology Review, 2007:15,6,87.
魏志宏,郭守超,鄧常梅,李莉,趙丙科,周慶國. App Inventor:一種開源的信息技術(shù)課堂學(xué)習(xí)工具[J]. 現(xiàn)代中小學(xué)教育,2015,31(04):80-84.
鄭戟明. Python程序設(shè)計(jì)課程中計(jì)算思維的應(yīng)用[J]. 大學(xué)教育,2016(08):127-129.
CSTA, ISTE. Operational definition of computational thinking for K-12 education[OL]. http://csta.acm.org/Curriculum/sub/CompThinking.html.