摘要:計算機(jī)專業(yè)課程教學(xué)中算法教學(xué)是一個重點(diǎn)和難點(diǎn),文章針對如何提高算法教學(xué)的質(zhì)量和解決算法教學(xué)中存在的問題,進(jìn)行了積極的探索。
關(guān)鍵詞:算法;數(shù)據(jù)結(jié)構(gòu);計算機(jī)語言;教學(xué)探索
中圖分類號:G642.0 文獻(xiàn)標(biāo)志碼:A 文章編號:1674-9324(2014)06-0065-02
算法(Algorithm)是數(shù)學(xué)及其應(yīng)用的重要組成部分,是計算科學(xué)的重要基礎(chǔ)。隨著現(xiàn)代信息技術(shù)飛速發(fā)展,算法在科學(xué)技術(shù)、社會發(fā)展中發(fā)揮著越來越大的作用,并日益融入生活的許多方面,算法思想已經(jīng)成為現(xiàn)代人應(yīng)具備的一種數(shù)學(xué)素養(yǎng)。因此,計算機(jī)專業(yè)課程中算法的教與學(xué)對于高校計算機(jī)專業(yè)學(xué)生的重要性是不言而喻的。目前,由于大學(xué)計算機(jī)專業(yè)課程中的算法教學(xué)存在一些問題,許多學(xué)生對算法學(xué)習(xí)的重要性認(rèn)識不足,在學(xué)習(xí)過程中,學(xué)習(xí)的興趣不高。筆者在從事算法課程教學(xué)中體會到:要提高算法課程教學(xué)的教學(xué)質(zhì)量,首先要讓學(xué)生真正理解在計算機(jī)專業(yè)學(xué)習(xí)中算法的重要性。要通過各種教學(xué)方法和手段,培養(yǎng)學(xué)生的學(xué)習(xí)算法的興趣,學(xué)生有了學(xué)習(xí)的興趣,學(xué)習(xí)的積極性和自覺性就會大大的提高。德國教育家第斯多惠說:“教學(xué)成功的藝術(shù)就在于使學(xué)生對你所教的東西感到有趣”。在這些方面,筆者作了一些教學(xué)實踐和探索,取得了較好的教學(xué)效果。
一、設(shè)問法教學(xué)
如何讓學(xué)生對算法學(xué)習(xí)有興趣?如何讓學(xué)生真正認(rèn)識算法學(xué)習(xí)的重要性呢?為解決這個問題,筆者在課堂教學(xué)中采用設(shè)問式教學(xué),通過設(shè)問,使學(xué)生積極思考、主動參與到學(xué)習(xí)中來?!皩W(xué)起于思,思源于疑”。比如,我在課堂會常常設(shè)問:計算機(jī)是怎么工作的?什么是計算機(jī)程序設(shè)計?什么樣計算機(jī)軟件是好的計算機(jī)軟件呢?在學(xué)生們短暫的議論后,我告訴他們:計算機(jī)工作是靠執(zhí)行一條條指令來實現(xiàn)的,有限條指令按照某種算法編寫形成程序,程序最核心部分之一就是算法,算法的好壞是衡量程序是否優(yōu)秀的重要標(biāo)準(zhǔn)。然后,我告訴學(xué)生Pascal語言之父、結(jié)構(gòu)化程序設(shè)計的先驅(qū)、瑞士人Nicklaus Wirth有一本最著名書,書名叫做《算法+數(shù)據(jù)結(jié)構(gòu)=程序》。由此可以看出在計算機(jī)程序中算法的核心作用,算法與數(shù)據(jù)結(jié)構(gòu)之于程序設(shè)計的重要性也就就不言自明。同時,中國工程院院士、計算機(jī)科學(xué)家李國杰說過:“……而軟件的核心是算法(不是編程技巧),……算法設(shè)計是人類智慧的結(jié)晶,計算機(jī)科學(xué)中的知識創(chuàng)新主要是算法的創(chuàng)新,創(chuàng)建一種新算法其意義不亞于建造一種新機(jī)型?!瓏?yán)格說來,不講算法,計算機(jī)科學(xué)就無從說起。”由于李國杰院士是我們邵陽人,也是我們邵陽學(xué)院的名譽(yù)院長,所以同學(xué)一下子覺得親切起來,對算法學(xué)習(xí)的陌生感、距離感也慢慢消失??傊ㄟ^各種教學(xué)手段和方法使得學(xué)生明白算法的重要性,使得學(xué)生對算法的學(xué)習(xí)產(chǎn)生興趣,其中設(shè)問導(dǎo)入只是其中一種,我們還可以通過一些有趣的實例,比較不同算法的差異等,有很多方法值得去探索。
二、比喻法教學(xué)
在計算機(jī)專業(yè)課程教學(xué)中,許多學(xué)生不懂得計算機(jī)語言和算法的關(guān)系,總以為學(xué)習(xí)程序設(shè)計就是學(xué)習(xí)各種計算機(jī)語言。所以許多學(xué)生熱衷于學(xué)習(xí)一門一門的計算機(jī)語言,從C到C++,從Java到C#等等。似乎學(xué)的計算機(jī)語言越多,程序設(shè)計水平就越高。同時把學(xué)習(xí)的重點(diǎn)放在學(xué)習(xí)每種語言的數(shù)據(jù)類型、運(yùn)算符和表達(dá)式、語句、函數(shù)等語言本身的一些語法規(guī)則上,反而忽視了程序設(shè)計中最核心的部分:算法的學(xué)習(xí)。這種現(xiàn)象的產(chǎn)生是因為在計算機(jī)語言類課程教學(xué)中,算法只是作為例題形式出現(xiàn),老師在計算機(jī)語言課程教學(xué)中不會專門介紹算法,更多講解計算機(jī)語言的特點(diǎn)和編程的技巧,因而學(xué)生認(rèn)識中就會出現(xiàn)偏差,以為這些例題只是為了練習(xí)和熟悉計算機(jī)語言為目的,不會有意識地研究算法。等到大三開始《算法設(shè)計與分析》課程學(xué)習(xí),在教學(xué)過程中,老師更多地側(cè)重理論的教學(xué),學(xué)生學(xué)習(xí)起來覺得枯燥和難懂,有為難情緒,學(xué)習(xí)效果不理想。為了講清楚計算機(jī)程序設(shè)計中語言和算法的關(guān)系,我在上課時采用比喻的方法,用自然語言和寫文章的關(guān)系作為例子,學(xué)生很快就明白了。我告訴學(xué)生:計算機(jī)語言和生活中的語言是一樣的。計算機(jī)有許多種語言,比如C、Java、C++等,生活中也有許多種語言,比如中文、英語、西班牙語等。我們在計算機(jī)語言的學(xué)習(xí)中掌握好這門語言中的數(shù)據(jù)類型、運(yùn)算符和表達(dá)式、語句、函數(shù)等基本知識是很重要,這如同學(xué)習(xí)中文、英文要學(xué)習(xí)詞匯、句子、各種語法規(guī)則一樣。學(xué)習(xí)計算機(jī)語言的目的是要寫計算機(jī)程序,開發(fā)計算機(jī)軟件。這也和學(xué)習(xí)中文和英文是為了寫文章,表達(dá)思想和觀點(diǎn)相同。那么,什么是優(yōu)秀的計算機(jī)程序或者說軟件呢?最重要的標(biāo)準(zhǔn)就是看你解決問題的算法。這好像一篇文章的好壞關(guān)鍵是你在文章中表達(dá)思想和觀點(diǎn),這和你使用的語言沒有太多關(guān)系。這好比一個偉大的哲學(xué)家的思想,不管用什么語言、文字表達(dá)出來,都是偉大的思想。所以在程序設(shè)計中關(guān)鍵是看你程序設(shè)計中解決問題的算法是否優(yōu)秀,能否找到一種最好的算法,這和你使用哪種計算機(jī)語言都沒有太多關(guān)系。通過這種通俗和貼切的例子,學(xué)生很快就能理解到算法的意義,明白了要寫出優(yōu)秀的程序,不只是熟練掌握所使用的語言和相應(yīng)的編程技巧,也要了解各種算法,根據(jù)問題設(shè)計出最優(yōu)秀的算法,而且算法的學(xué)習(xí)更加重要。
三、算法教學(xué)中的問題
首先,在計算機(jī)專業(yè)的課程教學(xué)中,涉及到算法的有三門課程:《計算方法》、《數(shù)據(jù)結(jié)構(gòu)》、《算法設(shè)計與分析》。這就需要這三門專業(yè)課的老師在講授本門課程的同時也要適當(dāng)介紹其它課程中算法的特點(diǎn)和作用,以便學(xué)生更有目的的學(xué)習(xí)。算法分為數(shù)值算法和非數(shù)值算法?!队嬎惴椒ā氛n程中講的是數(shù)值算法,著重介紹計算機(jī)上常用的數(shù)值計算方法。內(nèi)容包括誤差、一元非線性方程的解法、線性代數(shù)方程組的解法、插值法和曲線擬合、數(shù)值積分、常微分方程數(shù)值解法等內(nèi)容?!稊?shù)據(jù)結(jié)構(gòu)》課程中主要介紹非數(shù)值算法。著重介紹各種數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)的插入、刪除、查找、排序等算法?!端惴ㄔO(shè)計與分析》更多的是引導(dǎo)學(xué)生的思維告訴學(xué)生如何應(yīng)用一些特定的算法設(shè)計策略來解決問題。比如迭代法、蠻力法、分治法、貪婪法、和動態(tài)規(guī)劃等算法設(shè)計技術(shù)。這幾門課,每門課都有自己的特點(diǎn),都是算法設(shè)計技術(shù),但又有區(qū)別,所以在課程教學(xué)過程中,每門課的老師要相互呼應(yīng),承上啟下。這樣學(xué)生對算法學(xué)習(xí)的體會才會更深刻。其次,算法教學(xué)的內(nèi)容也要隨著計算機(jī)技術(shù)的發(fā)展不斷更新。目前,超級計算機(jī)的計算能力越來越強(qiáng)大,目前已經(jīng)達(dá)到萬萬億次/秒。人們會有這樣的疑問:計算機(jī)的硬件性能已經(jīng)提高的這樣的水平,算法的研究還有必要嗎?其實,計算機(jī)硬件功能越強(qiáng)大,人們就會嘗試解決更復(fù)雜的問題,計算量也就更大,所以算法研究始終是推動計算機(jī)技術(shù)發(fā)展的關(guān)鍵。大學(xué)計算機(jī)專業(yè)算法教學(xué)也應(yīng)該根據(jù)計算機(jī)技術(shù)的發(fā)展不斷補(bǔ)充、增加新的內(nèi)容,相應(yīng)的教材也要加以更新。例如:Internet應(yīng)用引起的海量數(shù)據(jù)的處理技術(shù)成為熱點(diǎn),使得數(shù)據(jù)的檢索算法更為復(fù)雜。而且,有些時候,軟件的維護(hù)成本已經(jīng)遠(yuǎn)遠(yuǎn)高于開發(fā)成本,所以,軟件中的算法能做到易讀、易懂、易維護(hù)會大大降低軟件的研發(fā)成本。不斷完善和補(bǔ)充新的內(nèi)容,介紹最新的算法研究的發(fā)展方向,可以使學(xué)生學(xué)習(xí)的積極性和自覺性不斷提高,也為學(xué)生走向社會,更快地適應(yīng)軟件的設(shè)計和研發(fā)打下基礎(chǔ)。
計算機(jī)算法教學(xué)是一個需要不斷探索和實踐的領(lǐng)域。如何讓學(xué)生在學(xué)習(xí)過程中加深對計算機(jī)的理解,如何在學(xué)習(xí)算法的過程中加強(qiáng)對學(xué)生讀懂算法、設(shè)計算法、分析算法甚至發(fā)明算法能力的培養(yǎng),尤其是如何調(diào)動學(xué)生的學(xué)習(xí)積極性和主動性,使他們具有強(qiáng)烈的參與意識和求知欲望,這些都十分重要。好的教學(xué)方法,促使學(xué)生的積極思考,拓寬學(xué)生的思路,提高教學(xué)效率。本文僅僅是根據(jù)筆者平時在教學(xué)一線的心得體會,對計算機(jī)算法課程教學(xué)進(jìn)行一定程度的探索與實踐。
參考文獻(xiàn):
[1]胡淑珍.教學(xué)技能[M].長沙:湖南師范大學(xué)出版社,1996.
[2]蔣雪巖.當(dāng)前課堂教學(xué)模式之整治[J].教育藝術(shù),2005,(3):12-13.
[3]郎海艷.小議計算機(jī)編程教學(xué)中算法的選擇[J].今日科苑,2008,(3):249-250.
[4]劉嬌.數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)探索與體會[J].考試周刊,2010,(45):138-139.
[5]張銘,趙海艷,王騰蛟,等.北京大學(xué)《數(shù)據(jù)結(jié)構(gòu)與算法》教學(xué)設(shè)計[J].計算機(jī)教育,2008,(20)64-68.
[6]呂國英.算法設(shè)計與分析[M].北京:清華大學(xué)出版社,2009.
基金項目:湖南省教育廳一般項目編號:13C846。
作者簡介:成婭輝(1977—),女,漢族,碩士研究生。研究方向:計算機(jī)應(yīng)用。endprint