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