□孫秀芝 胡泉鎬
計算思維是個體運用計算機科學的思想方法來解決問題的一系列思維活動,是信息技術學科核心素養(yǎng)的四個核心要素之一。隨著教材的再次修訂,體現(xiàn)信息技術學科本質內容,指向計算思維培養(yǎng)的知識模塊的比重大幅提升,這也給教師開展算法與程序設計教學帶來了更大挑戰(zhàn)。在實際教學中,邏輯不清、脫離算法、思維受限是“算法與程序設計”模塊初學者身上的常見問題,主要原因在于其對算法的關鍵步驟、程序的關鍵指令、作品的關鍵差異把握不準。
鑒于此,教師從“算法與程序設計”模塊教學的三個關鍵點入手,通過梳理關鍵步驟、尋找關鍵指令、聚焦關鍵差異,采用合適的教學策略改進當前課堂現(xiàn)狀,幫助學生逐步養(yǎng)成計算思維。
對于算法的關鍵步驟,沒有厘清其邏輯結構,是導致分析問題時思路混亂的主要原因。雖然教師會列舉生活中學生耳熟能詳?shù)陌咐?,但是學生在獨立思考時還是會遇到障礙。因此,教師需要引導學生對問題進行分解,抓住解決問題的關鍵步驟,并用自己的理解加以描述,以此使思維更清晰。
對于邏輯思維處于發(fā)展階段的初學者來說,讓其分析計算機程序的算法并不容易,即便是相對簡單的程序也是如此。因此,教師在引導學生分析一個具體問題的算法時,要把握兩個要點:一是分析具體問題中包含的主要角色;二是將主要角色所要進行的關鍵步驟進行羅列,而對于次要信息予以暫緩考慮。分析過程可以借助一定的可視化工具來支持,比如思維導圖、表格等,但學生須用自己的語言來表達解決問題的思路。
【案例1】《詢問交互》一課算法分析
課堂上,教師提供了《中國詩詞大會》的視頻片段,請學生利用表格分析一次問答程序經(jīng)歷的步驟。(提示:只考慮關鍵交互過程)具體如表1。
表1 一次問答的關鍵步驟表
學生通過反復觀看視頻,理解計算機與用戶交互的過程,在表格中羅列出目標程序所涉及的兩個角色——“計算機系統(tǒng)角色”“用戶”。由于“用戶”就是使用者本身,不需要在計算機中設置,所以只需要添加一個角色——“計算機系統(tǒng)角色”。接著,學生對于實現(xiàn)目標程序所需要的關鍵步驟進行分解:第1步是“計算機系統(tǒng)角色”出題,第2步是“用戶”輸入回答,第3步是“計算機系統(tǒng)角色”判斷用戶回答是否與答案一致,第4步是“計算機系統(tǒng)角色”根據(jù)判斷結果輸出不同的結果提示。
通過主要角色、關鍵步驟的分析訓練,學生初步學會了抓住問題的核心,將主要精力集中于解決程序中最重要的“交互”問題,將次要問題(角色的初始化、程序的提示語、結果提示時的角色造型變化等)的處理調整到后續(xù)優(yōu)化環(huán)節(jié),以此保證課堂的高效性。
用流程圖描述算法,能更形象、直觀地表示算法,便于學習者理解,也便于指導學習者進行程序的編寫。在學生初學流程圖這一描述方式時,教師依然需要引導學生抓住關鍵步驟,以此降低學習難度,從而幫助學生順利理出一個相對完整的流程圖。教學時,為了引導初學者入門,教師可以借助圖形填空的方式降低難度,讓學生將關鍵步驟組合成程序的流程圖。
【案例2】《詢問交互》一課算法分析
仍以問答程序中的算法分析過程為例,教師為學生提供學習單,請學生將右側的步驟拖到左側的線框內,完成一次問答程序的流程圖,如圖1。
圖1
借助這樣的半成品流程圖,學生參與繪制的難度大大降低,絕大部分學生都能順利完成任務。在拖動的過程中,學生一邊理解算法,一邊熟悉流程圖符號。
實踐證明,利用圖形填空的方式,能更有效地幫助初學者掌握利用流程圖表示算法的方法,幫助學生建立對程序關鍵步驟的理解。有了程序流程圖,程序的編寫就更容易操作。需要注意的是,教師在設計學習單時,可以有意識地將流程圖的關鍵步驟進行“挖空”處理,從而引起學生對關鍵步驟的關注,為后續(xù)教學關鍵指令做好鋪墊。
初學計算機課程的學生尚未建立流程圖與程序之間的對應關系,對于流程圖中的關鍵步驟使用何種關鍵指令存在認知上的困難,從而導致程序編寫的過程脫離流程圖。因此,教師需要幫助學生在程序流程圖與計算機程序的各條指令間建立聯(lián)系,將算法真正落實到程序的實際腳本當中。
隨著算法越來越復雜,程序設計中所涉及的新指令也隨之增多。新指令的學習是除了算法分析外的另一個教學難點。因此,教學中,教師需要把握兩個要點:一是要給予學生充分的時間學習新指令,讓學生經(jīng)歷探究指令的過程;二是要將流程圖與指令進行一一對應,使知識產生前后的聯(lián)系。
【案例3】《列表存儲》一課程序設計
在分析完問答程序的升級版——隨機出題的問答程序后,流程圖隨即形成。教師讓學生選擇所需要的指令到腳本區(qū)。學生新建了“i”“得分”兩個變量,“問題”“答案”兩個列表,“在()和()之間取隨機數(shù)”“詢問”“回答”“如果…那么…否則……”等指令,將其拖到腳本區(qū)。
教師進一步引導:變量i的取值范圍是多少?
生:有多少題目,就取到多少。
師:用“在()和()之間取隨機數(shù)”怎么表示?
生:表示成“在(1)和(題目數(shù)量)之間取隨機數(shù)”。
師:“題目數(shù)量”有沒有更好的表示方法?請你去“變量”類指令的面板區(qū)找一找。
經(jīng)過一番查找,學生找到了關鍵指令。
這時,教師請學生鉤選變量“i”前面的方框,使其顯示,再單擊指令觀察變量“i”的值有什么變化。
圖2
通過教師的提問引導,學生提出猜想、驗證猜想,理解了新指令“隨機數(shù)”的含義。同樣,對于其他幾個關鍵的新指令,教師也可讓學生先行探究、嘗試,從而實現(xiàn)知識的內化。
在這個過程中,教師以流程圖為藍本,一步步引導學生對其中的關鍵步驟所需要的指令進行探究、嘗試、驗證。學生經(jīng)歷了新知識的發(fā)現(xiàn)過程,將流程圖與指令、腳本聯(lián)結在一起,整體梳理了程序設計的思路。
教師也可以通過讓學生給程序腳本添加注釋的方法,檢查學生對關鍵指令的理解程度。一般的程序設計軟件都帶有給腳本添加注釋的功能。按照教師的要求,學生可以在關鍵指令處添加注釋,寫明所用指令的用途。
【案例4】《列表存儲》一課程序設計
以《列表存儲》一課為例,關鍵指令的注釋如圖3。
圖3
通過正向將流程圖與關鍵指令進行匹配,反向給關鍵指令添加注釋的方式,學生經(jīng)歷了兩次程序的梳理,對流程圖和程序腳本之間的對應關系有了更深刻的理解,對關鍵指令的使用方法也更明確,知識得以內化。
缺乏能激發(fā)真實需求的情境是導致學生較難提出合理化改進建議的原因之一。一方面,受到思維局限,學生對于自身制作的程序設計作品難以進行自我更新;另一方面,學生對于一些新指令的陌生感則限制了想象力的發(fā)揮。因此,在作品的改進設計環(huán)節(jié),教師要有意識地創(chuàng)設能激發(fā)真實需求的情境,多角度發(fā)散學生的思維,鼓勵學生說出自己的改進思路。
對于程序設計的優(yōu)化,學生思維受限的原因之一是缺少創(chuàng)新角度的點撥。課堂中,如果教師沒有提前設計學習支架,有效提示學生進行程序腳本的改進,而是直接讓學生自由發(fā)揮,往往很難達到預期的效果。在程序設計的拓展環(huán)節(jié),教師可以設計能激發(fā)學生探索新指令、解決新問題的合理情境或任務,讓學生找出關鍵差異,然后帶著問題進一步探索。
【案例5】項目學習“有趣的圖形”中程序設計的改進
項目學習“有趣的圖形”中,學生通過循環(huán)嵌套的方式,學會了畫出一個由基本圖形旋轉而成的組合圖形。在后續(xù)的項目學習中,教師引導學生逐步優(yōu)化程序,并通過一組圖形的變化,尋找關鍵差異,學習新指令,從而不斷地將“過程”這一程序設計中的重要概念學實、學透。
1.圖形組的第一次變化(關鍵差異:基本圖形)
教師請學生說說腳本應該如何修改。
學生:將每一段畫圖形的腳本中“內層循環(huán)”改成畫正方形的腳本,即重復4次,右轉90度。
教師:這樣修改需要改動多處,有些麻煩,使用“過程”,一次修改即可。
(學生學習“過程”指令的運用)
學生:把三角形這一“過程”的名稱改成“正方形”,然后把過程腳本修改一次,主程序中的“過程”指令就自動改過來了。
2.圖形組的第二次變化(關鍵差異:基本圖形及其邊長)
學生已經(jīng)可以使用學過的“過程”指令來修改基本圖形的變化,但邊長的變化學生尚未掌握。
學生:每個正五邊形的邊長都不一樣,每次都要去修改正五邊形這個“過程”。
教師:“過程”是一段固定的、可多次使用的腳本,一經(jīng)定義,一般不隨意修改。嘗試添加一個參數(shù)“邊長”,有什么發(fā)現(xiàn)?
學生:有了參數(shù),就可以在帶參過程“正五邊形(邊數(shù))”里輸入數(shù)字,自由控制邊長。
3.圖形組的第三次變化(關鍵差異:基本圖形的邊長、邊數(shù))
通過前期優(yōu)化程序的經(jīng)驗,學生能夠想到再增加一個參數(shù)“邊數(shù)”,使用帶參過程“正多邊形(邊長)(邊數(shù))”來解決這個問題,其對“過程”的認識進一步豐富。通過三次優(yōu)化,學生經(jīng)歷了發(fā)現(xiàn)差異、學習新指令、修改腳本的過程,從而實現(xiàn)了程序迭代優(yōu)化。學生對于“過程”這一新知識點的認識由表及里,由淺入深,對于“過程”的應用也更加得心應手。
在優(yōu)化程序的過程中,學生思維受限的另一個原因是缺少同伴間的交流分享。在分享作品、改善作品的過程中,抓住關鍵差異,聚焦優(yōu)化程序的切入點是非常重要的。此時,教師需要精心設計互學分享的支架,幫助學生打開思路,表達創(chuàng)意。
【案例6】《創(chuàng)編游戲》一課中的程序優(yōu)化
在教學《創(chuàng)編游戲》一課時,教師請學生先自主嘗試,在完成課本要求的基礎上,改進自己的游戲程序。一段時間后,教師請學生帶著學習單找找其他同學的作品,記錄變化。如圖4,生1在游戲中設置了多條路徑;如圖5,生2在游戲中添加了障礙物。
圖4
圖5
通過觀察記錄,學生發(fā)現(xiàn)了同伴設計中的亮點,記錄下了互學體驗,新的創(chuàng)意在交流中不斷迸發(fā),作品在相互借鑒中不斷臻于完善。
實踐證明,運用梳理關鍵步驟、尋找關鍵指令、聚焦關鍵差異等策略,能夠在一定程度上鍛煉學生的分解思維、算法思維、迭代思維,從而幫助學生更高效地達成學習目標,形成計算思維。