張志俊
(中南民族大學(xué) 計算機(jī)科學(xué)學(xué)院,湖北 武漢 430074)
C語言應(yīng)用能力、程序設(shè)計能力是對大學(xué)工程類本科學(xué)生最基本的要求,此要求越來越重要,甚至對眾多的非計算機(jī)專業(yè)都提出了相對應(yīng)的教學(xué)要求。
將C語言及其程序設(shè)計方法的優(yōu)秀特點——擅長符號化抽象性地描述問題;清晰結(jié)構(gòu)化地求解問題;編輯編譯調(diào)試地解決問題;既嚴(yán)格規(guī)范科學(xué),又不失語言交流性的書寫風(fēng)格——作為課程學(xué)習(xí)的主要目標(biāo),課堂上詳細(xì)講解C語言要素,配以精煉的例程和實驗教學(xué),基本上能較好地完成認(rèn)知、理解和簡單使用C語言程序設(shè)計思想、方法的教學(xué)任務(wù)。許多高校相關(guān)專業(yè),特別是非計算機(jī)專業(yè)的C語言程序設(shè)計課程,采取常規(guī)的或者改進(jìn)的、混合的多種教學(xué)模式(如傳統(tǒng)羅列式、問題驅(qū)動式、微課/反轉(zhuǎn)課堂式、線上線下慕課式等)。課程教學(xué)內(nèi)容和達(dá)到的教學(xué)目標(biāo)大多如此,在達(dá)到的程度上會有一定的差異[1-4]。
通過對非計算機(jī)專業(yè)高年級和畢業(yè)學(xué)生的了解,大部分學(xué)生的C語言程序設(shè)計能力是極其有限的[2-4]:能閱讀一定的程序,但不能理解程序整體意圖;不懂得規(guī)劃程序結(jié)構(gòu)、分解問題;對開發(fā)環(huán)境還比較陌生,只能以控制臺應(yīng)用模式編寫練習(xí)程序;不能通過編譯結(jié)果看懂提示,不能通過DEBUG跟蹤流程、查看變量和數(shù)據(jù)來發(fā)現(xiàn)問題、糾正錯誤;甚至對程序設(shè)計一片空白等。究其原因,可能是學(xué)生投入的精力不夠,但更重要的是教學(xué)目標(biāo)的設(shè)定不夠全面,教學(xué)內(nèi)容、方法、考核形式上對學(xué)生形成自主學(xué)習(xí)、自主訓(xùn)練的動力和壓力不足,教師在教學(xué)引導(dǎo)的方式上不夠適合。
不同高校、專業(yè)的C語言程序設(shè)計課程的教學(xué)目標(biāo)、內(nèi)容設(shè)置、基本知識的教學(xué)要求大致相同,只是在應(yīng)用性、完整型、設(shè)計性能力上的要求有些差異。
中南民族大學(xué)公共基礎(chǔ)“C程序設(shè)計語言”課程(4學(xué)分),設(shè)置了較多的實驗機(jī)時(32學(xué)時),要求學(xué)生掌握結(jié)構(gòu)化程序設(shè)計的一般方法,培養(yǎng)嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計思想、靈活的思維方式和較強(qiáng)的動手能力;自動化類專業(yè)“程序設(shè)計語言”課程(3.5學(xué)分12實驗機(jī)時),要求學(xué)生掌握語法規(guī)范,了解程序設(shè)計基本思想、方法,培養(yǎng)靈活應(yīng)用思想和方法分析、解決實際問題的能力。
清華大學(xué)自動化專業(yè)“計算機(jī)語言與程序設(shè)計”課程(3學(xué)分),強(qiáng)調(diào)客觀對象與抽象數(shù)據(jù)變量關(guān)系、計算機(jī)編程思維,強(qiáng)調(diào)編程規(guī)范和風(fēng)格、指針應(yīng)用訓(xùn)練,強(qiáng)調(diào)DEBUG工具使用,注重培養(yǎng)程序設(shè)計思維方法與基本能力,強(qiáng)化解決實際應(yīng)用問題編程能力的訓(xùn)練[5]。
美國舊金山州立大學(xué)工程學(xué)院“工程師C語言程序設(shè)計”(Introduction to C Programming for Engineers)3學(xué)分,課堂100分鐘/周,實驗165分鐘/周。根據(jù)工程認(rèn)證標(biāo)準(zhǔn)中對學(xué)生評價A、B、C、E的要求[6],結(jié)合基于微控制器的測量和控制的C程序設(shè)計,強(qiáng)調(diào)對問題的描述和分析、算法的設(shè)計、程序的實現(xiàn)、程序的測試、調(diào)試和維護(hù)、程序文檔的編輯等[7]。
對于工程應(yīng)用型專業(yè),將本類課程的教學(xué)目標(biāo)和內(nèi)容設(shè)定在對C語言及程序設(shè)計思想、方法的認(rèn)知、理解和簡單應(yīng)用上,遠(yuǎn)遠(yuǎn)不夠,還應(yīng)該加以擴(kuò)展,使學(xué)生達(dá)到三方面的能力要求:①較熟練地應(yīng)用C語言、常用庫函數(shù)、開發(fā)環(huán)境,編寫、調(diào)試、實現(xiàn)完整的、較綜合的應(yīng)用程序;②將本類課程的學(xué)習(xí)體驗和收獲作為開啟后續(xù)相關(guān)課程學(xué)習(xí)的契機(jī),并觸類旁通地為專業(yè)可編程類技術(shù)性課程、專業(yè)應(yīng)用軟件類課程、綜合性實踐教學(xué)等奠定程序設(shè)計和開發(fā)的基礎(chǔ);③熟悉專業(yè)領(lǐng)域工程應(yīng)用系統(tǒng)軟件一般性思路,了解行業(yè)對軟件開發(fā)、可編程器件程序設(shè)計的需求。
教學(xué)目的設(shè)想和要求:課程教學(xué)采取“在編程中學(xué)習(xí)C語言”的思路和方法,將C語言的學(xué)習(xí)融入程序設(shè)計之中。通過若干例程的詳細(xì)講授、操作演示、實際練習(xí)、調(diào)試實現(xiàn)等過程,達(dá)到學(xué)生較好地掌握主要編程技術(shù)和技巧的目的。學(xué)生有了程序設(shè)計的能力,從而附帶地學(xué)會了C語言的精華,初步具有規(guī)范性、專業(yè)性、藝術(shù)性的意識并得到體現(xiàn),得到行業(yè)人士的認(rèn)可。
課程不采取傳統(tǒng)課堂知識點傳授的模式,而以安排學(xué)習(xí)、模仿和練習(xí)項目例程的程序設(shè)計訓(xùn)練為主,將C語言基本知識的學(xué)習(xí)主要交由學(xué)生課外自行來完成,教學(xué)內(nèi)容見表1。項目例程由易到難,從趣味、游戲形式開始,逐漸向數(shù)據(jù)處理、典型工程應(yīng)用、實時多任務(wù)調(diào)度、嵌入式應(yīng)用過渡;涉及三種開發(fā)環(huán)境,從控制臺文本窗到圖形化窗口界面形式,再到Windows形式,再到虛擬單片機(jī)嵌入式應(yīng)用。
表1 教學(xué)內(nèi)容安排
教學(xué)實踐結(jié)合網(wǎng)絡(luò)教學(xué)平臺,通過課堂講解、課堂考核、課后練習(xí)作業(yè)的網(wǎng)絡(luò)提交與批閱、與項目例程混合的實驗演練、實驗報告撰寫與批閱以及在線答疑等環(huán)節(jié)完成。
采用校園網(wǎng)絡(luò)教學(xué)綜合平臺,通過平臺發(fā)布課程計劃、實驗安排、教學(xué)課件、各種資料、各類軟件資源以及每次的作業(yè)、實驗內(nèi)容和要求,并指定提交截止時間。此外,要求學(xué)生:①準(zhǔn)備個人電腦;②熟練掌握網(wǎng)絡(luò)教學(xué)平臺的使用;③自行準(zhǔn)備和安裝相關(guān)軟件;④在實驗中及課后完成每次的編程練習(xí);⑤截取程序代碼及運行效果圖片,按時在網(wǎng)絡(luò)上提交作業(yè)。
課堂教學(xué)采用多媒體手段,教學(xué)內(nèi)容充實,主要內(nèi)容包括:①演示編程環(huán)境搭建、軟件資源的應(yīng)用;②演示例程運行效果,講解項目目的;③演示講解項目程序設(shè)計結(jié)構(gòu);④演示解釋程序代碼,講解C語言知識、常用系統(tǒng)函數(shù)及注意要點;⑤演示編譯、DEBUG調(diào)試過程,講解開發(fā)環(huán)境綜合使用;⑥課堂書面考核與解答;⑦學(xué)生作業(yè)批閱解釋與解答。
圖1列舉了幾個項目例程的運行效果,從中可以看到綜合性和工程應(yīng)用性。
根據(jù)教學(xué)進(jìn)程安排了若干課堂考核(見表2),每次考核時間10~20分鐘,書面提交,下次課堂上予以解答。這可以幫助學(xué)生理解基本知識,同時也起到課堂教學(xué)管理的作用。
圖1 項目例程運行效果
表2 課堂考核
教與學(xué)是一個互動過程,重要的是以學(xué)生為主體,引導(dǎo)他們主動或者被動地動心、動眼、動手、動腦、動口的自行行動起來。教師通過大量的代碼閱讀、模仿編程、綜合性程序修改,補充或自行設(shè)計練習(xí)、調(diào)試運行練習(xí)等形式的課后作業(yè)和實驗室當(dāng)場演練,并配合網(wǎng)絡(luò)在線交互答疑、及時作業(yè)批閱,督促學(xué)生按進(jìn)度完成教學(xué)過程,進(jìn)而在項目演練中完成C語言程序設(shè)計工程應(yīng)用性課程任務(wù)。課后作業(yè)和實驗內(nèi)容安排見表3,完成作業(yè)和實驗練習(xí),并以代碼截圖、調(diào)試運行效果截圖形成文檔,在截止時間前通過網(wǎng)絡(luò)教學(xué)平臺提交。
學(xué)生的課程學(xué)習(xí)綜合評價,通常是期末書面考試成績與平時成績按比例計算得到總評成績(例如7:3或6:4),平時成績一般由作業(yè)、實驗、到課情況等組成,期末書面考核所占比例較重。筆者采取了針對工程應(yīng)用性的教學(xué)設(shè)計,加強(qiáng)平時多種學(xué)習(xí)過程的考核比重。
考慮與以往教學(xué)考核方式的銜接過渡,暫時保持期末書面考試(見表4),適當(dāng)降低期末考試成績比例,按5:5合成總評成績。將學(xué)生在學(xué)習(xí)過程中的所有表現(xiàn)都作為因素計算到平時成績中(課后作業(yè)取8次最好成績占比30%,課堂考核取7次最好成績占比7%,課程參與占比3%,實驗效果及實驗報告占比10%)。強(qiáng)化平時的學(xué)習(xí)過程和效果,也有利于學(xué)生重視平時的訓(xùn)練。
課后作業(yè)與實驗報告中的程序設(shè)計,除了要求程序運行結(jié)果和效果外,還特別要求規(guī)范性:目錄管理,用有含義的英文單詞命名,程序頭注釋,函數(shù)注釋,變量、代碼注釋,文件結(jié)束注釋,標(biāo)識符、變量名、函數(shù)名等以英文單詞大小寫命名,語句縮進(jìn)與對齊,操作符空格書寫,適當(dāng)空格、空行等。
表3 課后作業(yè)及實驗安排
表4 期末書面考試
課程教學(xué)改革實踐探索與學(xué)生學(xué)習(xí)狀態(tài)反饋,對教學(xué)過程有了一些體驗和體會,值得下一步思考。
(1)課程教學(xué)的總體效果。一方面需要結(jié)合考試成績對全部因素的分析后加以對比,來進(jìn)一步深入分析了解;另一方面還需要在將來較長時間段內(nèi),調(diào)研學(xué)生在后續(xù)的課程學(xué)習(xí)與實踐中、畢業(yè)階段的程序設(shè)計中的能力體現(xiàn),來進(jìn)一步深入地分析了解。
(2)期末書面考核的形式和內(nèi)容可以在下一研究階段考慮改革和探索。工程應(yīng)用型的教學(xué)已經(jīng)將C語言及程序設(shè)計方法的學(xué)習(xí),落實到平時過程的項目訓(xùn)練中完成,通過演練強(qiáng)化了語法、規(guī)則、庫函數(shù)和技巧的應(yīng)用,期末書面考試則可以弱化C語言基礎(chǔ)知識和程序設(shè)計基本能力的考察,而將重點放在用C語言、算法、C程序結(jié)構(gòu)的思維,來考查學(xué)生對實際問題的描述、問題分析、程序設(shè)計、求解流程和過程管理等方面。
(3)課程要求學(xué)生具有一定的計算機(jī)基礎(chǔ)知識,機(jī)械專業(yè)班級未開設(shè)“計算機(jī)基礎(chǔ)”課程,軌道專業(yè)班級該課程與本課程同步開設(shè),對本課程學(xué)習(xí)影響較大。筆者在實際教學(xué)中補充了相關(guān)知識,但省去了“嵌入式應(yīng)用”環(huán)節(jié)的教學(xué),留下了遺憾。
(4)開發(fā)環(huán)境DevCPP對于初學(xué)者是不錯的軟件,上手快,小巧易攜帶易安裝。該軟件已停止更新,功能不是非常完善,特別是調(diào)試功能相對較差,可考慮采用其他的開發(fā)環(huán)境。
(5)考慮借鑒舊金山州立大學(xué)“工程師C語言程序設(shè)計”的教學(xué)。在學(xué)習(xí)C語言基礎(chǔ)后,結(jié)合嵌入式微控制器,采用相應(yīng)開發(fā)平臺,提供虛擬或?qū)嵨镞\行對象,設(shè)計應(yīng)用性模擬測量控制實際需求,來實現(xiàn)C程序設(shè)計過程的教學(xué)。
通過對具體實際應(yīng)用問題的編程求解來設(shè)計教學(xué),工程類應(yīng)用型專業(yè)學(xué)生可以較好地將C語言程序設(shè)計知識、方法的學(xué)習(xí)融入項目訓(xùn)練之中,提升自主學(xué)習(xí)的動力和效率,達(dá)到以學(xué)生為主體的教學(xué)效果。本課程改革針對C語言及程序設(shè)計類課程,擴(kuò)展課程教學(xué)目標(biāo),采用大程序量的、系統(tǒng)的、綜合性的項目例程設(shè)計和實現(xiàn)作為主要教學(xué)內(nèi)容和教學(xué)方式,課程教學(xué)改革開展了有意義的實踐和探索,積累了較豐富和有益的經(jīng)驗。