竇燕 穆運峰 李賢善 郭棟梁 郭丁丁



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