陳鷗輝 湖南省株洲市第二中學
《義務教育信息科技課程標準(2022年版)》(以下簡稱“信息科技標準”)中強調了課程的邏輯主線是數據、算法、網絡、信息處理、信息安全與人工智能。信息科技標準同時強調,在教學中,注重引導學生經歷原理運用過程、計算思維過程和數字化工具應用過程,構建知識,提升問題解決能力。
信息科技標準與《普通高中信息技術課程標準(2017年版2020年修訂)》共同強調了四個核心素養:信息意識、計算思維、數字化學習與創新、信息社會責任。在一次培訓中,熊璋教授提出:“面向課程實施,如果要抓一個最關鍵的問題,我覺得就是信息科技中問題求解的思維方法——計算思維。計算思維是信息科技學科里最本質的也是我們最應該拎出來的(東西)。”而計算思維是指個體運用計算機科學領域的思想方法,在問題解決過程中所進行的抽象、分解、建模、算法設計等思維活動。
在信息科技標準中,關于算法的教學目標有:了解算法在解決問題過程中的作用,領會算法的價值;能采用計算機科學領域的思想方法界定問題、分析問題、組織數據、制訂問題解決方案,并對其進行反思和優化,使用簡單算法,利用計算機實現問題的自動化求解。
在信息科技標準中,5~6年級的計算思維學段目標強調了學生對給定的任務,能將其分解為一系列的實施步驟,使用順序、分支、循環三種基本控制結構簡單描述實施過程,通過編程驗證該過程,實現自動求解。從信息科技標準的這些描述來看,學生不僅要學會用自然語言、流程圖等方法來描述算法,而且要學會通過編程驗證算法的可行性。
算法已經成為影響人類生活的一個重要組成部分,算法的學習也必然成為中小學課程的必要組成部分。在國家義務教育課程方案中,信息科技已經成為一門獨立的學科。那么,作為課標核心承載內容的算法,適合用何種編程語言來編程驗證算法的可行性呢?
說到算法,在信息學奧賽教練的腦海里首先想到的往往是編譯型語言,如PASCAL、C/C++語言。這些語言在解決算法的時效性上具有明顯的優勢,但由于語法過于嚴謹、容易出錯,導致學習難度大,趣味性不足,所以很難引起學生的學習興趣。
隨著Arduino、App Inventor等圖形化編程軟件的興起,算法的實現在中小學普及教育中成為可能。另外,許多編程網站也提供了在線圖形化編程,不少網站還提供了整套適合4~18歲學生在線自主學習的完整的編程課程,學生能夠一邊自學,一邊在線編程運行程序來驗證算法的可行性。
例如,在開設“身邊的算法”“過程與控制”“互聯網應用與創新”“物聯網實踐與探索”“人工智能與智能社會”等課程內容的編程環境方面,可選Mind+、mPython等,其不僅提供了圖形化編程的界面,而且能自動生成Python、C語言等編程代碼。圖1是海龜編輯器編程軟件中通過遞歸來繪制一朵花的代碼。通過代碼可以看出,對于學生來說圖形化編程幾乎不存在語言障礙,而代碼編程存在明顯的語言障礙,需要記住相當多的關鍵詞與語法,才能準確地寫出可運行程序。表1對比了圖形化編程與代碼編程的不同。

圖1

表1
所以,隨著圖形化編程技術的日益成熟,面向全體中小學生的各類算法設計的編程教學已經成為可能。例如,在powerhomeschool網站上,提供了三門適合中小學生學習的與計算機科學相關的編程課程:《STEM 1: Introduction to Coding》《STEM 2: JavaScript》《STEM 3: Electronics and Coding》。在bjc.berkeley.edu上的面向中小學生的編程課,使用的則是Snap圖形化編程語言。
可見,不管國外還是國內,圖形化編程在中小學教學中的應用都非常普遍。從功能實現上來看,編程的三種基本結構——順序、選擇與循環,以及簡單的算法如模擬、遞歸等,兩種編程方式都可以相對較快地完成算法可行性的驗證。
但是,在開設“過程與控制”“互聯網應用與創新”“物聯網實踐與探索”“人工智能與智能社會”等課程時,更適合選擇圖形化編程軟件來進行教學。圖2是SIoT物聯網相關知識測試的圖形化代碼與自動生成的C語言代碼對比,通過對比可以看出,圖形化編程能夠讓信息科技課程的算法實現在相對較少的課時內達成教學目標。

圖2
當然,對于復雜的底層算法,如快速排序、動態規劃、最小生成樹、圖論等算法知識的教學,則更適合選擇代碼編程進行教學。另外,由于信息學奧賽課程對程序的運行時效性要求非常高,所以在信息奧賽教學中往往選擇編譯型高級語言如C/C++等進行教學。
目前,Python與C++是在中小學采用率最高的兩種代碼型的高級計算機語言,它們的不同點主要如表2所示。

表2
以漢諾塔遞歸算法的Python程序與C++程序編寫與運行為例,對比實驗如下頁圖3所示。

圖3
通過兩個程序對比可以看出,在實現同樣算法時,Python程序代碼所占行數顯然比C++少得多。除了編譯原理不同帶來的差異之外,兩種編程語言在語法上也存在許多差異(如表3)。

表3
嚴格地說,這兩種編程語言并不具備相互替代的關系,而是各有各的適應領域。在選擇編程語言時,過多地糾結在編程語法的細節上,很容易打擊學生的學習積極性,影響學生對算法的學習興趣,導致無法達到計算思維的培養目標。
因此,在中小學信息科技教學過程中,具體使用哪種編程語言來實現算法,教師應根據學生的實際接受能力進行選擇。除了編程語言的選擇,教學內容的組織形式也非常重要。在算法實現的教學中,減輕代碼實現的難度往往也是有必要的。在學習遞歸算法時,除了漢諾塔,還可以結合繪圖功能設計各種項目進行教學,如完成不同形狀的花朵、各種樹形等藝術作品的創作。
不論采用哪種語言、平臺來完成算法的可行性驗證,在教學過程中都要關注算法學習的方法與效益。教師可以更多地利用項目式學習的方式進行教學,激發學生的學習興趣。例如,在學習模擬算法時,結合疾病傳播項目進行模擬,如果能夠結合各類社會問題進行算法實現的教學,將大大提高學生的學習積極性。又如,基于開源硬件的日漸成熟,在課程教學中可以結合更多的項目達到算法實現來培養學生的計算思維。通過比較實際且高效的項目學習,如“過程與控制”中的項目“小型開關系統的算法實現”、“互聯網應用與創新”中的項目“簡單密碼學的算法實現”、“物聯網實踐與探索”中的項目“智慧農業模擬系統的算法實現”、“人工智能與智能社會”中的項目“智能出行模擬系統中的算法實現”等,不僅能激發學生的學習興趣,而且更利于學生計算思維能力目標的達成。
古人云:“皮之不存,毛將焉附?”對于信息科技課程,算法及其編程實現應是課程的重要的核心內容之一,所以對于信息科技教師的教學來說,選擇哪種編程語言來實現算法也是非常重要。選對了教學內容,那么核心素養的目標培養也就水到渠成了。