林挺
【內容摘要】《信息技術基礎》模塊中調整變化最大的是算法部分,對算法基礎要求作了增強。本文結合教學實踐,探討了《算法與程序設計》模塊有效教學的有關問題。
【關鍵詞】信息技術 以學定教 寓教于樂 重視實踐
高中信息技術深化課程改革,將《算法與程序設計》模塊中最基礎、最核心的部分篩選出來,作為算法與程序設計基礎,納入到《信息技術基礎》模塊中,巧妙地將兩者合“二”為“一”,目的是為了突出信息技術學科的本體性知識。那么,如何把抽象而枯燥的算法與程序設計知識教得生動活潑又有效呢?
一、以學定教,緊密聯(lián)系實踐促進學生理解
1.實施啟發(fā)教學,引導學生仔細觀察、分析問題
模仿QQ軟件的登錄界面設計的VB實例是人品計算器。首先教師展示人品計算器的界面,學生欣喜地在自己的機器上運行程序,輸入一個名字后按“確定”按鈕得到人品值。接著教師提出問題,作品中共包含幾個對象?隸屬于幾個控件類?然后,請學生回顧操作流程,記錄程序界面上的變化,并描述作品的功能:①文本框1中顯示提示文字“請輸入姓名”,字體顏色為灰色。②單擊文本框1后,“請輸入姓名”消失。當輸入姓名時,字體顏色由灰色變成黑色。③輸入姓名后,即文本框1不為空,單擊“確定”按鈕,在文本框2中顯示人品值(兩位的隨機整數(shù)),否則不做任何操作。④單擊“清除”按鈕,清除文本框1和文本框2中的內容。最后,要求學生設計界面,添加相應的對象,并根據(jù)剛才得出的功能編寫對象的事件處理過程代碼,實現(xiàn)問題的解決。
2.把難點內容、專業(yè)術語、理論知識具體化、感性化、趣味化
Visual Basic是一種可視化、面向對象、以事件驅動為運行機制的程序設計語言。對象、屬性、方法、類、事件、事件處理過程是VB的基本概念,這些術語比較抽象,學生理解上會有困難,因此要用通俗的語言,結合VB實例進行講解。對象是客觀存在的事物,一個人、一個按鈕都是一個對象。事件是由用戶在對象上激發(fā)的一種動作,即你做了什么動作。
3.回歸算法本質,聯(lián)系實踐促進概念的理解和掌握
在《算法與程序設計》模塊教學中,面向對象程序設計的基礎知識是一個很大的難點,特別是對象、屬性、事件這些概念,往往老師講了兩三遍,學生還是似懂非懂。當代認知心理學家安德森把人類掌握知識的表征形式分為:陳述性知識與程序性知識。陳述性知識學得快,忘得也快,這也說明能通過課堂實踐進行教學的內容要盡量在機房中通過實踐解決問題。而程序性知識一旦學會,就不大會被遺忘。從兩者的聯(lián)系上來看,陳述性知識是獲得學習程序性知識的基礎。學生在學VB前,已經從畫圖和PS軟件中知道了工具箱的作用和用法,這為他們學習新的知識提供了保障。同時,程序性知識的獲得也為獲取新的陳述性知識提供了可靠的保證。學生根據(jù)觀察出現(xiàn)在窗體上的各類對象的屬性窗口以及代碼窗口的內容,理解并掌握了類——對象,對象 ——屬性,對象——事件這些抽象的概念。例如在機房上課,可以不像以前那樣先介紹VB界面,而是先讓學生自己觀察VB界面,不難發(fā)現(xiàn)它和以前接觸過的畫圖軟件、PS軟件一樣,都有工具箱,工具箱的用法大家都知道,那就自己動手試試看吧。很快,學生根據(jù)要求在窗體上拖出了各類對象,并按照提示修改了相應的屬性,在這個過程中,教師提醒學生觀察屬性窗口,體會“同類對象具有相同的屬性,不同類對象具有不同的屬性”、“同類對象雖然有相同的屬性,但其屬性值不一定相同”。第二步,教師演示編寫一個Form1_ Load ()過程,利用代碼再次針對各個對象修改相應的屬性,再讓學生自己動手試一試。這樣,“對象的屬性值可以在設計時設置,也可以在運行時修改”就不難理解了。第三步,讓學生觀察代碼窗口中的首尾兩行,再運行,引導學生理解Form1_Load()過程中的代碼是在對象Form1裝載時被運行的。類似的,請學生編寫Commanad1_Click()過程和Text1 _Change()過程,并通過“啟動”運行加深理解。
二、寓教于樂,運用實例有效串聯(lián)知識點
1.用小游戲引導學生進入程序的殿堂
程序設計的教學中,學生遇到的第一個問題可能就是分支結構的if語句,其中涉及的語法知識要求又多,即要講授有行if語句,又要講授列if語句,而且講授例子又比較枯燥,比如書本上的實例:“二元一次方程”。對于這個數(shù)學例子學生非常熟悉,很容易產生倦怠心理。而如果選擇的題目過于復雜,學生又難于理解,從而根本不從談起學生的興趣,最后變成了乏味的知識傳授。怎樣改變這種乏味的教學,提高教學的有效性,就成了教學難點,筆者設計了一個電視中的小游戲:“幸運52猜價格”,先在幻燈片中顯示一個價格在1~100元的日用品,再通過事先制作好的小程序來讓學生在5次內猜出商品的價格,根據(jù)學生所猜測的數(shù)值多少,電腦提示“太高了;太低了;不錯哦,竟然蒙對了;你永遠也猜不到了!”在經過幾輪的參與后,讓同學首先思考第一問題,怎樣讓電腦實現(xiàn)判斷“太高了;太低了;不錯哦,竟然蒙對了!”先給出一個產品的實際價格,并讓學生試著用偽代碼或自然語言進行描述。這里采用實際的價格,而不是采用隨機數(shù),即避免了“隨機整數(shù)生成”難點對于本節(jié)課中if語句的干擾,又讓學生有一種真實的感覺,從而即分散了教學中的難點,又提高了學生的學習興趣。教學中建議先用行if語句來進行講授,讓學生了解每一個判斷的過程,再逐步提升到列if語句,再通過計算機來進行實現(xiàn)。等學生掌握后再來提第二個問題,怎樣來實現(xiàn)5次的限制,從而實現(xiàn)“你永遠也猜不到了!”從而推出計數(shù)及判斷語句的嵌套,并用程序進行實現(xiàn)。這樣由淺入深的設計即有利于學生理解,又可以讓學生通過這種游戲的例子,寓教于樂中逐步體會判斷語句的用法。
2.用有意義的VB實例吸引學生的眼球,提高課堂教學的趣味性
將算法與程序設計跟日常生活聯(lián)系起來,通過貼近學生生活的實例,拉近師生之間的距離。比如:使用隨機函數(shù)制作人品計算器,利用圖像框與計時器控件制作動畫播放器,設計一個簡易計算器完成加、減、乘、除基本運算,利用枚舉算法逐一列舉實現(xiàn)密碼破解,利用枚舉算法統(tǒng)計2001到2400年間的閏年,利用解析算法推導公式計算出租車的費用。
3.運用化整為零的策略借助VB實例串聯(lián)基礎知識點
由于信息技術課每周二節(jié),時間間隔較長,學生上下節(jié)知識串聯(lián)難度較大。針對這種情況,我想能不能利用信息技術課的特點,讓學生在實踐中學習,在實踐中掌握鞏固相關知識點。具體做法是每節(jié)課以案例學習為主,各個知識點用項目進行管理,對教學進行重新整理,將各個知識點落實在例子中,并通過不同的實例鞏固各個知識要點。例如在第一節(jié)的例子中,要求圓面積,這里涉及到的兩個變量S和R均為實數(shù)(Double)。在第五節(jié)的例子中,求前N個自然數(shù)之和,這里要求學生掌握整數(shù)型變量(Integer),學生編完程序,調試成功后,再要求把程序改為求前N個自然數(shù)之積,這時問題出現(xiàn)了:“數(shù)據(jù)溢出!”然后教師順勢引出長整型(Long)、單精度實數(shù)型(Single)。雖然在不同的時間,不同的例子中出現(xiàn)不同的數(shù)據(jù)類型,但學生們都掌握了什么時候該用什么數(shù)據(jù)類型的依據(jù):程序設計要考慮程序運行時變量占用的內存空間,夠用就好。
把知識點分解到例子中學習,還要注意小步調前行。這樣一方面是對前幾節(jié)課所學內容的鞏固,又學了新的知識。即使在同一節(jié)課中,安排的內容也要循序漸進。
例如在FOR循環(huán)語句的教學中,第一步,先讓學生掌握在窗體上顯示一個“*”可以用Print語句,第一個任務一下子就完成。但當連續(xù)演示顯示一顆星時,窗體上縱向出現(xiàn)了一連串“*”,分析原因:在窗體上顯示內容前要先用CLS語句清空。
第二步,在窗體上顯示一列“*”,大家根據(jù)For循環(huán)語句的結構,也很快地完成了。
第三步,在窗體上顯示一排“*”。老師分析Print語句的實質是顯示完內容后,自動換行。在Print語句后加“;”,可以實現(xiàn)顯示內容后,光標停在當前位置。理解了這一點,第三個任務也完成了。
第四步,在窗體上顯示一組正方形的“*”,很顯然,這需要雙重循環(huán)。很多同學在進行嘗試后大喊“不行,都顯示到一排上去了?!蔽易尨蠹掖蜷_Word,輸入一排“*”后,問“接下來怎么做?”大家異口同聲地回答:“回車”。“怎么實現(xiàn)?”有個別學生做恍然大悟狀:“哦,用一個不加‘;的Print語句來實現(xiàn)換行?!薄斑@個Print語句的位置應該在哪里?”“里層循環(huán)的Next語句后面?!焙昧?,第四個任務過關。
第五步,在窗體上顯示一組平行四邊形的“*”。我在巡視課堂的過程中發(fā)現(xiàn)有個別同學先在Word中輸出*,再分析,再編寫程序。我馬上請“IT小神童”幫大家分析:在每行“*”之前要加入若干個空格,空格的個數(shù)和行號有關,具體的表達式為:第i行要有N-i個空格。
在規(guī)定動作完成之后,再讓同學們自由發(fā)揮,顯示一組三角形的“*”。大家根據(jù)剛才分析的思路動手實踐,做出了各種形狀的三角形。從而摒棄了“老師演示——學生模仿”單一重復的做法,實現(xiàn)了課堂生成。
4.強化作品的“建?!崩砟?/p>
通過設計一個完整的VB作品,讓學生明確VB程序設計的步驟大致分為:(1)建立界面以及界面中的對象;(2)設置各個對象的屬性;(3)編寫對象的事件處理過程代碼;(4)調試、運行程序;(5)保存工程,生成可執(zhí)行文件。在設計作品的過程中,潛移默化地滲透“對象”的意識,強化“建?!崩砟睢?/p>
三、上機實踐,實現(xiàn)編程與調試的相互結合
技術高考采取紙筆+上機的考試形式,這就要求學生的VB學習除了掌握基本概念和基本知識外,還要有較強的程序調試能力。當編寫好一個程序時,必須要經過調試程序這道關卡,準確地知道程序的執(zhí)行情況。一旦提示錯誤信息,根據(jù)出錯信息或“調試”功能找到出錯的語句,分析出錯的原因。比如缺少某個對象、結果溢出、類型不匹配、數(shù)組元素下標越界、子程序或函數(shù)未定義、無效的過程調用或參數(shù)等。通過修改代碼糾正錯誤,學生從中可以學到更多的東西。因此,教師要多給學生一些犯錯的機會,這樣學生會成長的更快。
學生作業(yè)中有些錯誤是共性的,有些錯誤甚至是出人意料的,教師可以從錯誤中學到很多新的內容。例如在做“猜數(shù)游戲”這個作業(yè)時,有學生舉手說為什么他編的程序每次猜的數(shù)都只能是0。我仔細看了他的代碼,沒有錯誤,再仔細分析,發(fā)現(xiàn)是在定義全局變量N(被猜的那個隨機數(shù))時他輸成了A,也就是被猜的那個數(shù)N變成了局部變量,那么每次運行調試時,代碼全都能過,就是被猜的那個數(shù)沒有定義過,所以只能是零。由于當時還沒有講到過程與函數(shù),全局變量和局部變量不能多講,我只讓那位學生先把A改成N。通過這件事,我意識到在調試過程中碰到的問題可以為以后的學習打下伏筆,由此,我要求學生在調試過程中碰到的錯誤以注釋語句的形式保存在代碼中,一方面可以加深印象,另一方面可以為以后的學習作鋪墊。
總之,算法與程序設計本身是抽象的,教師要創(chuàng)設情景,引導學生分析問題,通過問題解決,把難點內容、專業(yè)術語、理論知識具體化、感性化、趣味化,學生必定學得生動活潑。此外學生本身就是快樂的發(fā)現(xiàn)者和創(chuàng)造者,盡量讓學生獨立操作,表達多角度進行創(chuàng)造性思維活動以充分挖掘出學生巨大潛能,讓學生或為課堂學習的主人,不但會讓我們的課堂充滿趣味,更為重要的是培養(yǎng)了學生探究,合作交流自主學習的能力。
【參考文獻】
[1] 薛錦云. 程序設計方法[M]. 高等教育出版社.
[2] 高淑印. 基礎教育算法與程序設計模塊內容標準解讀[J]. 中國電化教育,2012,(10).
[3] 胡志洪.《算法與程序設計》課程的有效教學[J]. 軟件導刊(教育技術),2012,(1).
(作者單位:浙江省臺州市黃巖區(qū)靈石中學)