朱俊++陳琳琳++朱嫻++謝玲++帥輝明


摘 要 分析獨立學院C++課程教學現狀,總結當前教學過程中的不足,并針對存在的問題,從課堂管理、教學內容、教學模式、教學輔助手段、課程考核制度等方面,提出C++課程教學改革的方法。
關鍵詞 獨立學院;計算機專業;面向對象C++程序設計;教學改革
中圖分類號:G642.0 文獻標識碼:B
文章編號:1671-489X(2017)02-0103-04
Teaching Reform and Practice on C++ Course of Computer Ma-jors in Independent Colleges//ZHU Jun, CHEN Linlin, ZHU Xian, XIE Ling, SHUAI Huiming
Abstract This paper analyzes the current teaching situation and sum-
marizes the disadvantages during C++ teaching and learning in inde-
pendent colleges. Thereafter, we put forward corresponding reform methods on classroom management, teaching contents, teaching approach, assistant teaching measure and examination system.
Key words independent college; computer major; object-oriented C++ programming; teaching reform
1 C++程序設計課程的地位
隨著“互聯網+”時代的到來,我國高度重視軟件產業的發展,為軟件產業提供了良好的發展環境。在國家政策的保障下,我國軟件產業基礎建設已初具規模。程序設計作為軟件開發的基石,是開展軟件開發工作的必備技能。因此,程序設計類課程已經越來越受到各高校的重視。在該類課程中,面向對象程序設計(以C++和Java語言為主要代表)是與面向過程程序設計(以C語言為主要代表)完全不同的一種程序設計模式,是目前軟件開發和程序設計的主要方法[1]。
C++又被稱為“帶類的C”,其主要特征是具有封裝性、繼承性和多態性,具有數據結構豐富、應用面寬、通用性和可移植性好、目標程序效率高等高級語言的優點,是眾多程序設計語言中最有活力和應用最為廣泛的一種。自20世紀90年代中期開始,面向對象C++程序設計課程逐步成為各高校計算機專業開設的專業必修課程,該課程掌握得好壞,不僅會影響學生對整個學科知識體系的理解,更能反映出學生的專業素質和技巧。
2 獨立學院C++課程教學現狀
獨立學院計算機專業培養目標 獨立學院是從普通高校衍生出來的、具有民辦機制的本科院校。隨著我國教育體制的不斷革新,向應用型本科院校轉型已經成為獨立學院的發展趨勢。計算機專業作為實踐性非常強的專業,要求學生具有開拓精神和解決計算機應用領域實際問題的能力,能夠成為綜合素質高、實踐能力強的高級應用型人才。
為了實現這一總體目標,獨立學院計算機專業面向對象C++程序設計課程應著重培養學生掌握程序設計的思想和方法,切實提高學生的動手編程能力,注重實踐教學,使學生打下堅實的基礎,提升學生在專業領域中應用計算機解決實際問題的意識和能力。
獨立學院學生的特點 盡管大部分獨立學院是以地方高等院校為母體,其區域定位、辦學層次的定位等與母體有著一定的相似之處,但在生源質量和教學設施等方面仍存有較大差異。與母體學校的學生相比,獨立學院的學生的知識基礎沒有那么扎實,且學習習慣、學習的主動性與自覺性等方面要稍微欠缺,但是他們動手能力較強,對新事物的接收能力、創新能力、組織溝通能力往往并不比一本的學生差。
以南京理工大學紫金學院為例,計算機專業的學生在國家級甚至是國際級的軟件人才大賽(如微軟創新杯大賽、中國大學生服務外包創新創業大賽、藍橋杯大賽)中取得許多優異的成績。總的來說,獨立學院的學生對實際的上機編程實踐和真實的軟件開發過程更感興趣。
當前C++教學過程中的不足 因為面向對象C++程序設計課程本身具有較強的理論性和非常高的實踐操作性,內容繁多、概念復雜、語法嚴格,所以學生在剛剛接觸這門課程時通常會覺得難以理解,這給C++教學工作帶來一定的困難。同時,本門課程大多數在大學一年級開設,對于大一學生而言,他們對計算機的熟悉程度參差不齊,尤其是在獨立學院學生自主學習意識不是太強的情況下,要在較短的時間內建立程序設計思維,獨立編寫能夠正確運行的程序,的確有一定的難度。目前,獨立學院計算機專業C++課程教學過程主要存在以下問題。
1)忽略了課堂管理。與中小學相比,大學教師對課堂紀律的管理沒有那么嚴格。由于C++課程是計算機類各專業的必修課,經常采用大班教學的方式,學生人數較多,座位也不固定,加之教師一般不認識所有學生,因此,一旦有個別學生缺課,教師很難發現,只能通過點名的方式來檢查學生的到課情況,這往往需要占用寶貴的上課時間。此外,在授課過程中如果發生某個學生違反課堂紀律,任課教師往往不及時點名阻止,導致學生上課隨意說話、睡覺、玩手機等不良現象時有出現。
2)教材不夠“精、細、新”。目前大部分學校的教學計劃是連續兩個學期分別開設C程序設計課程和面向對象C++程序設計課程,而由于C++語言是從C語言發展而來的,因此,C++教材的前半部分往往與C語言教材所講的內容一致,教師經常是從后半部分開始講,一本教材只用到一半的有效內容;由于教材篇幅和教學學時有限,大部分所選教材并不能真正在幾個重要的關鍵技術上讓學生理解透徹。此外,由于計算機技術發展很快,陳舊的教材內容往往落后于目前市場需求,與時代相脫節。
3)忽略了學生實踐能力的培養。大多數C++教師仍采用課堂講授、布置作業及實驗這種“教本位”教學模式,將教學重點放在語法規則等理論講授上,采用“提出概念—解釋概念—例題講解—習題”的教學思路,學生只有遇到上機時才有機會進入機房面對電腦進行實際操作。因此,多數學生通過一學期的學習之后,只會解決書本和試卷中的練習題,不會解決實際問題,不能動手編寫較復雜的程序。此外,在C++程序設計教學過程中,部分教師輕視設計、編碼以及團隊協作能力的培養,忽視工程經驗的積累,導致學生不會融會貫通,程序調試能力差,對程序設計的積極性不高。
4)傳統的作業布置、提交和批改方式。C++課程的作業一般是程序編寫類的題目,且作業一般通過紙質材料上交。對教師來說,批改作業是個既耗時又耗精力的事情,而且對于學生的錯誤或不足部分,只能通過叉或問號來體現,把作業發還給學生的時候,學生也不一定會去看,或者看了也不一定改。
5)片面的、不合理的考核方式。大多數情況下,C++課程的考核方式是通過一張試卷來決定最終成績。這種考核方式有兩大弊端。
①很多學生為了應付考試,在復習過程中只注重死記硬背,甚至連程序代碼都是強記的,并沒有真正理解程序的邏輯與結構,只會紙上談兵。
②由于采用筆試的方式進行考核,考核的重心偏向理論而不是實踐,因此,有些實踐能力較強的學生所取得的成績可能反而沒有對理論知識進行“突擊”的學生好。這樣的考核方式并不能真正反映出學生對C++程序設計掌握的好壞程度。
3 C++課程教學改革內容及收獲
加強課堂紀律管理 良好的課堂紀律是課堂教學得以順利進行的重要保證。根據獨立學院學生的特點以及多年的教學經驗,筆者認為可以通過以下兩個方面來加強課堂管理。
1)固定座位,確保課堂井然有序。在第一節課上課前,提醒學生選擇好座位,在座位固定之后讓班長寫好座位表,要求學生以后每節課都必須按照座位表上規定的位置入座。教師通過座位表,既可以一眼看出學生的到課情況,又避免了占用寶貴的課堂時間來點名。同時,該方法方便了教師提問某個具體的目標學生、及時點名制止某學生影響課堂紀律的行為。
2)嚴格執行“手機入袋”制度。獨立學院的大多數學生缺乏學習自覺性,上課時往往不由自主地就玩起了手機,為避免這一現象,筆者在教學中嚴格執行“手機入袋”制度:以班級為單位,每個班級購買一個手機收納袋,并為收納袋上的每個小口袋寫上學號;學生在進入課堂之前,將手機放入與自己學號對應的小口袋中,隨后坐于固定的座位上。該方法有效地杜絕了學生上課沉溺于手機的現象,提高了上課的專注力。
合理安排與組織教學內容 為了能夠在有限的課堂時間內展示出最優化的教學內容,采取以下5個措施。
1)構建“多元化教材”模式。“多元化教材”模式是指學生通過綜合利用“課本+參考書+MSDN幫助文檔+網絡”獲得知識和技能。該模式既能提升學生閱讀中英文技術文檔的能力,又可以讓學生對最新的編程技術有所了解[2]。
其中,針對之前提出的問題,在選擇課本教材的過程中更傾向于把面向對象與面向過程有機地結合起來,盡早引入面向對象的概念,在學習之初就讓學生接觸到C++程序設計語言“封裝性”的特點,并要求學生編寫的所有程序都需要帶有“封裝”功能,從而盡快融入面向對象的世界中。由于獨立學院的學生往往比較依賴教材,因此,所選擇的教材必須重點突出,以講基本原理為核心,既要涉及基本算法和數據結構的初步知識[3],又要利于學生后期向Java程序設計思想過渡。
鑒于以上考慮,采用譚浩強教授編著的《C++面向對象程序設計》(第2版)作為課本教材,該書直接從C++對C的擴充開始講起,其最大的特點是語法講解翔實全面,適合初學者學習理解,可以與課堂教學相互補充[4]。
2)強化基礎,突出重點內容。在進行C++課程教學時,既要注重面向過程部分基礎知識的鞏固,又要始終堅持把重點放在面向對象程序設計思想上。盡管通常情況下學生在學習C++之前已經學習了一學期的C語言,但由于獨立學院的學生對程序設計入門較慢,基礎不夠扎實,尤其是對指針部分的知識感到難以理解,因此,在組織和安排C++課程教學內容時,教師可首先安排4~6課時,通過講解綜合習題(以指針、函數、數組內容為主)甚至是學生C語言期末試卷,幫助他們對面向過程的基礎知識進行復習和加強。在幫助學生進行查漏補缺之后,可開始引入類和對象的概念,重點讓學生理解兩者之間的關系,并在此基礎上介紹構造函數和析構函數,讓學生對面向對象程序設計的“封裝性”有切實的體會和深刻的理解。
此外,C++的另外兩個特性——“繼承性”和“多態性”則既是重點又是難點,教師在講授時應注意讓學生學會單一繼承、多重繼承的方法,理解“繼承性”不僅能減少代碼的冗余性,更可以使得一個龐大的系統變得條理清晰、便于管理;在講授多態時,要讓學生了解子對象、父對象的賦值兼容規則,并學會如何通過父類型的指針或引用調用子類型的成員方法,進而拓展到虛函數、虛基類等難點的學習。對于其他的一些比較瑣碎的語法,如友元、運算符重載等,教師可適當介紹,而不需要花太多時間在課堂上講授,只需讓學生理解語法規則即可。
3)引入實際項目案例。由于計算機軟件的發展日新月異,因此,在講授C++程序設計的語法和思想時,不應光講死板的理論和煩瑣的語法,而應與時俱進,將實際開發案例引入教學內容中[5]。一方面,教師在課堂講授時將語法概念融入實例中,結合實例講解算法設計思路和編程思想;另一方面,學生在上機練習過程中結合布置的實驗案例分析問題、解決問題。實踐證明,引入實際項目案例的做法能夠激發學生的學習興趣,增加學生的成就感。
4)重視程序調試能力的培養。學生在寫完程序代碼之后,需經過編譯、連接、運行三個步驟才有可能得到預期結果。在這個過程中,很少有人能不經過任何調試就一氣呵成地完成程序。而在組織教學內容時,教師往往忽略了程序調試能力的培養,初學者(尤其是獨立學院的學生)遇錯后往往就手足無措甚至直接放棄。
一般來說,程序的錯誤有兩種:編譯錯誤和邏輯錯誤。其中,編譯錯誤調試起來比較簡單,教師在授課過程中應注意要求學生認真閱讀編譯器的報錯原因,并注重經驗積累,初學時若在報錯原因中遇到出現頻率較高的單詞或句子,可摘抄下來加深記憶;邏輯錯誤則比較難解決,教師應教會學生利用調試工具來解決問題,比如斷點設置、單步調試,將動態執行過程分解為靜態片斷,推測錯誤來源。
5)編制校本作業。學生具備了相關的知識與能力基礎后,課后應溫故而知新。根據多年的教學經驗,筆者聯合C++課程組的其他教師共同編制適合本校學生的習題集,其中的題目大多數來源于歷屆期末考試的易錯題以及歷年計算機等級考試的真題。在選擇習題時,力求每道題目都具有針對性,希望通過作業做到“夯實基礎,促進發展,反饋教學”。
改進教學模式,提高學生實踐能力 C++課程的最終目的是讓學生學會程序設計的思想和方法,將理論知識轉換為實戰能力。為了達到這一目的,進行以下改革。
1)講練統一,理論授課與上機實訓互動。在傳統教學模式中,C++課程的理論教學通常在教室進行,教師一邊播放PPT一邊講解知識點,但PPT往往無法演示程序的編寫、執行過程,學生只有課后才有機會去驗證程序代碼的正確性。在本次教改中,不管是上機還是理論課的教學,所有的授課工作都和上機實踐一起全部放到實驗室去完成。教師不再是照本宣科,學生也不再是光聽不練,而是在講語法規則的同時運行實例程序,并對程序進行現場修改、分析、調試,讓學生參與理論內容的檢驗與實踐。
2)雙主教學模式。為了改變“以教師為中心”的傳統教學模式,采用“雙主教學模式”,即教學過程中既發揮教師的主導作用,又充分體現學生的主體作用。在雙主教學模式中,堅持“教師精講、師生互動、學生動手”的原則:教師仍然發揮教學的組織和主導作用,控制整個課堂進程,但不會自始至終處于中心地位,而是適當時候指導學生主動思考、探索,讓學生成為課堂的另一主角,做到自主學習。
3)以任務組織教學內容。教師在授課時采用以“解決問題、完成任務”為主的多維互動式的教學理念,將教學內容的各個部分組織到相應的任務中,圍繞任務展開教學。學生主動學習、積極探究,根據任務的完成結果檢驗和總結學習過程,主動構建探究、實踐、思考、運用的學習體系。考慮到獨立學院學生的基礎,任務的設計難度應適當,要符合學生當前的認知水平,從小任務逐漸過渡到大任務,循序漸進地培養其解決問題的能力。在完成任務的過程中,可鼓勵學生組隊討論,以培養學生項目開發和團隊協作能力,積累工程經驗。
4)引入“2W1H”教學方法。“2W1H”分別是指What、Why、How。“2W1H”教學方法是指讓學生在清楚地知道了“是什么”和“為什么”之后,再去研究和實踐“怎么做”。比如在介紹類的概念時,教師首先從身邊的自然世界入手,讓學生知道類是什么,為什么要對自然界中的萬物進行歸類,最后激發學生思考怎么做才能定義一個新的類,進而產生新的對象。“2W1H”教學方法對吸引學生興趣有很大的幫助,并能培養學生主動獲取新知識、發現新問題的能力。
充分利用在線程序評測系統 教師通過借鑒ACM競賽的Online Judge系統,開發出一個適合獨立學院學生的在線程序評測系統,徹底改變傳統的作業模式。教師在該平臺上出題時,仿照ACM命題的原則,每個任務都包含題目描述、輸入樣例和輸出樣例,并準備好解決問題的標準程序、測試數據和標準答案[6]。教師在上課前將每節課的作業先輸入系統中,并設置好本次作業的開始時間和結束時間;學生先自主查看本節課的授課任務和作業,在進入教室的時候就心中有數。
課后,學生在在線程序評測系統上查看、提交作業,該系統就像是一個實時電子裁判,在學生提交完程序代碼的那一刻就能給出程序的正確性、運行時間、占用內存資源和輸出格式的判斷,從而使學生能在第一時間就知道對錯,并根據系統給出的評判結果進行必要的修改與提交。在作業時間截止之后,教師查看系統給出的成績排名,如圖1所示。此外,該系統還能對每次的作業完成情況進行記錄和分析,如圖2所示。
在線程序評測系統的引入,一方面大大減輕了教師批改作業的工作量,徹底改變了傳統的作業批改模式;另一方面,學生在肯定自己成績的同時,也能找出和其他學生之間的差距,從而進一步促進學生的發展,提高了教學質量。
優化現有考核方式 教改中實行新的考核制度,將C++課程最終的綜合成績確定為:平時成績×20%+期末試卷成績×40%+實驗成績×40%。平時成績主要考查學生的作業情況、出勤記錄和學習態度;期末試卷主要側重于語法概念的理解能力、讀程序能力和程序分析能力的考查;上機實驗考試則是利用在線程序評測系統考查學生的實際編程能力,時間限定在90分鐘以內,要求學生當場完成。這種綜合的考查方式可以公平、全面地反映出學生對C++課程的真實掌握情況。
4 總結
誠然,由于教學目的、教學內容及學生情況等因素千差萬別,沒有哪一種教學模式或教學方法是一勞永逸的。路漫漫其修遠兮,對C++課程進行教學改革工作仍然任重而道遠,今后將不斷尋求適合獨立學院學生的教學模式和教學方法,以獲得最佳的教學效果。■
參考文獻
[1]武永成.應用型本科院校計算機專業C++教學改革研究[J].教育教學論壇,2015(25):138-139.
[2]杜卿,陳天.高級語言程序設計(C++)教學改革實踐與思考[J].中國校外教育:理論,2008(11):173-174.
[3]吳乃陵.面向對象C++程序設計教學改革[J].電氣電子教學學報,2003(2):9-11,43.
[4]楊煉,鄒超偉,毛韶陽.應用型本科院校C++課程教學改革探索[J].計算機教育,2014(21):95-97.
[5]周立章.基于CDIO工程教學模式的C++程序設計教學改革探索[J].大眾科技,2011(10):208-210.
[6]朱月秀.基于ACM競賽的C++程序設計課程教學改革[J].閩南師范大學學報:自然科學版,2012(1):96-99.