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