竇燕 穆運峰 李賢善 郭棟梁 郭丁丁
摘? ?要:針對培養(yǎng)學(xué)生程序設(shè)計能力的課程之間各自為政、實踐資源偏抽象、程序設(shè)計能力考核中編程題目過少的問題,文章提出了以程序設(shè)計能力培養(yǎng)為核心的二級項目課程群體系建設(shè)方案;以三門理論課和一門實踐課的深度銜接為基礎(chǔ),引入企業(yè)教師進(jìn)行實踐資源校企合作,實行課程考核強(qiáng)化機(jī)考的程序設(shè)計能力培養(yǎng)模式。三屆學(xué)生全員參加CSP認(rèn)證結(jié)果和優(yōu)秀學(xué)生參與競賽結(jié)果表明,該模式對學(xué)生的程序設(shè)計能力培養(yǎng)有較好的效果。
關(guān)鍵詞:程序設(shè)計能力;課程群;二級項目;CSP
中圖分類號:G642 文獻(xiàn)標(biāo)志碼:A 文章編號:1673-8454(2021)12-0070-04
程序設(shè)計能力是利用計算機(jī)分析問題、解決問題的重要基礎(chǔ)能力。程序設(shè)計能力可以分為兩類:一類是側(cè)重理論的,比如數(shù)據(jù)結(jié)構(gòu)、算法、計算復(fù)雜度、機(jī)器學(xué)習(xí)等,這類主要是指一個人的程序構(gòu)造和算法設(shè)計的能力;另一類是側(cè)重系統(tǒng)的,比如操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、Web系統(tǒng)、分布式系統(tǒng)、存儲系統(tǒng)等設(shè)計與開發(fā)的能力。作為軟件工程專業(yè)的學(xué)生,這兩種能力對于學(xué)生專業(yè)素質(zhì)的培養(yǎng)都是至關(guān)重要的。側(cè)重理論的程序設(shè)計能力的培養(yǎng)主要是在大一和大二階段進(jìn)行,側(cè)重系統(tǒng)的程序設(shè)計能力的培養(yǎng)主要在大三和大四階段進(jìn)行,這兩個階段也不是完全割裂的,但是也有一個明顯的劃分。本文討論的是側(cè)重理論的程序設(shè)計能力,因此將培養(yǎng)學(xué)生程序構(gòu)造與算法設(shè)計的相關(guān)課程作為一個整體考慮是非常有必要的。目前有許多高校在程序設(shè)計能力培養(yǎng)體系建設(shè)方面做了大量工作。山東理工大學(xué)提出一種以競賽促進(jìn)教學(xué)、以教學(xué)帶動競賽的程序設(shè)計培養(yǎng)模式取得了很好的效果。[1]我校軟件工程專業(yè)則通過建立培養(yǎng)學(xué)生程序構(gòu)造和算法設(shè)計能力的課程群來提高學(xué)生的程序設(shè)計能力,以全體學(xué)生參加計算機(jī)學(xué)會組織的CSP程序設(shè)計能力認(rèn)證來檢驗培養(yǎng)效果及程序設(shè)計能力培養(yǎng)模式。三年來的認(rèn)證成績體現(xiàn)出課程群建設(shè)初見成效。
一、程序設(shè)計能力培養(yǎng)現(xiàn)狀
1.課程之間各自為政
側(cè)重理論的程序設(shè)計能力培養(yǎng)相關(guān)的課程有多門,但是這幾門課程的授課教師進(jìn)行教學(xué)設(shè)計時基本上都是各自為政。例如我校的計算機(jī)應(yīng)用基礎(chǔ)進(jìn)行了“程序設(shè)計課程混合式教學(xué)模式的探索與實踐”的教學(xué)改革,[2]C/C++程序設(shè)計完成了“卓越計劃下的C++程序設(shè)計課程教學(xué)設(shè)計”的教學(xué)改革,[3]數(shù)據(jù)結(jié)構(gòu)與算法完成了“基于Moodle的數(shù)據(jù)結(jié)構(gòu)混合教學(xué)模式探索”等多項教學(xué)改革的實踐。[4-6]這些教學(xué)改革的內(nèi)容相對局限于各自課程,不同課程的授課教師之間交流少,所用案例缺乏整體性和一致性,存在課程之間各自為政的現(xiàn)象,沒有將它們放在一個系統(tǒng)的專業(yè)體系中來認(rèn)知。
2.實踐資源偏抽象
提高學(xué)生的程序設(shè)計能力是教師一直努力的一個方向。為了提高學(xué)生的程序設(shè)計能力,每門課程的主講教師也都設(shè)計了相應(yīng)的實驗、項目操作等實踐環(huán)節(jié),但是存在一個問題,這些實踐資源大部分是教材中理論知識的驗證,大多缺少實際問題背景描述,并且已經(jīng)抽象出了模型,學(xué)生只需要基于該模型模仿教材中所講的知識按圖索驥去做即可,雖然可以很快完成教師所布置的實驗任務(wù),但是在遇到實際問題時,學(xué)生還是難以獨立完成。目前普遍存在一個現(xiàn)象:學(xué)生上課能聽懂,但害怕寫程序,碰到實際問題無從下手。[7]這個問題10年來一直存在,分析原因,這和布置給學(xué)生的實踐性資源過于抽象、學(xué)生練習(xí)過少有關(guān)。
3.編程題目考核過少
每所學(xué)校對學(xué)生的培養(yǎng)定位不同,所以教學(xué)目標(biāo)、教學(xué)內(nèi)容、教學(xué)要求也會有所不同,這是極其正常的。程序設(shè)計對于學(xué)生來說有較大難度,大多數(shù)學(xué)生也難以在短短一個學(xué)期內(nèi)具備較好的程序設(shè)計能力,尤其是對于大一和大二接觸程序設(shè)計時間不長的學(xué)生,很多學(xué)生遇到編程題目就空到那里,而程序設(shè)計課程教學(xué)的目的是為了能讓大多數(shù)學(xué)生通過考核,采用的題型大多由選擇題、填空題、程序的算法描述這樣的題目組成,教師為了照顧大多數(shù)學(xué)生,布置的程序?qū)崿F(xiàn)的練習(xí)也不夠多,學(xué)生在沒有明確要求的情況下做的額外練習(xí)就更少了,這就形成了惡性循環(huán)。
二、課程群體系建設(shè)方案
為了解決以上問題,需要以系統(tǒng)的思想將程序設(shè)計類課程放在培養(yǎng)學(xué)生程序設(shè)計能力這個大框架下統(tǒng)一考慮,以數(shù)據(jù)結(jié)構(gòu)與算法二級項目為核心,以相關(guān)的程序設(shè)計理論課和實踐課為依托,建立一個課程群體系,最終目標(biāo)是提高學(xué)生的程序設(shè)計能力。其體系結(jié)構(gòu)和課程之間的關(guān)系如圖1所示。
課程群中包含三門理論課程《計算機(jī)應(yīng)用基礎(chǔ)與程序設(shè)計》、《C/C++程序設(shè)計》、《數(shù)據(jù)結(jié)構(gòu)與算法》和一門實踐課《數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計》。數(shù)據(jù)結(jié)構(gòu)與算法培養(yǎng)學(xué)生了解計算機(jī)常用的處理問題的方法,但是為了實現(xiàn)這些方法,需要掌握一些必要的工具,《計算機(jī)應(yīng)用基礎(chǔ)與程序設(shè)計》選擇的C#程序設(shè)計語言、《C/C++程序設(shè)計》都可以作為實現(xiàn)思想的工具。雖然前兩門課都是工具,但是作為剛?cè)雽W(xué)的大學(xué)生來說,激發(fā)學(xué)習(xí)興趣、夯實程序設(shè)計基礎(chǔ)非常重要,因此入門課程高級程序設(shè)計語言的教學(xué)非常重要,應(yīng)通過此課程教學(xué)激發(fā)學(xué)生的學(xué)習(xí)興趣。教學(xué)中可用趣味性強(qiáng)的例題來組織教學(xué),所有新知識點都通過實例引入,從而很好地將整個教學(xué)內(nèi)容融入到學(xué)生程序設(shè)計基礎(chǔ)能力的培養(yǎng)中,C#作為入門語言還是比較合適的。有了基礎(chǔ)編程能力,需要提升學(xué)生的程序設(shè)計能力,C/C++語言能讓學(xué)生更好地理解程序內(nèi)在的邏輯,因此在第二個學(xué)期學(xué)習(xí)第二門程序設(shè)計語言C/C++,培養(yǎng)學(xué)生初步的程序設(shè)計能力。第三門課就是要培養(yǎng)學(xué)生的復(fù)雜算法分析能力,數(shù)據(jù)結(jié)構(gòu)與算法課程就是對學(xué)生程序設(shè)計能力的提升。在學(xué)完這三門理論課程后,安排一個綜合性的課程設(shè)計,是對前面所學(xué)的一個大綜合。因為這個階段主要培養(yǎng)學(xué)生面對一個有實際背景的問題,能夠選擇合適的數(shù)據(jù)結(jié)構(gòu),設(shè)計相應(yīng)的算法,最終能夠編程實現(xiàn),對算法的學(xué)習(xí)和訓(xùn)練是非常有必要的,因此在課程設(shè)計中,也安排了相關(guān)的算法練習(xí),為二級項目的實施打下堅實的基礎(chǔ)。
每一門理論支撐課程的實踐包含課堂理論、課內(nèi)實驗、三級項目、課外拓展訓(xùn)練,具體如下。
課堂理論:在講解知識點的過程中,改變傳統(tǒng)的以知識點為中心的教學(xué)方式,讓學(xué)生圍繞著現(xiàn)實生活中的小問題展開相關(guān)知識點的學(xué)習(xí),引導(dǎo)學(xué)生將抽象問題轉(zhuǎn)變?yōu)楝F(xiàn)實問題。
課內(nèi)實驗:將實驗分成驗證型實驗和設(shè)計型實驗兩類。驗證型實驗針對課程中的具體知識點,設(shè)計型實驗針對多個知識點的綜合應(yīng)用。將實驗中傳統(tǒng)的以知識點為主線的實驗框架調(diào)整為以“問題”為主線的實驗框架。
三級項目:傳統(tǒng)的三級項目多是語法描述為主,學(xué)生感到枯燥,沒有學(xué)習(xí)興趣。而對于有背景描述的項目,其要求的算法隱藏其中,學(xué)生需要有較好的抽象和分析能力才能夠?qū)⒚枋龅念}目轉(zhuǎn)換成算法,并最終實現(xiàn)項目。
課外拓展訓(xùn)練:以Moodle網(wǎng)絡(luò)教學(xué)平臺和浙江大學(xué)程序設(shè)計輔助教學(xué)平臺為依托,在平臺上進(jìn)行課外的練習(xí)和訓(xùn)練,使學(xué)生學(xué)習(xí)不斷流,提高程序設(shè)計的實踐能力。
實踐課程包含算法強(qiáng)化、二級項目和企業(yè)實踐。其中二級項目需要多門課程的知識點作為支撐,融合的知識點多,因此更要進(jìn)行設(shè)計,提出一個較復(fù)雜的問題讓學(xué)生通過團(tuán)隊合作的方式解決。
該課程群體系有三個特點。
1.理論課程深度銜接
課程群建設(shè)涉及三門理論課程和一門設(shè)計實踐課程,該體系最大的創(chuàng)新是要打通這幾門課程的斷層現(xiàn)象,課程內(nèi)容設(shè)計注重連貫性、突出系統(tǒng)性。以二級項目的設(shè)計為核心,將項目中的設(shè)計思想和編程實現(xiàn)所用到的知識點分解到三門理論課程中去,將 C#、C/C++程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)與算法(C++實現(xiàn))等核心課程組成“資源共享、平臺共用、層層遞進(jìn)、 逐步提升”的強(qiáng)核心課程群模塊,將程序構(gòu)造入門、程序構(gòu)造進(jìn)階、算法設(shè)計入門、算法設(shè)計進(jìn)階、程序與算法應(yīng)用組成核心課程模塊,解決程序構(gòu)造、算法設(shè)計及應(yīng)用的知識體系構(gòu)建的問題。
2.實踐資源校企合作
課程群在建設(shè)過程中,開發(fā)了“程序構(gòu)造能力課程校企合作組織模式”。將企業(yè)教師納入到課程群建設(shè)中,通過企業(yè)教師將企業(yè)真實案例引入到實踐教學(xué)中,形成了以專職教師為主、企業(yè)教師為輔、理論教學(xué)和實踐教學(xué)并重、引進(jìn)PTA程序自動評測平臺的模式,解決程序類實踐型教學(xué)資源建設(shè)和訓(xùn)練環(huán)境貧乏的問題,所設(shè)計題目具有一定的生活或歷史背景,提高了學(xué)生的積極性和主動性。項目要求的算法隱藏其中,學(xué)生需要有較好的抽象和分析能力才能夠?qū)⒚枋龅念}目轉(zhuǎn)換成算法,培養(yǎng)了學(xué)生問題分析的能力,大大提升了學(xué)生程序構(gòu)造和算法設(shè)計的能力。
3.課程考核強(qiáng)化機(jī)考
為提升學(xué)生的程序構(gòu)造與算法設(shè)計能力,課程群中所有課程對內(nèi)除了有常規(guī)的知識點的考核外,還要更加注重學(xué)生的實際編程能力考核。課程群中所有的理論課和實踐課的實踐環(huán)節(jié)均在浙江大學(xué)的程序設(shè)計實驗輔助教學(xué)平臺PTA,這就對學(xué)生的編程能力提出了很高的要求,每門課平時的作業(yè)練習(xí)、實驗環(huán)節(jié)也都在該平臺上進(jìn)行,加強(qiáng)了學(xué)生編程能力的訓(xùn)練。有了最終機(jī)考的要求,學(xué)生在平時的練習(xí)中上機(jī)實踐的時間也增加了許多,編程能力自然得到提升。在數(shù)據(jù)結(jié)構(gòu)與算法課程實踐這個環(huán)節(jié)結(jié)束后,我校軟件工程專業(yè)要求所有學(xué)生參加計算機(jī)學(xué)會(CCF)軟件能力認(rèn)證CSP(Certified Software Professional),如果通過并在全國平均分以上,其成績可以記為學(xué)生的創(chuàng)新學(xué)分。通過這個環(huán)節(jié)也可以讓教師了解燕大軟件工程專業(yè)學(xué)生的軟件設(shè)計能力在全國參賽學(xué)校的水平。
三、課程群體系建設(shè)效果
1.參加CCF 組織的CSP認(rèn)證成績逐年提升
以程序設(shè)計能力為核心的二級項目課程群開始建設(shè)以來,燕山大學(xué)軟件工程專業(yè)組織所有的學(xué)生參加由中國計算機(jī)學(xué)會舉辦的CSP認(rèn)證。CSP是計算機(jī)學(xué)會(CCF)的計算機(jī)軟件能力認(rèn)證(簡稱CCF CSP認(rèn)證)標(biāo)準(zhǔn),其考試內(nèi)容主要覆蓋大學(xué)軟件開發(fā)者的算法設(shè)計和實際編程能力方面計算機(jī)專業(yè)所學(xué)習(xí)的程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)和算法,以及相關(guān)的數(shù)學(xué)基礎(chǔ)知識。[8][9]參加CSP認(rèn)證也是檢驗學(xué)生程序設(shè)計能力的一個很好指標(biāo)。我們軟件工程專業(yè)從2016級開始全員參加CSP認(rèn)證,歷年成績?nèi)绫?所示。
從表1中可以看出,2016級、2017級和2018級學(xué)生參加CSP的超過了全國平均分的比例在提高,新一級學(xué)生人數(shù)的比例也在提升。對于這樣的一個客觀的認(rèn)證結(jié)果,也說明學(xué)生的程序設(shè)計能力在逐步提升,以程序設(shè)計能力為核心的二級項目課程群建設(shè)初見成效。
2.參與各類大學(xué)生程序設(shè)計競賽成果逐年增加
截止到2020年10月30日,燕山大學(xué)軟件工程專業(yè)學(xué)生在各類大學(xué)生程序設(shè)計競賽中獲得競賽銅獎(三等獎)以上的情況統(tǒng)計如表2所示。
此外,大學(xué)生程序設(shè)計競賽分站賽(CCPC)、國際大學(xué)生程序設(shè)計競賽亞洲區(qū)上海站(ACM-ICPC)、計算機(jī)系統(tǒng)設(shè)計大賽(CCSP決賽)各獲得三等獎一項。從獲獎數(shù)量和質(zhì)量的統(tǒng)計結(jié)果中可以發(fā)現(xiàn),2020級獲獎人數(shù)和等級也比上一年增加了,說明學(xué)生的程序設(shè)計能力有了顯著提高。
四、結(jié)束語
以程序設(shè)計能力為核心的二級項目課程群開始建設(shè)以來,從大一的第一門計算機(jī)應(yīng)用基礎(chǔ)課程開始就注重學(xué)生程序設(shè)計能力的綜合培養(yǎng),以理論課程為依托,以程序?qū)嵺`為突破,引入CSP認(rèn)證作為程序設(shè)計能力考核指標(biāo)之一,培養(yǎng)軟件工程專業(yè)全體學(xué)生的程序設(shè)計能力;引導(dǎo)學(xué)生參加程序設(shè)計專業(yè)競賽,進(jìn)一步提升優(yōu)秀學(xué)生的程序設(shè)計能力。實踐證明,注重程序設(shè)計能力的課程群體系建設(shè)對培養(yǎng)學(xué)生的程序設(shè)計能力起到了較好的作用。
參考文獻(xiàn):
[1]張先偉,曲志堅,張立紅,馬新娟,王海鵬,劉曉紅.程序設(shè)計能力培養(yǎng)體系建設(shè)與實踐[J].計算機(jī)教育,2019(9):75-79.
[2]李賢善,趙逢達(dá),穆運峰.程序設(shè)計課程混合式教學(xué)模式的探索與實踐——以燕山大學(xué)《計算機(jī)應(yīng)用基礎(chǔ)與程序設(shè)計》課程為例[J].中國教育信息化,2018(12):36-39.
[3]史倩竹,竇燕,岳麗文,朱燕.卓越計劃下的C++程序設(shè)計課程教學(xué)設(shè)計[J].高教學(xué)刊,2017(11):50-51,54.
[4]竇燕,李季輝,李可.基于Moodle的數(shù)據(jù)結(jié)構(gòu)混合教學(xué)模式探索[J].計算機(jī)教育,2014(24):73-76.
[5]竇燕,李季輝,李可.思維導(dǎo)圖在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中的實證研究[J].教學(xué)研究,2014,37(5):40-43.
[6]竇燕,王常武,趙逢達(dá),李賢善,李可.網(wǎng)絡(luò)教學(xué)平臺支持下的混合教學(xué)多模態(tài)考核方式[J].中國教育信息化,2017(14):17-19.
[7]劉衛(wèi)國,施榮華.“計算機(jī)程序設(shè)計基礎(chǔ)”課程群建設(shè)的探討[J].計算機(jī)教育,2009(12):71-72.
[8]中國計算機(jī)學(xué)會.CCF軟件能力認(rèn)證Certified Software Professional(CSP)[EB/OL].http://cspro.org/cms/show.action?code=publish_4028807662f1ccee0162f55d6abc 0037&siteid=100000&newsid=62ebd5ce75b54c56a04332c 97705f421&channelid=0000000107.
[9]中國計算機(jī)學(xué)會.CCF計算機(jī)軟件能力認(rèn)證[EB/OL].https://baike.baidu.com/item/CCF%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BD%AF%E4%BB%B6%E8%83%BD%E5%8A%9B%E8%AE%A4%E8%AF%81/20404464?fr=aladdin.
(編輯:王天鵬)