




摘要:本文以高中信息技術(shù)“排序算法”為例,探索大概念統(tǒng)領(lǐng)下單元教學(xué)的有效策略,通過尋找單元內(nèi)容的融通點,將排序算法與學(xué)生已有知識和生活經(jīng)驗融通,通過問題鏈和活動串激活學(xué)生思維,引導(dǎo)學(xué)生自主探究與合作學(xué)習(xí),通過重構(gòu)知識體系,培養(yǎng)了學(xué)生的批判性思維和創(chuàng)造性思維,提高了學(xué)生解決問題的能力。
關(guān)鍵詞:融通;激活;重構(gòu);大概念;算法單元教學(xué)
面向核心素養(yǎng)的高中信息技術(shù)教學(xué)促使教師從“關(guān)注知識點的課時設(shè)計”向“大概念統(tǒng)領(lǐng)的單元設(shè)計”發(fā)展。因此,教師在教學(xué)中應(yīng)擺脫課時主義的束縛,要基于《普通高中信息技術(shù)課程標(biāo)準(zhǔn)(2017年版)》,在學(xué)情分析的基礎(chǔ)上,立足學(xué)科大概念,依托有意義的情境,把真實的問題帶進課堂。讓學(xué)生體驗發(fā)現(xiàn)問題的驚喜、解決問題的迫切需求、問題解決后的自我肯定與滿足,經(jīng)歷從解構(gòu)到重構(gòu)的完整的學(xué)習(xí)過程,促進學(xué)生內(nèi)驅(qū)力的提升。為實現(xiàn)上述目標(biāo),筆者提出“融通·激活·重構(gòu)”的教學(xué)策略,將單元內(nèi)容與學(xué)生已有的知識經(jīng)驗融通到學(xué)生熟悉的情境中,提出相關(guān)問題,激活學(xué)生思考,讓學(xué)習(xí)在活動、實踐、探究的過程中真實發(fā)生,將知識重構(gòu)為真知識。下面,筆者以“排序算法”為例進行具體的做法分析。
尋找單元內(nèi)容的融通點
尋找單元內(nèi)容的融通點是為了打通單元內(nèi)部、單元之間的邏輯聯(lián)系及現(xiàn)實生活與學(xué)科知識之間的隔閡。教師若能把握這些融通點,構(gòu)建恰當(dāng)?shù)慕虒W(xué)情境,引導(dǎo)學(xué)生像學(xué)科專家那樣發(fā)現(xiàn)并解決問題,則能幫助學(xué)生熟練掌握知識和技能,在更深層次上領(lǐng)悟并應(yīng)用知識。
1.對“排序算法”的生活化融通分析
教師構(gòu)建“如何整理雜亂無章的書架”的生活情境,學(xué)生會提出多種方案,教師引導(dǎo)學(xué)生思考不同方法的需求和效率差別(如下頁表)。通過引導(dǎo)學(xué)生分析不同的整理方法,可以培養(yǎng)學(xué)生選擇合理算法解決實際問題的能力,并加強算法實現(xiàn)的時間與空間認知觀念。
2.“排序”算法流程界定的生活化融通演示
解決一個問題往往存在不同的算法與策略。為幫助學(xué)生朝著同一方向探討,需要先界定問題的處理規(guī)則與流程,即算法。在教學(xué)中,筆者選擇了一種學(xué)生最易編程實現(xiàn)的算法:將書籍按高度逐一插入書架合理位置。例如,在書籍的插入過程中可以明顯地看到插入點后的書籍后移(如圖1)。
通過層層剖析和問題鏈的逐步引導(dǎo),將復(fù)雜的插入排序問題分解為若干學(xué)生已經(jīng)掌握且易于解決的小問題,即“在已排序的書籍中尋找插入位置——順序查找算法”“書籍后移——模擬算法”“插入書籍——賦值”。
3.“排序算法”編程實現(xiàn)與動畫演示的融通推演
為了讓學(xué)生能夠更加精準(zhǔn)地描述排序算法,課中教師給學(xué)生提供了插入排序演示動畫。結(jié)合演示動畫,將插入排序的核心步驟細化為“確定插入位置”“將插入位置及以后的元素依次向后移動一位”“插入數(shù)據(jù)”等關(guān)鍵環(huán)節(jié),逐一代碼實現(xiàn)。將插入排序分解為一系列小而具體的子問題更具可解性和可操作性,不僅能有效整合學(xué)生既有的經(jīng)驗,同時還有助于深化學(xué)生對計算機科學(xué)思想源于生活實踐的理解,對學(xué)生核心素養(yǎng)的培育具有積極的意義。
尋找生產(chǎn)知識的激活點
知識的獲取并非學(xué)習(xí)的終極目的,學(xué)習(xí)的最高境界是激發(fā)學(xué)生“生產(chǎn)知識”的潛能。教學(xué)中要著重探索激發(fā)學(xué)生自主探究的激活點,引導(dǎo)學(xué)生深入?yún)⑴c知識解構(gòu)到重構(gòu)的過程,使他們洞察知識生成的內(nèi)在邏輯,進而“生產(chǎn)知識”。
1.“生產(chǎn)知識”學(xué)習(xí)的激活路徑
傳統(tǒng)“排序算法”單元教學(xué)往往以冒泡排序、選擇排序等算法為專題設(shè)計,這種方式割裂了同類算法之間的內(nèi)在聯(lián)系,學(xué)習(xí)內(nèi)容缺乏結(jié)構(gòu)化,無法有效整合與內(nèi)化所學(xué)內(nèi)容。“生產(chǎn)知識”的學(xué)習(xí)方式可以有效激活算法大概念中“排序”這個二級概念的學(xué)習(xí),如圖2所示。
2.“生產(chǎn)知識”學(xué)習(xí)的問題鏈激活
在插入排序?qū)W習(xí)的過程中,通過問題鏈激活學(xué)生從空間效率與時間效率兩個維度去優(yōu)化已實現(xiàn)的插入排序算法。問題包括:“能否使用單一數(shù)組實現(xiàn)插入排序?”“能否將查找與數(shù)據(jù)移動的過程合并?”“能否用元素兩兩交換替代元素移動?”“能否將while語句結(jié)構(gòu)轉(zhuǎn)換成for語句結(jié)構(gòu)?”“能否通過兩兩交換保留交換過程中最大值從而得到無序段的最值(冒泡排序)?”
3.“生產(chǎn)知識”學(xué)習(xí)的活動串激活
通過問題鏈形成活動串,讓學(xué)生通過自主探究與合作學(xué)習(xí),開展代碼優(yōu)化與迭代實踐探索。盡管冒泡排序的學(xué)習(xí)過程原本不必這么復(fù)雜,但是通過優(yōu)化活動串,讓學(xué)生探索并深刻理解優(yōu)秀算法是如何通過不斷迭代而推陳出新的,有利于學(xué)生在編程實踐中形成“時空”觀念,總結(jié)利用計算機解決問題的過程與方法,并遷移到與之相關(guān)的其他問題解決中。
尋找新舊知識的重構(gòu)點
1.引發(fā)認知沖突,凸顯重構(gòu)點
在排序算法學(xué)習(xí)中,冒泡排序由于元素兩兩比較,只要記錄某趟排序最后一次發(fā)生交換的位置,該位置前的元素序列即為全局有序(根據(jù)兩兩元素間大小的傳遞性),如圖3所示。
因此,待排序列有序性越好,優(yōu)化后的冒泡排序的趟數(shù)越少。但對于選擇排序,由于每次都是在無序序列中挑選一個最值,無論待排序序列是否有序,其比較趟數(shù)幾乎不受影響。學(xué)生通過網(wǎng)絡(luò)或在資料中找到的雙向選擇排序(雞尾酒排序),每趟記錄最大值與最小值,然后與無序序列兩端元素進行交換,看似選擇排序趟數(shù)減少了一半,實則循環(huán)體內(nèi)做了兩次判斷,最終比較次數(shù)不受影響。此時,選擇排序通過算法維度優(yōu)化的路走不通了,冒泡排序比選擇排序的想法深入人心。那么,我們是否可以從改變數(shù)據(jù)結(jié)構(gòu)的角度進一步優(yōu)化插入排序代碼?為了引發(fā)學(xué)生認知沖突,教師將普通選擇排序代碼與奇偶分組選擇排序代碼做了對比測試。隨著數(shù)據(jù)量的增大,學(xué)生驚訝地發(fā)現(xiàn),優(yōu)化后的選擇排序代碼執(zhí)行效率提升了幾乎一倍。認知沖突的發(fā)生,為學(xué)生學(xué)習(xí)提供了一個教育契機。
2.“重構(gòu)”策略設(shè)計與體驗不斷迭代思維的形成
基于奇偶數(shù)據(jù)結(jié)構(gòu)優(yōu)化的選擇排序策略如下。
(1)數(shù)理分析,優(yōu)化排序數(shù)據(jù)結(jié)構(gòu)模型
我們將數(shù)組a(1)~a(n)看成由奇數(shù)位與偶數(shù)位構(gòu)成的兩行:
a(1)" a(3)" a(5) ... a(n-1)
a(2)" a(4)" a(6) ... a(n)
*如果n為奇數(shù),則最后一個元素是第1行最后1列。
在這樣的視角下,變化出現(xiàn)了:
①奇數(shù)位與偶數(shù)位進行比較交換,將較大數(shù)交換到奇數(shù)位置。這樣,每一列總是奇數(shù)位置的數(shù)大。
a(1)≥a(2),a(3)≥a(4),a(5)≥a(6),...,a(n-1)≥a(n)
②在奇數(shù)位置中找最大值a(j),這個最大值毫無疑問是全局最大值a(j)。
接下來我們要做兩個非常重要的交換:
A.a(j)與a(n)交換,這樣就把最大值交換到最后(升序排序)。
B.由于a(j)現(xiàn)在的位置已經(jīng)無法保證奇數(shù)位置的值不小于偶數(shù)位置的值,所以這個位置的奇數(shù)位值與偶數(shù)位置進行比較交換,保證所有奇數(shù)位置的值都不小于偶數(shù)位置的值。
通過奇偶分組優(yōu)化,選擇排序每趟比較的次數(shù),減少到了原來的1/2+1次。此時,繼續(xù)追問學(xué)生是否能夠繼續(xù)優(yōu)化,學(xué)生很容易想到,分更多的組效率更高,最終得到結(jié)論,當(dāng)序列長度為n時,那么分(開方后向上取整)組時效率最高。
(2)概括描述,追問數(shù)據(jù)結(jié)構(gòu)優(yōu)化實質(zhì)
優(yōu)化至此,教師請學(xué)生簡單描述上述優(yōu)化后的選擇排序操作過程。學(xué)生對選擇排序流程進行梳理:第一步查找列首最大值a(j);第二步列a(j)與無序隊列的行尾部元素交換;第三步將a(j)調(diào)整為所在列最大值。教師繼續(xù)追問:“這個算法還能再改進嗎?”學(xué)生再次進入認知沖突,這時教師提出“可以從堆放形式上繼續(xù)改進”,如下頁圖示4所示。
(3)圖示數(shù)據(jù)結(jié)構(gòu),展現(xiàn)優(yōu)化要義
通過三角堆放結(jié)構(gòu)的修改,避免了最大值的查找過程,每趟調(diào)整深度優(yōu)化為。但由于在程序?qū)崿F(xiàn)過程中底層元素與上層元素存在“共父節(jié)點”的情況,程序?qū)崿F(xiàn)較為復(fù)雜,因此,教師再次引導(dǎo)學(xué)生對三角堆結(jié)構(gòu)進行優(yōu)化,一個大頂堆的模型漸漸清晰,如圖5所示。
此時,學(xué)生根據(jù)三角形堆的算法可以生產(chǎn)出大頂堆算法:
n個元素按完全二叉樹邏輯依次擺放。
①保證每個節(jié)點的值都不小于其子節(jié)點的值;
②根節(jié)點總是最大元素;
③根節(jié)點的值與堆的最后一個元素交換,這樣最大元素就被移到了數(shù)組的最后,然后對剩下元素再按照①原則進行調(diào)整。
此時,在教師的引導(dǎo)下,學(xué)生逐步將選擇排序效率迭代優(yōu)化成為堆排序問題,并不斷在其他算法優(yōu)化過程中多情境地出現(xiàn)樹的算法思想,學(xué)生也能逐漸體會到樹在算法優(yōu)化中的意義與地位,由此在重構(gòu)中不斷迭代發(fā)展計算思維。
總結(jié)
在高中信息技術(shù)教學(xué)中開展“融通·激活·重構(gòu)”的教學(xué),首先有利于激活、促進學(xué)生自主發(fā)現(xiàn)問題的能力,引導(dǎo)學(xué)生像計算機領(lǐng)域的專家一樣從問題起點融通思考問題,經(jīng)歷關(guān)鍵信息提取、問題抽象、方案設(shè)計、技術(shù)實現(xiàn)、驗證、再設(shè)計、再實現(xiàn)的不斷重構(gòu)過程,引導(dǎo)學(xué)生在“用中學(xué)”“創(chuàng)中學(xué)”“合作中學(xué)”,由“教知識”的課堂轉(zhuǎn)變?yōu)椤盀樗季S而教”的課堂,讓學(xué)生的學(xué)習(xí)由“學(xué)知識”轉(zhuǎn)變?yōu)椴粩嗟嬎闼季S發(fā)展的“深度學(xué)習(xí)”,其教育意義是持久而深遠的。
參考文獻:
[1]李曉明.為什么會有“數(shù)據(jù)結(jié)構(gòu)”?[J].計算機教育,2019(01):3-4.
[2]王愛勝.編程江湖Python篇(青少年版)[M].北京:清華大學(xué)出版社,2023.
[3]吳建鋒.學(xué)生因你而不同[J].中小學(xué)信息技術(shù)教育,2014(11):29-33.
蒼山點題
算法與編程在課程中可謂相融相生:算法是思想,是精神;編程是技術(shù),是載體。如果失去了動手編程去進行代碼體驗、算法驗證和能力生成等基礎(chǔ)性實踐,單純說教式學(xué)習(xí)對未來課程的深入實施極具認知挑戰(zhàn)和發(fā)展風(fēng)險,因此,須防算法課堂教學(xué)走上認知虛無和學(xué)習(xí)膚淺化。如何以計算思維為核心,以算法為目標(biāo),以代碼為載體建立更加融合、立體和可生成式的算法教與學(xué),將是中小學(xué)各個階段都應(yīng)關(guān)注的問題。本期解碼,我們從浙江算法教學(xué)一線實踐著眼,展現(xiàn)看似有一定難度,實則相當(dāng)于浙江高考選考中低水平的算法學(xué)習(xí),一起感受、探討算法思想與代碼如何結(jié)合實施“基于計算思維的算法生成式教與學(xué)”。
第一篇文章,作者依據(jù)高考選考試題核心素養(yǎng)分布與考核結(jié)果數(shù)據(jù)分析,著眼“以考定教促學(xué)”進行算法思維教學(xué)實踐思考。通過數(shù)據(jù)分析揭示學(xué)生核心素養(yǎng)與計算思維的評價狀況,提出指向算法思維培養(yǎng)的教學(xué)方式轉(zhuǎn)變需要適應(yīng)變革,以基于學(xué)科大概念進行教材二次加工、多元思維碰撞促進融合思維認知、指向算法思維培養(yǎng)的學(xué)習(xí)方式轉(zhuǎn)變等策略,探討如何引發(fā)學(xué)生開展多元思維融合的認知,在構(gòu)建不同的算法模型中迭代、優(yōu)化算法,提倡一題多解以豐富算法思維的內(nèi)涵,倡導(dǎo)先分后裝以模塊突破整體項目,促進思維碰撞來拓展思維廣度和深度,加強歸納總結(jié)提升形式化遷移能力等,以對標(biāo)高考的角度發(fā)揮評價的作用,增強計算思維的生成式培養(yǎng)與算法思想與技能的生成式形成。如此,課堂在看似“慢節(jié)奏”的不斷演繹中持續(xù)生成與發(fā)展。例如,其中有一個生成點:“先隨機抽取序列里一個數(shù),即m=random.randint(0,k-1)位置的數(shù),再與最后數(shù)比較交換,使最后數(shù)大;再縮小范圍比較交換,即k-=1后循環(huán),由此優(yōu)化算法”。如果時間允許,或可繼續(xù)討論“可能抽取到最后一個位置,產(chǎn)生無效交換”。共同探討若排除最后一個位置即random.randint(0,k-2),再與之比較的增效與隨機公平問題,也或可討論抽取位置先判斷是不是最后位置,再決定交換與否,產(chǎn)生每次判斷的必要性與降效評估等。這也是計算思維的迭代表現(xiàn)出來的生成式算法學(xué)習(xí)的意義所在。
第二篇文章,作者以“融通·激活·重構(gòu)”的教學(xué)方式架構(gòu),以算法的大概念、“排序算法”的二級概念,排序大單元教學(xué)的有效策略,從生活化經(jīng)驗分析,在現(xiàn)實問題分析、算法流程界定、編程實現(xiàn)與動畫推演等過程中尋找融通點,保持學(xué)習(xí)的“效度”;在問題鏈和活動串設(shè)計實施中,不斷激活學(xué)生思維,保持學(xué)習(xí)“熱度”;不斷尋找新舊知識的重構(gòu)點,提升學(xué)習(xí)的寬度與深度,即在引發(fā)認知沖突中凸顯重構(gòu)點,采用“重構(gòu)”策略設(shè)計與體驗來迭代思維的形成,通過以數(shù)理分析優(yōu)化排序數(shù)據(jù)結(jié)構(gòu)模型、以概括描述追問結(jié)構(gòu)優(yōu)化實質(zhì)、用圖示數(shù)據(jù)結(jié)構(gòu)展現(xiàn)優(yōu)化要義等過程形成對算法知識體系的建構(gòu)與發(fā)展。這種通過認知融通、探索激發(fā)和體系重構(gòu)的循環(huán)式迭代生成算法思想,不斷豐富發(fā)展計算思維的學(xué)習(xí)養(yǎng)成,在此也舉一個其中的可生成的點:在文中,借助2個列表結(jié)合排序中,在n,b[0]=len(a),a[0]初始化之后,可用print(b)即時觀察已開始生成的新數(shù)據(jù)狀況,當(dāng)即破除認知屏障,然后引導(dǎo)學(xué)生改變結(jié)果輸出代碼縮進跟蹤觀察排序過程,即在結(jié)果賦值指向b[j + 1] = a[i + 1]代碼之后,即刻再次print(b),跟蹤觀察排序過程性數(shù)據(jù),進一步提高對算法執(zhí)行的“時空”觀念。這也正是結(jié)合生活中“嘗試與觀察”的融通點、“實驗觀察”的激發(fā)點和“算法整體認知”的重構(gòu)意義所在。
綜合來看,本期解碼文章實例雖在浙江高考選考層面尚屬中低難度,但面向全國算法教學(xué)可能屬于較高難度內(nèi)容,由此也可見教與評相結(jié)合的意義,即無評價則教學(xué)乏力,由此也可見算法學(xué)習(xí)生成式認知的價值,即無深度則學(xué)習(xí)膚淺。期待更多算法穩(wěn)定性、生成式教學(xué)探索成果的分享。