郭銀章,王麗芳
(太原科技大學 計算機科學與技術學院,山西 太原 030024)
基于項目任務驅動的C語言程序設計課程教學改革與實踐
郭銀章,王麗芳
(太原科技大學 計算機科學與技術學院,山西 太原 030024)
針對高等工科院校計算機類專業(yè)C語言程序設計課程在教學過程中存在的問題,在分析該課程教學目標、教學內容和學生能力培養(yǎng)要求的基礎上,提出以培養(yǎng)計算思維能力和程序設計能力為目標的課程教學改革思路與方法。作者采用建構主義的教育思想,將任務項目驅動的教學模式引入課堂教學和實踐教學過程中,設計一種包含“學習任務設計與執(zhí)行、分析與求解、編程與測試、評價與總結”四階段教學模式。最后說明關于C語言程序設計課程教學的幾點思考。
C語言程序設計;任務驅動;項目驅動;計算思維;算法設計
C語言程序設計作為一門面向過程的程序設計語言,其教學目的是培養(yǎng)學生初步具有求解復雜科學問題的計算思維能力、算法設計能力、程序編程能力和測試分析能力[1]。通過該課程完善提出問題、設計算法、數(shù)據(jù)表達、編程測試以及結果分析的整個程序設計過程,進而培養(yǎng)學生求解復雜問題的計算思維能力、設計與選擇解決方案的能力以及用程序設計語言實現(xiàn)方案并進行測試和評價的能力[2]。目前,在C語言程序設計教學過程中,由于很多任課教師對課程教學目標認識不清,而且教學內容抽象繁雜、教學方法和手段單一,使得學生在學習過程中,雖然掌握了大量的程序設計概念和語法,卻缺乏求解工程實際問題的科學思維能力、算法設計能力和編程實現(xiàn)能力。具體表現(xiàn)在以下幾個方面[3]。
(1)課程教學目標模糊,對學生能力的要求不具體。作為計算機類專業(yè)的第一門專業(yè)核心基礎課,很多任課教師沒有很好地理解和掌握C語言程序設計課程的教學目標,在教學過程中,沒有突出學生計算思維能力的建立、算法設計思想的掌握以及程序設計方法的講授。另一方面,在學生能力培養(yǎng)的達成度方面,沒有清晰明確地指出該課程學習的能力要求。
(2)課程教學內容繁雜,課程知識體系有待優(yōu)化和調整。在實際教學中,授課教師只是片面地按照教材的章節(jié)進行講授,只重視程序設計語言的概念和語法細節(jié),形成了很多孤立的知識,學生無法建立程序設計的整體概念,導致學生學習困難、死記硬背、眼高手低等問題產生。
(3)課程教學方法陳舊,教學理念和手段急需改革。當前,C語言程序設計的教學模式普遍存在“滿堂灌”的現(xiàn)象。任課教師重視課堂教學的形式、忽略編程實踐能力的培養(yǎng),沒有達到編程訓練的學時要求,學生程序實現(xiàn)能力得不到提升。
針對以上問題,筆者提出了一種基于項目任務驅動的C語言程序設計教學模式,該模式融合了當今翻轉課堂、CDIO、慕課、微課線上線下等先進的教學方法和手段,特別適用于工程背景突出的程序設計類課程的教學。
1.1 教學目標與能力需求
C語言程序設計是一門面向過程型的程序設計課程,其培養(yǎng)目標是通過程序設計語言的基本結構、算法分析與設計、數(shù)據(jù)的表達與構造、編程測試與分析等知識與方法的學習,使學生理解程序設計語言的基本構造,掌握算法設計的基本思想和方法,掌握變量、函數(shù)、數(shù)組、指針等基本數(shù)據(jù)表達和構造方式,掌握數(shù)據(jù)處理流程控制方法以及程序模塊化結構設計方法,具備計算機基本科學問題的分析和數(shù)據(jù)表達能力、算法描述與基本算法實現(xiàn)的能力、模塊化程序設計及調試分析能力,初步達到利用計算機求解復雜科學問題的計算思維能力。
很多高校在開設C語言程序設計的課程中,存在采用面向對象的C++和C#語言進行講授的問題,從本質上講,面向對象的程序設計是一個設計方法層面的問題,其最終對象體的實現(xiàn),仍然是一個結構化控制過程[4]。在具體的教學過程中,通過增加面向對象程序設計基礎內容的講授,對比面向對象程序設計與結構化程序設計方法在解決問題思維上的不同,使學生從本質上認識封裝、繼承、多態(tài)等基本概念和編程思想。
1.2 課程內容與知識體系
C語言程序設計的教學內容和知識體系,按照問題抽象與描述、算法分析與設計、數(shù)據(jù)表達與構造、程序編程與測試的教學要求,設計不同層面的知識單元和知識體。其教學內容主要包括程序設計基礎、算法設計基礎、數(shù)據(jù)類型基礎、程序控制結構、函數(shù)、數(shù)組與構造類型、指針、文件與數(shù)據(jù)存儲、面向對象程序設計基礎等。每一部分的重點和難點列子表1中[5]。
表1 C語言程序設計知識單元的重點和難點
2.1 學習任務設計與執(zhí)行階段
首先,授課教師要分析學生的基本狀況、學習需求和學習能力,進行知識單元教學目標的確定。然后根據(jù)每一知識單元的核心知識點,由授課教師進行學習任務設計和微課制作,按照“難易適中、問題明確、求解可行、激發(fā)興趣”的原則選取任務實例,創(chuàng)建學習任務清單并進行任務分配。同時,學生在學習任務的驅動下,通過合作交流、問題討論、難點分析、任務分解等方式,借助微課、慕課、PPT、教材等學習方式,進行自主學習,學習效果由學生自己評價。若達到教學目標,則提交學習任務的總結報告。其執(zhí)行流程如圖1所示。
圖1 課前知識單元的任務設計與執(zhí)行階段
2.2 學習任務的分析與求解階段
在課堂教學過程中,教師不再講授教學內容,而是根據(jù)學生課前學習的任務總結報告,進行分析和講解。將共性問題和共性錯誤進行聚焦,集中講授,并組織學生分組討論設計任務方案的修改,幫助學生建立問題求解的方法和策略,引導學生進行問題的分析與方案的設計。同時,對于個性化問題,單獨進行輔導,最終形成一個學習任務求解的方案。其執(zhí)行流程如圖2所示。
2.3 學習任務的編程與測試階段
根據(jù)各知識單元講授的內容,對形成的設計方案進行分類。按照驗證性實驗、設計性實驗、綜合性實驗和探究性實驗的不同類型,將學生自行設計的學習任務求解方案,在實驗環(huán)境下分別進行實現(xiàn)。對于綜合性實驗,學生通過運用綜合的實驗方法和技術來進行問題求解和編程實現(xiàn),培養(yǎng)學生綜合分析問題和解決問題的能力。設計性實驗是一種基于項目驅動的實踐教學方法,其目的是使學生通過選定題目、查閱資料、設計方案、擬定實驗內容和步驟,進行實驗研究、實驗總結和論證、實驗報告撰寫,進而培養(yǎng)學生獨立完成實驗的能力和解決實際問題的能力。對于探究性實驗,它是一種對學生要求更高的實驗類型,適合部分優(yōu)秀學生采取開放性實驗申請的方式,在相關教師的指導下完成。
2.4 學習任務的評價與總結階段
教師要對本次知識單元的學習過程進行總結與評價。評價目標要注重學生學習過程的表現(xiàn),弱化學習結果的評價。同時,在分析每個學生知識內化程度的前提下,要給出每個學生在求解問題的計算思維能力達成度和解決工程實際問題的程序設計能力達成度方面的評價。最終給出本次學習的成績。
(1)以程序設計為主線,強調學生實際編程能力和計算思維能力的培養(yǎng)。通過大量的編程訓練,達到課程教學的目的。
(2)程序設計要具有全局性,包括科學問題的抽象、算法的設計與描述、數(shù)據(jù)的表示方法、程序的編碼與測試等環(huán)節(jié)。教學過程中,要采用問題設計算法、算法帶出程序的策略,強調算法設計、淡化語法細節(jié)。
圖2 課中學習任務的分析與方案求解階段
(3)強化實驗環(huán)節(jié),基礎實驗和課堂講授內容同步進行。要通過課內實驗、課外作業(yè)、綜合訓練等環(huán)節(jié),保證課堂講授與編程訓練學時數(shù)達到1:1。加大實驗分析課的時間,壓縮語法教學時間。學生的編程訓練,要按照“模仿、改寫、編寫”的方式,通過程序跟蹤、程序改錯、自由設計等類型的訓練,激發(fā)學生編程的興趣和成就感。要求學生在本課程的學習期間,完成2 000行以上的代碼編程量(基礎實驗40行以上、綜合實驗100行以上)。實驗報告,要求描述程序結構和關鍵算法、程序代碼及注釋、測試數(shù)據(jù)及結果分析、記錄問題、總結心得。
(4)課程考核。建議實驗及上機成績占60%,由平時的考勤(10%)、作業(yè)(10%)、課內實驗(30%)、課外實驗(10%)組成;筆試成績40%,主要考核基本概念、閱讀程序、程序填空、程序改錯、算法設計等內容。
從2012年起,在太原科技大學計算機科學與技術、軟件工程、網(wǎng)絡工程、物聯(lián)網(wǎng)工程等4個專業(yè)進行基于項目任務驅動的C語言程序設計教學改革實踐。按照“以問題設計算法、以算法帶出程序”的教學思想,通過設計教學任務、采用慕課微課等教學手段、按照“模仿、修改、編寫”的教學模式進行實踐,取得了良好的教學效果。如何設計好項目任務,給定任務描述和要求,是實現(xiàn)該教學模式的關鍵。今后在教學任務模板的規(guī)范化設計、教學過程的自動監(jiān)控和質量評價方面有待進一步研究。
[1] 教育部高等學校計算機科學與技術教學指導委員會. 高等學校計算機科學與技術專業(yè)核心課程教學實施方案[M]. 北京: 高等教育出版社, 2009: 229-232.
[2] 教育部高等學校計算機科學與技術教學指導委員會.高等學校計算機科學與技術專業(yè)人才專業(yè)能力構成與培養(yǎng)[M]. 北京:機械工業(yè)出版社, 2010: 84.
[3] 王瑛杰. 導學講評教學模式在計算機程序設計教學中的實踐[J]. 高教學刊, 2016(7): 148-149.
[4] 高枚, 龔沛曾, 孫麗君. 構建多層次思維培養(yǎng)的C/C++程序設計教學[J]. 計算機教育, 2016(1): 81-83.
[5] 蔣宗禮. 計算機類專業(yè)人才專業(yè)能力構成與培養(yǎng)[J]. 中國大學教學, 2011(11): 11-14.
(編輯: 史志偉 )
1672-5913(2017)02-0041-04
G642
山西省教學研究項目(J2014073);太原科技大學教研項目(201116,201418)資助。
郭銀章,男,教授,研究方向為協(xié)同計算與系統(tǒng)安全,guoyinzhang@263.net。