吳舜歆 梁寶蘭
【摘要】針對傳統(tǒng)應(yīng)用型本科C++程序設(shè)計(jì)課程存在的問題,進(jìn)行一系列的教學(xué)改革。強(qiáng)調(diào)程序設(shè)計(jì)方法的學(xué)習(xí)、掌握,同時(shí)引入“程序設(shè)計(jì)在線評測系統(tǒng)”加強(qiáng)學(xué)生的實(shí)踐環(huán)節(jié),并引入案例教學(xué),以培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識進(jìn)行軟件開發(fā)。實(shí)踐證明,以上措施有利于提高學(xué)生的學(xué)習(xí)興趣,為后續(xù)專業(yè)課程的學(xué)習(xí)打下良好的基礎(chǔ)。
【關(guān)鍵詞】應(yīng)用型本科 程序設(shè)計(jì)課程 教學(xué)改革
【基金項(xiàng)目】2014年度廣東省高等教育教學(xué)改革資助項(xiàng)目(GDJG20142517)。
【中圖分類號】G64 【文獻(xiàn)標(biāo)識碼】A 【文章編號】2095-3089(2016)05-0230-02
1.前言
毋庸置疑,學(xué)會編程、掌握編程對計(jì)算機(jī)專業(yè)的學(xué)生來講非常重要。掌握一門程序設(shè)計(jì)語言,就等于掌握了跟計(jì)算機(jī)交流的工具。對于很多計(jì)算機(jī)專業(yè)的同學(xué)來講,C++是他們的第一門程序設(shè)計(jì)課程。學(xué)好C++,不僅掌握了跟計(jì)算機(jī)交流的工具,也為后續(xù)專業(yè)課程的學(xué)習(xí)打下良好的基礎(chǔ),同時(shí)有助于建立自信心。
2.當(dāng)前存在的問題
目前的C++程序設(shè)計(jì)課程的教學(xué)主要存在以下幾個(gè)問題:
(1)教學(xué)內(nèi)容過分關(guān)注程序設(shè)計(jì)語言的語法和語義細(xì)節(jié),整個(gè)課程是以程序設(shè)計(jì)語言為綱來組織教學(xué)內(nèi)容。由于程序設(shè)計(jì)語言具有大量繁雜語法知識點(diǎn),使得老師往往采用灌輸式教學(xué)模式,花費(fèi)大量課時(shí)資源用于講授瑣碎的語法知識,而不是花在程序設(shè)計(jì)思想和方法的傳授上。
(2)教學(xué)方法采用語言工具書的闡述方式,一般是先介紹一種語法結(jié)構(gòu)的形式和意義,然后給出簡單示例或示例程序,這些示例和示例程序的主要作用只是用于對語法結(jié)構(gòu)使用方法的說明,學(xué)生并不能通過這些示例體會問題分析、程序思維和構(gòu)造的方法。整個(gè)課程也很少引入綜合性的教學(xué)案例,沒有讓學(xué)生體會到:針對要解決的問題,如何進(jìn)行分析并逐漸將其精確化;如何針對問題的計(jì)算需求,設(shè)計(jì)解決問題的過程;如何將問題解決過程精確化,選擇適當(dāng)?shù)某绦蚪Y(jié)構(gòu)實(shí)現(xiàn)它。
(3)學(xué)生上機(jī)實(shí)踐的時(shí)間較少,不能透過大量編程實(shí)踐掌握程序設(shè)計(jì)的相關(guān)理論、方法。學(xué)生上機(jī)寫程序,往往限于自身的水平,對測試數(shù)據(jù)考慮不全面,從而導(dǎo)致程序?qū)懲曛箅S便找?guī)讉€(gè)測試數(shù)據(jù)測一測,如果沒有問題,就算程序是正確的。實(shí)際上,對于初學(xué)程序設(shè)計(jì)的學(xué)生來說,如何設(shè)計(jì)更加全面的測試數(shù)據(jù)確實(shí)是一個(gè)不小的挑戰(zhàn)。所以往往出現(xiàn)這樣的情況,學(xué)生的程序?qū)嶋H上是錯的,但由于學(xué)生使用的測試數(shù)據(jù)比較片面,從而誤以為程序是正確的。對于課程書面作業(yè),學(xué)生交上來的程序不少時(shí)候連編譯都通不過。
3.教學(xué)改革
針對應(yīng)用型本科C++程序設(shè)計(jì)課程的教學(xué)需要,在教學(xué)中突出計(jì)算思維的培養(yǎng),將其貫穿于整個(gè)課程的教學(xué)和實(shí)踐。通過培養(yǎng)學(xué)生掌握常見的程序設(shè)計(jì)方法,進(jìn)而提高程序設(shè)計(jì)水平,為后續(xù)專業(yè)課程的學(xué)習(xí)打下牢固的基礎(chǔ)。同時(shí)引入案例教學(xué),培養(yǎng)學(xué)生開發(fā)小軟件的能力,增強(qiáng)學(xué)生的學(xué)習(xí)興趣。
3.1重視程序設(shè)計(jì)方法
傳統(tǒng)的C++程序設(shè)計(jì)課程過于強(qiáng)調(diào)語法,課堂所介紹的例子很多是為了驗(yàn)證C++的語法知識。這往往導(dǎo)致學(xué)生缺乏程序設(shè)計(jì)方法的培養(yǎng),結(jié)果是拿到一個(gè)問題不知道該如何去考慮,無從下手。
我們在實(shí)際教學(xué)中,側(cè)重于將教學(xué)重心放到培養(yǎng)學(xué)生程序設(shè)計(jì)方法上。特別注重窮舉、遞推、遞歸、回溯等常見程序設(shè)計(jì)方法的介紹、訓(xùn)練。進(jìn)而培養(yǎng)學(xué)生的計(jì)算思維。實(shí)踐證明,學(xué)生通過掌握這些常見的程序設(shè)計(jì)方法,分析問題、解決問題的能力得到了很大的提高。而不是像以往一樣,一個(gè)問題來了以后,不知道如何去分析、解決問題。從而打下了良好的編程基礎(chǔ),建立了專業(yè)自信心。
3.2加強(qiáng)實(shí)踐環(huán)節(jié)
針對傳統(tǒng)教學(xué)中,學(xué)生往往實(shí)踐環(huán)節(jié)比較欠缺的問題。我們在教學(xué)中引入了“程序設(shè)計(jì)在線評測系統(tǒng)”。該系統(tǒng)擁有一個(gè)經(jīng)過精心設(shè)計(jì)的題庫,同時(shí)它具有以下功能:
(1)實(shí)時(shí)判題。學(xué)生可以在任何地方、在任何時(shí)間做題,然后提交自己的源代碼。系統(tǒng)會實(shí)時(shí)地對學(xué)生的代碼進(jìn)行評測,并給出相應(yīng)的評測結(jié)果。主要有以下幾種情況:編譯錯、答案錯、格式錯、運(yùn)行時(shí)出錯、超時(shí)和接受。如果學(xué)生提交的代碼不被系統(tǒng)接受,學(xué)生可以對代碼進(jìn)行修改,然后再次提交。
(2)布置作業(yè)。老師可以根據(jù)實(shí)際教學(xué)的需要在系統(tǒng)里面布置作業(yè),限定本班的同學(xué)才能參與。系統(tǒng)會對學(xué)生提交的代碼進(jìn)行實(shí)時(shí)的評判,并對學(xué)生的做題情況進(jìn)行排名,不需要人工干預(yù)。同時(shí)老師可以設(shè)定作業(yè)的截止提交時(shí)間,超過截止時(shí)間系統(tǒng)將拒收作業(yè)。老師可以登陸系統(tǒng)一目了然地知道學(xué)生的做題情況。
(3)組織比賽。老師可以根據(jù)教學(xué)的需要適當(dāng)?shù)慕M織一些比賽,以此調(diào)動學(xué)生的學(xué)習(xí)積極性。系統(tǒng)會自動評測學(xué)生提交的代碼,并對學(xué)生進(jìn)行實(shí)時(shí)的排名,比賽一結(jié)束,比賽結(jié)果同時(shí)就出爐。
(4)用戶管理。系統(tǒng)記錄各用戶的做題信息,并保存用戶提交的源代碼。
(5)排名機(jī)制。系統(tǒng)提供排名機(jī)制。學(xué)生既可以查詢自己在所有用戶中的排名,也可以查詢自己在年級、班級的排名。
(6)論壇。學(xué)生可以在論壇上討論相關(guān)的題目,互相學(xué)習(xí)。
由于“程序設(shè)計(jì)在線評測系統(tǒng)”提供了強(qiáng)有力的支持,能夠?qū)崟r(shí)判題,并且提供了排名,這大大提高了學(xué)生編程的熱情。不少學(xué)生甚至通宵達(dá)旦地編程以解決題庫中的問題。這種編程的熱情在引入該系統(tǒng)之前是不可想象的。
3.3引入案例教學(xué)
“程序設(shè)計(jì)在線評測系統(tǒng)”有力地鍛煉了學(xué)生了編程能力,提高了學(xué)生的學(xué)習(xí)熱情。但畢竟沒有做出看得見、摸得著的軟件。為了彌補(bǔ)這個(gè)缺陷,我們在教學(xué)中引入了案例教學(xué)。通過案例教學(xué),引導(dǎo)學(xué)生開發(fā)一些小軟件,從而進(jìn)一步提高學(xué)生的學(xué)習(xí)興趣,培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識開發(fā)軟件的能力。
我們在教學(xué)中通過精心設(shè)計(jì),引入了5個(gè)案例,分階段實(shí)施案例教學(xué)。通過在不同章節(jié)引入相應(yīng)的案例來教授學(xué)生靈活運(yùn)用所學(xué)知識解決實(shí)際問題的能力,提高學(xué)生的編程技能、學(xué)習(xí)興趣。各案例介紹如下:
(1)萬年歷:功能為顯示某年某月的月歷(陽歷信息)。這個(gè)案例分為4個(gè)版本。分別用于控制語句、函數(shù)、數(shù)組和面向?qū)ο笾蓄惖慕虒W(xué)過程。
(2)猜數(shù)字游戲:既有傳統(tǒng)的機(jī)器隨機(jī)生成一個(gè)4位數(shù),然后玩家來猜。又可以玩家隨機(jī)出一個(gè)數(shù),機(jī)器來猜。用于函數(shù)、數(shù)組的教學(xué)。
(3)打字游戲:屏幕隨機(jī)在一個(gè)位置掉下一個(gè)字符,讓玩家輸入該字符,直到正確或觸底為止。用于數(shù)組的教學(xué)。
(4)井字游戲:在3*3格子上進(jìn)行的連珠游戲。機(jī)器和玩家輪流在格子留下O和X標(biāo)記,由最先在任意一條直線上成功連接三個(gè)標(biāo)記的一方獲勝。用于指針和引用的教學(xué)。
(5)二十一點(diǎn):玩家的目標(biāo)是使自己手中的牌的點(diǎn)數(shù)總和不超過21且盡量大。用于繼承和多態(tài)的教學(xué)。
以上5個(gè)案例,既有實(shí)用性,又有趣味性。后面的4個(gè)案例雖然也是游戲,但均不涉及圖形接口,并不會增加學(xué)生的負(fù)擔(dān)。這5個(gè)案例貫穿整個(gè)課程的教學(xué),分階段地實(shí)施,能夠?qū)W(xué)生在整個(gè)課程的學(xué)習(xí)中隨時(shí)調(diào)動起來。通過教會學(xué)生開發(fā)出一個(gè)個(gè)實(shí)用的、有趣的小軟件,大大提高他們學(xué)習(xí)的興趣。
4.結(jié)束語
針對應(yīng)用型本科C++程序設(shè)計(jì)課程的教學(xué)需要,突出強(qiáng)調(diào)程序設(shè)計(jì)方法的培養(yǎng),利用“程序設(shè)計(jì)在線評測系統(tǒng)”強(qiáng)化學(xué)生的編程實(shí)踐,同時(shí)引入案例教學(xué),進(jìn)一步培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識的能力。實(shí)踐證明,通過以上的改革措施,學(xué)生的編程興趣、編程能力得到了很大的提高。
參考文獻(xiàn):
[1]吳舜歆,梁寶蘭.C++程序設(shè)計(jì)課程案例教學(xué)探索[J].高教學(xué)刊,2016(8):108-109,111.
[2]吳舜歆,梁寶蘭.Online Judge在C++程序設(shè)計(jì)課程實(shí)踐教學(xué)中的應(yīng)用[J].高教學(xué)刊,2016(9):164,167.
[3]李文新.加強(qiáng)基礎(chǔ),提供平臺,營造氛圍,全方位培養(yǎng)創(chuàng)新能力——北京大學(xué)計(jì)算機(jī)學(xué)科教學(xué)體系改革[J].計(jì)算機(jī)教育,2008(1):20-22
作者簡介:
吳舜歆(1978-),男,漢族,廣東潮州人,講師,碩士,研究方向?yàn)闄C(jī)器學(xué)習(xí)、推薦系統(tǒng)。