汪友生
(北京工業(yè)大學(xué) 信息學(xué)部信息與通信工程學(xué)院,北京 100124)
電類非計算機專業(yè)的本科畢業(yè)生多從事電子信息技術(shù)、通信工程、自動化、電子科學(xué)與技術(shù)、電氣控制等工程應(yīng)用型工作,這些工作對計算機能力要求較高。C語言憑借功能豐富,靈活方便,可移植性好的特點[1],成為高校電類非計算機專業(yè)本科生的專業(yè)基礎(chǔ)課程,通過 C 語言程序設(shè)計課程使學(xué)生掌握程序設(shè)計的基本方法并逐步形成正確的程序設(shè)計思想。但在教學(xué)計劃中,一般來說安排的課時比計算機專業(yè)的少,在實際教學(xué)中產(chǎn)生一些教與學(xué)的問題[2,3]。
學(xué)生重視度不夠。C語言程序設(shè)計是計算機公共基礎(chǔ)課程,電類非計算機專業(yè)的不少學(xué)生認為,此課程與他們所學(xué)的專業(yè)無關(guān),重視程度低,學(xué)習(xí)積極性不高。
課程知識點多而零散。在教學(xué)中,教師經(jīng)常是按教材順序逐章講解。這樣常常導(dǎo)致學(xué)生過于關(guān)注細節(jié)而忽略了程序設(shè)計的本質(zhì)[4]。同時由于每年的教學(xué)計劃都差不多,按照單一的形式進行,教師講授,學(xué)生按要求按步驟完成,加上課時的不足常常達不到培養(yǎng)學(xué)生能力的目標。
缺乏深入思考。大多數(shù)學(xué)生能夠掌握課堂的知識,通常只是按照教材的程序知識驗證例題的正確性,做不到對問題深入的思考,舉一反三。因為課時所限,實踐訓(xùn)練也不充分。一種普遍的情況是雖然學(xué)過C語言程序設(shè)計課,但等到高年級其它專業(yè)課或課程設(shè)計或畢業(yè)設(shè)計要用時又感覺無所適從,不知從何下手。
在教育改革的浪潮下,教育理念改變了從前“一言堂”“一刀切”的課堂形式,使學(xué)生成為課堂的主角,教師起著輔導(dǎo)和監(jiān)督的作用。這樣的學(xué)習(xí)模式,有利于學(xué)習(xí)者依據(jù)自己的學(xué)習(xí)興趣和學(xué)習(xí)習(xí)慣把握進度,做到了因材施教[5,6]。
對于教學(xué)中存在的問題,結(jié)合電類專業(yè)的教學(xué)計劃,提出一些改進的方法。
針對電類專業(yè)的特點,授課時應(yīng)重點、難點突出,避免知識細節(jié)講述的面面俱到,否則學(xué)生容易陷入一些語法細節(jié)忽略程序設(shè)計的本質(zhì)。教師在講完每節(jié)課程知識后,積極帶著學(xué)生跳出細節(jié),從高視角回顧每章的知識聯(lián)系,提煉程序語言的本質(zhì)。教師可以先舉一個簡單具體的案例,例如輸出一個“Hello,C語言!”。在此基礎(chǔ)上逐漸加入輸入輸出,數(shù)據(jù)類型,函數(shù),文件等語法知識[7]。也許學(xué)生對于例子中部分知識細節(jié)不是很明白。但他們切實的看到了一個完整的程序及其實現(xiàn)的功能,從整體上對C語言有了一個感性的認識后帶著疑問去學(xué)后面的知識。有了疑問,學(xué)習(xí)效率才會提高。教師選擇案例時,盡量選擇趣味性高,綜合性強的例子,有助于提高學(xué)生的學(xué)習(xí)興趣。
電類專業(yè)學(xué)生畢業(yè)往往從事電子信息,通信工程等方面工作,這些工作對于思維邏輯性要求較高。而C語言程序設(shè)計中的思維主要體現(xiàn)在抽象和自動化兩方面[2,8]。抽象表現(xiàn)為使用函數(shù)、常量、變量、數(shù)組和鏈表等元素表達實際問題中的系統(tǒng)、功能特征等。自動化表現(xiàn)為通過設(shè)計函數(shù)功能,實現(xiàn)函數(shù)的自動跳轉(zhuǎn)和調(diào)用,最終實現(xiàn)系統(tǒng)的功能。所以實際教學(xué)中,應(yīng)該結(jié)合C語言的抽象和自動化的特點,有針對性的講解課程知識。例如,一個函數(shù)中的順序語句可以自動執(zhí)行的基礎(chǔ)是EIP寄存器的加法操作。多個函數(shù)之間的來回自動跳轉(zhuǎn)的基礎(chǔ)是內(nèi)存堆棧區(qū)的支持等。
C語言基本是在大一年級的時候開設(shè),學(xué)生程序設(shè)計的基礎(chǔ)較低,C語言語法對于學(xué)生來講較難接受,若是從中體會語言的抽象與自動化就會更難。因此,對于學(xué)習(xí)初期,教師有必要提出一些引導(dǎo)式的問題,帶領(lǐng)學(xué)生逐漸認識編程的奧秘。比如,可以提出這樣的一系列問題:如何綜合描述一個人的姓名、年齡和籍貫,如何描述一個班中的某科成績,等等類似問題。通過拋出這些問題,使學(xué)生體會計算機與人之間的交流,感受C語言強大的功能,思考如何將實際物體元素抽象為C語言符號。
依據(jù)C語言的抽象和自動化的思想進行教學(xué),使得C語言的各種符號不再虛幻,與真實元素緊密相連,學(xué)生的思維能力得到鍛煉。
即使學(xué)過C語言程序設(shè)計課程,在面對實際問題的時候,學(xué)生往往依然不知道如何下手,沒有程序設(shè)計思路。另外,學(xué)生對編成興趣不一,熟練程度不同,基礎(chǔ)也不一樣。針對這一現(xiàn)象,提出一個“練—仿—創(chuàng)” 的實踐教學(xué)模式[9-11]。所謂“聽過的會忘記,看過的會記得,做過的才能理解”,理解了才能更好地應(yīng)用,才能有更多的創(chuàng)新。
練主要是檢驗教材或老師給的程序的結(jié)果。這個過程看似簡單,學(xué)生在運行過程也會出許多錯誤。比如符號沒輸對、保留字錯寫、0誤輸為o、分號省略、變量沒定義或重復(fù)定義等。這個過程使學(xué)生掌握了如何快速找到程序中出現(xiàn)的語法錯誤、連接錯誤和功能錯誤,幫助今后的學(xué)習(xí)。
仿是指經(jīng)過反復(fù)練習(xí)后驗證性的編寫程序。有了一定的基礎(chǔ)知識后,鼓勵學(xué)生根據(jù)要求對程序進行適當修改,觀察輸出結(jié)果有什么變化,并將修改后的程序與原來的程序進行比較,尤其是比較輸出結(jié)果,然后分析修改部分對運行結(jié)果的影響。
創(chuàng)是學(xué)生已經(jīng)掌握了較強的C編程能力后嘗試解決實際問題[12]。將實際問題抽象,提取特征,完成設(shè)計。如可以設(shè)計成績統(tǒng)計系統(tǒng),貪吃蛇游戲等程序。這個過程的目的是培養(yǎng)學(xué)生運用已學(xué)知識解決實際問題的能力。教師可以將往屆的資料提供給學(xué)生,讓學(xué)生提前鍛煉自己,挑戰(zhàn)自己,讓他們提前進入?yún)①悹顟B(tài),了解參賽難度,以及自己的潛力,享受解決問題帶來的成就感。
鼓勵學(xué)生多參加C語言編程競賽。競賽是對學(xué)生設(shè)計能力、實踐能力、心理素質(zhì)、團隊精神以及體力的一個極大挑戰(zhàn)。在檢驗學(xué)生綜合運用知識的同時,更側(cè)重于鍛煉學(xué)生的實際動手操作能力,使學(xué)生真正利用C語言完成程序設(shè)計,解決實際問題。這個過程不但使學(xué)生的課程知識得到加強,團隊合作能力,心理素質(zhì)得到提高,動手操作能力得到鍛煉,是對學(xué)生綜合能力的全面考核。學(xué)??梢蚤_展各類計算機競賽,甚至可以將競賽納入學(xué)分,這樣可以促使學(xué)生積極參加競賽,調(diào)動學(xué)生的學(xué)習(xí)熱情,使學(xué)生勇于思考,勇于創(chuàng)新。
課后作業(yè)是對課堂知識鞏固和理解的必要手段。根據(jù)電類專業(yè)的特點,建議采取獨自作業(yè)和合作完成相結(jié)合的方式。獨自作業(yè)主要是對課堂上所學(xué)的知識細節(jié)加強練習(xí),加深記憶;合作作業(yè)是團隊合作完成各自抽取的題目。在團隊合作的過程中,大家各抒己見,探討問題,交流知識,在合作的過程中,學(xué)生的設(shè)計思維得到鍛煉,模糊的知識點得到互補,學(xué)習(xí)效率會有很大提高。
作為電類專業(yè)的一門基礎(chǔ)課程,C 語言程序設(shè)計的教學(xué)不僅培養(yǎng)了學(xué)生分析問題、解決問題、編寫程序的能力,而且使學(xué)生懂得程序設(shè)計的方法。電類專業(yè)本科生可以充分利用C語言程序設(shè)計基礎(chǔ)進行后續(xù)圖像處理,信號處理等課程的學(xué)習(xí),為畢業(yè)設(shè)計和未來的工作都打下了很好的基礎(chǔ),將來可以更好的與程序開發(fā)人員溝通與合作,開發(fā)與本領(lǐng)域有關(guān)的計算機應(yīng)用程序。
結(jié)合具體教學(xué)改革,從2012年和2015年兩次修訂本科生教學(xué)大綱以來的幾年教學(xué)實踐表明,適當減少理論課細節(jié)講授,加大實踐環(huán)節(jié)力度,完善考核方式,團隊合作完成作業(yè)等這些改進方法符合當下的實際情況,實施起來相對新型教育方法更具有可操作性,收到了良好的效果。同時這些方法以培養(yǎng)學(xué)生的學(xué)習(xí)積極性,加強實際編程能力,提高程序設(shè)計的思維方式,提高創(chuàng)新與合作能力為宗旨,真正做到以學(xué)生為主,以學(xué)為主。
[1] 劉芳, 秦興國, 王宇英. 《C語言程序設(shè)計》教學(xué)存在的問題及改進[J]. 教育理論與實踐, 2012(36): 51-52.
[2] 汪紅兵, 姚琳, 武航星, 張敏. C語言程序設(shè)計課程中的計算思維探析[J]. 中國大學(xué)教學(xué), 2014(9): 59-62.
[3] 徐新愛. 基于學(xué)科競賽的《C語言程序設(shè)計》課程教學(xué)改革研究[J]. 西南師范大學(xué)學(xué)報(自然科學(xué)版), 2015(9):224-228.
[4] 李曉東, 魏惠茹, 董振華. 項目驅(qū)動教學(xué)法在計算機程序設(shè)計語言課中的探索[J]. 軟件, 2015, 36(4): 107-109.
[5] 葉向前. 電大非計算機專業(yè)計算機教學(xué)現(xiàn)狀及對策[J]. 軟件, 2014, 35(2): 178.
[6] 施鍵蘭, 黃文秀. 程序設(shè)計類課程中的教改研究[J]. 軟件,2016, 37(3): 34-35.
[7] 施鍵蘭, 黃文秀, 楊立娟. C 語言程序設(shè)計教學(xué)探討[J].軟件, 2013, 34(1): 171-172.
[8] 孫曉妍. C 程序設(shè)計中循環(huán)結(jié)構(gòu)的教學(xué)設(shè)計與探討[J]. 軟件, 2014, 35(3): 219-221.
[9] 李建伏, 沈中林, 衡紅軍. 案例教學(xué)法在面向?qū)ο蟪绦蛟O(shè)計課程中的應(yīng)用[J]. 軟件, 2015, 36(3): 48-51.
[10] 王蕾. 計算機上機實踐課程改革探索[J]. 軟件, 2014, 35(2):172-173.
[11] 彭星堂, 謝華成. 高等院校理工科計算機公共課教學(xué)改革研究[J]. 軟件, 2014, 35(2): 169-171.
[12] 孫立民, 梁國業(yè). 信息與計算科學(xué)專業(yè)實施大工程教育的理論與實踐探索[J]. 軟件, 2013, 34(5): 153-154.