郭衛斌,羅勇軍,楊建國
(華東理工大學 計算機科學與工程系,上海 200237)
程序是計算機實現問題求解最基本的方式,程序設計是指設計、編制、調試程序的方法和過程,包括數據建模、算法分析與設計、代碼編寫、編譯調試、制作文檔等不同階段,內容涉及相關基本概念、工具、技術、方法學等不同領域,是一項復雜的創造性的思維活動,其過程貫穿著閱讀判斷、邏輯思維、抽象表達、工具利用、綜合創造等多項技能。程序設計能力,特別是問題的分析解決能力、語言和開發環境的綜合應用能力,是各專業本科生最基本的能力,在其知識體系中占據重要的核心地位[1]。
對理工科高校各專業而言,開設程序設計類課程,不但可培養學生的程序設計能力,幫助學生建立計算思維和創新思維,而且對于算法設計與分析、系統分析、開發與應用等其他學科基本能力的培養,都將奠定良好的基礎。
針對工科各專業實踐教學中存在的問題,應構建科學的實踐教學體系,將程序設計能力的培養從課堂延伸至課外,從實驗室延伸至實驗室之外,從課堂學習—課外訓練—綜合應用3 個維度,建立一個跨越時間、空間的立體化開放式的程序設計能力培養體系,實現知識傳授與能力培養的課內外貫穿融合,形成程序設計能力培養的量化反饋和持續改進。
前期,通過對國內本科生程序設計課程的實踐教學情況進行調查研究,發現目前國內高校相關課程的教學中普遍存在如下問題[2-4]。
(1)缺乏對“設計”的正確認識。許多高校都在大學一年級就開設了高級語言程序設計課程(如C 語言程序設計),但大多數教師在教學中過分強調特定語言的語法細節介紹,而忽視了更重要的理論、算法等問題,導致出現學生簡單地將“編程”看做翻譯,“程序設計”變成了“一種高級語言的程序編寫”的現象。
(2)缺乏運用知識解決實際問題的能力。教師不重視問題分析與求解過程的邏輯思維訓練以及綜合應用能力訓練,重理論學習,輕實踐訓練,重課內集中講授,輕課外自主學習,課內外教學相脫節。學生在學習時未能養成良好的習慣,往往盲目提筆“編程”,導致錯誤百出,久而久之感到“編程”非常困難,甚至無從下手。
(3)缺乏設計性、綜合性實踐項目和實踐調試能力。實踐教學體系設置不合理,實踐環節多以驗證性實驗為主,不能充分調動學生參與程序設計的積極性。學生能夠編寫代碼,但是缺少調試能力。
(4)缺乏科學的能力測評體系和持續改進機制。評價方式單一,不能客觀、量化評價學生實際的程序設計能力。現有反饋渠道和反饋方式無法形成程序設計能力培養的持續改進機制。
因此,開展本科生計算機程序設計實踐教學體系和教學方法改革與實踐,具有較好的理論意義與應用價值。
計算機程序設計課內課外相融合的開放式實踐教學體系(如圖1 所示),是一種以課內實驗和實踐為主體,以雙創訓練和學科競賽為輔助,多元并舉,以練促學、以賽代練,“學—練—用”互動的程序設計實踐能力培養體系。該體系基于問題求解方式,通過設計有趣的工程或科學問題,在問題求解過程中循序漸進培養學生掌握程序設計思想、方法及技術。
該培養體系將實踐教學體系分為課內實踐、課外實踐及學科競賽兩大模塊,每個模塊的實踐分為設計實驗、課程設計和綜合實踐3 個層次,形成了以問題求解為驅動的多元化開放式的實踐能力培養體系,全方位培養學生的程序設計能力[5-10]。其中,第1 層次的實踐從認識熟悉實驗環境開始,經過驗證型實驗,逐步增加設計型實驗,使學生具備一定的實驗能力和初步的程序設計能力;第2 層次的實踐包括課程設計、興趣小組活動、科技俱樂部活動等環節,開設綜合型、創新型實踐,培養學生專業知識的綜合應用能力和創新意識;第3 層次包括畢業設計、畢業實習、計算機系統綜合實踐、科研實踐、學科競賽、創新創業訓練活動等,培養學生的研究能力、工程創新能力。
以學科競賽為切入點,將課程教學與競賽相結合,推動教學改革,積極鼓勵學生參加程序設計類競賽,形成學生自覺參加實踐活動的機制:①從學科競賽中抽取一些典型案例應用到理論教學中,或作為課內實驗、課程設計或綜合實踐的題目,加深學生對相關概念及理論的理解;②課外實踐采用自主訓練或小組合作方式,學生通過在線程序自動評判系統完成編碼和調試、提交和評判;③創建在線比賽或虛擬比賽,進行實時反饋并給出即時排名,形成學生自覺參加實踐活動的機制,實現常態化的實踐訓練,培養學生在壓力下的問題解決能力和團隊意識與合作精神[3];④選拔優秀學生進入各類集訓隊,開展集中訓練并參加程序設計競賽;⑤開設ACM 國際大學生程序設計選修課程,教授學生常用算法的基本原理,并進行編程訓練。

圖1 課內外融合的大學生程序設計能力實踐教學體系
以創新創業訓練平臺為依托,培養綜合實踐能力。以國家級、上海市級、校級和學院級創新創業平臺為依托,根據學生興趣愛好,采取個人和團隊相結合的方式,通過綜合性項目實戰演練,結合問題分析、總體結構設計、用戶界面設計、代碼設計等一系列過程,循序漸進培養學生的理解問題能力、歸納程序能力、設計數據結構與算法能力、用程序設計語言實現算法描述能力、編譯與調試能力以及測試程序能力。項目類型方面,注意驗證型、設計型和綜合型實踐的合理比例。對綜合性項目,強調與“企業”與“科研”的結合,注重培養和提高學生的獨立工作、合作研究、協同開發大型軟件能力以及跨界綜合能力。
此外,還應建設完成創新創業案例庫、習題庫、在線答疑與訓練等課外學習實踐資源,提供課件、習題解答、在線訓練、資料下載等功能,開發程序設計輔助教學APP,用以進行信息查詢、發布通知通告、布置實踐任務、代碼自評等。
以需求為導向、以問題求解為主線的實踐教學方法改革如下。
(1)改革實踐教學方法。通過分組討論、頭腦風暴、逆向思考等形式,有意識地引導學生學習和掌握程序思維方法,重視計算思維、工程思維、系統思維、創新思維、“互聯網+”思維的理解和掌握,強化對計算機程序設計一般方法和技術的演練,突出創新能力與綜合能力的訓練[11]。
(2)以問題求解為驅動。教授學生進行問題分析、算法設計、代碼編寫并學會程序的運行與調試,且能分析程序的運行結果,實現問題的最終解決。
(3)開展全方位討論。圍繞實踐內容,講解一些知識點的關鍵原理,幫助學生理解難點問題,鞏固基礎知識;利用啟發式提問以及重點分析的方式進行引導,引導學生深度思考,舉一反三,鼓勵學生進行發散性思考,培養學生的探索能力。
(4)實施跨學科協同合作學習。創建虛擬學習環境,將合作或協作學習策略整合到課程實踐中,鼓勵創建學習社區,重視不同學科教師和學生參與實踐過程,激發學生與教師的積極討論[12]。
(1)突出綜合能力的考核。建立先進的綜合能力考核與評價機制,改革考核方式與考試內容,減少客觀題型,增加有利于能力提高的主觀設計類題目的比例,重視對學生綜合素質的評價,通過多元方式對學生的程序設計能力進行考核和評價。
(2)引入自動評判系統實時評價代碼質量。積極鼓勵學生參加程序設計類競賽,建立專門的在線測試與程序自動評判系統,對學生的程序設計能力進行科學評價,并給予及時反饋[13]。
(3)基于量化評價和反饋機制的持續改進。建立課內學生評教、教師評學、課程達成度評價機制,以及課外評價興趣小組、科技俱樂部、創新創業實踐活動評價機制,實現課內、課外的評價融合,并將評價結果融入教學評價指標體系之中。其中,課程的達成度計算以支撐該課程的所有考核材料作為評價依據,對其達成畢業要求的情況進行評價,逐次計算出單項指標點、單個畢業要求和總體畢業要求的達成度評價結果。
實踐能力培養體系在華東理工大學各專業本科生教學中實施,每年修讀學生超過3 000 人,使不同專業學生在各自層面上學習、理解和掌握了程序設計語言、程序設計與實現、程序測試、數據結構構造、算法設計與分析等方面的理論、方法和技術。應用結果表明,學生參與程序設計的積極性及能力得到了很大提高。每年有超過300 名學生參加程序設計類集訓,學生在ACM國際大學生程序設計競賽、中國大學生程序設計競賽、藍橋杯、上海市大學生計算機應用能力大賽等競賽中成績優異,年均獲得國家級、省部級獎項100 余項。華東理工大學計算機程序設計教學團隊近年來也先后獲得上海市級教學成果一等獎2 項、二等獎3 項,完成或正在進行國家級、市級大學生創新創業訓練計劃項目21 項,出版了實踐教材1 本。
該體系有利于培養學生發現問題、分析問題和解決問題的跨界綜合能力,實現課內課外實踐活動的良好銜接,使絕大部分學生能在本科階段得到工程教育、創新能力與科學研究的良好訓練。這種改革思路和方法對于其他學科專業學生實踐能力的培養具有較好的借鑒意義和推廣價值。