葛星
隨著《義務教育信息科技課程標準(2022年版)》對計算思維的強調,算法知識逐漸被大家所重視。但算法由于本身的抽象性,在中學生普遍程序設計基礎薄弱的當下,較難高效地開展教學。因此,許多專家提出借助可視化工具將算法從復雜的代碼中抽離出來,讓學生直觀地感受算法本身,從而幫助理解。本文介紹了市面上的幾類算法可視化的方法,并為大家重點介紹Data Structure Visualizations這款工具的特點以及使用方法,同時我也會結合基于該工具的教學實踐,檢驗真實效果,并給出借助算法可視化工具的教學建議,希望可以幫助教師適應新課程改革下對算法教學的要求,從而有效提升學生的計算思維。
一、可視化的教學理念
《義務教育信息科技課程標準(2022年版)》的頒布,正式將計算思維確定為一項重要的信息科技學科核心素養。然而對剛剛步入初中的學生來說,算法知識依然較為抽象,在傳統講授加練習的教學模式下,學生會消耗大量時間在代碼的編寫上,但對算法思想卻缺乏思考,導致大多數學生只能機械地套用基本模板,而無法將其應用到解決實際問題上。
在此背景下,許多專家提出了基于可視化理念的算法教學策略。腦科學研究發現,人類1/3大腦都是處理視覺信息,因此在課堂上使用可視化工具來呈現教學信息,更容易幫助學生建構認知。江蘇師范大學的王樹梅老師通過一個學期的對比實驗研究,發現借助算法可視化工具教學的班級,在學時量更少的情況下卻能夠取得更好的平均分成績。北京師范大學的趙國慶、黃榮懷等教授則以雙重編碼理論為基礎,借助知識制品的角度,從理論層面介紹了知識可視化的研究框架與應用方法。
目前主要的算法可視化方法大致有三類:基于交互式動畫、圖形化編程以及演示系統。其中李曉鴻等借助Flash軟件完成了基于學習者視角的常見算法的交互式動畫,算法執行過程更加直觀,但是其交互性依舊停留在最基本的開始、暫停兩個操作步驟,對算法運行過程中產生的中間數據支持不夠。常年執教信息學競賽的一線教師梁雪梅提出了基于Scratch搭積木自主探究式的教學方法,提升學生在編程時的主觀能動性,但是這對學生的前置知識有要求,同時在語境較為抽象的問題中較難借助Scratch準確還原問題背景。杜鑫等一大批大學教授則致力于算法可視化仿真教學系統的設計,能夠有效幫助學生直觀化地理解算法執行過程,但是這類系統往往是基于B/S架構的封閉式系統,普通一線教師開發使用成本較高,不具有普適性。
因此我考慮使用市面上面向公眾開源的在線算法可視化工具,并經過試用和對比,綜合各種考慮,最終選擇了Data Structure Visualizations這款工具。借助這款開源算法可視化工具,可以更高效地開展算法教學,幫助學生深入理解算法。
二、 Data Structure Vi -sualizations工具介紹
Data Structure Visualizations是美國舊金山大學計算機科學家大衛·加勒基于HTML5和JavaScript開發的一款算法可視化網站。其集成了一整套從基本算法到數據結構的交互式動畫,并提供了一系列用戶組件,包含特定算法的調參和常規動畫的控制功能等。
1.頁面模塊
Data Structure Visualizations網站的頁面設計簡約大方,一共6個模塊(如圖1),其中最主要的是算法模塊,內置了包括遞歸、排序、動態規劃、線性表、棧、樹、圖等常見的算法及數據結構,找到對應算法點進去后可以通過文本框、按鈕等組件來幫助調整參數。
2. 算法可視化過程
這款網站是全英文的,但是詞匯量不多,難度也不大。低年級學生在使用過程中可以借助瀏覽器的翻譯功能,將其轉換為中文版(不同瀏覽器翻譯可能有區別,因此本文后續演示一律使用原版英文狀態)。
以常見的冒泡排序為例,我們選擇“Algorithms”模塊下的“Sorting”。系統會根據需要隨機生成一系列數據,并且以條形圖高低的方式來直觀展現數據量的大小,然后選擇對應“冒泡排序”的按鈕,平臺就會自動調用后臺的程序,并且會將排序過程中兩兩變量的交換過程用不同顏色直觀地展示在界面上。整個過程中,學習者可以根據進度自主調整程序運行的速率,隨時暫停、繼續和回溯,實現了整個算法的可視化。這種直觀的展現非常有利于學生理解算法的基本思想,為后期的代碼實現提供了堅實的理論支撐。
3. 優勢介紹
豐富的算法資源庫 平臺一共提供了包括線性表、樹、圖在內的57種算法,基本涵蓋了中學階段需要涉及的程序,免去了一線教師高額的開發成本。
在線使用免注冊 這款工具是基于B/S架構的在線網站,雖然是全英文,但是響應速度極快,且支持包括IOS設備在內的任何瀏覽器。另外這款網站免注冊、無需收費的特點,使其特別適合國內中小學生學習。
交互式可控 市面上很多算法可視化平臺雖然也能夠對算法進行形象化表達,但是互動性不足,學生無法根據自己的需求自行調節程序的進程。
強大的定制功能 該平臺考慮到部分用戶定制化的需求,提供了HTML模板示例以及對應的JavaScript文件。借助于此,用戶甚至可以針對平臺尚未提供標準可視化的算法自行創建自己的源代碼,并使其可視化展現。
三、可視化工具應用分析(實際應用案例)
接下來我以斐波那契數列為例,設計了基于Data Structure Visualizations的遞歸算法教學案例。
1.問題提出
有一種兔子,從出生后第3個月起每個月都生一只兔子,小兔子長到第3個月后每個月又生一只兔子。假設有一只兔子是第3個月出生的,那么它第5個月開始會每個月都生一只兔子。如果一月的時候有1只兔子,假如兔子都不死,請問第n個月(n≤50)的兔子總數是多少。
2.抽象建模
引導學生通過表格的形式,列舉出幾個月的兔子數量,嘗試找出規律。通過舉例,我們不難發現,第3個月的兔子數量是第1、2個月的兔子數量之和,第4個月的兔子數量又是第2、3個月的兔子數量之和,因此我們可以得出通項方程f(n)=f(n-1)+f(n-2),(n≥3)而這實際上就是非常有名的斐波那契數列。
3.問題分析
我們仔細觀察斐波那契數列會發現,第n項的值是通過解決第(n-1)項和第(n-2)項得來的,所以其本質是一個將大問題轉換為小問題的過程,只要我們知道了起始項f(1)和f(2)的值,那么n無論取多大的值,理論上都是可以通過將其不斷拆解直到f(1)和f(2)無法再分解而求得。這種算法在數學上對應的是歸納法,在程序設計中我們稱其為遞歸算法。
總結遞歸算法的思路,我們發現,遞歸算法需要包含三個方面,可見下表。
依據總結的遞歸算法解題步驟,給出遞歸代碼,形成初始化感性認知,遞歸算法模板如圖2。
4.Data Structure Visua-lizations分析遞歸過程
由于遞歸算法涉及函數的重復自我調用,因此這個過程一定會導致部分學生難以理解調用過程中數據的走向。我們這時打開Data Structure Visualizations中的斐波那契數列代碼,以10作為初始參數,展示程序是如何一步步將大問題逐漸分解為一個個小問題,直到最終求得f(1)和f(2),同時在這個過程中引導學生發現遞歸算法的精髓就是要找出跳出循環的條件,否則會陷入到死循環的困境中。遞歸算法可視化如圖3。
在這個過程中,我們甚至可以將n的初始值參數調大到50,此時程序的執行過程是異常緩慢的,可以引導學生借助工具的暫停、步進等功能探索程序超時的原因,充分發揮主觀能動性,鼓勵其自主調試程序以改良遞歸算法的缺陷。
5.課堂小結
當學生借助Data Structure Visualizations直觀地感受到遞歸算法中函數調用的過程后,再讓學生編寫并嘗試改良初始遞歸代碼,從可視化算法形成直觀感受,到借助平臺自主控制程序進程,自主摸索并深入理解代碼,就能夠讓學生將學習到的算法應用到實際問題當中,最終實現提高算法背后的計算思維。
四、可視化工具在教學應用中的展望與困難
算法課應該怎么上?其是否等同于編程課?這是我在執教算法時一直思考的問題。算法的本質應該是計算思維,代碼只是其作用到計算機的手段。所以在算法教學上,我希望可以將數據可視化軟件融入到教學環節中,將學生從代碼中剝離出來,直觀地感受算法的執行過程,體會其背后所蘊含的思想,以便培養學生的邏輯思維能力。這是之前傳統課堂所無法實現的,也是我認為可視化工具在日后算法教學上會得到重視的原因。
雖然可視化工具愈發受到重視,但是我們也需要了解可視化工具在教學應用上面臨的困難。
1.針對信息科技課程的可視化應用的理論研究不夠
由于可視化在知識傳遞和認知建構中擁有巨大優勢,因此中小學課堂中越來越多地使用可視化工具進行授課,但是更多把可視化教學局限在提供一種圖形化展示,而忽略了我們需要在教學形式上考慮借助可視化工具提供一種從抽象到具體的處理方法,以期高效地解決復雜知識的抽象問題。西北師范大學的梁瀟丹對“基于可視化的信息技術課的教學設計”進行了文獻研究,發現只有38條記錄是有關聯的,這說明當前國內對信息科技課程可視化教學的研究還太少,課程設計缺乏理論基礎。
2.可視化工具的教學資源加工難度偏重
另外,可視化工具在應用過程中不可避免地需要教師更多的準備,課堂管理上的難度增加。我采訪發現,大部分教師并不是不愿意使用可視化工具,而是沒有精力去制作可視化內容,更別談設計可視化教學了,因此這就需要從組織層面頂層設計,籌備可視化教學資源庫,以便進一步推廣使用。
綜上所述,算法可視化工具在目前的實際教學應用中依然存在著許多不足。但或許,對我們而言更重要的是開始,而不是一次就完美。只要我們不斷努力,最終一定可以實現更高效的算法教學。