譚國聚
摘要:程序設計在小學生信息技術課堂開展,已經得到了廣泛共識,同時,教學過程中也伴隨著各種問題出現。本文針對問題,提出改進辦法,即小學生程序設計課堂教學應圍繞算法結構和特定算法逐步開展,并概括總結以算法學習為核心教學內容的幾點優(yōu)勢。
關鍵詞:算法結構;程序理解;算法思維;淺層學習;深層學習
中圖分類號:G434 文獻標識碼:A ?論文編號:1674-2117(2021)S2-0045-03
問題提出
目前,程序設計的教學內容已經深入到小學的信息技術課堂,編程的主要軟件是scratch圖形化編程軟件。教師基于課程知識結構體系,依次講授該課程知識點,課堂教學內容以項目式為載體,大多數知識點輔以相應的例子講解,通過學習相關的命令模塊,提升學生編寫腳本的能力;但從學生的角度來看,認知程序設計的過程是基于案例的認知,通過簡單拖拽命令模塊,把命令模塊拼接到一起,這樣就完成了一個程序案例的編寫。通過這種方式學習程序設計存在以下三個問題:
(1)學生在學習過程中,分不清重點,往往“胡子眉毛一把抓”,學生學得很累,最后整個課堂教學效果不是很理想。
(2)教師單方面知識輸出,學生被動接受。教師與學生之間缺少雙向交流,難以激發(fā)學生的學習興趣,導致學生積極性、主動性不足,一旦學生在學習過程中受挫,就容易產生畏難情緒,造成厭學,甚至棄學。
(3)學生大量模仿操作,缺乏理解,過一段時間會忘掉相關的知識,同時缺乏對案例涉及到的知識點訓練過程。學生在獨立編寫程序腳本的過程中,遇到問題,沒有解決問題的思路和方法,提升算法思維能力淪為“紙上談兵”。
問題解決辦法
結合以上問題,在實踐中,筆者把課堂教學內容調整為以“算法結構和特定算法”為核心,輔以一定的針對算法的操作練習,運用講練結合的課堂模式,為學生獨立編寫程序、解決程序設計中出現的問題提供了思路和方法,收到了很好的教學效果。
1.基于算法結構的教學內容設計——以重復執(zhí)行舉例說明
在scratch中,算法結構分為順序、重復執(zhí)行、判斷和自定義模塊程序結構。在一個案例中,很少會使用單一的程序結構,而是結合幾種算法結構綜合使用。教師在整體分析案例的基礎上,提煉出要講的算法結構,課堂上設計任務,進行針對性練習操作。
(1)結合具體案例提煉算法結構,幫助學生認知算法結構
例如,在講解大魚吃小魚的程序設計時,在講解之前,針對角色的造型和移動的程序設計,提煉重復執(zhí)行的算法結構,強調學生對重復執(zhí)行的認知,明白重復執(zhí)行程序設計中能夠帶來什么樣的程序效果。以后再遇到任何程序設計中角色的造型變化和移動都可以采取類似辦法,不至于做得五花八門,沒有頭緒,為學生操作提供了思路和方法——提升了算法思維能力。
(2)針對程序設計中出現的問題,引導學生應用算法結構解決問題
在課堂實踐中,操作任務的難度增加,教師應深入理解算法結構,引導學生應用算法結構來解決程序設計中出現的問題。例如,在講解如何讓程序停止的設計時,學生提出多種不同的方案,教師引導提示,如何通過算法結構的設計來停止程序,那么學生最容易想到,碰到角色,讓程序停止,用到判斷的算法結構解決問題。還有的學生提出如果變量累加到一定的數值,就讓程序停止。這兩種辦法都涉及用算法結構解決問題。在實踐中,無論采取哪種方式來停止程序,都沒有解決程序結束的問題。特別是通過變量解決問題,出現了一個問題,當變量值累加到一定的數值時,程序并沒有停止,變量還在繼續(xù)一直累加。通過和學生互動,驗證運行結果,加上重復執(zhí)行的算法結構,問題得到很好的解決。
(3)針對程序設計內容,通過自定義模塊,優(yōu)化算法結構,提升算法思維能力
在講解“雞兔同籠”的程序時,用常規(guī)的思路輸入信息、處理信息和輸出信息,學生在完成相關的操作之后,進一步通過自定義模塊講解操作,把程序分解成三個自定義模塊,分別是輸入信息、處理信息和輸出信息模塊,讓學生優(yōu)化已有的程序設計,這樣不僅能夠幫助學生理解程序結構,而且能夠幫助學生很好地理解算法,使算法思維能力的提升落實到具體的程序設計操作中。
算法是程序設計的核心。在一個程序設計中,算法結構的構建是編寫好程序設計的基礎。圍繞算法結構開展的教學是教學中不可缺少的內容。在小學生程序設計的課堂教學實踐中,設計算法結構、有意識地引導學生應用算法結構,都能夠很好地解決程序設計中出現的問題,提升算法思維能力。
2.特定問題設計特定算法的教學——以列表運行舉例說明
著名計算機科學家Wirth提出“算法+數據結構=程序”。算法是解決“做什么”和“怎么做”的問題,數據結構是加工對象。不了解算法就談不上程序設計。隨著教學內容的增加,程序設計學習的難度增大,因此,教師不僅要學會通過算法結構來解決問題,還要對特定問題設計相應的算法開展教學。
例如,列表(scratch 1.4版本稱鏈表)是一種數據結構,那么如何運行列表數據結構,需要特定的算法。在課堂實踐中,不僅要注重腳本的講解,更要對具體程序設計目標要求和具體任務進行分析,強調編寫腳本的思路和方法,并演示驗證思路和方法。不是教師單方面講解相關的命令模塊,而是師生共同推導算法的結構,幫助學生建構列表運行算法的結構,理解列表運行算法的結構,記住列表運行算法的結構,有效地提升學生的算法思維能力。
課堂實錄(點名冊的程序設計)
師:通過一條一條運行列表中的項目數,那么我們班有48名學生,這樣一條一條按照順序羅列下去,列表運行非常煩瑣,那么怎樣優(yōu)化這個程序結構?
生:通過重復執(zhí)行,可以讓列表的項目運行!
教師邊演示,邊操作,把重復執(zhí)行的命令拖到腳本區(qū),驗證列表是否能夠按照順序運行,結果是運行,但是,不是點完姓名就完全停止,而是列表中的項目反復運行,沒有優(yōu)化。
生:對重復執(zhí)行的次數不要有限制,可以重復執(zhí)行列表中的項目數。
根據學生所說,教師演示操作,并驗證程序的結果,還是不行,不是我們想象的結果。怎么辦?(這里已經通過演示和驗證幫助學生建構重復執(zhí)行算法的結構)
師:能不能聲明一個變量,來幫助我們完成列表的運行?(演示操作聲明一個變量)。
師:我們觀察一下,當我們把學生名單存儲到列表時,添加項目數,會發(fā)現計算機給每一個項目默認一個位置,這個位置是按照順序添加。那么,我們通過變量的累加讓計算機讀取位置,這樣就可以運行列表了。就像我們在班里點名,點到學號就知道是誰一樣。
變量的增加的目的是什么?我們?yōu)槭裁匆暶髯兞坎拍軌蜻\行列表?變量的累加的目的是什么?這等一系列的追問,促使學生發(fā)生思考,這個過程就是學生學習知識的過程,算法思維的培養(yǎng)搭載了知識的學習,這樣的課堂是才真正的課堂學習。教師進一步講解,變量的累加,是通過給變量賦值,從而建立和列表項目數的關系,就像點學號,我們通過學號的讀取,就知道對應的同學一樣。變量的累加后的賦值,和列表項目所在的位置對應,變量累加的值在和列表中對應的項目數的位置,這樣就可以讀取列表的項目數。通過梳理程序運行過程,不停地驗證,這樣逐步建構列表運行的模型,加深重復執(zhí)行和變量的使用方法,確立變量累加和列表中項目數的位置的關系,便于學生獨立做練習,完成相應的操作。
師生共同理解程序、驗證程序的過程在程序設計課堂中尤為重要,這是提升算法思維的有效辦法。師生共同閱讀程序,厘清思路、推導算法,建構算法結構的過程,就是幫助學生理解程序、理解算法的過程。學生在“潤物細無聲”中提升了算法思維能力。
算法為核心的課堂教學的優(yōu)勢
首先,對于算法的學習,是重點突出的課堂,有利于學生學習和記憶。師生共同推導運行算法的結構(如列表運行)、建構的模型,學生清楚,記憶也非常方便,無論在什么時候遇到列表運行,無論是靜態(tài)列表還是動態(tài)列表,都可以用到同樣的辦法,學生能夠很快解決問題,能夠獨立編寫好關于運行列表的腳本。
其次,提升了對程序理解的意識,為下一步獨立編寫程序打好基礎。根據問題建立模型、設計算法并編寫程序解決問題,是算法思維的顯性體現。程序理解分為認讀程序、編寫程序、驗證程序,幫助學生從感性認知上升為理性認知。通過解釋程序腳本的含義,讓學生修改程序,體驗不同的運行結果,引導學生理解程序是怎樣解決問題的,體會程序中蘊含的算法思維要素,為下一階段獨立設計算法、編寫程序做好鋪墊。
再次,算法學習,使程序設計的學習成為深層學習,提升算法思維不再是“紙上談兵”。算法的學習是深層學習,學生基于對所學知識的理解,主動地完成程序設計知識的自我構建,建立起程序設計知識與算法思維之間的關聯性,能夠運用算法完成相應的操作任務,運用算法進行程序設計腳本的遷移。程序設計深層學習不同于淺層學習,淺層學習通過反復模仿,通過記憶的方式掌握一些最簡單、最基本的技能,學生是被動地接受知識,是為了應付學習任務而實施的學習行為,學生對所學知識缺乏理解。算法學習是在淺層學習基礎上,讓學生注重學習體驗,積極主動地學習知識,通過自主學習,不僅完成程序設計知識的積累,而且在積累知識的過程中,通過自主體驗,批判地獲得知識,將操作和算法思維訓練有效結合。
最后,算法學習,通過結合數學等跨學科的學習,有效提升學生綜合素質。例如,在程序設計中結合一些經典的數學命題、編寫音樂等教學案例展開,課堂不僅是一節(jié)信息技術的課堂,也是一節(jié)跨學科綜合實踐課堂,更是一節(jié)通過信息技術解決問題的實踐項目,這樣的學習,可以有效促進學生綜合素養(yǎng)的提升。
結語
程序設計的學習越來越受到重視,而且,程序設計作為信息技術學科特有的知識體系,是其他學科無法替代也無法比擬的。未來,小學生程序設計學習,無論是在內容上還是在課堂學習的模式上,都會發(fā)生變化。以教授算法為核心的教學內容將會促進小學信息技術學科程序設計教學內容迭代發(fā)展,促進小學生算法思維能力逐步提升。
參考文獻:
[1]譚浩強.C語言程序設計(第四版)[M].北京:清華大學出版社,2010.
[2]李必信,鄭國梁,李宣東,等.軟件理解研究與進展[J].計算機研究與發(fā)展,1999(08).