尹寶林
摘要:本文論述了“C語言程序設(shè)計”課程建設(shè)的重點在于明確課程教學目標,改善教學內(nèi)容的設(shè)置和組織、改進練習和考試的方法等。通過這些手段,進一步提高學生的自學能力,分析問題、解決問題的能力,理論聯(lián)系實際的能力等,并促使其在程序設(shè)計的各個環(huán)節(jié)養(yǎng)成良好習慣,為深入掌握專業(yè)化程序設(shè)計打下基礎(chǔ)。實踐證明,以此思想指導的課程改革取得了顯著成效。
關(guān)鍵詞:C語言;程序設(shè)計;教學改革;能力培養(yǎng);計算機輔助評測
中圖分類號:G642 文獻標識碼:B
1背景
隨著計算機技術(shù)的迅速發(fā)展和日益普及,越來越多的高校畢業(yè)生涌入計算機技術(shù)及應用產(chǎn)業(yè),特別是軟件產(chǎn)業(yè)。這些人中不僅有計算機專業(yè)的畢業(yè)生,也有些非計算機專業(yè)的畢業(yè)生。在與這些非計算機專業(yè)學生的競爭中,計算機專業(yè)的學生并未表現(xiàn)出明顯的專業(yè)優(yōu)勢。造成這一現(xiàn)象的一個重要原因就是,計算機專業(yè)學生所掌握的基礎(chǔ)專業(yè)知識和能力,缺乏專業(yè)性的深度和廣度,計算機專業(yè)學生所學的一些專業(yè)課程和專業(yè)基礎(chǔ)課程沒有為學生提供足夠的專業(yè)知識和訓練。課程改革前的C語言課程就是這樣一門在專業(yè)性方面有待加強的專業(yè)基礎(chǔ)課程。
程序設(shè)計是計算機專業(yè)學生的基礎(chǔ)課程,程序設(shè)計能力是計算機專業(yè)人員的重要專業(yè)基礎(chǔ)能力,C語言是目前計算機專業(yè)工作者的第一語言。隨著計算機技術(shù)和知識的普及,越來越多的非計算機專業(yè)學生也在這一層次和深度上掌握了C語言知識和運用能力。與此同時,計算機專業(yè)在C語言的教學方面依然采用原來的教學內(nèi)容和教學方法,在程序設(shè)計知識的深度和廣度以及C語言的運用方面沒有大的進展,導致計算機專業(yè)學生與非計算機專業(yè)學生之間在這方面的專業(yè)能力差距逐漸縮小甚至消失。計算機專業(yè)學生所完成的程序在程序結(jié)構(gòu)、程序的可靠性、可維護性、可擴展性、程序的時空效率、以及程序的風格和可讀性等方面與非計算機專業(yè)學生的程序差別不大。
造成上述這種情況的原因,從教學方面看主要有三點:一是目前“C語言程序設(shè)計”課程的教學內(nèi)容偏窄偏淺;二是教學方法不適當;三是實驗考核手段落后。從學生學習的角度看,也存在對學習內(nèi)容和方法不適應的問題。大多數(shù)的學生從小學到中學,已經(jīng)適應了記概念、背知識點、應付書面考試的學習模式,對于靈活運用所學知識去分析解決問題,缺乏必要的訓練。當程序設(shè)計教學仍然是以程序設(shè)計語言為主、以概念為主、以書面教學為主時,就更會強化學生原有的思維模式和學習方法,把這門課程當成以概念和知識點學習為主的理論型課程,忽視了對實際能力的培養(yǎng)。
2指導思想
C語言課程是培養(yǎng)學生專業(yè)能力的重要課程,其教學效果對學生今后其他專業(yè)課程的學習以及畢業(yè)后的專業(yè)工作前景都有重要的影響。為解決C語言課程在程序設(shè)計能力培養(yǎng)方面的不足,需要根據(jù)當前學生的特點,在課程教學目標、課程指導思想、課程內(nèi)容設(shè)置和組織、練習和考試的方法及重點等方面進行調(diào)整和改革,使學生在掌握運用C語言進行程序設(shè)計的同時,在分析問題和解決問題的能力上有顯著的進步,在程序設(shè)計的各個環(huán)節(jié)養(yǎng)成良好的習慣,為后續(xù)的專業(yè)課程學習提供必要的程序設(shè)計知識和能力,為今后深入掌握專業(yè)化的程序設(shè)計能力打下良好的基礎(chǔ)。
對于計算機專業(yè)的學生來說,C語言課程的教學目標不僅僅是使學生了解和掌握C語言本身,而且應該使學生深入掌握程序設(shè)計的思路和方法。C語言課程應該是學習使用C語言進行程序設(shè)計的課程,而不是僅僅學習C語言本身的課程。程序設(shè)計語言與程序設(shè)計是互為表里的。程序設(shè)計的作用是表達程序設(shè)計者的思想,是按照計算機所能理解和執(zhí)行的方式描述需要讓計算機完成的工作,而程序設(shè)計語言則是表達這種思想的工具。在程序設(shè)計工作中,首先需要明確的是所要表達的思想到底是什么,也就是到底需要計算機按照什么樣的步驟來執(zhí)行計算過程,產(chǎn)生什么樣的計算結(jié)果。至于采用什么樣的語言,以及這種語言的細節(jié),則是第二位的。因此,對于沒有程序設(shè)計經(jīng)驗的學生的教學,必須把程序設(shè)計的思想和方法放在中心的位置,而把程序設(shè)計語言作為講述程序設(shè)計思想和方法的工具。
3課程的內(nèi)容和安排
為使學生通過C語言的學習掌握程序設(shè)計的能力,養(yǎng)成良好的程序設(shè)計習慣,并在分析問題和解決問題的能力上得到培養(yǎng)和鍛煉,需要在課程的教學內(nèi)容和側(cè)重點上進行必要的調(diào)整,在教學方法上進行必要的改進,在實驗和考核的手段上進行必要的革新,在教學過程的組織和安排上與其他相關(guān)課程更好地協(xié)調(diào)。
首先,需要把教學的重點從C語言本身轉(zhuǎn)移到程序設(shè)計的思路和方法、以及運用C語言進行程序設(shè)計上來,把講授語言的概念轉(zhuǎn)變?yōu)橹v授語言運用,把對概念的講授由抽象的分析和講解轉(zhuǎn)變?yōu)橥ㄟ^實例和經(jīng)驗對概念的學習。教學內(nèi)容應當圍繞程序設(shè)計的思想和方法進行組織,把C語言作為講解程序設(shè)計的工具,在講解程序設(shè)計的思想、方法和步驟的過程中,根據(jù)程序描述的需要,本著由簡到繁,由淺入深的原則,逐步講解C語言中的知識點,特別是C語言要素在程序設(shè)計中的運用。
其次,“C語言程序設(shè)計”課程是一門實踐性和應用性很強的課程,因此這門課程在教學方法上必然要不同于其他各種理論性課程。它不是以概念的學習為中心,而是以概念運用能力的培養(yǎng)為中心。對于概念和基本知識的掌握,更多地不是通過理論分析,而是通過對實例的分析和在實踐中的運用。對練習題的分析、講解、討論以及在練習現(xiàn)場的答疑都是教學中的要點。對一些復雜概念的引入和探討只有在學生具有了相當?shù)膶嵺`經(jīng)驗時進行,才能使學生真正地接受。
第三,在教學安排方面要充分考慮C語言的基礎(chǔ)性、應用性、專業(yè)性的特點,以及該課程與其他課程的關(guān)聯(lián)和配合。復雜的程序設(shè)計知識需要有“數(shù)據(jù)結(jié)構(gòu)”等先修課程作為基礎(chǔ),同時,基本的C語言知識和程序閱讀和理解能力,也是其他一些專業(yè)課程,包括“數(shù)據(jù)結(jié)構(gòu)”等課程在內(nèi)的基礎(chǔ)。為了適應學生知識水平和學習能力的現(xiàn)狀,并考慮與其他課程的銜接和協(xié)調(diào),我們把“C語言程序設(shè)計”課程的內(nèi)容分為兩個部分,分兩個階段講授。第一個階段主要針對沒有程序設(shè)計經(jīng)驗的初學者講授程序設(shè)計的基本方法和C語言的入門知識,第二階段主要是在第一階段的基礎(chǔ)上進一步提高學生的程序設(shè)計能力,培養(yǎng)學生專業(yè)化程序設(shè)計能力的基礎(chǔ),以及對C語言的深入理解和把握。
第一階段課程教學的重點內(nèi)容是程序設(shè)計的基本思路、步驟和方法,以及簡單的程序設(shè)計技術(shù)和C語言的運用,目的是培養(yǎng)學生程序設(shè)計的基本能力和初步培養(yǎng)學生良好的程序設(shè)計習慣,使他們知道如何著手分析一個問題,如何把解決問題的過程分解成一個個緊密銜接的步驟,如何用C語言準確地描述這些步驟,以及當程序出現(xiàn)錯誤時如何迅速準確地發(fā)現(xiàn)問題的原因,找到解決的方法。在這一階段的教學中,在講授方法上應以例題分析和討論為主,避免從概念到概念的論述,特別注意避免過于深奧的概念的引入和討論,以免學生在未掌握程序設(shè)計基本方法和思考習慣的情況下把注意力不適當?shù)赝度雽Ω拍罾斫獾倪^分追求。對于概念和理論,應該只對必要的內(nèi)容做適當?shù)慕榻B,更多地把學生的注意力引入到對這些概念的運用中。應該更多地講授使用C語言進行程序設(shè)計的實例,通過實例講授分析問題的方法以及程序設(shè)計的基本思路、過程和步驟。對于C語言本身,主要應介紹各種基本語言要素和使用方法,介紹簡單程序的編寫、調(diào)試和運行過程和操作步驟,講授一些基本的算法、數(shù)據(jù)結(jié)構(gòu)的C語言實現(xiàn)方法和特點。對于C語言的語法和語義,應盡量通過例題的示范進行概括性的介紹。對于其中的細節(jié),則應留給學生通過上機實習,自己逐步深入了解和掌握。這一階段的教學目標是使學生能閱讀和理解一些較為復雜的程序,并能在較短的時間內(nèi)獨立完成具有初等難度、長度約幾十行的程序的設(shè)計、實現(xiàn)和調(diào)試。
第二階段的教學主要集中在對程序設(shè)計能力、特別是專業(yè)程序設(shè)計能力基礎(chǔ)的培養(yǎng)上。在學生學習了“數(shù)據(jù)結(jié)構(gòu)”及其他相關(guān)的課程之后,可以進一步引入專業(yè)化的程序設(shè)計思想,介紹專業(yè)化的程序設(shè)計應當考慮的一些問題,對比不同的解題思路實現(xiàn)的難易程度,對比不同的算法和實現(xiàn)方法在時空效率方面的優(yōu)劣,對比不同的程序設(shè)計風格對程序的可讀性、可維護性、可擴展性、可移植性等方面的影響,講授程序質(zhì)量的判斷標準等。在這一階段也可以引導學生進一步深入理解C語言中的一些重要概念和C語言的特點,使學生在C語言運用的技巧方面得到鍛煉,在程序設(shè)計的水平方面得到提高。這一階段的教學內(nèi)容包括對C語言屬性、特點和重要概念的深入講解、對C語言中難點的深入分析,對程序設(shè)計思路、過程和步驟的進一步系統(tǒng)化,以及信息領(lǐng)域常用算法的實現(xiàn),程序和軟硬件系統(tǒng)的關(guān)系,程序的調(diào)試和測試,程序的時空效率和優(yōu)化,程序設(shè)計的風格,中型程序的結(jié)構(gòu)和組織等。在掌握了這部分內(nèi)容之后,學生應該能夠獨立完成較為復雜的,長度在百行以上的程序的設(shè)計、實現(xiàn)和調(diào)試,知道如何充分測試一個程序,以保證其運行的可靠,知道如何正確地組織一個較大的程序,以保證其可維護性和可擴展性,知道如何優(yōu)化一個程序,以滿足對時空效率的要求。在這一階段的教學過程中,在教學方法上可以更多地采用啟發(fā)式的方法,可以拿出一定的時間展開課堂討論和習題分析,引導學生主動地學習。同時,在練習題方面也可以適當提供一些難題,以便為學有余力的學生提供更大的學習空間。
4練習和考試
程序設(shè)計課程是一門實踐性很強的專業(yè)技術(shù)課程。只有加強實踐環(huán)節(jié),讓學生在失敗的和成功的實踐中通過自己的經(jīng)驗積累才能切實掌握實際知識的運用能力。在課程教學的過程中不僅要重視理論教學,重視教學內(nèi)容的設(shè)置,也要重視實踐環(huán)節(jié)的設(shè)置,重視為學生提供具有及時監(jiān)控和反饋環(huán)節(jié)的實踐環(huán)境。在課程的考核環(huán)節(jié),應該以檢驗學生的實際程序設(shè)計能力為主,關(guān)鍵概念為輔。對于語言的語法細節(jié)和使用方式,則不應單獨作為考核的題目,而應該與對程序設(shè)計能力的考核有機地融和在一起,以改變學生讀書、背概念、應付考試的學習模式。
程序設(shè)計題目和源程序答案具有高度的靈活性和差異性,難以進行常規(guī)的標準化評測。受評測方式的制約,傳統(tǒng)程序設(shè)計語言的練習及考試一般以標準化的筆試題為主,偏重于考察程序設(shè)計語言的基本概念和語法細節(jié),而程序設(shè)計題目所占比重較小。這種練習及考試方式易于導致學生忽視編程實踐能力和理論聯(lián)系實際能力的培養(yǎng)。為此,需要在練習和考試中改變傳統(tǒng)的方法,要求學生以實際程序設(shè)計為主進行練習,通過實際程序設(shè)計對學生的學習效果進行考核。這種練習和考試的方式改變了練習的目的,使練習由過去簡單地復習課堂的講授內(nèi)容改變?yōu)橛蓪W生通過實踐環(huán)節(jié)進行自學。這樣,課堂講授就可以集中對關(guān)鍵內(nèi)容上,而不必在語言本身的細節(jié)上花費過多的時間。
5技術(shù)支持手段
為采用“以實際程序設(shè)計為主進行練習,通過實際程序設(shè)計進行考核”的實踐及考試方式,需要為學生在編程實踐中提供具有及時監(jiān)控和反饋功能的實踐環(huán)境,并在課程作業(yè)方面增加程序設(shè)計題目的比例。這樣,不但可以提高練習和考試的強度,使得習題更加接近實際程序設(shè)計的要求,而且也更能檢驗教學效果和學生的實際程序設(shè)計能力。學生的答題工作全部在計算機上進行,提交的答案必須是不存在任何語法和邏輯錯誤、能解決一個完整問題的源程序。學生在學習階段必須重視實際編程能力,提高對代碼質(zhì)量和編程風格的要求,養(yǎng)成良好的編程習慣。同時,這也可以改變以往基于經(jīng)驗和直觀感覺的人工閱卷方式,提高閱卷的效率,減輕教師的閱卷負擔,保證成績評定的準確和公正。而且,在C語言這樣一門具有很強實踐性的信息技術(shù)專業(yè)基礎(chǔ)課程的實踐環(huán)節(jié)采用基于信息技術(shù)的自動化支持手段,其本身也是對學生的一種示范和啟發(fā)。
在自動化的評測系統(tǒng)中,最重要的問題是對程序設(shè)計題目的評測方式和標準。對程序的評價既有內(nèi)在屬性的指標,如功能、性能、正確性、可靠性等,也有外在屬性的指標,如程序的結(jié)構(gòu)、可讀性、風格等。根據(jù)本課程的教學要求,程序評測系統(tǒng)主要采用內(nèi)在屬性指標,學生所完成的程序必須通過編譯,產(chǎn)生可執(zhí)行代碼文件,在計算機上運行,根據(jù)題目的要求讀入輸入數(shù)據(jù),進行正確的運算,產(chǎn)生正確的輸出數(shù)據(jù),才能得分。這種方式可以檢查學生程序語法和基本功能的正確性。對程序的功能完整性和性能的評測通過設(shè)計具有不同難度的輸入數(shù)據(jù)來完成。這樣,就可以對學生的程序在問題分析、數(shù)據(jù)結(jié)構(gòu)和算法的選擇、實現(xiàn)的正確性和效率等多個方面產(chǎn)生適當?shù)膮^(qū)分度。同時,為了全面提高學生專業(yè)化程序設(shè)計的能力,也可適當引入一些外在屬性的指標以及相應的評測手段,以檢驗學生程序在程序的結(jié)構(gòu)、可讀性、風格等方面的水平。
根據(jù)這些原則,我們設(shè)計和實現(xiàn)了一個基于Web的程序設(shè)計語言練習及考試評測系統(tǒng),并開通了C語言課程教學網(wǎng)站。該練習及考試評測系統(tǒng)由配置工具、命題及題庫管理工具、Web應用服務器、程序題評測服務器、考試控制工具、成績統(tǒng)計工具等組成,具有很強的可配置性和可擴展性,能夠適應不同的練習和考試要求。為防范考試中可能的作弊行為,系統(tǒng)提供了實時網(wǎng)絡監(jiān)測工具和程序源文件及可執(zhí)行碼的查重功能;在一場考試中可以使用具有相同難度的多份試卷,以避免相鄰座位學生之間的交流和抄襲。練習及考試評測系統(tǒng)既支持程序設(shè)計類型的試題,又支持單選、多選、填空等標準化試題。為適應練習和考試的不同要求,對所提交的答案可以分別設(shè)置為立即評測和定時評測。這樣,在練習過程中學生就可以及時得知自己的答案是否正確,并及時改正錯誤。練習及考試評測系統(tǒng)可以自動完成對學生成績的評測和統(tǒng)計,并根據(jù)需要生成成績表。這樣,不僅可以使教師及時準確地掌握學生的成績,發(fā)現(xiàn)存在的問題,而且可以大大減輕教師的工作負擔。
6結(jié)語
“C語言程序設(shè)計”課是計算機專業(yè)學生的一門重要的專業(yè)基礎(chǔ)課。學生們通過這門課程的學習,應該不僅學會C語言,而且更要學會程序設(shè)計、學會分析問題和解決問題的方法,學會自學的方法,養(yǎng)成理論聯(lián)系實際、注重實踐的習慣,而這一切對于培養(yǎng)具有發(fā)展?jié)摿Φ墓た茖W生具有重要的意義。我們近幾年的課程改革正在朝著這一方向努力。經(jīng)過實踐,已經(jīng)取得了初步的成效。學生學習的積極性和主動性比以前有較大的提高,學生的實際能力比以前有較大的增強。一些后繼課程的教師反映,學生程序設(shè)計能力的提高有助于相關(guān)課程的學習和課程作業(yè)的完成。已經(jīng)畢業(yè)的學生也反映,無論是在工作崗位上還是在國內(nèi)外高校的研究生學習中,程序設(shè)計的能力都成為了他們重要的基礎(chǔ)能力,并增強了他們在工作和學習上取得進展的信心。同時,根據(jù)這幾年的教學經(jīng)驗,我們將教案整理成為正式的教材《C程序設(shè)計思想與方法》,于2009年由機械工業(yè)出版社出版。