摘要:計算機專業程序設計能力是計算機及相關專業學生最重要的專業能力之一。本文分析現有程序設計類課程的目標定位、課程教學內容、實踐教學模式等方面存在的不足,結合浙江財經學院程序設計類課程教學實際,提出基于能力目標導向,設計程序設計類課程教學體系(包括實踐教學體系),構建開放式的實踐教學平臺,改革課程教學內容、教學模式和考核方式,以加強對學生專業程序設計能力的培養,提高學生的實踐能力和創新能力。在該課程教學體系中,我們強調程序設計思想和方法的運用,強調程序設計的在線實踐和項目實訓,強調團隊協作和創新能力的培養。最后,本文介紹了改革和實踐的成效。
關鍵詞:程序設計類課程;教學體系改革;實踐教學體系;程序設計能力
高等教育的內容包括知識、能力和素質3個方面。知識是基礎;能力是技能化的知識,是知識的綜合體現,以知識運用的綜合性、靈活性與探索性為重要內容,即運用知識有效解決實際問題;而素質是知識和能力的升華,涉及到其知識和能力是否可持續發展。高等院校需致力于專業能力與素質的培養。
對計算機、電子、通信、信息等專業的學生來說,程序設計思想和方法的運用、數據結構設計與運用、算法分析與設計、應用軟件設計與開發等專業程序設計能力是最重要的專業能力之一。課程教學是培養專業能力的主戰場、主渠道,要圍繞培養目標的實現,組織課程內容與教學。本文分析了現有程序設計類課程目標定位、課程教學內容、實踐教學模式等方面存在的不足,提出以能力為導向,構建程序設計類課程教學體系(包括實踐教學體系),優化教學內容,改革教學模式,以更好地培養學生程序設計能力,提高其實踐能力和創新能力。
1 程序設計類課程教學現狀
目前,一般高校針對計算機、電子信息類專業開設的以C語言為基礎的程序設計類課程有:C語言程序設計、面向對象程序設計、數據結構、高級數據結構、算法分析與設計等。基于本課題組承擔的浙江省高校本科計算機科學與技術教學指導委員會專項教學改革項目“軟件開發類課程教學內容改革和實踐教學方法創新研究”以及我校重大教學改革項目“以提高實踐創新能力為導向的課程教學模式探討和教學方法創新研究”的需要,我們對浙江省同類高校關于這些課程的教學現狀作了調查和分析研究,主要狀況如下。
1)目標定位不明確:學習編程語言還是學習編程方法?教授編程知識還是培養用編程知識解決實際問題的能力?程序設計類課程目標定位不明確,沒有建立課程目標體系,專業基礎課的作用不明顯;上述課程在知識結構上缺乏一條明確的主線,知識體系松散,不能前后連貫。
2)對專業能力的培養重視不夠:課程教學中太過強調程序語言本身的要素,以知識點為目標,忽視了對知識綜合運用和實踐能力的培養。
3)對課程的實踐性重視不夠,實際知識運用的訓練較少:實踐教學不夠系統和完善,實踐項目的設計沒有充分考慮能力目標的培養而過多關注程序語言本身的特性。
4)練習和考試:多采用書面或驗證性實驗的形式,以標準化習題和簡單的編程題為主,缺少對知識靈活運用的練習題,缺少專業性編程基礎的練習題,缺少對程序實際運行的檢查,從某種意義上引導學生只關注基本概念和語言要素,忽視了對程序設計能力的鍛煉和培養。同時,教師工作量大,對程序設計題無法仔細評判,很難判斷程序是否實際可行、是否可以產生正確的結果,教學質量難以把握并提高。
5)從教學效果上來看:學生基本程序設計能力差,遇到程序設計問題不知如何下手,缺乏完整系統的程序設計方法,工作效率低;缺乏專業程序設計的能力和意識,代碼質量意識弱,代碼質量差,缺乏中等規模以上的程序設計能力。
2 構建以能力為導向的課程教學體系
程序設計與調試、面向對象的系統分析與設計、數據結構設計與運用、算法分析與設計、應用軟件設計與開發等構成了計算機相關專業學生專業程序設計能力體系。為此,我校計算機科學與技術專業培養方案中,設置了程序設計基礎、面向對象程序設計、數據結構、算法分析與設計、高級數據結構5門課程,作為程序設計類課程群,如圖1所示。

2.1 明確課程定位
程序設計類課程作為信息類專業本科生的專業基礎課,要突出課程的專業性,強調專業程序設計;要突出課程的基礎性,強調程序設計實踐能力;突出課程的實踐性,加強教學的實踐環節,通過實際編程考察教學效果。
2.2 構建以培養能力為導向的課程教學目標體系
我們按照課程群建設的思路,統一規劃、統籌安排程序設計類各門課程各個階段的教學目標,建立相輔相成、逐步提高、前后連貫的課程教學目標體系。根據課程在專業人才培養目標中的定位,以及目前社會對IT人才程序設計能力的需求,我們制定了3個目標:1)培養學生程序設計的知識和能力;2)培養學生分析和解決實際問題的能力;3)培養學生理論聯系實際的習慣和自學能力。
2.3 改革和優化教學內容,強調課程群各課程之間的知識連貫性,建立課程教學體系
1)按照課程教學目標體系,以課程群為平臺,由課程群教師共同協作設計逐步提高、前后連貫、層層梯度推進的課程內容體系。從程序設計基礎課程開始,引入大量經典的、趣味性濃的、聯系生活實際的案例,引導學生從解決問題出發、學習編程知識和語句,并提高其學習編程的興趣。同時,各課程教學案例的設計注重前后知識運用的綜合性和連貫性,后續案例以前續案例為基礎,前面設計和實現的類、方法或者模塊,是后續案例中的基礎,培養學生系統化意識,以幫助學生建立知識體系。
2)在教學內容的設計以及教學過程中各教學環節的設計中,應弱化學生對編程知識和語言本身的關注,突出對知識的運用。這里我們主要從以下兩點進行改革:一是圍繞能力目標,改革課堂教學模式,比如教學過程中,突出對學生分析問題、解決問題思路的培養,而不是強調某個語法問題、某個語句格式等,語法和格式等語言要素,留待學生在實踐訓練中加深和鞏固;二是選擇該課程群后期課程算法分析與設計課程為試點,圍繞能力目標體系,大幅度改革課程教學內容和體系。傳統的該課程各章節以幾大經典算法為內容,包括背包問題、大數問題、圖論算法、遞歸與分治、貪心算法、回溯法、動態規劃等;而現在該課程的教學體系,以幾個經典益智游戲的自動求解和人機對弈項目為主要教學內容,將算法的講解包含在游戲和項目中,從而使學生掌握各種典型算法的分析和設計。同時,在實際教學過程中,我們把該課程的“講解算法思路——讓學生理解算法思路——用該種算法解決實際問題”的課程授課體系,改革為“提出趣味性、設計性并茂的實際問題——分析問題解決的思路和方法——引出所需要的算法并解決該問題——再用同樣的方法去解決類似的實際問題以提高算法運用能力”,在教學過程中不斷對學生強化“學習算法是為了解決實際問題”的意識,并引導學生進行算法分析和設計實踐。
2.4 建立課程實踐教學體系,改革教學模式和教學方法,強調編程設計的在線實踐和項目實訓
程序設計類課程群的實踐教學體系設計思路可以概括為:兩條主線、梯度訓練、四個階段,強調程序設計的在線實踐平臺和程序設計競賽平臺的應用,提倡團隊協作,突出對學生綜合實踐能力、創新能力的培養。由此,本課題組構建的程序設計類課程教學體系如圖2所示。

2.4.1 兩條主線
根據課程的特點,程序設計類課程群的實踐教學體系按照兩條主線進行構建。第一條主線:程序設計基礎、數據結構、高級數據結構這3門課程的教學以在線實踐及程序設計競賽為主線,通過在線實踐這種新穎的實踐方式提高學生的程序設計能力,并及時跟蹤程序設計競賽及計算機學科的發展趨勢,改進課程的教學方法和教學內容。第二條主線:面向對象程序設計、算法分析與設計這兩門課程的教學以益智游戲求解和對弈為主線,通過實訓項目來提高大學生的算法分析與設計、應用軟件設計與開發能力。這兩條主線相輔相成。一方面,益智游戲的求解和對弈離不開編程能力,而編程能力可以通過在線實踐不斷提高;另一方面,益智游戲的求解和對弈是應用軟件設計與開發的具體體現,強化學生程序設計系統化能力。
2.4.2 梯度訓練
無論是課程實驗還是在線實踐,都考慮學生的接受能力,遵循“由易到難”、“由淺入深”的原則,通過梯度訓練使學生逐漸掌握課程知識。從課程基礎實踐項目→綜合實踐(訓)項目→課程設計→應用軟件設計與開發,分層次梯度推進每門課程的實踐(訓)強度和難度。這里應用軟件設計與開發,主要以益智游戲的自動求解和對弈軟件的設計為主要形式。
2.4.3 四個階段
第一階段,程序設計基礎課程的課程設計項目為一個基于控制臺的小型軟件;第二階段,而向對象程序設計的課程設計則加入面向對象和可視化思想;第三階段,數據結構的課程設計要求在軟件中綜合運用數據結構的知識;第四階段,算法分析與設計的課程設計以益智游戲的自動求解和人機對弈為目標,提高學生的應用軟件設計與開發能力。
2.4.4 強調在線實踐和以大學生程序設計競賽為驅動
1)以學科競賽為驅動,開發在線程序評判系統,營造學習程序設計的氛圍。
大學生程序設計競賽提供了一個讓大學生充分展示用計算機分析問題、解決問題的能力與才華的平臺,鼓勵創造性和團隊協作精神,鼓勵開拓與創新。2004年5月,浙江省舉辦了首屆大學生程序設計競賽,至今已經連續舉辦7屆,參賽的學校從2004年的45所增加到2010年的75所,參賽隊伍數也從2004年的84隊增加到了2010年292隊。隨著該學科競賽在全省的推廣,省內已經有多所高校(如浙江大學、浙江工業大學、杭州電子科技大學、浙江財經學院等)開發出各自的在線程序評判系統(Online Judge,簡稱OJ),舉辦校內比賽,擬以大學生程序設計競賽為驅動,激發學生學習程序設計的興趣,提高學生程序設計能力。
我校的在線程序評判OJ系統(如圖3所示)于2007年開發完成并成功作為我校第五、六屆程序設計競賽裁判系統,每屆賽事參賽隊伍50余隊,參賽學生人數超過160人。同時該系統還為我校ACM協會定期舉行的程序設計競賽活動做在線評判。程序設計競賽平臺的構建,為我校計算機科學與技術、信息管理與信息系統、信息計算等專業學生營造了非常濃厚的學習程序設計的氛圍。

2)以在線程序評判系統為基礎,構建程序設計類課程教學在線實踐平臺。
由于沒有合適的在線實踐和考核平臺,傳統的練習和測試一般局限于書面或驗證性實驗的形式,以標準化習題和簡單的編程題為主,缺少對知識綜合運用能力和專業程序設計能力的訓練和考核;同時,教師由于精力有限,又沒有高效的評判系統,對于學生提交的程序也只局限于設計思路和語法的檢查,缺少對程序實際運行結果的考核。這樣的實踐教學和考核體系,引導學生過多關注基本概念和語言要素,最終導致學生所具備的程序設計能力與IT企業的要求相距甚遠。
故從2008年開始,我們從語言支持、評判方式、題庫管理等方面對在線程序評判系統進行升級和擴充,將該系統打造成滿足程序設計類課程群實踐教學、課程考核和競賽需求的在線實踐平臺,有效改善了程序設計類課程實踐教學效果,提高了學生專業程序設計能力。我們主要做了以下幾方面的工作:
(I)題庫建設:為每門課程(除面向對象程序設計課程外),按照知識模塊,根據我校學生實際,設計對應的練習題,同時收集經典的、趣味性強的、歷年各種競賽中出現過的合適的程序設計題(包括測試數據)。題庫資源的建設和管理是開放式的,不管教師還是學生收集和設計的題目,只要經過系統管理員驗證,均可以加入到系統的題庫中。
(2)課程服務:對于課程的任課教師,可以自由開辟本課程的實踐專區,為某個章節或者某個階段在題庫中選取習題,設置練習或者測試環節,要求學生在給定的時間內完成。也可以根據需求和課程的特點,為課程設置在線考核專題。
(3)競賽服務:可以根據需要,開辟專項競賽。目前除了承擔我校和我院的程序設計競賽以外,我們還為我校ACM協會和電腦協會開辟活動專區,圍繞協會活動,舉辦不同范圍內的程序設計競賽。
在線實踐不問于傳統程序實踐,學生可以通過OJ網站,進入某課程的實踐專區,選擇專區中的程序設計題目,在線提交設計編寫好的程序,OJ網站在線評判系統實時評判并反饋評判結果。學生可以根據OJ系統反饋回來的評判結果反復修改程序,直到最終被Accept(程序正確)。這個過程不受時間和地點的限制(只要能上網),也無需等待老師的批改結果,極大地拓展了學生的實踐空間和時間。而且,在實踐過程中,不僅能培養學生獨立分析問題、解決問題的能力,而且每成功解決一道題目都能給學生帶來極大的成就感(系統會記錄每個學生每一次成功),激發學生實踐的興趣。
2.4.5 強調團隊協作,鼓勵創新
程序設計競賽是以團隊形式參賽的。每隊3人,只能使用l臺計算機,因此,隊員必須具有團隊協作的精神和能力,才能做到1+1+1≥3,競賽也才能取得好成績。
另外在我們的實踐教學體系中,實訓項目和課程設計,要求通過團隊協作完成,在設計題目和考核方式時,必須體現團隊合作的因素。
2.4.6 編寫適應能力培養的實踐指導教材
為了進一步提高實踐教學效果,課題組成員在調研國內其他院校課程建設舉措以及多年來程序設計課程教學、大學生程序設計競賽輔導的經驗積累基礎上,編寫出版了實踐指導教材《程序設計方法及在線實踐指導》,該教材被評為2009年省重點教材。
3 改革實施成效和結論
程序設計類課程的改革,尤其是課程定位和目標的修正、課程教學體系的改革和優化、實踐教學體系的改革、在線實踐平臺的構建、實踐教學模式和課程考核方式的改革和創新,有助于引導學生以提高程序設計能力為目標,進行程序設計訓練,提高程序設計類課程教學質量。
程序設計類課程改革有效激發了學生學習程序設計的興趣。大學生程序設計ACM協會是我校信息學院最活躍的大學生協會之一,他們定期舉辦講座,將志趣相投的程序設計愛好者們聚在一個平臺,協助學校組織承辦學校大學生程序設計競賽和信息學院ACM程序設計大賽,每屆都大約有150名學生參加,有些甚至是一年級的學生。
開放式的在線實踐平臺,使得學生無需受實驗室、實驗時間以及老師在不在場等因素的限制而自由進行編程訓練;教師引導把關,由學生自己完成對平臺的構建、維護、運行的模式,讓學生覺得這是他們自己的平臺,是程序愛好者的社區,極大地激發了學生的主動性、競爭性和創造性。
通過改革,學生編程設計能力、綜合實踐能力和創新能力有了明顯提高。在近5年的火學生程序設計競賽中,我校作為理工科相對弱勢的財經類院校與省內浙江大學、浙江工業大學等理工科類院校同臺競技,獲得了可喜的成績,其中一等獎1項,二等獎2項,三等獎18項,獲獎學生中有大部分考入了浙江大學、復旦大學、上海財經大學等國內知名入學繼續深造,其他所有學生在畢業時都能得到企業認可,順利就業。

(編輯:姚彥