王艷會 鐘誠 秦斌
1中國人民解放軍鎮(zhèn)江船艇學(xué)院 江蘇 212003
2江蘇科技大學(xué) 江蘇 212003
多年來,很多工作在C++教學(xué)一線的教育工作者在教學(xué)實踐中就提高課程授課效果、注重專業(yè)素質(zhì)教育等方面提出了很多好的教學(xué)改進(jìn)方法,使我國高校的計算機(jī)教育水平得到了很大程度的提高。然而,當(dāng)今國內(nèi)C++課程的教學(xué)方法遠(yuǎn)非完美。本文就目前國內(nèi)C++教學(xué)的現(xiàn)狀,提出幾點當(dāng)前C++教學(xué)中的不足,并給出若干改進(jìn)的建議。
對于C++程序設(shè)計課程,C++語法和編程思維是教學(xué)內(nèi)容,教學(xué)中所使用的具體的C++編譯器和集成開發(fā)環(huán)境(Integrated Development Environment,IDE)是教學(xué)工具。教學(xué)工具的陳舊必將導(dǎo)致教學(xué)內(nèi)容的陳舊。目前國內(nèi)高校C++程序設(shè)計課程多采用Visual C++ 6.0(VC6.0)。VC6.0是Microsoft公司于1998年推出的可視化集成開發(fā)環(huán)境,至今已有14年的歷史,是一種比較老舊的C++開發(fā)環(huán)境。由于目前C++標(biāo)準(zhǔn)、IDE技術(shù)和軟件科學(xué)的飛速發(fā)展,VC6.0作為教學(xué)和開發(fā)工具有著下列難以彌補(bǔ)的缺陷。
(1) 在易用性方面落后。VC6.0易用性差。與Visual C++.Net 2005相比,VC6.0很多功能的使用很不方便,如斷點的設(shè)置、控件的使用以及MFC類的完善程度,等等。筆者在教學(xué)中發(fā)現(xiàn),由于VC6.0在使用上的不便和界面的不友好,使學(xué)生容易產(chǎn)生實踐中的挫折感和對C++的畏懼心理,在該門課程結(jié)束后不愿繼續(xù)使用C++。
(2) 在IDE軟件兼容性方面,VC6.0面臨著越來越嚴(yán)重的兼容性問題。VC6.0在Windows XP中可以很好的安裝和運(yùn)行,但是對于正逐步取代Windows XP的Windows 7以及更新版本,VC6.0有著很多兼容性的問題。隨著Windows XP在軟件市場的退出,VC6.0亦將退出,到時候曾在大學(xué)中學(xué)習(xí)VC6.0的學(xué)生將面臨熟悉的IDE無法找到合適的計算機(jī)來安裝的問題。因此,VC6.0已經(jīng)不再適合作為教學(xué)工具,否則將對學(xué)生以后的學(xué)習(xí)和工作產(chǎn)生不利影響。
有些不切實用和怪異的內(nèi)容和思想在課程中被反復(fù)強(qiáng)調(diào)、重點考察。有些內(nèi)容在當(dāng)今的軟件開發(fā)中已經(jīng)不常使用,但在C++課堂上卻作為授課重點。如iostream流類以及其中的輸出控制符在可視化開發(fā)工具大行其道的今天已經(jīng)極少使用,卻被作為課堂講授和考試考察的重點內(nèi)容。有些鉆牛角尖的題目常被用來作為課堂例題和練習(xí)題,如“int i=5;bool j=true;求i&&j”之類的題目帶有并非提倡的編程風(fēng)格。又如自增/自減運(yùn)算符的問題“int a=3,b=5,c;c=a*b+++b;cout< 多數(shù)學(xué)生在課程實驗中沒有得到足夠的鍛煉。實驗環(huán)節(jié)中,實驗題目難度水平單一,學(xué)生各自單打獨斗,都不利于學(xué)生對于語法知識的鞏固和編程能力的提高。對于計算機(jī)類專業(yè)學(xué)生而言,編程技能是最為重要的專業(yè)基礎(chǔ),編程能力的強(qiáng)弱直接關(guān)系到后續(xù)專業(yè)課程的學(xué)習(xí),編程能力強(qiáng)則后續(xù)課程的學(xué)習(xí)扎實,且能夠?qū)⑺鶎W(xué)內(nèi)容付諸實踐,反之則在后續(xù)課程的學(xué)習(xí)中屢屢遇到實質(zhì)性的困難,最終僅能學(xué)到理論,而無法實現(xiàn)。而實驗環(huán)節(jié)的教學(xué)效果直接影響到學(xué)生編程能力的強(qiáng)弱。在實驗過程中,實驗題目多為單打獨斗的“個人英雄主義”題目,即每個學(xué)生獨自完成的題目。適當(dāng)比重的個人單獨完成的題目可以鞏固學(xué)生理論課所學(xué)的語法知識,鍛煉學(xué)生的基本程序設(shè)計能力,但不利于培養(yǎng)學(xué)生的模塊化設(shè)計觀念和團(tuán)隊合作意識,也會使學(xué)生在編程風(fēng)格方面過于隨意。 很多學(xué)生的C++程序設(shè)計生涯僅維持于C++程序設(shè)計課程開設(shè)時間內(nèi),在后續(xù)課程中,如數(shù)據(jù)庫、操作系統(tǒng)、計算方法等專業(yè)主干課和數(shù)字圖像處理、模式識別等專業(yè)方向課中不再使用。這當(dāng)中有C#、Java和matlab等使用更加方便的編程語言的影響,也有學(xué)生對于自己C++程序設(shè)計能力不自信的因素。 上述是目前C++課程授課中普遍存在的問題。這些問題不可避免的影響了學(xué)生對C++語言的掌握和程序設(shè)計能力的提高。針對上述不足,筆者建議采取下列措施。 目前已有的C++標(biāo)準(zhǔn)有非官方的VC6.0標(biāo)準(zhǔn)、國際標(biāo)準(zhǔn)組織C++標(biāo)準(zhǔn)委員會制定的1998標(biāo)準(zhǔn)、2003標(biāo)準(zhǔn)和新近推出的2011標(biāo)準(zhǔn)。對于VC6.0標(biāo)準(zhǔn),由于年代久遠(yuǎn),對應(yīng)的IDE——Visual C++ 6.0已經(jīng)被淘汰,因此可以不向?qū)W生介紹;1998標(biāo)準(zhǔn)與2003標(biāo)準(zhǔn)基本沒有太大區(qū)別,且為目前流行的各種主流的C++集成開發(fā)環(huán)境所遵守,可以作為課堂講授的語法依據(jù);2011標(biāo)準(zhǔn)為新近推出,尚無編譯器支持,且與2003標(biāo)準(zhǔn)有較大區(qū)別,為了避免學(xué)生在語法學(xué)習(xí)過程中混淆不清,可不在具體章節(jié)中介紹,僅在最后單獨作為一節(jié)——C++語法展望,向?qū)W生簡要提及。 對于集成開發(fā)環(huán)境,推薦使用Microsoft公司的Visual C++.Net 2010或CodeGear公司(前Borland公司子公司)的C++ Builder 2009。這些IDE不僅對C++的較新標(biāo)準(zhǔn)支持較好,而且使用方便。 不糾結(jié)于無用的語法細(xì)節(jié)和題目。對于基本的語法,務(wù)必介紹全面,并采用具體的簡單應(yīng)用作為例題幫助學(xué)生掌握,不使用偏、怪、不符合編程習(xí)慣的題目講解語法。對語法的掌握的要求,只需達(dá)到會用、能用即可。 從過程控制語句部分開始,著重鍛煉學(xué)生的編程思維,對函數(shù)、類等內(nèi)容的講解不可僅停留在語法層面上,更要讓學(xué)生明白為何使用這些方法,讓學(xué)生掌握如何使用這些方法,并鍛煉學(xué)生使用這些方法創(chuàng)造性的解決問題的能力。可以將尚未開設(shè)的課程中涉及的一些算法,如計算方法中的線性方程組數(shù)值解法、模式識別中的K均值聚類,在不涉及課程理論的前提下作為鍛煉編程思維的題目向?qū)W生提供并指導(dǎo)設(shè)計思路,讓學(xué)生體會C++在實踐中該如何使用、編程思路該如何整理。從根本上說,一個學(xué)生的C++課程學(xué)的好不好,不在于該生掌握了多少語法,而在于該生能不能將一個實際的問題分解為多個易于使用編程解決的算法模塊,而這正是鍛煉學(xué)生編程思維和能力的目標(biāo)。 C++程序設(shè)計課程的直接目的是學(xué)習(xí)基本的語法和鍛煉編程思維,而最終目的則是使學(xué)生能夠使用C++做各方面的軟件產(chǎn)品的研發(fā)。要從事軟件產(chǎn)品的研發(fā),就需要涉及基于對話框的應(yīng)用程序的編寫。從C++基本語法到基于對話框的應(yīng)用程序跨度極大。這類直接用于開發(fā)的程序框架和風(fēng)格與C++課程的教學(xué)風(fēng)格有很大差距,僅靠學(xué)生自己摸索有很大難度,但是一但向?qū)W生講明其中的聯(lián)系,并對使用方法做簡要介紹,就不僅能夠消除學(xué)生對基于對話框的應(yīng)用程序的陌生感,更能對前面所講授的函數(shù)和類等內(nèi)容產(chǎn)生難以替代的鞏固作用!這是由于學(xué)生在該課程學(xué)習(xí)過程中難以接觸到C++的實際應(yīng)用,對指針、函數(shù)和類等關(guān)鍵內(nèi)容的作用并沒有深刻認(rèn)識,而只有在他們看到真正的C++開發(fā)模式時,才能對這些內(nèi)容的使用方法和習(xí)慣心中有數(shù),在日后的學(xué)習(xí)中對C++課程所學(xué)內(nèi)容的運(yùn)用也更為成熟和自信。真實的C++產(chǎn)品開發(fā)環(huán)境對于本科生的重要性,就如同真實的戰(zhàn)場經(jīng)歷對于一個操練已久的新兵的重要性。當(dāng)然,如果學(xué)校開設(shè)的后續(xù)課程中有.Net(C++),這部分內(nèi)容可以不介紹。 對于基于對話框的應(yīng)用程序框架的介紹,可以采用CodeGear公司的C++ Builder 2007/2009或Microsoft公司的Visual C++ 2005/2008/2010。相比之下,前者較簡單,后者較復(fù)雜。如果采用后者,則需要介紹Win32 API函數(shù)和Microsoft MFC。 單一的實驗題目很可能使部分學(xué)生因為無法完成而產(chǎn)生挫折感,而這會導(dǎo)致學(xué)生對編程喪失興趣和信心,終將導(dǎo)致學(xué)生學(xué)習(xí)不積極和更強(qiáng)的挫折感、失落感,最終形成惡性循環(huán)。對于每個實驗給出多個難度不同的題目供學(xué)生選做,不僅使處于不同水平的學(xué)生都能得到鍛,而且可以讓學(xué)生獲得成就感,增強(qiáng)他們使用編程解決問題的信心。對于編程類的課程,讓學(xué)生懷著“人有多大膽,地有多大產(chǎn)”的信心是至關(guān)重要的。 另外,對于函數(shù)、類等內(nèi)容,給出分組合作題目也很重要。初學(xué)者往往為自己能夠單獨完成一小段程序而沾沾自喜,對程序的易用性和易讀性并沒有追求,甚至將程序的晦澀、復(fù)雜作為自己的成績。而實際上,晦澀、復(fù)雜的程序是不能被別人使用的,僅能稱為“垃圾”。通過團(tuán)隊合作,讓每個學(xué)生認(rèn)識到,自己為整個團(tuán)隊提供的程序不僅要是可用的程序,更需要是易用、易讀、健康的高質(zhì)量代碼。這樣更利于學(xué)生養(yǎng)成良好的編程習(xí)慣。 在后續(xù)開設(shè)的能夠使用C++的課程(如操作系統(tǒng)、計算方法、數(shù)字圖像處理等)實驗中,為學(xué)生提供完成實驗的基本程序框架,引導(dǎo)學(xué)生通過C++程序設(shè)計解決這些課程中的問題,進(jìn)而在C++課程結(jié)束后進(jìn)一步鍛煉學(xué)生的C++程序設(shè)計能力和思維。 課程考試題型是對學(xué)生學(xué)習(xí)方式的導(dǎo)向。對于C++課程考試,填空和選擇題型側(cè)重考察語法,程序設(shè)計題不僅考察語法,更考察學(xué)生的C++程序設(shè)計能力和思維。顯然后者的考察范圍更為廣泛,考察方面更為重要。如果考試卷中的填空題和選擇題過多,將很容易導(dǎo)致學(xué)生產(chǎn)生應(yīng)試心理,重語法、輕能力,這是我們最不愿看到的。因此,考試題中要最大限度降低填空題和選擇題所占的比重,甚至不考這兩種題型。對于程序設(shè)計題,為了能夠確切反映學(xué)生的真實水平,對同一知識點的考察可以出多道難度不同(當(dāng)然分值也不同)的題目供學(xué)生選做。這樣可以避免考試對學(xué)生C++學(xué)習(xí)方向的誤導(dǎo)。 本文闡述了計算機(jī)類專業(yè)C++程序設(shè)計課程教學(xué)中常見的不足之處,并給出了自己在教學(xué)實踐中得出的改進(jìn)方法,這些方法對于非計算機(jī)類專業(yè)的C++教學(xué)也具有參考意義。針對目前計算機(jī)類本科生動手能力有待提高的現(xiàn)狀,C++程序設(shè)計課程的教學(xué)方法仍需改進(jìn)。更新教學(xué)工具和內(nèi)容、重視編程思維的培養(yǎng)、良好編程習(xí)慣的養(yǎng)成和貼近實戰(zhàn)的教學(xué)模式將是進(jìn)一步提高該課程教學(xué)效果的方向。 [1] 李駿揚(yáng),陳漢武.工科專業(yè)C++語言教學(xué)目標(biāo)與方法的探討[J].計算機(jī)教育.2007. [2] 何靈敏,許翔,陸慧娟,等.C++教學(xué)中編程習(xí)慣的養(yǎng)成[J].計算機(jī)教育.2011. [3] 陳國良,董榮勝.計算思維與大學(xué)計算機(jī)基礎(chǔ)教育[J].中國大學(xué)教學(xué).2011. [4] 秦斌,王艷會.關(guān)于計算機(jī)專業(yè)“密碼學(xué)”課程教學(xué)內(nèi)容和教學(xué)方法的探討[J].計算機(jī)教育.2009. [5] 馬洪霞.“C++程序設(shè)計”課程教學(xué)與創(chuàng)新型人才培養(yǎng)[J].電氣電子教學(xué)學(xué)報.2011.1.3 實驗的欠缺
1.4 后期鍛煉的缺乏
2 改進(jìn)的建議
2.1 更新集成開發(fā)環(huán)境
2.2 鍛煉編程思維
2.3 拓展課程內(nèi)容
2.4 選取不同難度級別的實驗題目
2.5 優(yōu)化考試題型
3 總結(jié)