顏 佳,王泉德,艾 波
(1.武漢大學(xué)電子信息學(xué)院 湖北 武漢 430072;2.武漢工程大學(xué) 湖北 武漢 430205)
目前大多數(shù)高校將“C語言程序設(shè)計”作為電子信息類專業(yè)的專業(yè)必修課程,授課對象往往是大一新生。該課程主要介紹了程序設(shè)計的基本思想和基本方法,其教學(xué)環(huán)節(jié)主要包括理論教學(xué)和實踐教學(xué)。課程為后續(xù)專業(yè)課程的學(xué)習(xí)和實踐奠定了程序設(shè)計的基礎(chǔ),為培養(yǎng)電子信息類專業(yè)人才服務(wù)[1-2]。作為具有較強(qiáng)實踐性的課程,該課程的實踐教學(xué)環(huán)節(jié)占有很大的比重,以提高學(xué)生的程序設(shè)計和編程能力。本文在電子信息類專業(yè)C 語言程序設(shè)計實踐教學(xué)中,探索根據(jù)本專業(yè)的特點(diǎn)和人才培養(yǎng)要求,以學(xué)生為中心,以專業(yè)能力為本位,在教學(xué)內(nèi)容的設(shè)計和考核的方式上進(jìn)行研究和實踐,從而在鍛煉學(xué)生編程思維的同時提高學(xué)生的專業(yè)認(rèn)知度,為后續(xù)的專業(yè)課學(xué)習(xí),學(xué)科競賽和科研打下堅實基礎(chǔ)。
目前電子信息類專業(yè)的C 語言程序設(shè)計課程的教學(xué)采用以掌握程序設(shè)計的基本概念為基礎(chǔ),以基本算法實現(xiàn)為指引,以提高使用計算機(jī)高級語言設(shè)計和實現(xiàn)算法的能力的培養(yǎng)為中心,引導(dǎo)學(xué)生掌握程序設(shè)計的方法。通過上機(jī)實踐培養(yǎng)學(xué)生編寫代碼能力,同時使學(xué)生具備代碼查錯、簡單調(diào)試的能力,培養(yǎng)學(xué)生使用計算機(jī)解決實際問題的能力。但是,實際的實踐教學(xué)環(huán)節(jié)中存在以下問題:
目前市面上還沒有專門針對某一具體專業(yè)背景的C語言程序設(shè)計教材。因此,設(shè)計實踐教學(xué)內(nèi)容時完全以通識類教材為主,那么實踐內(nèi)容就往往圍繞著“數(shù)據(jù)的各種運(yùn)算和處理”,“字符串的各種處理”等來展開[3-4]。這種傳統(tǒng)內(nèi)容的反復(fù)演練不僅會導(dǎo)致學(xué)生失去對本專業(yè)的學(xué)習(xí)興趣和自信心,缺少專業(yè)學(xué)習(xí)的動力,甚至產(chǎn)生對電子信息類專業(yè)的“誤解”。不少學(xué)生在多次上機(jī)后會說他們是“用著Visual Studio,干著Excel 的活”。因此,為了使大一新生迅速了解其專業(yè)特點(diǎn)和需要掌握的專業(yè)技能,并提升他們對本專業(yè)的興趣,在本課程的實踐教學(xué)中需要融入更多具有專業(yè)特色的案例或問題。這樣,一方面可以讓學(xué)生學(xué)習(xí)更有目標(biāo)性;另一方面也能夠提早使學(xué)生適應(yīng)專業(yè)實踐方式,提升專業(yè)的認(rèn)同感和學(xué)習(xí)的自信心。
本課程的實踐教學(xué)通常在理論教學(xué)的某個知識點(diǎn)或章節(jié)講授完成后進(jìn)行。例如,講授完循環(huán)結(jié)構(gòu)后會設(shè)計若干道編程題目來掌握單層和雙層循環(huán)結(jié)構(gòu)和相關(guān)控制語句。講授完數(shù)組后也會設(shè)計若干題目來掌握一維和二維數(shù)組的定義和使用。但是,這兩次實驗內(nèi)容的設(shè)計往往是獨(dú)立的,或者無相關(guān)性。這種形式確實可以鍛煉學(xué)生的編程能力,但由于貫穿性不夠,無法使學(xué)生深刻體會新知識強(qiáng)相關(guān)性的優(yōu)勢以及培養(yǎng)學(xué)生從小問題到大項目的連續(xù)性問題解決能力。
目前,本課程實踐教學(xué)的考核方式通常是:教師每次為學(xué)生布置上機(jī)題目,學(xué)生在指定時間內(nèi)完成并根據(jù)完成情況獲得分?jǐn)?shù)[5-6]。這種方式的好處是學(xué)生分階段完成知識點(diǎn)的學(xué)習(xí)任務(wù),有助于學(xué)生及時掌握知識點(diǎn)并使教師及時了解學(xué)生的編程能力。但是這種單一的考核形式有礙于學(xué)生綜合素質(zhì)的培養(yǎng),對優(yōu)秀學(xué)生的激勵性較差,并且對后續(xù)學(xué)生參與大學(xué)生電子設(shè)計競賽,“互聯(lián)網(wǎng)+”創(chuàng)新創(chuàng)業(yè)大賽等學(xué)科競賽和科研項目的能力培養(yǎng)不夠。
針對此類問題已有很多研究,例如課程設(shè)計改革,實踐教學(xué)手段和教材等[7-12],并取得了一定的成果。但是上述研究大多沒考慮C 語言程序設(shè)計與電子信息類其他專業(yè)課程之間的關(guān)系,而作為一門專業(yè)基礎(chǔ)課程,這恰恰是本課程教學(xué)中需要重點(diǎn)面對和解決的問題。本文從本課程的實踐教學(xué)入手,結(jié)合電子信息類專業(yè)特色,從實踐教學(xué)內(nèi)容設(shè)計和教學(xué)考核方式兩個方面進(jìn)行探索和研究。
本課程的實踐教學(xué)按照理論教學(xué)的順序共安排8 次。每次上機(jī)實踐內(nèi)容如表1 中所示,所涉及的知識點(diǎn)主要包括C 語言的三大基本結(jié)構(gòu)(順序,選擇與循環(huán)結(jié)構(gòu)),數(shù)組,函數(shù),指針和結(jié)構(gòu)體等。每次上機(jī)題目為10 道左右,難度從易到難,并且每次上機(jī)均導(dǎo)入與電子信息類專業(yè)某門專業(yè)課有關(guān)的題目1―2 道。這些題目來自專業(yè)課的具體教學(xué)內(nèi)容但是進(jìn)行了適當(dāng)簡化,來適應(yīng)每次上機(jī)實踐的要求。例如“單片機(jī)原理與應(yīng)用”“數(shù)字信號處理”“數(shù)字圖像處理”“語音信號處理”和“通信原理”等課程就是否適合提取出相應(yīng)的專業(yè)問題來給大一的學(xué)生嘗試實現(xiàn)。表1 中給出了每次實踐內(nèi)容中所涉及的專業(yè)特色題目(表中僅列出了部分題目)及其來源。從學(xué)生角度出發(fā),我們選取的專業(yè)課程以信號類課程為主,考量的原因是這類問題中有些知識點(diǎn)理論相對簡單,處理過程及結(jié)果直觀,更容易讓還沒有專業(yè)知識背景的大一學(xué)生所接受。這樣一來,不讓他們產(chǎn)生懼怕心理,能讓學(xué)生將C語言知識拓展到實際應(yīng)用中。
表1 C 語言程序設(shè)計上機(jī)實踐內(nèi)容中的專業(yè)特色問題
例如,在第一次上機(jī)內(nèi)容中除了常規(guī)的順序和選擇結(jié)構(gòu)程序題目外,還增加了RGB 和HIS 顏色空間轉(zhuǎn)換的題目,該題目來自我院電子信息類專業(yè)學(xué)生大三所需學(xué)習(xí)的“數(shù)字圖像處理”課程中的“彩色圖像處理”章節(jié)。該轉(zhuǎn)換公式利用選擇結(jié)構(gòu),輸入和輸出語句即可完成,比常規(guī)題目更容易讓學(xué)生提前了解到以后專業(yè)領(lǐng)域要研究的具體問題;在第二次上機(jī)內(nèi)容中除了常規(guī)的“數(shù)據(jù)求和”等循環(huán)結(jié)構(gòu)經(jīng)典題目外,還增加了“周期信號的產(chǎn)生”這一問題,該問題選自于專業(yè)必修課程“數(shù)字信號處理”。該題目要求學(xué)生設(shè)計一個程序能產(chǎn)生正弦和余弦信號,該問題利用循環(huán)語句即可完成,并且能夠使學(xué)生對數(shù)字信號有初步認(rèn)識,如果配合一些庫函數(shù)的使用,學(xué)生還能直接將所產(chǎn)生的信號波形繪制出來,形成從代碼到圖形的直觀認(rèn)識。第三次上機(jī)中引入了經(jīng)典的直方圖均衡化操作處理。直方圖均衡化是一種常用的圖像灰度調(diào)整操作,例如可以用來解決圖像的過曝和曝光不足的問題。在這門課中,我們不會過多地講解專業(yè)知識,而是給出具體方法,讓學(xué)生編程實現(xiàn)均衡化的過程并分析比較處理前后直方圖分布的不同,再進(jìn)一步地思考這種新的分布對圖像所引起的變化。
目前,在C 語言程序設(shè)計的實踐課中,每次的上機(jī)題目之間往往沒有相關(guān)性和繼承性,即之前練習(xí)過的問題在后續(xù)上機(jī)中并沒有進(jìn)行深入和延展。這樣的教學(xué)安排不利于學(xué)生對課程整體性的把握,也不利于培養(yǎng)學(xué)生鉆研問題的能力,而這種能力在高年級的專業(yè)課學(xué)習(xí)或競賽科研中尤為重要。因此,我們采用了一種遞進(jìn)式的實踐教學(xué)方式,即對于某一專業(yè)問題,我們對問題進(jìn)行分解和簡化,然后依據(jù)教學(xué)進(jìn)度,在若干次上機(jī)中難度逐步遞增地讓學(xué)生進(jìn)行思考和設(shè)計,最終培養(yǎng)起能解決這一專業(yè)問題的能力。
例如,我們幾乎在每次上機(jī)內(nèi)容中均安排了與“信號濾波”相關(guān)的題目,經(jīng)過多次練習(xí),在最后一次的綜合訓(xùn)練中,學(xué)生能真正完成一個圖像空間域濾波程序,包括均值濾波和中值濾波等,并能比較上述兩種濾波方法的處理效果,這一問題正是專業(yè)課“數(shù)字圖像處理”中的核心教學(xué)內(nèi)容。該案例的遞進(jìn)式實踐內(nèi)容安排如表2 所示。從表中可以看出,實踐題目的安排從三個數(shù)據(jù)的處理可以采用三個變量的方式完成,到十個數(shù)據(jù)的處理時就必須采用循環(huán)結(jié)構(gòu)來完成,到需要保存原始數(shù)據(jù)時就必須使用數(shù)組的知識點(diǎn)來完成,到二維數(shù)據(jù)時就得借助二維數(shù)組來完成,到最后圖像二維數(shù)據(jù)的綜合處理需要加上函數(shù)及指針等章節(jié)的知識。從一維信號到二維信號;從在主函數(shù)中完成所有工作到將濾波器設(shè)計成單獨(dú)函數(shù)來完成程序。這樣的安排有利于學(xué)生逐步了解專業(yè)性問題,并且易上手,易實踐,調(diào)動了學(xué)生的學(xué)習(xí)積極性。遞進(jìn)式的實踐教學(xué)安排能夠使所學(xué)知識點(diǎn)和程序設(shè)計方法的練習(xí)更有目的性,加深學(xué)生對不同知識點(diǎn)之間聯(lián)系的理解。
表2 “信號濾波”的遞進(jìn)式實踐教學(xué)安排
C 語言程序設(shè)計課程是一門實踐性很強(qiáng)的課程,通常其實踐教學(xué)部分的考核方式是每次上機(jī)實踐后提交上機(jī)報告進(jìn)行評分。這種考核方式由于不需要學(xué)生當(dāng)場完成編程任務(wù)并檢查,導(dǎo)致教師不能準(zhǔn)確掌握學(xué)生的真實編程能力。我們采用了形式豐富的實踐教學(xué)考核方式:平時的現(xiàn)場考核,學(xué)生講解問題和小組合作等。多元化考核方式不但能明確地反映學(xué)生在學(xué)習(xí)過程中哪個環(huán)節(jié)薄弱,及時補(bǔ)漏,而且還能激發(fā)學(xué)生自主學(xué)習(xí)的積極性。
每次上機(jī)實踐時,為學(xué)生布置上機(jī)題目,學(xué)生在指定時間內(nèi)完成并根據(jù)答題數(shù)量和質(zhì)量實時獲得成績。每次上機(jī)實踐的內(nèi)容不超出已授課的知識點(diǎn)范圍,使得學(xué)生能夠反復(fù)練習(xí)某種編程思想,并熟練應(yīng)用。這種分階段地完成各個知識點(diǎn)的學(xué)習(xí)并在規(guī)定時間內(nèi)完成考核任務(wù),不僅有助于學(xué)生及時掌握自身編程的不足,也能讓教師及時發(fā)現(xiàn)學(xué)生上機(jī)中的共性問題,在后期教學(xué)中進(jìn)行調(diào)整和講授。
C語言的課堂教學(xué)過程中往往采用的是“教師講,學(xué)生聽”的灌輸式教學(xué)法。那么在實踐教學(xué)環(huán)節(jié)中,可以采用“學(xué)生講,大家聽”的方式來對課堂教學(xué)方式進(jìn)行補(bǔ)充。對于每次上機(jī)中具有代表性的題目,教師可以選取其中完成較好的學(xué)生來給大家講解其思考過程,程序框架和實現(xiàn)代碼,并讓其他學(xué)生來對其程序進(jìn)行提問,最后教師來總結(jié)。例如每次上機(jī)內(nèi)容的最后1―2 道問題往往涉及一些算法和思維方式的選取,合適的算法才能較快地解決問題。而學(xué)生們盡管都會編出程序得到正確結(jié)果,但他們的思路是百花齊放的,其中有的程序既簡潔又高效,這種程序就可以拿出來給學(xué)生講解。這樣,學(xué)生不再只是被動地接受教師傳授的知識,他們能積極與教師配合,主動參與到教學(xué)活動中,使自身的學(xué)習(xí)能力和綜合素質(zhì)不斷提高。
無論是本專業(yè)后續(xù)的專業(yè)課實踐中,還是大學(xué)生電子設(shè)計競賽等活動中均需要學(xué)生以團(tuán)隊的形式完成某一項任務(wù)?;诖?,考慮到前七次實踐均是學(xué)生獨(dú)立完成所有上機(jī)題目的編程,所以在最后一次“綜合訓(xùn)練”實踐中,鼓勵學(xué)生組成小組,自行討論并確定題目,自行分配組員任務(wù),團(tuán)結(jié)合作,共同完成考核任務(wù)。例如五子棋游戲設(shè)計這一問題,每個小組若由三人組成,那么他們的分工可以采用如下的形式:一人負(fù)責(zé)整體框架的設(shè)計和主函數(shù)的編寫及函數(shù)參數(shù)的設(shè)計;一人負(fù)責(zé)棋盤的繪制函數(shù);一人負(fù)責(zé)判斷游戲是否結(jié)束及下子是否合理函數(shù)的設(shè)計。這樣的安排,他們就必須以團(tuán)隊的形式進(jìn)行合作、討論甚至爭辯,最終形成一個完整的作品。這一考核形式不僅激發(fā)了學(xué)生的團(tuán)隊合作精神,也更符合他們未來從事程序開發(fā)工作的形式。
我們對我院2015―2017 級三個試點(diǎn)班學(xué)生的C語言程序設(shè)計基礎(chǔ)期末成績進(jìn)行了分析與統(tǒng)計,如表3 中所示。其中2015 和2016 級學(xué)生采用的是標(biāo)準(zhǔn)的實踐教學(xué)形式,2017 級學(xué)生采用的是導(dǎo)入了專業(yè)特色教學(xué)內(nèi)容和考核方式的形式。從考試成績看,2017 級學(xué)生取得優(yōu)秀(90-100分)的學(xué)生成績比例在50%左右,不及格人數(shù)僅為1 人。對比可以看出:在實踐教學(xué)中引入了專業(yè)特色內(nèi)容后,學(xué)生對課堂知識的掌握程度和編程能力提升明顯。
表3 2015―2017 級試點(diǎn)班學(xué)生C語言程序設(shè)計期末成績分布
我們對2017 級該班學(xué)生進(jìn)行了跟蹤調(diào)查,還分析了他們后續(xù)專業(yè)課學(xué)習(xí),學(xué)科競賽和科研等情況。從數(shù)據(jù)可以看出,2017 級該班學(xué)生的整體專業(yè)能力有了大幅提升,其中專業(yè)課平均成績超過90 分的學(xué)生占32%,超過30 人主持或參與了國家級及校級大學(xué)生創(chuàng)新創(chuàng)業(yè)項目,發(fā)表論文十余篇,申請專利超過30 項;獲得校級以上學(xué)科競賽獎項60 余項。正是由于他們在大一的C 語言程序設(shè)計實踐中更早地了解了本專業(yè)課程,產(chǎn)生了專業(yè)認(rèn)同感,進(jìn)而引發(fā)了他們對專業(yè)課程學(xué)習(xí)的興趣,參與學(xué)科競賽和進(jìn)入實驗室從事科研活動的熱情。這也證明了本文提出的實踐教學(xué)研究的突出效果。
在電子信息類專業(yè)學(xué)習(xí)中,C 語言程序設(shè)計課程的學(xué)習(xí)是為后續(xù)課程服務(wù)的。針對該專業(yè)中C 語言程序設(shè)計實踐教學(xué)存在的專業(yè)特色缺乏,實踐內(nèi)容貫穿性不夠和考核形式單一等問題,本文分別從多層次的實踐教學(xué)內(nèi)容設(shè)計和形式多樣化的教學(xué)考核方式兩方面進(jìn)行了探索和研究。在實踐教學(xué)內(nèi)容的設(shè)計上主要采用了專業(yè)知識的逐步導(dǎo)入和遞進(jìn)式的實踐教學(xué)實施等方法,在教學(xué)考核上主要采用了現(xiàn)場考核,學(xué)生講解及小組合作等形式來實現(xiàn)考核的多樣化。這樣的做法能夠使得大一學(xué)生在完成C 語言程序設(shè)計課程的同時,提高其專業(yè)認(rèn)知度和學(xué)習(xí)興趣,為后續(xù)的專業(yè)課學(xué)習(xí),競賽和科研打下堅實基礎(chǔ)。