摘要:本文針對義務(wù)教育階段信息科技課程中的算法教學(xué),提出將算法邏輯與學(xué)生認(rèn)知邏輯結(jié)合,構(gòu)建“明確基本邏輯—抽象與建?!惴ㄔO(shè)計—驗證與優(yōu)化”的路徑,并在此基礎(chǔ)上應(yīng)用“以簡為始”“具體—抽象”“化錯而解”等關(guān)鍵策略,進(jìn)而有效提高算法教學(xué)效率。
關(guān)鍵詞:算法教學(xué);學(xué)習(xí)邏輯;教學(xué)路徑;策略
中圖分類號:G434" 文獻(xiàn)標(biāo)識碼:A" 論文編號:1674-2117(2025)06-0019-04
算法是信息科技解決問題的關(guān)鍵要素,它在信息科技課程中的重要性毋庸置疑?!读x務(wù)教育信息科技課程標(biāo)準(zhǔn)(2022年版)》(以下簡稱“新課標(biāo)”)將“身邊的算法”模塊設(shè)置在5~6年級作為起步,已充分考慮到了該年齡段的學(xué)生“由具象至抽象過渡”的思維特點。然而,算法仍成為一線教師普遍認(rèn)為的“最難啃”的內(nèi)容。具體困擾教師的問題是:“知道要讓學(xué)生理解算法,但很難找到一條讓學(xué)生較容易理解的路”,課堂經(jīng)常表現(xiàn)為“很枯燥”“無趣”“時間來不及”“學(xué)生難以理解”“兩極分化嚴(yán)重”等。據(jù)筆者觀察,其癥結(jié)主要在于教學(xué)缺少將算法邏輯轉(zhuǎn)化為學(xué)生認(rèn)知邏輯的方法。鑒于此,筆者嘗試以“漸進(jìn)演化”為主題,探討初學(xué)算法的教學(xué)路徑與關(guān)鍵策略。
算法教學(xué)的困境歸因
1.對“問題解決邏輯”的理解缺乏重視
對于算法教學(xué),要凸顯“抽象與建?!币殉蔀榻處煹墓沧R。然而,這種共識逐漸變成一種過度重視,從而導(dǎo)致“抽象與建?!鼻八伎辑h(huán)節(jié)被忽視,即缺乏對問題本身的分析及對問題解決的基本邏輯的思考。
2.“抽象—建?!惴ā边M(jìn)階層次不明
很多教師意識到“抽象—建?!惴ā边@三個環(huán)節(jié)是進(jìn)階的,但不清楚前者與后者的具體關(guān)系。例如,沒有認(rèn)識到“建模實質(zhì)是在構(gòu)造算法的核心,建模在增補(bǔ)‘輸入’‘輸出’‘控制結(jié)構(gòu)’等要素后,即可刻畫出完整的算法設(shè)計”。
3.重視程序?qū)崿F(xiàn)而忽視算法解讀與驗證
部分教師認(rèn)為“程序能跑起來”便是算法構(gòu)建的“終點”,沒有意識到“代碼解讀”“測試驗證”等活動乃是算法構(gòu)建的閉環(huán),因此存在學(xué)生探究路程短、自主思考深度不夠等問題。
算法教學(xué)的“漸進(jìn)演化”路徑
針對上述問題,筆者提出構(gòu)建“漸進(jìn)演化”的算法教學(xué)思路,即將“算法建構(gòu)”這個大問題分解為多個小問題,并以“自動化”為目標(biāo),對問題求解設(shè)計進(jìn)行逐層抽象與演進(jìn),促進(jìn)學(xué)生的算法學(xué)習(xí)(如上頁圖1)。
1.明確問題邏輯
“明確問題邏輯”也就是要知道所求的問題是什么,該問題如何求解。這里的“求解”是重在明確“人”解決問題的基本思路,而不是急于思考“計算機(jī)”如何求解,即讓學(xué)生優(yōu)先明白“問題與問題求解是怎么一回事”。例如,在《算法與問題解決》一課中,針對“投票”情境,首先讓學(xué)生把握“投票”考慮的是計票問題,投給哪個作品編號,對應(yīng)作品就增加票數(shù)。如果學(xué)生把問題求解的基本邏輯“想清楚了”,那么后續(xù)的抽象與建模,就能自主進(jìn)行算法建構(gòu)。
2.抽象與建模
抽象可以是計算框架的抽象,也可以是數(shù)據(jù)變量的抽象,還可以是關(guān)鍵對象間關(guān)系的抽象。例如,以“輸入—計算—輸出”三環(huán)節(jié)來解構(gòu)“投票”問題,就是一種抽象思考;用變量tp存儲輸入的作品編號,用變量a表示a作品的計票數(shù),用變量b表示b作品的計票數(shù),就是對數(shù)據(jù)的抽象;而輸入的編號需經(jīng)過判斷計入對應(yīng)作品的票數(shù),是為關(guān)鍵對象間關(guān)系的抽象。在抽象基礎(chǔ)上,即可建模,也就是確定“怎么算”。
3.算法設(shè)計
算法設(shè)計就是在建模的基礎(chǔ)上,通過增加輸入、輸出及控制結(jié)構(gòu)等部分,使整個計算過程的步驟既明確又完整,且確保算法的確定性、可行性和有窮性。從嚴(yán)格意義上來講,抽象與建模早已涉及算法設(shè)計。因此,這里的“算法設(shè)計”環(huán)節(jié)更強(qiáng)調(diào)的是可執(zhí)行的完整性,如“投票何時終止”“哪些變量需要初始化”等這些細(xì)節(jié)問題,都應(yīng)在完整的算法設(shè)計中被考慮。
值得注意的是,如果算法起初是用自然語言、流程圖或偽代碼描述的,那么就需要通過編程,將算法轉(zhuǎn)換為某編程語言特定的語法、函數(shù)名及結(jié)構(gòu)。
4.驗證與優(yōu)化
驗證環(huán)節(jié)主要通過輸入不同的數(shù)據(jù),觀察程序的運行與結(jié)果,驗證算法的正確性、健壯性及效率。通過編程,學(xué)生感受到算法自動化解決問題的魅力;通過驗證,學(xué)生切身感受程序運作的機(jī)制,理解用抽象代碼所表達(dá)的計算過程,同時進(jìn)一步發(fā)現(xiàn)問題,以“優(yōu)化”行動促進(jìn)學(xué)習(xí)的深化。例如,通過輸入交替的作品編號“01、23、01”,輸入不是原定的編號“28”來考驗程序,發(fā)現(xiàn)并修正算法設(shè)計中的BUG。
算法教學(xué)的關(guān)鍵策略
1.“以簡為始”策略
“以簡為始”策略遵循“從簡單入手”,即將問題求解的算法從復(fù)雜結(jié)構(gòu)降維成簡單結(jié)構(gòu),滿足最基本的問題求解的需求,在學(xué)生能自主構(gòu)建后,再提出新的問題或更高的需求,引發(fā)算法優(yōu)化與升級,為學(xué)生鋪設(shè)一種由簡單至復(fù)雜的算法探究之路。
在實際教學(xué)中,教師可以反向操作,以終至始地“化繁為簡”,如圖2所示。具體來說可分以下步驟:①根據(jù)問題情境,先設(shè)計出較為完備的算法,并將算法付諸代碼,得到程序P;②針對問題求解的基本需求,剔除程序的非關(guān)鍵部分,但使程序仍保持求解問題的基本功能,得到程序P’;③分析“程序P”至“程序P’”之間的差距,設(shè)計出學(xué)習(xí)進(jìn)階環(huán)節(jié),能勝任的部分讓全體學(xué)生“做中學(xué)”,不能勝任的部分,可以通過分層教學(xué)或師生演示,讓學(xué)生“觀中拓”。
以案例“投票算法‘變形記’”為例,在“投票算法”備課中,筆者發(fā)現(xiàn),一個完備的作品投票算法,應(yīng)具備的功能為支持多項作品、投票作品編號可自定義、能自動計票、可隨時退出程序。若一開始就要學(xué)生思考實現(xiàn)所有功能的算法,則既會陡然增加學(xué)習(xí)的難度,也不太可能讓學(xué)生在四十分鐘內(nèi)完成。因此,筆者將問題情境做了三處簡化處理:一是僅給兩件作品投票,編號確定為“01”和“23”;二是循環(huán)模擬與退出程序功能不要求學(xué)生構(gòu)建,僅讓學(xué)生有所了解;三是建模讓學(xué)生動手實踐,但程序不要求學(xué)生從零起點編寫,只要求完成計票的關(guān)鍵代碼。經(jīng)過一番簡化,學(xué)生人人都能“上手”,課堂氣氛活躍,學(xué)生自我成就感明顯。在“程序跑起來”后,學(xué)生輸入“28”編號加以驗證,發(fā)現(xiàn)“投01之外的編號,都會計票在b作品”的算法漏洞,自然引發(fā)算法優(yōu)化。在課堂最后,教師讓學(xué)生訪問網(wǎng)頁,對本課收獲感進(jìn)行投票,切身感受“更真實”的投票程序,感受基于網(wǎng)絡(luò)的“并發(fā)式”自動計票的魅力。
2.“具體—抽象”策略
“具體—抽象”策略關(guān)注的是兩者的聯(lián)結(jié)與互為依賴的漸進(jìn)迭代。從具體至抽象,是一種建構(gòu),符合學(xué)生的認(rèn)知規(guī)律;從抽象至具體,是一種解構(gòu),往往指解讀代碼、驗證算法等思考與實踐。這些活動能評價學(xué)生對抽象算法的理解,促進(jìn)計算思維的提升。
在實際教學(xué)活動,“具體—抽象”交織著推進(jìn)深度學(xué)習(xí)(如圖3):①從具體入手,以具體數(shù)據(jù)計算為切入口,理解問題求解的基本邏輯;②從具體至抽象,由于“任何概念、問題或知識,都可以用一種極其簡單的形式來表示”,因而教師可借助具體例子,配以簡明圖示,揭示對象間的關(guān)系,在理解的基礎(chǔ)上,學(xué)生完全能自我發(fā)現(xiàn)并描述計算的規(guī)則;③從抽象至抽象,用代碼將算法變現(xiàn)為程序;④從抽象至具體,讓程序“跑起來”,眼見為實地看到程序運行的過程與結(jié)果,感受計算的自動化;⑤從具體至抽象,將程序運行結(jié)果與代碼互為對照,逐行解讀代碼“做什么”,針對錯誤尋覓“為什么”,促進(jìn)理解的深化與新一輪建構(gòu)的行動。
以案例“投票算法的抽象改良”為例,在“投票”算法教學(xué)中,筆者發(fā)現(xiàn),不管學(xué)生基礎(chǔ)如何,大部分學(xué)生都會在變量抽象和形式化描述處“卡殼”。究其原因是,學(xué)生尚未清楚“如何計票”,教師就“祭出”變量并設(shè)計算法,所以相當(dāng)茫然。在后來的教學(xué)中,筆者讓教學(xué)慢下來,讓學(xué)生先明白“輸入哪個編號,計票計在哪里”,即先厘清“問題解決的基本邏輯”,在此基礎(chǔ)上設(shè)定變量,描述計票規(guī)則,自然演進(jìn)至算法設(shè)計,關(guān)鍵教學(xué)片段如上頁表所示。
3.“化錯而解”策略
在算法實踐的過程中,錯誤是不可避免的,錯誤可能出自建模的缺陷,也可能產(chǎn)生于程序語法的不合規(guī)范。一般來說,“化錯”可遵循以下的過程:①收集典型錯誤,視算法錯誤現(xiàn)象為常態(tài),視錯誤為學(xué)習(xí)的契機(jī),甚至感謝錯誤案例的提供者,在課堂中創(chuàng)設(shè)安全的學(xué)習(xí)氛圍;②聚焦錯誤點,重現(xiàn)程序運行的錯誤現(xiàn)場,先看清楚“錯什么”,借助具體代入法、逐行分析法,引導(dǎo)學(xué)生察覺“錯在哪里”,理解“為什么出錯”;③修正算法錯誤,引導(dǎo)學(xué)生還原問題解決的基本思路,對模型、代碼進(jìn)行修正;④驗證修正后的算法,這一步仍不可少,再次驗證也凸顯了嚴(yán)謹(jǐn)、務(wù)實的科學(xué)態(tài)度。
例如,在五上《雙分支結(jié)構(gòu)》算法教學(xué)中,教師創(chuàng)設(shè)購物打折情境,為學(xué)生提供“三步”支架,引導(dǎo)學(xué)生在PPT中用自然語言構(gòu)建算法。
在課堂上,一位學(xué)生很快地寫出“打折判斷的條件——是否大于5”,緊接著,在“付款費用”一欄中,寫下了令筆者非常疑惑的表達(dá)式“n-(n/1)”。這肯定是錯了,這位學(xué)生邏輯思維有問題。筆者詢問該生:“你是怎樣想的?”學(xué)生回答:“因為原價是10元,打折是9元,每條少1元……”筆者根據(jù)回答意識到,該生計算邏輯沒錯,僅是形式化轉(zhuǎn)化上出錯。然后,筆者讓該生以“購買6條”為例,具體代入表達(dá)式試一試,他立馬意識到“忘記了將數(shù)量與價格相乘”,很快將表達(dá)式修正為n*10-(n*1)。
綜上所述,“漸進(jìn)演化”本身也可以視作一種因?qū)W而定、分而治之的教學(xué)算法,它構(gòu)造了一種逐層進(jìn)階的算法學(xué)習(xí)路徑,能促進(jìn)算法理解,提升學(xué)生的學(xué)習(xí)成就感。置身于有意義的問題情境,在抽象與建模的浸潤中,觸摸程序的誕生與優(yōu)化,通過“做”與“悟”,讓每一個學(xué)習(xí)者都能真切地感受到,人可以形式化地表征問題解決的思維,而“形式化”可轉(zhuǎn)換為“自動化”,這就是算法教學(xué)中的深邃而又迷人的魅力。
參考文獻(xiàn):
[1]鐘啟泉.深度學(xué)習(xí)[M].上海:華東師范大學(xué)出版社,2021:16.
[2]布魯納.布魯納教育論著選[M].邵瑞珍,張渭城,譯.北京:人民教育出版社,2018:129+183.
作者簡介:費海明,浙江省寧波市江北區(qū)教育局教研室信息科技教研員,正高級教師,曾獲全國信息科技優(yōu)質(zhì)課特等獎,寧波市拔尖人才,浙江省優(yōu)秀教研員,人教社信息科技教學(xué)指南編者,浙江省信息科技學(xué)科評價專家,浙江師范大學(xué)兼職教授。