江 波
淮陰工學(xué)院計算機(jī)工程學(xué)院,江蘇省淮安市 223003
程序設(shè)計語言的教學(xué)是高等學(xué)校計算機(jī)基礎(chǔ)教學(xué)中的一個重要組成部分,對于培養(yǎng)學(xué)生的邏輯思維能力、使用現(xiàn)代信息技術(shù)解決實際應(yīng)用問題的能力具有重要的作用,同時也是全國和各省計算機(jī)等級考試二級的主要考核內(nèi)容。C++作為一門重要的程序設(shè)計語言受到了很多高校的重視,除了計算機(jī)專業(yè)外,很多理工科專業(yè)特別是通信工程、電子信息工程、信息與計算科學(xué)等也大都采用C++作為學(xué)生的入門編程語言。C++語言還是電子信息類專業(yè)很多后續(xù)專業(yè)課程的基礎(chǔ),如數(shù)據(jù)結(jié)構(gòu)、數(shù)學(xué)建模、操作系統(tǒng)、自動控制、單片機(jī)與嵌入式系統(tǒng)等。同時C++也是ACM國際大學(xué)生程序設(shè)計競賽的主流編程語言。但相對于其他的計算機(jī)等級考試語言Visual Basic,VisualFoxpro,C和Java,C++具有很大的學(xué)習(xí)和使用難度,教學(xué)效果往往不佳, 從我校的調(diào)查結(jié)果看,歷年來C++等級考試的通過率都明顯低于其他編程語言。本文將從學(xué)生的現(xiàn)狀和特點出發(fā),深入分析影響大學(xué)非計算機(jī)專業(yè)C++教學(xué)效果的因素并給出相應(yīng)的建議。
作為普通二本院校,學(xué)生的基礎(chǔ)相對薄弱,很多學(xué)生以前從未接觸過程序設(shè)計,部分學(xué)生即使在高中學(xué)過一些簡單的程序設(shè)計,但由于信息技術(shù)課程不是高考科目,很多中學(xué)不太重視,因此大部分學(xué)生對程序設(shè)計只具有一些表面上的粗淺認(rèn)識,不具有實際的編程技能。而對于非計算機(jī)專業(yè)的大學(xué)生而言,這個問題更加突出,很多學(xué)生認(rèn)為這門課程不是他們的專業(yè)范疇,從思想上缺乏足夠的重視。
針對學(xué)生的實際情況,應(yīng)該充分思考C++程序設(shè)計課程在非計算機(jī)專業(yè)教學(xué)體系中的地位和作用,和學(xué)生多交流,首先要從思想上提高學(xué)生的重視程度,同時為了切實的加強(qiáng)教學(xué)效果,作為教師還應(yīng)該思考非計算機(jī)專業(yè)學(xué)生和計算機(jī)專業(yè)學(xué)生的不同點,在教學(xué)過程中加強(qiáng)對影響非計算機(jī)專業(yè)C++教學(xué)效果的因素的探索,采用因材施教的策略。
2.1 上課時應(yīng)該立足基礎(chǔ)知識的講解。C++是一門非常復(fù)雜的語言,語法現(xiàn)象繁雜,知識點非常豐富,且知識更新較快。在教學(xué)中應(yīng)該遵循80%~20%的原則,也就是最重要的和最常用的知識往往只占有20%的比重,而剩下的80%的知識點則不是很常用。作為教師應(yīng)該向?qū)W生講解這些最重要的知識點,如基本的數(shù)據(jù)類型、基本的運(yùn)算符、基本的流程控制語句,指針和引用的概念、函數(shù)的概念、遞歸調(diào)用、類和對象的基本概念、公有繼承、多態(tài)性、函數(shù)模板和類模板等。而其他一些不該太常用的細(xì)節(jié)性知識點則完全可以布置學(xué)生自學(xué)、不必在課堂上講解。如函數(shù)的默認(rèn)參數(shù)、內(nèi)聯(lián)函數(shù)、指向二維數(shù)組的指針、函數(shù)指針、多重繼承等。否則學(xué)生在學(xué)習(xí)的過程中會陷入到細(xì)節(jié)的漩渦中,只見樹木不見森林,且學(xué)習(xí)的過程中不易把握重點,同時也增加了學(xué)習(xí)負(fù)擔(dān),最終造成學(xué)生的厭學(xué)。這一原則對于非計算機(jī)專業(yè)的教學(xué)更加重要,非計算機(jī)專業(yè)學(xué)生學(xué)習(xí)編程的目的在于掌握C++解決本專業(yè)相關(guān)的實際應(yīng)用問題,因此不要面面俱到,夠用就好。同時很多高校都在精簡課時,把握重要知識的教學(xué)能夠保證在較少的課時內(nèi)達(dá)到更好的教學(xué)效果。
2.2 使用免費的且較新的集成開發(fā)環(huán)境。長期以來,我國大部分高校的C++程序設(shè)計教學(xué)和實驗環(huán)境仍然使用Visual C++ 6.0版本。使用該軟件的一個重要原因是首先該版本的軟件在我國流行廣泛,有很多的技術(shù)資料和圖書可供學(xué)習(xí)和參考,學(xué)習(xí)和使用較為方便。另一個重要原因是我國的計算機(jī)等級考試采用該版本,因此日常教學(xué)也不得不使用該軟件以應(yīng)對考試。但是隨著大學(xué)計算機(jī)基礎(chǔ)教學(xué)的改革應(yīng)該采用更新的教學(xué)和實驗環(huán)境,理由如下。首先,Visual C++ 6.0作為上世紀(jì)末推出的發(fā)行版,不能夠很好的支持C++國際標(biāo)準(zhǔn),不利于培養(yǎng)學(xué)生編寫出符合標(biāo)準(zhǔn)規(guī)范的C++程序;其次該軟件是一個商業(yè)軟件,而大部分高校的實驗室和機(jī)房安裝的都是盜版軟件,存在版權(quán)問題;第三,該軟件由于發(fā)布時間太長,不支持較新的Windows 7,Windows 8以及Windows Vista操作系統(tǒng),在這些系統(tǒng)上安裝和運(yùn)行該軟件會出現(xiàn)各種問題。因此建議采用較新的C++編譯環(huán)境,可以采用微軟的Visual C++2005/2008/2010等,這些軟件提供了免費的express版本,既不存在版權(quán)問題,同時可以更好的支持C++國際標(biāo)準(zhǔn),并且能夠支持較新的Windows操作系統(tǒng),作為教學(xué)和個人使用完成能夠勝任需求。除了微軟的免費C++環(huán)境外,還可以采用Cgywin等開源編譯器,配套可以使用Eclipse等構(gòu)建成一套開源的集成開發(fā)環(huán)境。這類軟件同樣支持最新的C++國際標(biāo)準(zhǔn),同時和微軟環(huán)境相比,還具有體積小巧易于使用等特點,且不需要安裝龐大的.netframework,可移植性好,值得在高校大力推廣。除了基于Windows系統(tǒng)學(xué)習(xí)C++,還可以在Linux等開源系統(tǒng)中學(xué)習(xí)和使用C++,絕大多數(shù)的Linux發(fā)行版中已經(jīng)默認(rèn)安裝了gcc和g++編譯器,可以編譯C和C++程序,配合Linux系統(tǒng)中的vi編輯器可以實現(xiàn)一套完整的集成開發(fā)環(huán)境。當(dāng)然,從計算機(jī)等級考試的角度,教師可以花適當(dāng)?shù)臅r間向?qū)W生介紹Visual C++ 6.0的基本使用。
2.3 首先將C++作為一個更好的C(C++ is first a better C)來使用,然后再過渡到面向?qū)ο蟮某绦蛟O(shè)計教學(xué)。有些教育界人士[1]認(rèn)為C和C++是兩種不同的程序設(shè)計語言,可以直接學(xué)習(xí)C++,而不需要先學(xué)習(xí)C,因此這類教材在編排上直接向?qū)W生灌輸面向?qū)ο蟪绦蛟O(shè)計的思想。在學(xué)生還不清楚編程是怎么回事的情況下提出了一大堆面向?qū)ο蟪绦蛟O(shè)計的術(shù)語,如類、對象、繼承、派生等,教學(xué)效果可想而知。這種觀點可能來源于Java語言的教學(xué)思想,但實際上Java和C++是兩種不同的編程語言,在Java中任何事物都是對象,所以即使編寫一個簡單的Hello World程序,都需要編程者了解面向?qū)ο蟮幕舅枷耄@實際上增加了學(xué)習(xí)的難度,容易造成學(xué)生的危難情緒;而C++語言和C語言密切相關(guān),C++語言完全兼容C(從0x11國際標(biāo)準(zhǔn)開始C++不完全兼容C),且C++中包含了面向過程編程和面向?qū)ο缶幊虄煞N編程模式。先學(xué)習(xí)C++的面向過程的程序設(shè)計(與C兼容部分)有利于學(xué)生盡快掌握程序設(shè)計的基本思想和流程,對進(jìn)一步學(xué)習(xí)C++的面向?qū)ο蟪绦蛟O(shè)計起到了很好的鋪墊。同時這樣的教學(xué)安排將C++中的難點進(jìn)行了分散,有利于學(xué)生的學(xué)習(xí)和掌握。從另一個角度來說,面向?qū)ο蟮某绦蛟O(shè)計和面向過程的程序設(shè)計也不是對立的。在面向?qū)ο蟪绦蛟O(shè)計中,類中的方法本質(zhì)上就是函數(shù),設(shè)計的思想仍然遵循程序=算法+數(shù)據(jù)結(jié)構(gòu)的模式。熟悉掌握面向過程的程序設(shè)計方法對于學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計能夠起到促進(jìn)作用。此外,通過這種教學(xué)模式,學(xué)生實際上掌握了兩種編程語言(C和C++),在隨后的計算機(jī)等級考試中學(xué)生可以根據(jù)情況選擇參加C或者C++考試,并有利于學(xué)生參加全國計算機(jī)等級考試三級的上機(jī)考試(C程序設(shè)計)。從前幾年的經(jīng)驗來看,很多采用面向?qū)ο竽J浇虒W(xué)的學(xué)生在參加計算機(jī)三級考試時,往往在C語言的上機(jī)考試部分栽跟頭。
2.4 加強(qiáng)實驗教學(xué)的力度和效果。C++本質(zhì)上不是一門原理性課程而是一門實踐課程。通過實驗教學(xué)可以提高學(xué)生的編程能力以及解決實際問題的能力。和文科專業(yè)不同。電子信息類專業(yè)以及信息與計算科學(xué)的學(xué)生畢業(yè)后很多都從事和計算機(jī)相關(guān)的工作,提高他們的編程能力對于提高他們的就業(yè)能力具有重要的作用;對于選擇繼續(xù)考研的學(xué)生,編程能力也是一個非常重要的技能,所以加強(qiáng)實驗教學(xué)的力度對于學(xué)生今后的發(fā)展具有重要的意義。從本科專業(yè)的學(xué)習(xí)來說,這些專業(yè)會涉及大量的數(shù)學(xué)計算,目前大部分高校都采用MATLAB作為實驗平臺,該軟件同樣存在版權(quán)問題或者購買成本太高,因此可以采用免費或開源的C++編譯環(huán)境來代替。具體到實驗課時的安排,一般可以將C++的理論課和實驗課的課時比例安排在2:1或者1:1,另外在課余應(yīng)該保證學(xué)生有充足的上機(jī)時間進(jìn)行編程訓(xùn)練。在實驗項目的選擇上,應(yīng)該適當(dāng)增加面向過程部分的課時。理由有二:首先面向?qū)ο筮^程的程序設(shè)計部分是整個C++學(xué)習(xí)的基礎(chǔ),這部分掌握的好壞對于面向?qū)ο蟪绦蛟O(shè)計的學(xué)習(xí)有很大的影響,同時也會影響到學(xué)生的學(xué)習(xí)信心;其次:面向?qū)ο蟪绦蛟O(shè)計的初衷是解決軟件危機(jī),也就是復(fù)雜軟件項目開發(fā)的可控性,而作為非計算機(jī)專業(yè)學(xué)生的編程入門學(xué)習(xí),一般很難涉及復(fù)雜度太大的程序,因此面向?qū)ο蟮脑O(shè)計方案意義不大。對于非計算機(jī)專業(yè),面向?qū)ο蟪绦蚪虒W(xué)的作用在于引導(dǎo)學(xué)生熟悉面向?qū)ο蟮某绦蛟O(shè)計思想,熟悉C++中相應(yīng)的基本語法,但在實驗安排上不必花太多的時間。
2.5 關(guān)于教材的選擇。
選擇一本好的教材對于提高教學(xué)質(zhì)量以及學(xué)生學(xué)習(xí)效果具有很重要的作用。但各種教材編寫的出發(fā)點以及適用人群不盡相同。有些教材更多的面向重點高校的計算機(jī)專業(yè)學(xué)生,這類教材的特點是體系結(jié)構(gòu)完整,面向?qū)ο笤O(shè)計的思想方法介紹的比較深入,且包含了很多前沿的C++內(nèi)容,如STL(標(biāo)準(zhǔn)模板庫)[1];有些教材則更多的面向計算機(jī)等級考試,以考試通過率為出發(fā)點,較好了分析了考試的題型和解題要點。從二本非計算機(jī)專業(yè)學(xué)生的實際情況出發(fā),最好選用先面向過程、后面向?qū)ο蟮膫鹘y(tǒng)教學(xué)方式[2],要求突出基礎(chǔ)知識,例題和習(xí)題難度適中,同時語言簡潔流暢,圖文并茂;每個例題都要用運(yùn)行結(jié)果,以便于學(xué)生上機(jī)實驗和模仿;最好配套有電子教案ppt,便于教師教學(xué)。另外考慮到C++的實驗教學(xué),最好能有配套的實驗教材,提供詳細(xì)的實驗步驟和操作流程,采用先例題后上機(jī)實驗的寫作方式。教學(xué)實踐表明,譚浩強(qiáng)教授的C++程序設(shè)計系列教材在實際教學(xué)中效果較好[3]。
2.6 學(xué)時安排策略。相關(guān)的非計算機(jī)專業(yè)包含了信息與計算科學(xué)、物聯(lián)網(wǎng)工程、通信工程、信息管理與信息系統(tǒng)等,其中信息管理與信息系統(tǒng)隸屬于管理類學(xué)科,其他專業(yè)屬于工科。因此在教學(xué)設(shè)計和學(xué)時安排上應(yīng)該有所調(diào)整。對于管理類學(xué)生原則上嚴(yán)格遵循計算機(jī)等級考試的范圍講解,不易太多擴(kuò)展,而工科學(xué)生可以根據(jù)學(xué)時在講解基本知識的基礎(chǔ)上適當(dāng)講解C++中的特色知識點,如簡單的STL或者一些開源的GUI設(shè)計框架,如QT、GTK等。建議的學(xué)時安排為管理類理論48+實驗24,工科類理論64+實驗32。
2.7 考試改革。傳統(tǒng)的C++程序設(shè)計課程考試模式為閉卷筆試。這種考試方式的特點是注重語法考核,強(qiáng)調(diào)知識點的記憶,對實際編程能力檢測能力較弱。近年來逐步改為在線考試,考試題目來源于預(yù)先構(gòu)建的試題庫??荚嚨念}型包括傳統(tǒng)的選擇題、填空題和判斷題,以及較新的程序閱讀填空,但沒有采用完全獨立編程的方式。這有利于計算機(jī)自動閱卷,但仍不能真實的體現(xiàn)學(xué)生的編程水平,因此可以借鑒全國計算機(jī)等級考試的模式,加大程序閱讀填空的分量,同時添加程序閱讀改錯以及完全獨立編程的試題比重,從而更好的引導(dǎo)學(xué)生學(xué)習(xí)。除此之外,可以加大平時實驗的考核比重,如期末成績占總分的70%,平時實驗占總分的30%。
遵循以上的教學(xué)原則和經(jīng)驗,通過幾年來對信息與計算科學(xué)、物聯(lián)網(wǎng)工程、通信工程、信息管理與信息系統(tǒng)等多個非計算機(jī)專業(yè)的教學(xué)實踐,收到了較好的教學(xué)效果。學(xué)生普遍克服了心理障礙,增強(qiáng)了學(xué)習(xí)信心,提高了學(xué)習(xí)興趣,部分同學(xué)喜歡上了程序設(shè)計,并在考研時選擇了計算機(jī)專業(yè);另外有部分同學(xué)堅持在課余進(jìn)一步學(xué)習(xí)C++或者其他編程語言,并在學(xué)校和淮安市組織的大學(xué)生程序設(shè)計大賽中獲獎;這幾年學(xué)生對任課教師的評教也很高,多年來一直是優(yōu)秀。
C++是一門重要的基礎(chǔ)課程,對后續(xù)專業(yè)課程的學(xué)習(xí)具有重要的意義。本文從二本院校非計算機(jī)專業(yè)角度出發(fā),根據(jù)多年的教學(xué)經(jīng)驗談了一些膚淺的經(jīng)驗和體會,希望能夠?qū)氖翪++教學(xué)的教師提供一些借鑒。當(dāng)然,不同學(xué)校有不同的特點,今后應(yīng)該進(jìn)一步聽取學(xué)生的意見和建議以便取得更好的教學(xué)效果。
[1]錢能.C++程序設(shè)計第二版[M].清華大學(xué)出版社,2005
[2]錢能.C++程序設(shè)計教程修訂版[M].清華大學(xué)出版社,2009
[3]譚浩強(qiáng).C++程序設(shè)計[M].清華大學(xué)出版社,2004