王震

摘要:在高中信息技術的程序教學中,很多教師采用程序填空的方法,雖然降低了難度,但學生的學習體驗效果就會差很多。那么如何合理引導,降低程序的實現難度,同時也能積極發揮學生的主觀能動性,讓學生在自主探究中完成自己的作品。筆者結合多年教學經驗,認為對于復雜的教學用例,可以采取分步化、模塊化、預處理化等教學策略,讓教學用例“高舉低打”,實現學生程序設計能力的提升。
關鍵詞:教學用例;分步化;模塊化;預處理化
● 分步化策略
程序設計是一門相對抽象的學科,教師需要為學生提供一些可以實踐的任務,讓他們在多次的操作體驗中掌握語法的使用,構建起知識體系。但對初學者來說,如果一個大任務一次性提出來,當學生缺乏編程經驗時會難以接受。如果一個任務是在教師手把手的指導下完成的,學生失去探索的機會。因此可以考慮進行大任務有序分步處理。在具體操作中,教師將任務分解為有代表性的、相互獨立的子任務,考慮子任務之間的關系和學生的認知順序,將子任務依次展開,學生通過自主探索,一一實現,最終完成整個作品。
例如,在“對象、屬性、事件”一節中,如果教師只對每個概念進行舉例和闡述,讓學生明白三個概念及意義,效果不理想,而采用任務驅動法,讓學生根據任務逐一實踐體驗將達到事半功倍的教學效果。以下是筆者在這一節教學時選用的任務,以及分步化方法。
設計一個程序,要求:單擊按鈕時顯示“Hello 老師”,單擊窗體時顯示“Hello 大家好”,單擊標題時顯示“Nice to meet you”,雙擊窗體時顯示還原為“Hello world”。
這個用例的優點是代碼量小,容易實現,同時程序的變化也比較豐富,容易激發學生的學習興趣。然而,此時學生對各種對象、屬性、事件還沒完全理解,這樣的任務對于大部分學生來說是相當困難的。因此,在實際教學中,首先提出的任務是:單擊“改變”按鈕時,顯示“Hello 老師”,因為單擊按鈕是最常見的一個操作,以此入手簡化難度。通過引導使學生對上述三個概念有了直觀印象后,再提出“單擊窗體”的任務,并引導學生分析現在事件的對象發生變化,變為“窗體”了,應該編寫Form1.Click事件。接著提出“單擊標簽”任務,此時,幾乎無需教師指點,學生已經明白怎么做了。最后,再提出“雙擊窗體”的任務,學生用剛才的方法不能解決問題,此時,教師引出雙擊事件“DblClick”。如此,逐一擴展對象和事件外延,對于學生準確理解這些概念很有幫助,通過這樣一個任務,學生對VB面向對象、事件驅動的特性感悟更深。
任務的分步化,要考慮將任務分成哪幾步,以什么順序展開,教師要盡量考慮學生現有水平和任務本身順序特點,設計出符合認知習慣,便于知識構建,由簡到難的任務序列。
● 模塊化策略
模塊化是指解決一個復雜問題時自頂向下把系統劃分成若干模塊的過程。程序設計有兩種順序,一種是自頂向下,一種是自底向上,對于初學者來說,模塊化自頂向下更容易接受,也更符合程序項目設計的一般步驟。自頂向下,往往先將任務劃分成幾個模塊,每個模塊還可以劃分成更小的模塊,學生只要將各模塊一一編程實現,就會得到最終作品,模塊化降低了問題解決的難度。
例如,綜合實踐課時,筆者布置了“益智游戲”的任務,任務為:在下頁圖中,一開始部分電燈是滅的,有隨機的若干盞燈是亮的。通過程序能顯示用戶操作已用總時間。游戲的目標是用最少的開關操作次數將所有電燈變亮。
分析發現,這是一個相當復雜的任務,如果不加引導學生會無從下手,因為學生還缺乏模塊化的思維。在此,將任務分解為三個模塊:“初始化模塊”、“計時模塊”、“用戶響應模塊”。其中,第三部分是本任務中最重要,也是最復雜的部分。教師引導學生體驗:處理復雜問題最有效的方法就是模塊化,將一個大任務分解成幾個小任務,將一個大問題化解為幾個小問題。將本模塊分成幾個子模塊:燈和開關狀態控制模塊、操作步數累加模塊、游戲是否完成的判斷模塊。主要子模塊實現描述如下:
燈和開關狀態控制模塊:
If Index <> 1 Then
For i = Index To 10 Step index
If Image1(i).Visible = False Then
Image1(i).Visible =true
Command1(i).Caption ="關"
Else
Image1(i).Visible = False
Command1(i).Caption = "開"
End If
Next i
Else
If Image1(1).Visible = False Then
Image1(1).Visible = True
Command1(1).Caption = "關"
Else
Image1(1).Visible = False
Command1(1).Caption = "開"
End If
End If
操作步數累加模塊:
s = s + 1
Text1.Text = Str(s)
游戲是否完成的判斷模塊:
f = True
For i = 1 To 10
If Image1(i).Visible = False Then f = False
Next i
If f Then timer1.enabled = false
模塊化是程序設計中一種很重要的設計理念。對于初學者來說,模塊化的意義更在于減少認知的復雜度,構建項目工程理念。教師在教學中要合理地引導,把大任務劃分成幾個模塊子任務,如有必要,子任務可再劃分成更小的子任務。
● 預處理化策略
有一些任務涉及教學指導意見之外的內容,這些內容短時間之內學生無法準確掌握,而且涉入太深會影響學生認知,對此,可以采取預處理化的方式,即預先提供類似半成品的程序框架,與前面提到的半成品不同,這里涉及的語句比較少,對學生程序編寫能力的訓練影響不大。此處的重點在于正確把握一個度的問題,有些知識讓學生學習可增加知識面,有些知識以學生目前的認知基礎會產生恐懼及退縮,甚至會影響學習的興趣。因此,我們可以簡單明了,告訴學生其功能就行了。
例如,在教學用例“抽取幸運學生”中,圖像需要動態顯示,這需要使用loadpicture函數,該函數參數往往比較復雜,我們可以不深入剖析。任務描述如下:設計程序界面如下,單擊“開始”按鈕時,快速隨機顯示一張張學生照片,同時按鈕變為“停”,單擊“停”時抽取一名學生。
代碼如下:
Private sub timer1_timer()
Ramdomize
Xh=int(rnd()*40)+1
Image1.picture=loadpicture(app.path &”\” & xh & “.jpg”)
End sub
教師要明確哪些內容要預先提供,哪些內容要留給學生發揮,這就要求教師清楚本學科的知識體系和學生的認知水平。
以上是筆者在較復雜教學用例處理時的三種思路,筆者一直主張在教學用例的選擇上,不能因為考慮學生的基礎而只選擇一些學生“力所能及”的任務,忽略吃不飽的學生。教師幫一幫,學生跳一跳,就能夠完成,實用性、趣味性很強的程序更能喚起學生的學習積極性。而且,這些用例拓展了知識的深度和廣度,豐富了學生的體驗,更能激發學生的想象力和創造力,如果學生完整地架構過一個程序,他就能夠勇敢地嘗試獨自設計一個程序。