向澤林
(四川外國(guó)語(yǔ)大學(xué)成都學(xué)院計(jì)算機(jī)教研室)
程序設(shè)計(jì)課程教學(xué)方法探討
向澤林
(四川外國(guó)語(yǔ)大學(xué)成都學(xué)院計(jì)算機(jī)教研室)
計(jì)算機(jī)程序設(shè)計(jì)是一門邏輯性、實(shí)踐性很強(qiáng)的課程,在該課程的教學(xué)中,重點(diǎn)是培養(yǎng)學(xué)生的學(xué)習(xí)興趣、掌握程序設(shè)計(jì)的思想和方法,以利于學(xué)生具備用計(jì)算機(jī)來(lái)分析、解決實(shí)際問(wèn)題的能力,并配以完善的考核方式,以提高程序設(shè)計(jì)課程教學(xué)質(zhì)量,增強(qiáng)教學(xué)效果。
計(jì)算機(jī);程序設(shè)計(jì);思維能力
在計(jì)算機(jī)教學(xué)中,程序設(shè)計(jì)課程是必不可少的,也是非常重要的,它在計(jì)算機(jī)領(lǐng)域具有舉足輕重的作用,可以這樣說(shuō),信息自動(dòng)化其實(shí)就是編寫程序的具體體現(xiàn)。但是,教師對(duì)這門課程的講授以及學(xué)生對(duì)這門課程的學(xué)習(xí)、掌握、領(lǐng)悟都感到非常困難。特別是對(duì)非計(jì)算機(jī)專業(yè)的文科學(xué)生而言,那更是難上加難,通常出現(xiàn)老師難教、學(xué)生難學(xué)的尷尬局面。作為一名工作在教育一線的教師,我通過(guò)多年的程序設(shè)計(jì)課程的教學(xué)實(shí)踐,以及教學(xué)方法的思考,獲得了一些寶貴經(jīng)驗(yàn),提出來(lái)與同仁探討,希望能在程序設(shè)計(jì)課程的教學(xué)上找到一條更適合、更有效的路子。
對(duì)剛接觸程序設(shè)計(jì)課程的學(xué)生來(lái)說(shuō),很難理解程序的概念,始終不明白為什么要編寫語(yǔ)句代碼來(lái)實(shí)現(xiàn)現(xiàn)實(shí)生活中的問(wèn)題。如果老師在教授程序設(shè)計(jì)課程的時(shí)候,一開始就進(jìn)入程序本身,學(xué)生必定會(huì)感到迷茫。即使會(huì)編寫一些程序,也可能是不知其所以然。為了解決這一問(wèn)題,我在講授程序設(shè)計(jì)課程的時(shí)候,第一次課并不直接講程序,而是出了幾道小學(xué)暑期作業(yè)當(dāng)中的題目,給一定的時(shí)間,讓學(xué)生以自己的思考方式解答。
1.有這樣一個(gè)算式:元宵+慶元宵=樂(lè)樂(lè)樂(lè)(其中每個(gè)漢字對(duì)應(yīng)一個(gè)0~9的不重復(fù)數(shù)字),求出每個(gè)漢字分別對(duì)應(yīng)的數(shù)字是多少。
2.有這樣一句話:小朋友元宵節(jié)好(其中每個(gè)漢字對(duì)應(yīng)一個(gè)0~9的不重復(fù)數(shù)字),且滿足下面三個(gè)條件,求出每個(gè)漢字分別對(duì)應(yīng)的數(shù)字是多少。
①小×朋+友×元+宵×節(jié)-好=61
②朋+友×元+宵×節(jié)+好×?。?1
③元×宵+節(jié)×好×小+朋×友=61
3.誰(shuí)是偷盜者問(wèn)題:甲、乙、丙、丁4個(gè)人為嫌疑犯,只有一個(gè)是偷盜者。在審訊中,四人都有可能說(shuō)真話和假話。
甲:乙沒(méi)偷,丁偷的;乙:我沒(méi)偷,丙偷的;丙:甲沒(méi)偷,乙偷的;?。何覜](méi)偷。
根據(jù)以上四人的證詞,推斷誰(shuí)是偷盜者。
學(xué)生一看到這幾道題目的時(shí)候,都很親切,畢竟都是他們小學(xué)時(shí)候遇到過(guò)的內(nèi)容,于是積極思考,踴躍答題。在時(shí)間到了的時(shí)候,教師抽幾位學(xué)生起來(lái)回答他們解決每道題的思路、分析過(guò)程,并看是否得到了正確的答案。然后老師快速地以某種程序語(yǔ)言(比如VB、C、C++、C#、JAVA)編寫實(shí)現(xiàn)上述三道題,一邊寫代碼的時(shí)候一邊簡(jiǎn)單闡述,其實(shí)步驟就是我們思考的過(guò)程,只是這里相當(dāng)于用特殊的語(yǔ)句將人解決這個(gè)問(wèn)題的思路翻譯一下。最后調(diào)試、運(yùn)行得出正確答案,學(xué)生看后非常驚奇,自然而然就激發(fā)了他們學(xué)習(xí)程序的欲望和興趣。畢竟興趣是最好的老師,要想學(xué)生能夠?qū)W好編程,培養(yǎng)學(xué)生的興趣就是關(guān)鍵的第一步。這一步至關(guān)重要,將直接影響到后面的教學(xué)過(guò)程。
其實(shí),要編寫程序解決某個(gè)問(wèn)題,不是計(jì)算機(jī)本身能做到的,畢竟計(jì)算機(jī)不是人,不會(huì)思考,關(guān)鍵是人要能對(duì)某個(gè)問(wèn)題會(huì)分析,弄清楚解決該問(wèn)題的思路。程序的語(yǔ)法結(jié)構(gòu)只是提供給人編寫程序的規(guī)則和平臺(tái),實(shí)現(xiàn)一個(gè)程序功能,我們關(guān)鍵是要重視算法(算法其實(shí)就是人對(duì)某個(gè)問(wèn)題的思考過(guò)程、思路)、抓住核心。
在教學(xué)中經(jīng)常存在這樣一種現(xiàn)象:很多學(xué)生對(duì)程序語(yǔ)法結(jié)構(gòu)掌握得很好,但往往碰到實(shí)際問(wèn)題時(shí)就束手無(wú)策,不知道如何用學(xué)到的知識(shí)加以解決,究其根源,這是算法能力欠缺的一種表現(xiàn)。有些教師在講課時(shí)經(jīng)常注重分析程序代碼中每條語(yǔ)句的含義,卻忽略了算法描述過(guò)程的展現(xiàn),造成學(xué)生知其然,不知其所以然,只會(huì)完成自己曾經(jīng)做過(guò)的題目。其實(shí),在程序設(shè)計(jì)課程中,算法設(shè)計(jì)是它的核心。如果學(xué)生掌握了良好的算法設(shè)計(jì)能力,也就掌握了程序設(shè)計(jì)的靈魂,無(wú)論遇到什么問(wèn)題都可以很好地解決。當(dāng)然,在教學(xué)中可以通過(guò)多種方法培養(yǎng)學(xué)生的算法設(shè)計(jì)能力:
(1)詳細(xì)講解常用的算法。對(duì)同一個(gè)問(wèn)題,算法可能都有很多種,但學(xué)生一般只要掌握常用的、經(jīng)典成熟的就可以了。例如:排序問(wèn)題,前人總結(jié)歸納的就有很多種算法,比如簡(jiǎn)單插入排序,冒泡排序,希爾排序,快速排序,簡(jiǎn)單選擇排序,堆排序等。但是我們要求學(xué)生掌握冒泡排序、選擇排序的算法就足夠了,只要這兩種排序的算法弄清楚了,其他的也就輕而易舉了。
(2)教師帶領(lǐng)學(xué)生多閱讀程序,分析程序功能和代碼實(shí)現(xiàn)過(guò)程,吸取他人的經(jīng)驗(yàn)和成熟的算法,使學(xué)生少走彎路或不走彎路。其實(shí)很多問(wèn)題,都有比較成熟的算法設(shè)計(jì)。閱讀程序關(guān)鍵一點(diǎn)就是要善于總結(jié)、歸納,吸取精髓,變別人的東西為自己所有。比如獲得每個(gè)漢字拼音的首字母,在網(wǎng)上或書本上都有現(xiàn)成的代碼,我們就可以通過(guò)程序代碼分析其實(shí)現(xiàn)的原理,徹底搞清楚,今后如果要用到這一功能時(shí),就可以直接拿來(lái)用。
(3)多用打比方分析問(wèn)題。用打比方的方法分析問(wèn)題不僅簡(jiǎn)單,而且容易懂,學(xué)生能很快接受。例如,在計(jì)算機(jī)等級(jí)考試或?qū)嶋H生活中,我們經(jīng)常遇到這樣的問(wèn)題:將一篇英語(yǔ)文章中的所有大寫字母轉(zhuǎn)換成相應(yīng)小寫字母,而小寫字母相應(yīng)的轉(zhuǎn)換成大寫字母,其他字符則保持不變。一看到這道題,許多學(xué)生都不知道怎么下手。但是我們仔細(xì)思考、分析,就可以將上述題目轉(zhuǎn)換為這樣一個(gè)實(shí)際問(wèn)題:小明寫了一篇英語(yǔ)文章,我們?nèi)绾螌⑦@篇文章中的大小寫字母進(jìn)行相應(yīng)轉(zhuǎn)換呢?大家根據(jù)平時(shí)的理解和處理方式很快就能想到,要解決這個(gè)問(wèn)題,不外乎存在以下三個(gè)關(guān)鍵步驟:
從文章開頭到文章結(jié)尾,必須完整瀏覽一遍。
從前往后或從后往前依次找出每一個(gè)英文字母進(jìn)行判斷,它是大寫字母還是小寫字母,或是其他字符。
判斷后根據(jù)要求進(jìn)行轉(zhuǎn)換,是大寫就轉(zhuǎn)換成小寫,是小寫就轉(zhuǎn)換成大寫,其他字符就不轉(zhuǎn)換。
大家想一想,按照這三個(gè)步驟做完,問(wèn)題不就解決了嗎?最后,根據(jù)思考步驟自然想到用循環(huán)結(jié)構(gòu),結(jié)合查找、轉(zhuǎn)換函數(shù)等知識(shí)點(diǎn)編寫相應(yīng)代碼就可以輕松實(shí)現(xiàn)。
(4)學(xué)生之間多交流。要實(shí)現(xiàn)一個(gè)功能,解決一個(gè)問(wèn)題,編程方式可能有多種,但究竟哪一種好呢,可以讓學(xué)生之間多討論、多比較,最后落實(shí)到算法上。經(jīng)過(guò)長(zhǎng)期的這種方式的培養(yǎng)鍛煉,學(xué)生在今后的編寫代碼過(guò)程中肯定會(huì)充分考慮算法的時(shí)間復(fù)雜度。
程序設(shè)計(jì)課程的實(shí)踐性很強(qiáng),“精講多練”是程序設(shè)計(jì)課程教學(xué)的一大特點(diǎn),實(shí)踐教學(xué)在程序設(shè)計(jì)教學(xué)中起著重要的作用,學(xué)生只有通過(guò)自己親自分析問(wèn)題,親手編寫程序、上機(jī)調(diào)試程序這一恒定過(guò)程,才能從中理解程序設(shè)計(jì)的思想方法,積累程序調(diào)試的經(jīng)驗(yàn),體會(huì)成功的樂(lè)趣,才會(huì)有成就感,從而激發(fā)學(xué)生的學(xué)習(xí)興趣,學(xué)起來(lái)也才會(huì)從容自如。學(xué)生只聽不練根本達(dá)不到學(xué)習(xí)的目的。在教學(xué)中,就經(jīng)常發(fā)現(xiàn),對(duì)某個(gè)問(wèn)題老師分析的時(shí)候,學(xué)生都能聽懂,寫代碼的時(shí)候,也都能理解。但是一旦叫他們自己分析編程的時(shí)候,就顯得毫無(wú)辦法。我認(rèn)為這種情況就是學(xué)生獨(dú)立思考、獨(dú)立編程時(shí)間太少造成的。
考試是測(cè)試學(xué)生的知識(shí)與能力、評(píng)價(jià)教學(xué)質(zhì)量的基本手段。是教學(xué)過(guò)程中的重要一環(huán),也是對(duì)一階段教學(xué)工作的總結(jié)與檢查,也是檢驗(yàn)學(xué)生學(xué)習(xí)效果、評(píng)價(jià)學(xué)生學(xué)習(xí)業(yè)績(jī)的重要環(huán)節(jié),考試的形式對(duì)教學(xué)目標(biāo)、教學(xué)過(guò)程有著相當(dāng)大的影響。我認(rèn)為,在程序設(shè)計(jì)課程中采用“筆試+實(shí)例操作”的考核方式比較好。筆試著重于理論體系(主要是讀程序、程序填空等)。實(shí)例操作則著重于培養(yǎng)學(xué)生分析問(wèn)題、解決問(wèn)題以及團(tuán)隊(duì)協(xié)作的能力。
比如,給學(xué)生上C#程序設(shè)計(jì)課,在學(xué)期快結(jié)束時(shí),我就將班上學(xué)生分成幾個(gè)小組,每小組完成一個(gè)具體實(shí)例,這些實(shí)例應(yīng)該是學(xué)生經(jīng)常遇到的,與生活息息相關(guān)的,比如簡(jiǎn)單打字軟件、斗地主撲克牌發(fā)放程序、五子棋游戲、俄羅斯方塊等等。這樣,學(xué)生就會(huì)主動(dòng)積極思考、討論,想盡一切辦法尋求答案。在這個(gè)過(guò)程中,學(xué)生親自動(dòng)手解決具有一定難度的實(shí)際問(wèn)題,為之設(shè)計(jì)合適的算法,經(jīng)過(guò)實(shí)踐去培養(yǎng)他們的創(chuàng)新意識(shí)、應(yīng)用意識(shí)和探究能力。這些意識(shí)和能力一旦形成,就會(huì)使他們利用程序解決實(shí)際問(wèn)題能力得到很快的提高,對(duì)今后從事計(jì)算機(jī)軟件開發(fā)也是大有好處的。
總之,程序設(shè)計(jì)課程,在高校的計(jì)算機(jī)基礎(chǔ)教學(xué)中占據(jù)著十分重要的位置,教學(xué)方法在程序設(shè)計(jì)教學(xué)中的舉足輕重制約著程序設(shè)計(jì)教學(xué)的效率??茖W(xué)的教學(xué)方法一定會(huì)為學(xué)生提供良好的幫助。我們?cè)诮虒W(xué)過(guò)程中應(yīng)以學(xué)生為主體,教師為主導(dǎo),采用符合學(xué)生認(rèn)知規(guī)律的、科學(xué)的教學(xué)方法,充分調(diào)動(dòng)學(xué)生學(xué)習(xí)的主動(dòng)性,讓老師不再難教,學(xué)生不再難學(xué)。同時(shí),采用綜合評(píng)價(jià)學(xué)生的方式,努力培養(yǎng)學(xué)生自主學(xué)習(xí)的興趣,提高學(xué)生實(shí)際應(yīng)用能力,從而使得程序設(shè)計(jì)課程的教學(xué)質(zhì)量得到不斷提高。
周蕾.程序設(shè)計(jì)課程教學(xué)方法探討[J].電腦知識(shí)與技術(shù),2012.
·編輯 段麗君