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