傅騫 唐文靜 王雯 鄭婭峰
摘要:編程模式是指在代碼中重復(fù)出現(xiàn)且具有結(jié)構(gòu)意義的代碼片段,準(zhǔn)確識(shí)別高中程序設(shè)計(jì)所需的編程模式有助于教師把握編程教學(xué)的重點(diǎn)和途徑,提升編程課程的教學(xué)效果。當(dāng)前的編程教學(xué)研究鮮有關(guān)注編程模式對(duì)編程教學(xué)的意義,也未有研究明確高中編程教學(xué)中的編程模式內(nèi)容和數(shù)量。為此,研究依據(jù)編程模式的結(jié)構(gòu)特點(diǎn),采用序列模式挖掘方法自動(dòng)識(shí)別了高中階段編程教學(xué)涉及的編程模式,并進(jìn)行了有效性驗(yàn)證。結(jié)果表明,從現(xiàn)行高中信息技術(shù)課程必修“程序設(shè)計(jì)”模塊識(shí)別的共計(jì)18種編程模式涉及多種基礎(chǔ)知識(shí)點(diǎn)的復(fù)合應(yīng)用,能夠有效擴(kuò)展編程教材中的教學(xué)知識(shí)范疇。研究還進(jìn)一步闡述了編程模式的實(shí)踐教學(xué)價(jià)值,并從教學(xué)內(nèi)容、教學(xué)方法、教學(xué)資源三個(gè)方面給出了利用編程模式實(shí)施編程能力培養(yǎng)的具體方法。
關(guān)鍵詞:編程模式;編程教學(xué);高中程序設(shè)計(jì);序列模式挖掘;計(jì)算思維
中圖分類號(hào):G434 文獻(xiàn)標(biāo)識(shí)碼:A?文章編號(hào):1006-9860(2021)02-0061-07
一、引言
自陳國(guó)良院士倡議將計(jì)算思維引人計(jì)算機(jī)基礎(chǔ)教學(xué)。以后,計(jì)算思維得到了國(guó)內(nèi)計(jì)算機(jī)基礎(chǔ)教育界的廣泛關(guān)注和重視。計(jì)算思維是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行問(wèn)題求解、系統(tǒng)設(shè)計(jì),以及人類行為理解等涉及計(jì)算機(jī)科學(xué)的一系列思維活動(dòng)。研究表明,21世紀(jì)技能中的創(chuàng)造力、批判性思維、問(wèn)題解決能力等諸多技能均與計(jì)算思維高度相關(guān)3。因此,計(jì)算思維能力培養(yǎng)得到了各國(guó)教學(xué)界的普遍重視。2017年,我國(guó)發(fā)布《普通高中信息技術(shù)課程標(biāo)準(zhǔn)》,明確將計(jì)算思維能力作為信息技術(shù)學(xué)科的核心素養(yǎng)。
程序設(shè)計(jì)是學(xué)習(xí)和培養(yǎng)計(jì)算思維的重要載體。計(jì)算思維培養(yǎng)的目的是讓學(xué)生用計(jì)算機(jī)的思維方式去解決問(wèn)題,提高問(wèn)題解決的邏輯思維能力,而編程學(xué)習(xí)恰恰提供了最直接的思維能力培養(yǎng)的手段和方法。青少年通過(guò)編程學(xué)習(xí)算法邏輯、分解復(fù)雜問(wèn)題、設(shè)計(jì)解決流程等,這一過(guò)程充分體現(xiàn)了算法理解、抽象與分解等計(jì)算思維核心概念的習(xí)得過(guò)程。當(dāng)前,在中小學(xué)階段廣泛開(kāi)展編程教育已得到社會(huì)各界的共識(shí),并成為中小學(xué)實(shí)施計(jì)算思維、問(wèn)題解決能力、創(chuàng)新思考和分工合作等綜合技能培養(yǎng)的重要途徑[8]。
然而,我國(guó)的編程教育整體還處于初級(jí)階段,以計(jì)算思維培養(yǎng)為導(dǎo)向的編程教學(xué)模式仍處在探索階段。教學(xué)內(nèi)容的重難點(diǎn)把控、計(jì)算思維的階梯式培養(yǎng)路線以及教學(xué)資源的多維度立體化建設(shè)等方面都存在較大的空白。當(dāng)前,在中小學(xué)階段的編程教學(xué)中,往往注重基礎(chǔ)語(yǔ)法知識(shí)的講授,而忽視學(xué)生對(duì)問(wèn)題的整體分析、對(duì)知識(shí)點(diǎn)的綜合運(yùn)用,使得學(xué)生真正解決復(fù)雜問(wèn)題時(shí)無(wú)從下手。同時(shí),計(jì)算思維能力的培養(yǎng)路徑多憑教師個(gè)人經(jīng)驗(yàn),采用何種方式強(qiáng)化思維培養(yǎng)存在較大的“專家盲點(diǎn)”"。在教學(xué)資源的建設(shè)方面,如何避免單一的語(yǔ)法知識(shí)訓(xùn)練,采用以計(jì)算思維訓(xùn)練為主線的多維度資源組織形式還沒(méi)有明確的方法路徑。
在編程教學(xué)中引入編程模式,能夠?qū)⒂?jì)算思維培養(yǎng)以可操作的形式落實(shí)到具體的課程內(nèi)容和教學(xué)過(guò)程中,從而較好地解決上述難題。編程模式是指在代碼中重復(fù)出現(xiàn)且具有結(jié)構(gòu)意義的代碼片段,它可以認(rèn)為是從編程經(jīng)驗(yàn)中經(jīng)過(guò)抽象和升華提煉出來(lái)的知識(shí)體系。它并不在教材知識(shí)的掌握目標(biāo)中明確出現(xiàn),卻是解決某一類問(wèn)題的方法論,具有更高的知識(shí)深度和更廣泛的應(yīng)用基礎(chǔ)。例如,編程模式通常能夠幫助程序員分解復(fù)雜問(wèn)題,分模塊形成解決方案,快速完成編碼實(shí)現(xiàn)。在編程學(xué)習(xí)中,掌握了編程模式的學(xué)生能夠較為容易的完成從簡(jiǎn)單語(yǔ)法知識(shí)應(yīng)用到綜合知識(shí)應(yīng)用的能力過(guò)渡。因此,在培養(yǎng)計(jì)算思維的教學(xué)過(guò)程中引人編程模式,有利于從基本算法思維到抽象與分解等計(jì)算思維核心能力的階梯式培養(yǎng)。同時(shí),由于編程模式反映了高階計(jì)算思維能力,考察編程模式的掌握程度,可以作為評(píng)估計(jì)算思維發(fā)展程度的有力工具。
當(dāng)前,在大學(xué)計(jì)算機(jī)相關(guān)專業(yè)的教學(xué)中,常常有設(shè)計(jì)模式、編程框架、算法設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)這樣的與編程模式相關(guān)的課程,但在當(dāng)前的高中編程教學(xué)中,算法設(shè)計(jì)中只針對(duì)基礎(chǔ)的順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)或整體的枚舉和遞歸的算法思想進(jìn)行講解,具有更為復(fù)雜語(yǔ)法結(jié)構(gòu)的編程模式雖在教材示例代碼中出現(xiàn),但在教材的知識(shí)講解中卻沒(méi)有明確指明,編程模式的重要性被忽略。例如,在人教&國(guó)圖版教材講解循環(huán)結(jié)構(gòu)時(shí),只涉及了for循環(huán)、while循環(huán)、循環(huán)嵌套以及break和continue語(yǔ)句4個(gè)知識(shí)點(diǎn)講解。而實(shí)際上,在利用break和continue語(yǔ)句跳出循環(huán)時(shí),須有一個(gè)if條件語(yǔ)句進(jìn)行判斷,這意味著學(xué)生在完成跳出循環(huán)體的任務(wù)時(shí),必須掌握循環(huán)語(yǔ)句與if條件語(yǔ)句的嵌套,這在教材中并未提及。這也造成在實(shí)踐教學(xué)中,教師鮮少關(guān)注到從掌握程序設(shè)計(jì)基礎(chǔ)知識(shí)到培養(yǎng)計(jì)算思維之間的過(guò)程是什么,即思維范式顯性化的編程模式教學(xué)內(nèi)容常常被忽視。基于此,本研究基于編程模式的語(yǔ)法結(jié)構(gòu)特征,從新編信息技術(shù)教材程序設(shè)計(jì)模塊配套源程序中,自動(dòng)挖掘高中基礎(chǔ)程序設(shè)計(jì)中常用的編程模式,明確常用的編程模式數(shù)量和范圍,并更進(jìn)一步闡述運(yùn)用編程模式培養(yǎng)計(jì)算思維能力的重要教學(xué)意義和具體操作方法。
二、基于序列模式的編程模式抽取方法
編程模式(或稱代碼習(xí)語(yǔ))指在代碼中重復(fù)出現(xiàn)的且具有結(jié)構(gòu)意義的代碼片段,具有單一的語(yǔ)義目的。因此,采用序列模式挖掘算法可以快速識(shí)別這些高頻的具有固定序列組合的片段,從而達(dá)成編程模式自動(dòng)挖掘的目的。高中基礎(chǔ)編程教學(xué)課程中涉及的源程序數(shù)據(jù)集較小,程序結(jié)構(gòu)相對(duì)較為簡(jiǎn)單,不涉及復(fù)雜算法和數(shù)據(jù)結(jié)構(gòu)。因此本文采取序列模式挖掘中的PrefixSpan算法實(shí)施編程模式的抽取,其在執(zhí)行效率、時(shí)間復(fù)雜度和空間復(fù)雜度方面優(yōu)于經(jīng)典的Apriori和GSP算法。
在編程模式抽取中,首先通過(guò)對(duì)源程序進(jìn)行語(yǔ)法解析,將源程序識(shí)別為抽象語(yǔ)法樹(shù);然后基于抽象語(yǔ)法樹(shù),結(jié)合結(jié)構(gòu)性的知識(shí)點(diǎn)語(yǔ)法特征,將樹(shù)中具有結(jié)構(gòu)意義的節(jié)點(diǎn)名字和結(jié)構(gòu)信息命名形成項(xiàng),多個(gè)項(xiàng)形成具有結(jié)構(gòu)信息的源程序序列;最終基于PrefixSpan算法挖掘源程序序列中的頻繁序列,通過(guò)語(yǔ)法分析和規(guī)則判斷對(duì)頻繁序列進(jìn)行還原得到編程模式,具體過(guò)程如下:
(一)數(shù)據(jù)選擇
高中信息技術(shù)課程標(biāo)準(zhǔn)發(fā)布至今,全國(guó)各地共出版五個(gè)版本的信息技術(shù)教材,教材中均包含Python基礎(chǔ)程序設(shè)計(jì)內(nèi)容。本研究的源程序來(lái)源于最新五個(gè)版本的信息技術(shù)必修一《數(shù)據(jù)與計(jì)算》中的基礎(chǔ)程序設(shè)計(jì)模塊課程示例和配套答案,五本教材分別為:滬科教版、浙教版、粵教版、教科版和人教/國(guó)圖版,挖掘所用的配套源程序數(shù)量共有141個(gè)。
(二)編程模式挖掘
本研究挖掘編程模式的算法為PrefixSpan算法,在PrefixSpan算法中涉及以下幾個(gè)基本定義:
在PrefixSpan算法中將一個(gè)源程序序列定義為S:
令:S=(g1,g2,g3……ga)
其中n為一個(gè)源程序中出現(xiàn)的body屬性的語(yǔ)法點(diǎn)的個(gè)數(shù),如圖1所示,出現(xiàn)了“Module”和“For”所以n=2。gi(1
支持度Support(S):在數(shù)據(jù)集中含有S的序列個(gè)數(shù)。
頻繁序列:在知識(shí)點(diǎn)序列數(shù)據(jù)集中,如果序列S出現(xiàn)的頻率不低于閾值min_supports,則將S視為頻繁序列。
min_supports:自定義的支持度的最小值,用以判斷是否為頻繁序列。
根據(jù)PrefixSpan算法的基本定義,需要將配套源程序轉(zhuǎn)化為源程序序列數(shù)據(jù)集。在此過(guò)程中,若簡(jiǎn)單地將源程序視為字符串進(jìn)行處理,容易丟失源程序的語(yǔ)法結(jié)構(gòu),因此本文基于源程序的語(yǔ)法解析結(jié)果生成源程序序列。
首先,在語(yǔ)法解析過(guò)程中,生成源程序的抽象語(yǔ)法樹(shù)。抽象語(yǔ)法樹(shù)的根節(jié)點(diǎn)一般為“Module”,其余每個(gè)節(jié)點(diǎn)是抽象語(yǔ)法樹(shù)的一個(gè)節(jié)點(diǎn)模塊,每個(gè)節(jié)點(diǎn)會(huì)有節(jié)點(diǎn)名稱和多個(gè)節(jié)點(diǎn)屬性。由于本研究挖掘的目的是發(fā)現(xiàn)有意義的代碼組合,所以將針對(duì)選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、函數(shù)定義等具有較為復(fù)雜結(jié)構(gòu)的節(jié)點(diǎn)進(jìn)行挖掘。這些節(jié)點(diǎn)都具有body屬性,body屬性以列表的形式存儲(chǔ)執(zhí)行結(jié)構(gòu)中的語(yǔ)句。
接下來(lái),利用語(yǔ)法解析生成抽象語(yǔ)法樹(shù)形成源程序序列數(shù)據(jù)集?,F(xiàn)以上頁(yè)圖1為例為說(shuō)明數(shù)據(jù)處理結(jié)果。上頁(yè)圖1中右上角是源程序,對(duì)應(yīng)生成圖中的抽象語(yǔ)法樹(shù),其中具有body屬性的結(jié)構(gòu)性語(yǔ)法節(jié)點(diǎn)有“Module”“For”和“If”節(jié)點(diǎn),body列表中的節(jié)點(diǎn)在圖中用帶陰影方框圈出,即待挖掘的子序列,實(shí)線箭頭表示屬性,虛線箭頭表示省略部分。在抽象語(yǔ)法樹(shù)中,屬于同一深度且在“body”屬性列表中的語(yǔ)法節(jié)點(diǎn)組成一個(gè)子序列,并用小括號(hào)進(jìn)行封裝,如子序列1和子序列2所示。子序列中的每一項(xiàng)表示一個(gè)語(yǔ)法節(jié)點(diǎn),項(xiàng)的名稱表示方式為“父節(jié)點(diǎn)名稱_該節(jié)點(diǎn)名稱”如子序列1中第一個(gè)元素可以表示為“Module_For”,以此類推,最終生成中圖中右下方所示序列。
由于教材中有26個(gè)源程序較為簡(jiǎn)單,全部由無(wú)body屬性的知識(shí)點(diǎn)組成,所以141個(gè)源程序經(jīng)過(guò)預(yù)處理后,最終得到115個(gè)源程序序列。對(duì)這些源程序序列進(jìn)行編程模式挖掘:首先,設(shè)置最小支持度min_supports為18,基于PrefixSpan算法對(duì)這115個(gè)源程序序列進(jìn)行挖掘,得到頻繁序列;然后,對(duì)挖掘所得的頻繁序列進(jìn)行語(yǔ)法分析,還原成抽象語(yǔ)法樹(shù),其類型分為嵌套關(guān)系和間接并列關(guān)系;最后,對(duì)得到的抽象語(yǔ)法樹(shù)去重,將抽象語(yǔ)法樹(shù)轉(zhuǎn)化為編程模式,得到最終的編程模式?;谠摲椒ǖ木幊棠J健?/p>
三、編程模式挖掘研究結(jié)果
(一)頻繁序列及編程模式挖掘結(jié)果
研究共得到18個(gè)編程模式及其對(duì)應(yīng)的頻繁序列,18個(gè)編程模式均體現(xiàn)了知識(shí)點(diǎn)的嵌套關(guān)系,而其中有5個(gè)編程模式體現(xiàn)了間接并列關(guān)系,具體如表1所示,代碼示例展示了編程模式在源程序的具體體現(xiàn)形式,每個(gè)編程模式的支持度用Support表示。
(二)結(jié)果驗(yàn)證
通過(guò)PrefixSpan算法挖掘得到編程模式后,研究向具有Python教學(xué)經(jīng)驗(yàn)的高中教師發(fā)放問(wèn)卷,以驗(yàn)證所得編程模式的準(zhǔn)確性和有效性。問(wèn)卷采用量化的方式,將選項(xiàng)按照認(rèn)同程度分為“非常同意、同意、一般、不同意、非常不同意”五個(gè)等級(jí),并依次賦予5、4、3、2、1分,從而將教師的直觀感受量化。問(wèn)卷設(shè)計(jì)了20個(gè)問(wèn)題,包括18道題詢問(wèn)所得編程模式是否在教學(xué)中常用,以及2道陷阱類題目用以檢測(cè)收回的問(wèn)卷是否有效。在本研究中,調(diào)查問(wèn)卷共發(fā)放49份,收回有效問(wèn)卷41份,問(wèn)卷信度系數(shù)值為0.885,大于0.8,數(shù)據(jù)信度質(zhì)量很高,問(wèn)卷所得數(shù)據(jù)可做進(jìn)一步分析。
對(duì)問(wèn)卷進(jìn)行預(yù)處理后,計(jì)算教師評(píng)價(jià)各個(gè)編程模式的平均分,用來(lái)衡量各個(gè)編程模式在教師心中的認(rèn)可度,用Approval表示。整體上,編程模式的認(rèn)可度差異不大,均值均高于3分,標(biāo)準(zhǔn)差約為0.28,最大值比最小值相差1.05分,說(shuō)明挖掘所得的編程模式受到教師的認(rèn)可。將算法挖掘所得編程模式的支持度和教師評(píng)分的平均分做斯皮爾曼雙變量相關(guān),相關(guān)性顯著(ρ=0.018)且呈正相關(guān)關(guān)系。因此說(shuō)明了PrefixSpan算法挖掘編程模式的有效性,以及挖掘所得的編程模式在實(shí)際教學(xué)實(shí)踐中具有一定的教學(xué)意義。
(三)結(jié)果分析
從挖掘結(jié)果來(lái)看,編程模式的組成部分主要來(lái)源于if條件語(yǔ)句,while循環(huán)、for循環(huán)、函數(shù)、變量這5種最常用的基礎(chǔ)程序設(shè)計(jì)教學(xué)知識(shí)點(diǎn),這些單個(gè)的教學(xué)知識(shí)點(diǎn)在教材中都以知識(shí)要點(diǎn)的形式明確進(jìn)行了解釋。但是,從抽取的編程模式也可以看出,知識(shí)點(diǎn)的多種搭配應(yīng)用范式在教學(xué)和教材中往往被忽略。此次抽取的支持度較高的18種編程模式,涉及了for循環(huán)和if語(yǔ)句、雙重if語(yǔ)句與變量賦值、while條件語(yǔ)句和變量賦值等未在教材知識(shí)講解中明確講解的編程知識(shí)。這些編程模式雖然不是基礎(chǔ)知識(shí)點(diǎn),但對(duì)于學(xué)生靈活運(yùn)用知識(shí)點(diǎn)解決編程問(wèn)題尤為重要,因而在教材的實(shí)踐活動(dòng)項(xiàng)目及練習(xí)提升作業(yè)題等部分多次出現(xiàn)。如第5種模式“for循環(huán)+if條件語(yǔ)句”的組合應(yīng)用,在5種教材中都未有這一知識(shí)點(diǎn)的明確講解,但是在人教&國(guó)圖版教材的break語(yǔ)句程序示例,練習(xí)提升中猜數(shù)游戲和課程例題票據(jù)中模糊數(shù)字推斷問(wèn)題等環(huán)節(jié)中多處出現(xiàn)。又如,第17種“while語(yǔ)句嵌套if條件語(yǔ)句后進(jìn)行變量賦值”的編程模式對(duì)于解決人教版教材實(shí)踐活動(dòng)中較為簡(jiǎn)潔地解決“尋找1000以內(nèi)的素?cái)?shù)問(wèn)題”必不可缺。由此看出,編程模式基于基礎(chǔ)知識(shí)點(diǎn),但深度高于基礎(chǔ)知識(shí),是基礎(chǔ)知識(shí)的在實(shí)踐中的靈活應(yīng)用。
另外,編程模式是結(jié)構(gòu)性語(yǔ)法節(jié)點(diǎn)組合的復(fù)雜結(jié)構(gòu),其本質(zhì)體現(xiàn)了解決特定問(wèn)題的泛化編程思路。如,在實(shí)際編程過(guò)程中,在while循環(huán)中常運(yùn)用if條件語(yǔ)句作為循環(huán)終止的結(jié)構(gòu),用以解決眾多涉及循環(huán)跳出的編程問(wèn)題。所挖掘的第13條編程模式“while循環(huán)嵌套if語(yǔ)句”就明確了這一模式在應(yīng)用中的使用,因而教師在課程中教授該模式顯得非常有必要。又如,在對(duì)列表中符合某一條件的數(shù)據(jù)進(jìn)行針對(duì)性處理時(shí),第5種模式“for循環(huán)中嵌套if條件語(yǔ)句”是簡(jiǎn)潔而直接編程的思路。從這些具體的已挖掘的編程模式也可以明確,編程模式作為高階思維的顯性化表達(dá)形式,為解決編程所需的具體結(jié)構(gòu)框架提供參考,是知識(shí)點(diǎn)與問(wèn)題解決方式的橋梁,需要在教學(xué)活動(dòng)中得到重視。
四、運(yùn)用編程模式優(yōu)化編程教學(xué)的實(shí)施建議不管是編程模式的自動(dòng)挖掘還是編程教師的日常實(shí)踐,都表明了編程模式在程序?qū)W習(xí)中的客觀存在。但由于缺乏明確的編程模式引導(dǎo),盡管意識(shí)到編程模式的教學(xué)價(jià)值,教師仍無(wú)法直接將其用于編程教學(xué)?;诒狙芯康耐诰蚪Y(jié)果,可以充分運(yùn)用這些編程模式通過(guò)以下三個(gè)方面來(lái)促進(jìn)編程教學(xué)。
(一)重構(gòu)與優(yōu)化編程教學(xué)知識(shí)體系
認(rèn)知理論表明,編程教學(xué)知識(shí)點(diǎn)之間應(yīng)該有所關(guān)聯(lián),教學(xué)應(yīng)該以簡(jiǎn)單的知識(shí)點(diǎn)為起點(diǎn),逐步引入比較難的知識(shí)點(diǎn)。但是,當(dāng)前的編程教學(xué)知識(shí)體系重點(diǎn)仍在低階語(yǔ)法知識(shí)的掌握與運(yùn)用,在展開(kāi)復(fù)雜度較高的編程任務(wù)時(shí),簡(jiǎn)單知識(shí)體系無(wú)法保證學(xué)生從基礎(chǔ)知識(shí)順利過(guò)渡到知識(shí)的綜合使用。高階知識(shí)內(nèi)容仍然是目前編程教學(xué)整體大知識(shí)體系中最為匱乏的內(nèi)容,也是教學(xué)內(nèi)容設(shè)計(jì)中的難點(diǎn)。根據(jù)新課標(biāo),程序教學(xué)的知識(shí)重點(diǎn)是幫助學(xué)生掌握輸入輸出、變量、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)等知識(shí)點(diǎn),而綜合運(yùn)用知識(shí)點(diǎn)明確問(wèn)題,識(shí)別問(wèn)題空間,則是能力培養(yǎng)的重點(diǎn)。從挖掘結(jié)果也可以看出,這些編程模式大多是循環(huán)結(jié)構(gòu)和選擇結(jié)構(gòu)與變量、print函數(shù)和模塊調(diào)用函數(shù)復(fù)合形成的,是綜合知識(shí)能力運(yùn)用的具體表現(xiàn)。因此,以編程模式為重點(diǎn)的教學(xué)內(nèi)容強(qiáng)化了循環(huán)和選擇結(jié)構(gòu)、變量、print函數(shù)和模塊調(diào)用函數(shù)的學(xué)習(xí),十分切合新課標(biāo)教學(xué)目標(biāo)中對(duì)重難點(diǎn)知識(shí)技能的要求。
基于此,教師可以將編程模式的掌握列人到教學(xué)目標(biāo)中來(lái),將編程模式作為編程學(xué)習(xí)知識(shí)結(jié)構(gòu)的重要組成部分,確保學(xué)生知識(shí)體系的完整性。編程模式是知識(shí)點(diǎn)的組合,在解決復(fù)雜問(wèn)題進(jìn)行編程實(shí)踐時(shí),教師可以將編程模式作為重難點(diǎn)知識(shí)進(jìn)行講解和運(yùn)用,利用編程模式將知識(shí)點(diǎn)進(jìn)行關(guān)聯(lián),幫助學(xué)生建立一個(gè)系統(tǒng)性強(qiáng)、層次分明的認(rèn)知結(jié)構(gòu)。從表1可以看出,編程模式的結(jié)構(gòu)越簡(jiǎn)單,支持度越高。因此,在整個(gè)教學(xué)內(nèi)容體系的設(shè)置上,需要按照支持度從高到低的次序把編程模式逐步加入到編程教學(xué)內(nèi)容中。而在課時(shí)教學(xué)內(nèi)容的設(shè)計(jì)上應(yīng)該注重讓學(xué)生逐步理解、運(yùn)用編程模式,首先,在教學(xué)目標(biāo)的設(shè)定上需要加人編程模式,讓學(xué)生理解編程模式的重要性;然后,在示例代碼的講解中需要?dú)w納該代碼所含的編程模式,讓學(xué)生理解編程模式的特點(diǎn);最后,在課后作業(yè)中需要布置和本課編程模式相匹配的編程習(xí)題,讓學(xué)生掌握編程模式的應(yīng)用。
(二)構(gòu)建高階認(rèn)知發(fā)展的教學(xué)路線
編程模式是高階編程學(xué)習(xí)的一個(gè)重要知識(shí),能夠?yàn)閷W(xué)生提供解構(gòu)復(fù)雜問(wèn)題場(chǎng)景的有效路徑,即指引問(wèn)題解決的思路和架構(gòu)整體解決框架。作為中介橋梁,編程模式的有效掌握將大大縮減學(xué)生從低級(jí)認(rèn)知到高階認(rèn)知學(xué)習(xí)的鴻溝。因而,靈活運(yùn)用編程模式構(gòu)建面向高階認(rèn)知發(fā)展的教學(xué)路線,將極大地深化編程教學(xué)領(lǐng)域現(xiàn)有的教學(xué)內(nèi)容和教學(xué)設(shè)計(jì)方法。借由編程模式在認(rèn)知上形成的基礎(chǔ)知識(shí)點(diǎn)和編程應(yīng)用的關(guān)鍵連接,有利于幫助學(xué)生在知識(shí)點(diǎn)與實(shí)際編程之間建立過(guò)渡關(guān)系,符合高階學(xué)習(xí)的認(rèn)知規(guī)律。因此,可以利用編程模式分解知識(shí)內(nèi)化步驟、增加知識(shí)內(nèi)化次數(shù)、降低學(xué)習(xí)難度、優(yōu)化編程教學(xué)路線,促使學(xué)生高階認(rèn)知能力的發(fā)展。
基于此,教師可以運(yùn)用本研究挖掘得出的編程模式來(lái)改進(jìn)編程教學(xué)方法,在代碼講解環(huán)節(jié)中引導(dǎo)學(xué)生通過(guò)歸納編程模式來(lái)提升代碼編寫(xiě)能力,按照自頂向下逐步細(xì)化的思想,利用編程模式明確給出編程的一般性步驟,從而讓學(xué)習(xí)者對(duì)算法有一個(gè)總體把握,而非糾結(jié)于細(xì)節(jié)語(yǔ)法錯(cuò)誤。在操作上,建議采用SCS創(chuàng)客教學(xué)法"進(jìn)行編程教學(xué),并在知識(shí)要點(diǎn)講解環(huán)節(jié)按照“新語(yǔ)法講解一程序框架講解一編程模式講解”的順序進(jìn)行,具體過(guò)程建議如下:情境故事引人環(huán)節(jié),通過(guò)設(shè)置情境激發(fā)學(xué)生對(duì)待解決問(wèn)題的興趣;單任務(wù)模仿環(huán)節(jié),引導(dǎo)學(xué)生在教師安排下按照教材完成代碼編寫(xiě)并運(yùn)行成功;知識(shí)要點(diǎn)講解環(huán)節(jié),先講解本代碼中新出現(xiàn)的語(yǔ)法知識(shí),再講解程序的總體框架,把代碼組合和程序功能對(duì)應(yīng)起來(lái),最后按照從簡(jiǎn)單到復(fù)雜的順序和學(xué)生一起歸納其中的編程模式;在擴(kuò)展任務(wù)模仿環(huán)節(jié),教師根據(jù)編程模式匹配的要求,在不增加語(yǔ)法知識(shí)和新的編程模式的基礎(chǔ)上,帶領(lǐng)學(xué)生完成一個(gè)復(fù)雜度更高的任務(wù),幫助學(xué)生加深對(duì)編程語(yǔ)法及編程模式的理解;創(chuàng)新激發(fā)引導(dǎo)環(huán)節(jié),引導(dǎo)學(xué)生在擴(kuò)展任務(wù)的基礎(chǔ)上根據(jù)現(xiàn)實(shí)需求加人新功能;協(xié)同任務(wù)完成環(huán)節(jié),學(xué)生通過(guò)相互協(xié)助,確認(rèn)需要完成代碼的最終功能,然后獨(dú)立完成代碼;成功作品分享,提供機(jī)會(huì),讓學(xué)生分享自己的作品,從代碼功能、程序框架和編程模式三部分進(jìn)行分享。
(三)構(gòu)建結(jié)構(gòu)化編程教學(xué)資源
當(dāng)前高中編程教學(xué)資源庫(kù)的建設(shè)還比較單一,多以基礎(chǔ)知識(shí)的訓(xùn)練為主,以問(wèn)題解決為特征的探究式、項(xiàng)目式教學(xué)案例資源設(shè)計(jì)尤為缺乏。這是因?yàn)樵诰唧w的教學(xué)案例資源建設(shè)中,對(duì)以現(xiàn)實(shí)情境為問(wèn)題出發(fā)點(diǎn)的任務(wù)如何進(jìn)行有效的條件約束,使其在保持問(wèn)題復(fù)雜度的同時(shí)能夠?qū)⒅R(shí)范疇界定在可掌握的范圍,對(duì)于一線教師具有巨大的挑戰(zhàn)。以編程模式為支架構(gòu)建面向復(fù)雜問(wèn)題解決的高質(zhì)量教學(xué)資源,將有助于幫助教師理清設(shè)計(jì)主線,確定知識(shí)邊界范圍,推進(jìn)以計(jì)算思維能力為主的教學(xué)核心目標(biāo)的達(dá)成。
基于此,教師可以在創(chuàng)建編程教學(xué)資源時(shí)以多樣的編程模式為抓手,設(shè)計(jì)符合學(xué)生認(rèn)知發(fā)展及具有思維挑戰(zhàn)性的校本教材、教學(xué)案例、編程題庫(kù)和微視頻等教學(xué)資源。具體來(lái)說(shuō),可以從知識(shí)理解和思維提升兩個(gè)維度來(lái)使用編程模式。知識(shí)理解維度強(qiáng)調(diào)編程模式的功能與作用,通過(guò)設(shè)計(jì)資源讓學(xué)生反復(fù)練習(xí)來(lái)加深其對(duì)編程模式的掌握思維訓(xùn)練維度則強(qiáng)調(diào)編程模式與實(shí)際問(wèn)題的關(guān)聯(lián),通過(guò)將編程模式內(nèi)隱在實(shí)際場(chǎng)景中,讓學(xué)生提升在現(xiàn)實(shí)問(wèn)題中快速應(yīng)用編程模式的能力。不同類型的資源需要不同的編程應(yīng)用模式:在校本教材中,可以按照編程語(yǔ)法和編程模式相互結(jié)合的方式實(shí)施,尤其是課程后期教學(xué)進(jìn)行到綜合運(yùn)用階段,需要按照編程模式的復(fù)雜度來(lái)設(shè)計(jì)課程教學(xué)資源;在教學(xué)案例中,建議多引導(dǎo)學(xué)生思考現(xiàn)實(shí)問(wèn)題和編程模式之間的聯(lián)系;在編程題庫(kù)中,建議和教材資源開(kāi)發(fā)一樣,通過(guò)編程語(yǔ)法和編程模式的相互結(jié)合來(lái)實(shí)現(xiàn)編程任務(wù)的循序漸進(jìn),在微視頻中,可以考慮把特定編程模式的講解和應(yīng)用做成獨(dú)立微課。
綜上所述,以編程模式為主線的教學(xué)內(nèi)容優(yōu)化、教學(xué)方法改進(jìn)以及教學(xué)資源擴(kuò)展,使得當(dāng)前的計(jì)算思維能力培養(yǎng)在教學(xué)實(shí)踐層面上能夠形成一個(gè)清晰的表達(dá)體系,而不僅僅停留在教學(xué)理論層面。在教學(xué)內(nèi)容上,將編程模式納人教學(xué)重難點(diǎn),促進(jìn)了以“構(gòu)造”為特征的問(wèn)題求解方法的培養(yǎng),進(jìn)一步強(qiáng)化了以計(jì)算思維培養(yǎng)為核心的教學(xué)目標(biāo);在教學(xué)方法上,利用編程模式增強(qiáng)基礎(chǔ)知識(shí)講授到復(fù)雜問(wèn)題解決應(yīng)用之間的過(guò)渡環(huán)節(jié),使得教學(xué)方法遵循程序設(shè)計(jì)學(xué)習(xí)認(rèn)知規(guī)律,使得計(jì)算思維培養(yǎng)方法更具科學(xué)性;在教學(xué)資源上,以編程模式為主線的資源建設(shè)不僅能夠涵蓋知識(shí)的思維性、關(guān)聯(lián)性、豐富性和完整性,更重要的是,在典型教學(xué)案例、練習(xí)題的設(shè)計(jì)中以編程模式為內(nèi)在靶點(diǎn)可以幫助設(shè)計(jì)者較容易地在任務(wù)的現(xiàn)實(shí)性和問(wèn)題的復(fù)雜性之間找到平衡,設(shè)計(jì)出能夠根據(jù)編程模式知識(shí)體系清晰轉(zhuǎn)化為計(jì)算機(jī)求解問(wèn)題的案例,以及促進(jìn)學(xué)生在認(rèn)識(shí)、內(nèi)化編程模式的過(guò)程中形成相對(duì)穩(wěn)定的程序設(shè)計(jì)學(xué)科思維方法。
五、結(jié)語(yǔ)
在編程教育政策的驅(qū)動(dòng)下,高中編程教學(xué)從選修逐步過(guò)渡到必修僅有短短幾年的時(shí)間,且課時(shí)安排較少,教師教學(xué)經(jīng)驗(yàn)也較為匱乏。當(dāng)前的教學(xué)內(nèi)容、方法及資源建設(shè)多沿用了高等計(jì)算機(jī)教育的模式,造成知識(shí)體系龐大、教學(xué)內(nèi)容冗雜等問(wèn)題。編程模式可以為準(zhǔn)確定位高中編程教學(xué)課程的教學(xué)重點(diǎn),優(yōu)化教學(xué)內(nèi)容與方法,以及找到計(jì)算思維培養(yǎng)的有效途徑提供具體支持。本研究在對(duì)新版高中信息技術(shù)教材進(jìn)行分析的基礎(chǔ)上,通過(guò)PrefixSpan算法挖掘得出了高中編程教學(xué)常用的18個(gè)編程模式,并通過(guò)高中編程教師的問(wèn)卷反饋得出這些編程模式在高中編程教學(xué)的實(shí)際應(yīng)用情況;然后從教學(xué)內(nèi)容、教學(xué)方法、教學(xué)資源三方面闡述了編程模式具有的重要教學(xué)意義,并給出了具體的操作建議。在未來(lái)的研究中,應(yīng)關(guān)注運(yùn)用編程模式開(kāi)展教學(xué)相關(guān)的實(shí)證研究,挖掘編程模式在編程教學(xué)中的實(shí)踐價(jià)值。
參考文獻(xiàn):
[1]陳國(guó)良,董榮勝.計(jì)算思維與大學(xué)計(jì)算機(jī)基礎(chǔ)教育[J].中國(guó)大學(xué)教學(xué),2011,(1):7-11+32.
[2] Wing J M.Computational thinking [J].Communications of the ACM,2006.,493):33-35.
[3] Binkley M,Erstad O,et al.Defining twenty-first century skills [M]. Dordrecht:Springer Netherlands,2012.
[4]中華人民共和國(guó)教育部.普通高中信息技術(shù)課程標(biāo)準(zhǔn)[M].北京:人民教育出版社,2018.
[5]于紀(jì)明,李冠瓊等.基于編程解決問(wèn)題的青少年計(jì)算思維培養(yǎng)框架[J].計(jì)算機(jī)教育,2020,(7):98-101.
[6]孫立會(huì),王曉倩.計(jì)算思維培養(yǎng)階段劃分與教授策略探討——基于皮亞杰認(rèn)知發(fā)展階段論[J].中國(guó)電化教育,2020,(3):32-41.
[7] Bers M U.Coding as a playground:Programming and computational thinking in the early childhood classroom [M].New York:Routledge & CRCPress,2018.
[8]孫丹,李艷.我國(guó)青少年編程教育課程標(biāo)準(zhǔn)探討[J].開(kāi)放教育研究,2019,25(5):99-109.
[9]李陽(yáng).計(jì)算思維導(dǎo)向的跨學(xué)科兒童編程教育模式研究——基于芬蘭兒童編程教育的經(jīng)驗(yàn)與啟示[J].現(xiàn)代教育技術(shù),2020,30(6):19-25.
[10]郭銀章,王麗芳.基于項(xiàng)目任務(wù)驅(qū)動(dòng)的C語(yǔ)言程序設(shè)計(jì)課程教學(xué)改革與實(shí)踐[J].計(jì)算機(jī)教育,2017,(2):41-44.
[11]亞達(dá)夫,錢(qián)逸舟.如何有效開(kāi)展編程與計(jì)算思維教育:教師教育的視角[J].中國(guó)信息技術(shù)教育,2020,(8):4-8.
[12] lyer S.Cheung et alLleaming Programmaic Idioms for Secalable Semantic Parsing [Cl-Hong Kong:Association for Computational Linguistics,2019.
[13] Allamanis M,Sutton C.Mining idioms from source code [C].Hong Kong: Association for Computing Machinery,2014.
[14]姬浩博.基于PrefixSpan算法的Web模式挖掘方法研究[D].太原:山西大學(xué),2016.
[15]張婷燕,周春紅等.優(yōu)化學(xué)生認(rèn)知結(jié)構(gòu)提高《C語(yǔ)言程序設(shè)計(jì)》教學(xué)質(zhì)量[J].商場(chǎng)現(xiàn)代化,2011,(9):151-152.
[16]傅騫.基于“中國(guó)創(chuàng)造”的創(chuàng)客教育支持生態(tài)研究[J].中國(guó)電化教育,2015,(11):6-12.
作者簡(jiǎn)介:
傅騫:副教授,博士,碩士生導(dǎo)師,研究方向?yàn)樾畔⒓夹g(shù)及教育應(yīng)用、創(chuàng)客教育。
唐文靜:在讀碩士,研究方向?yàn)榻逃髷?shù)據(jù)、創(chuàng)客教育。王雯:研究方向?yàn)榻逃髷?shù)據(jù)、創(chuàng)客教育。
鄭婭峰:副教授,博士,研究方向?yàn)檠芯糠较驗(yàn)榻逃髷?shù)據(jù)、學(xué)習(xí)過(guò)程自動(dòng)分析。
收稿日期2020年8月2日
責(zé)任編輯:邢西深