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