喬 良
(華北科技學(xué)院計算機(jī)學(xué)院,北京東燕郊 101601)
C語言具有功能豐富、表達(dá)能力強(qiáng)、目標(biāo)程序效率高、可移植性好等特點(diǎn),已成為計算機(jī)程序設(shè)計人員必須掌握的一種通用高級程序設(shè)計語言。加之其應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,因此,C程序設(shè)計是國內(nèi)許多高校工科專業(yè)必修的計算機(jī)課程,用來培養(yǎng)學(xué)生設(shè)計算法和動手編程的能力。本文作者根據(jù)教學(xué)經(jīng)驗(yàn),對C語言教學(xué)過程中遇到的主要問題進(jìn)行分析,并提出了解決方法。
對于工科非計算機(jī)專業(yè)來說,很多學(xué)生往往會有這樣的疑問,我又不是學(xué)計算機(jī)專業(yè)的,為什么要學(xué)C語言呢?這樣的疑問來自于一個先入為主的想法:編程是計算機(jī)專業(yè)才去做的事情。有些老師往往忽視了這樣的想法,上來就講“hello world”,導(dǎo)致了學(xué)生帶著疑慮學(xué)習(xí),這種疑慮甚至?xí)灤┍鹃T課程教學(xué)活動的始終。教師沒有解決好“為何而學(xué)”,結(jié)果是學(xué)生學(xué)習(xí)的目的性不強(qiáng)。而學(xué)生如果長期處于這種學(xué)習(xí)目的不確定的狀態(tài),勢必會造成心理上的障礙,結(jié)果一定會影響學(xué)習(xí)效果。
不少學(xué)生學(xué)習(xí)C語言的方法跟學(xué)習(xí)英語課一樣,靠背書,喜歡下力氣去記課本里面的各種語法規(guī)則,這是一個很大的學(xué)習(xí)誤區(qū)。學(xué)生單單憑記憶很難記住所有的知識點(diǎn),即便是記住了,在運(yùn)用的時候也往往很難得心應(yīng)手,表現(xiàn)就是學(xué)生感覺知識點(diǎn)都知道了,但寫出的程序中總是誤百出,怎么改運(yùn)行都不通過。這種情況的發(fā)生,源自學(xué)生沒有理清理論學(xué)習(xí)與動手實(shí)踐的關(guān)系,還按照學(xué)習(xí)數(shù)學(xué)、物理那樣,先背公式再做題的套路去看待C語言,這種思路在計算機(jī)編程語言的學(xué)習(xí)上是行不通的。而且,由于方法的錯誤,學(xué)生的學(xué)習(xí)往往見效較慢,容易倦怠,效果會很不理想。
學(xué)生缺乏主動性的表現(xiàn)很多,比如不進(jìn)行課前預(yù)習(xí),對提問表現(xiàn)不積極,不喜歡設(shè)計新算法等等,其中以上機(jī)課中的情況最為突出。輔導(dǎo)過C語言上機(jī)課的老師都有體會,在課堂上沉默寡言的學(xué)生突然都變得愛提問了,而問題一般集中在程序無法通過編譯,或運(yùn)行出錯上。通過觀察發(fā)現(xiàn),為數(shù)不少的學(xué)生,一旦遇到程序編譯出錯或是程序運(yùn)行結(jié)果不正確的情況,立刻就舉手叫老師,而不是去找問題的原因。而教師如統(tǒng)統(tǒng)解答,結(jié)果就是教師事實(shí)上完成了程序的調(diào)試,而學(xué)生并沒有真正參與其中,久而久之,容易使學(xué)生養(yǎng)成不愛動腦的習(xí)慣,有些學(xué)生直到期末結(jié)課時都看不懂編譯器的錯誤提示,這樣就使上機(jī)課徹底失去了應(yīng)有的作用。
同時,學(xué)生求知欲低也是一個較為普遍的問題,主要表現(xiàn)在上課時位置靠后,睡覺、玩手機(jī),編程作業(yè)抄襲或直接從互聯(lián)網(wǎng)上查找答案等等。原因有很多種,前文提到的目的不明,定位不清,方法有誤等因素都會導(dǎo)致學(xué)生失去對課程的興趣。經(jīng)與學(xué)生交流,最主要的原因是學(xué)生認(rèn)為這門課程“沒什么用”,學(xué)習(xí)就是為了最后能順利通過考試而已。如果學(xué)生都以通過考試為最終目標(biāo),勢必出現(xiàn)“六十分萬歲,多一分浪費(fèi)”的情況,學(xué)習(xí)效果不理想也就很容易理解了。
隨著計算機(jī)的普及,很多地方在高中階段已經(jīng)開設(shè)了計算機(jī)課程。但各地計算機(jī)教育的水平還是參差不齊,導(dǎo)致學(xué)生的計算機(jī)基礎(chǔ)水平也有很大區(qū)別。以我校大一新生為例,有的學(xué)生已經(jīng)學(xué)過編程語言,可以獨(dú)立設(shè)計算法,寫出簡單的程序;有的學(xué)生對計算機(jī)的認(rèn)識只限于office辦公軟件的應(yīng)用,還有少數(shù)學(xué)生甚至沒有真正接觸過計算機(jī)。面對基礎(chǔ)相差如此巨大的學(xué)生,教師的教學(xué)內(nèi)容卻是一致的。教學(xué)活動參照的是平均水平,面向的是絕大多數(shù),但這一定會導(dǎo)致部分學(xué)生“吃不飽”,還有部分學(xué)生“咽不下”,長此以往,勢必會影響到教學(xué)質(zhì)量。
受到學(xué)時和教材的限制,C語言課程往往無法將學(xué)生訓(xùn)練出理想的狀態(tài)。這里的“理想”是指學(xué)生所設(shè)計算法的合理性和所編寫程序的實(shí)用性,而原因在于當(dāng)前的C語言教學(xué)內(nèi)容缺乏實(shí)用性。舉例來說,學(xué)生學(xué)了一學(xué)期的編程,寫程序時變量名永遠(yuǎn)是“a,b,c,x,y,z”這樣的簡單字符,很少有學(xué)生會使用超過3個字符的變量名(數(shù)組名除外),更別提有意義的字符串了;寫出的程序最多一二十幾行,很多老師稱之為“豆腐塊程序”,不具備明顯的實(shí)用價值;學(xué)生接觸到的函數(shù)太少,使用C語言能完成的工作極其有限;指針等內(nèi)容由于難度較大,同時學(xué)時不足,教學(xué)中淺嘗輒止,沒有體現(xiàn)出其真正的價值等等,這一系列的因素,導(dǎo)致學(xué)生最終能寫出的程序是幼稚的,僅僅能應(yīng)付考試而已。
針對以上教學(xué)中存在的問題,經(jīng)過積極探索,從教師和學(xué)生兩方面分析原因,并提出改進(jìn)措施,以期幫助學(xué)生提高學(xué)習(xí)興趣,提升教與學(xué)的效果。
想讓學(xué)生較快的進(jìn)入學(xué)習(xí)狀態(tài),首先就要明確課程開設(shè)的意義和目的。當(dāng)學(xué)生搞清楚因何而學(xué)的時候,他們的學(xué)習(xí)行為才會更有目的,更為主動。因此,教師在設(shè)計教學(xué)內(nèi)容時,很重要的一點(diǎn),應(yīng)該在第一次課上首先講清楚C語言課程對于學(xué)生有何幫助,更通俗一點(diǎn)講,要讓學(xué)生心里明白“學(xué)了有啥用”。而此時教師也應(yīng)避免向?qū)W生傳達(dá)過于空洞或不太實(shí)際的內(nèi)容,比如“C語言能鍛煉邏輯思維能力,提高綜合素質(zhì)”等等,因?yàn)楸磉_(dá)的事物過于抽象,學(xué)生聽后往往如過耳煙云,沒有印象。相反,如果能利用學(xué)生務(wù)實(shí)的心理,把C語言的作用與學(xué)生最關(guān)心的學(xué)業(yè)、工作等問題聯(lián)系起來,效果就要好得多。比如,在面向電信專業(yè)的學(xué)生授課時,可以告訴學(xué)生目前電信行業(yè)中C語言的地位:絕大多數(shù)軟件都由C語言編寫,能夠精通掌握C語言無疑在從事電信軟件的相關(guān)工作時有很大的優(yōu)勢;再如,可列舉一些較為突出的往屆畢業(yè)生的收入狀況等等,這些內(nèi)容,對于大多數(shù)學(xué)生來說,往往具有很大的吸引力和驅(qū)動力。而學(xué)生明白了學(xué)習(xí)意義后,其積極性必然得到提高。
C語言的特點(diǎn)之一就是知識點(diǎn)龐雜零散,條條框框很多,編程時一不注意,容易出錯。因此學(xué)生經(jīng)常犯的一個學(xué)習(xí)方法上的錯誤就是:先去背書,把規(guī)則都記住了再去寫程序。這樣做有其合理性,就像學(xué)英語一樣,單詞都記不住,如何寫文章呢?但是這種方法存在兩個明顯的弊端:第一,C語言中規(guī)則很多,單憑死記硬背很難全部掌握。第二,記住了一條條的規(guī)則,但實(shí)際使用效果并不好。背課本的學(xué)生常遇到一個問題,貌似規(guī)則都記住了,但是程序的結(jié)果就是不對。究其原因,C語言是一門實(shí)踐性非常強(qiáng)的課程,與其說是看書記住的,不如說是編程練會的。因此,教師應(yīng)向?qū)W生灌輸和強(qiáng)調(diào)動手的重要性,一些編程的規(guī)則,通過學(xué)生反復(fù)使用練習(xí),自然而然就成為一種習(xí)慣,而不需要去刻意記憶,這樣的方法,相比背課本顯然有效的多。
很多教師在教授C語言時,只是簡單地將講授內(nèi)容做成電子教案,在課堂上照本宣科,按照程序語言語法、規(guī)則、變量、三種結(jié)構(gòu)按部就班地一路講來,學(xué)生卻日益提不起興趣,以至于對學(xué)習(xí)C語言產(chǎn)生倦怠心理,最后的教學(xué)效果會非常不理想。因此,教師要精心設(shè)計課堂內(nèi)容,做好知識的引入和適時啟發(fā),用學(xué)生容易接受的方式進(jìn)行講解。比如,在學(xué)習(xí)函數(shù)一章時,很多學(xué)生對于函數(shù)如何使用很不理解,不知道何時該定義函數(shù),何時該寫調(diào)用語句。教師如果單單從頭到尾一行行的講程序,學(xué)生不好把握。應(yīng)該從程序設(shè)計的一般步驟上向?qū)W生講清這個問題。C語言的程序編寫可分為四步,即:定義,輸入,運(yùn)算,輸出。而子函數(shù)的引入,就是把原有的運(yùn)算部分放到子函數(shù)中去,主函數(shù)中的運(yùn)算語句換成函數(shù)調(diào)用語句。主函數(shù)中的四步變成了:定義,輸入,調(diào)用,輸出,而具體的運(yùn)算過程由子函數(shù)完成。經(jīng)過這樣的講解,學(xué)生就比較容易理解函數(shù)的定義和使用了。
教師在教學(xué)過程中,一定要注意培養(yǎng)學(xué)生自主學(xué)習(xí),獨(dú)立思考的能力和習(xí)慣,要讓學(xué)生“斷奶”。比如,在進(jìn)行上機(jī)課輔導(dǎo)時,面對學(xué)生的提問,教師不能一味的幫學(xué)生找問題,調(diào)試程序。而是應(yīng)該引導(dǎo)學(xué)生自己動腦動手去找到問題,解決問題。我校使用VC++6.0作為編程環(huán)境,學(xué)生開始對錯誤提示很不感興趣,一是沒有養(yǎng)成看提示信息的習(xí)慣,二是發(fā)現(xiàn)是英文,不愿意花時間去閱讀。此時,教師可以在開始的幾次實(shí)踐課上先帶領(lǐng)學(xué)生讀錯誤提示,幫助學(xué)生判斷問題,查找原因,逐漸教會學(xué)生使用VC的各個輔助功能,從而慢慢的讓學(xué)生具備獨(dú)立調(diào)試程序的能力。絕不能大包大攬,使學(xué)生過于依賴教師。
學(xué)生計算機(jī)基礎(chǔ)不同是教師時常要面對的情況。有兩個處理此情況的思路,一是實(shí)行差異化的教學(xué)。比如,對于有一定編程基礎(chǔ)的學(xué)生,可以額外布置一些有一定難度的作業(yè),引導(dǎo)其進(jìn)行更深層次的思考;或是給學(xué)生創(chuàng)造實(shí)踐的機(jī)會,參與某個具體的項目等等。此外,可以參照英語的分級教學(xué)的思路,實(shí)行編程語言分級教學(xué)。在開課之前,先對學(xué)生進(jìn)行水平測試,根據(jù)成績把學(xué)生分在不同層次的班級進(jìn)行授課,授課內(nèi)容當(dāng)然有所不同,這樣也可在一定程度上化解學(xué)生基礎(chǔ)不同和教學(xué)內(nèi)容一致之間的矛盾。總而言之,應(yīng)該把學(xué)生之間的差異作為安排教學(xué)內(nèi)容一個重要因素來考慮。
每一位教師都希望把學(xué)生個個都培養(yǎng)成編程高手,而這個愿望是不切實(shí)際的。教學(xué)的內(nèi)容往往受多方面因素的影響:本課程的培養(yǎng)目標(biāo),學(xué)生的接受能力,課時的多少,教材的選用等等。以當(dāng)前的實(shí)際情況來看,學(xué)生在一學(xué)期的學(xué)習(xí)后,還很難寫出真正像樣的程序:定義變量名沒有實(shí)際意義(多是簡單的單個字符),所編程序不具有實(shí)用價值(只能應(yīng)付考試),不了解系統(tǒng)函數(shù)(學(xué)生能接觸到的函數(shù)很有限),沒有養(yǎng)成良好的編程習(xí)慣(不懂如何加注釋)等等??梢哉f,學(xué)生從課堂上學(xué)到的只是C語言的皮毛,遠(yuǎn)遠(yuǎn)沒有看到C語言的全貌。這其中,有教材的原因,一些教材上就是用的a,b,c這樣簡單的變量,就是十幾行的簡單程序,學(xué)生難免會依葫蘆畫瓢,因此,選用恰當(dāng)?shù)慕滩膶ε囵B(yǎng)學(xué)生的編程習(xí)慣非常重要。除了教材,也有課程安排的原因,C語言往往課時少,內(nèi)容多,很多老師有這樣的感覺,剛剛講到精髓的地方,要結(jié)課了;學(xué)生剛學(xué)了點(diǎn)有深度的東西(指針),還沒吃透,馬上又要進(jìn)行期末考試。當(dāng)然,要在60-70學(xué)時內(nèi)把C語言講透很困難。但在課程設(shè)置時,應(yīng)該考慮到課程的延續(xù)性,可以讓學(xué)生在后續(xù)學(xué)期中選修C語言的高級內(nèi)容,以利于學(xué)生對于本門語言的精通掌握。
作為一門重要的基礎(chǔ)性編程語言,C語言在培養(yǎng)學(xué)生的編程習(xí)慣,算法設(shè)計能力,以及后續(xù)課程的學(xué)習(xí),都有著重要的意義。本文從教學(xué)實(shí)踐出發(fā),列舉了C語言教學(xué)中常面臨的一些問題,并分析原因,同時提出了解決思路,為進(jìn)一步做好C語言的教學(xué)工作,不斷提升教學(xué)效果做出探討。
[1] 程傳鵬.基于大學(xué)生心理特點(diǎn)的C語言教學(xué)方法[J].計算機(jī)教育,2012,(01):68 -71.
[2] 方紅琴.立體式C語言程序設(shè)計教學(xué)改革探討[J].計算機(jī)教育,2012,(12):26 -28.
[3] 王巍.高級語言程序設(shè)計課程教學(xué)方法探析[J].計算機(jī)教育,2012,(08):44 -46.
[4] 陳高云,李蕊,王嘉昀.貫穿模塊化編碼的C語言教學(xué)過程[J].計算機(jī)教育,2012,(12):86-89.