摘 要: 傳統的C語言程序設計教學存在不足,不僅影響了本門課程的教學質量,還影響了后續語言類課程的學習。為了改善該課程的教學效果,提出從教學質量控制、教學互動、代碼規范和考試等方面進行改革的措施。實踐結果表明,這些改革措施明顯改善了C語言程序設計課程的教學效果。
關鍵詞: 軟件工程; C語言; 教學改革; 考試改革
中圖分類號:G642 文獻標志碼:A 文章編號:1006-8228(2015)06-68-03
Abstract: There are drawbacks in the traditional teaching of C language programming, which not only affect this course teaching quality, but also have negative effect on the following language courses. In order to improve the teaching effect, this paper proposes the reform measures to teaching quality control, interactive teaching, programming specification and testing. The practical results show that the reform measures improve the C language programming teaching effect significantly.
Key words: Software engineering; C language; teaching reform; Examination reform
0 引言
軟件工程專業是一門實踐要求非常高的專業,該專業的學生要求在畢業時即可達到軟件從業人員所需的軟件開發、項目管理的能力,因此,軟件工程的教學質量必須得到控制和保證。為此,教學人員從多個方面探討提高教學質量的途徑。鄧澤林提出建立教學團隊來提高語言類系列課程的教學效果,并深入探討了教學團隊的創建、教學團隊的提升等問題[1],同時,他提出從大型軟件項目實踐、項目管理等方面提高軟件工程專業學生的實踐能力[2]。周波提出了本科院校學生軟件工程能力的評價標準,更好地評估學生的實踐能力[3]。
軟件工程專業學生的實踐能力主要體現在應用程序設計語言進行軟件開發的能力,而C語言程序設計是軟件工程專業所有語言課程的基礎,該課程的教學效果影響到Java語言程序設計、C++語言程序設計、C#語言程序設計等課程的教學質量,最終關系到了軟件工程專業學生的專業素養和求職就業。本課程的教學人員對提高C語言教學效果進行了研究,鐘美提出以培養應用人才為目標的C語言教學方法[4],但志平提出改善地方高校C語言教學的改革措施[5]。這些方法和措施尚未探討教學質量控制、編碼規范等方面,對于提高學生的專業素質意義有限。為此,我們提出了教學過程質量控制、師生互動、編碼規范和上機考試等多個方面的教學與考試改革措施,以提高C語言教學質量和學生的動手能力,并為后續課程的學習打下良好的基礎。
1 教學中的問題
1.1 教學只注重課程的講解,不注重教學過程的質量控制
傳統的教學以課程內容的講解為主,通過講解變量、循環、數組、指針等內容,并結合一定的教學案例來推進教學過程的實施。這種傳統的教學方法沒有考慮到本階段學生的特點,往往造成教學效果差,教學質量難以控制。C語言程序設計課程在大一新生中開設,許多學生缺乏程序的思維和一定的動手能力,學生難以跟上教學進度,造成一定數量的學生對學習語言失去興趣,從而影響整個專業課程的學習。
1.2 教學過程缺乏有效的互動
C語言程序設計的教學過程中主要使用PPT來講解,案例程序也通過PPT展示,甚至包括程序運行結果也以截圖的形式在PPT中顯示。雖然在PPT中可以添加很多的動作,動態地標注、顯示程序的運行過程,但這種方法以投影為中心,缺少與學生交流的環節,加上程序類課程相對枯燥,以致學生難以集中精力做到全程聽課。
1.3 代碼編寫規范強調不夠
編碼規范是軟件專業學生必須要牢記并遵守的,良好的編碼規范不僅能體現軟件從業人員的素質,而且使代碼有更好的可讀性,更容易被別人所理解和交流。該課程的講解主要以編寫簡單邏輯來解決一些日常問題、數學問題,編程的環節側重于算法的實現,往往忽略了編碼規范。
1.4 考試以筆試為主,難以檢驗學生的動手能力
傳統的C語言程序設計課程考試以筆試為主,考查學生對C語言基本的語法、簡單邏輯編寫的掌握情況。這種考試機制脫離了程序語言的實現介質,即計算機。雖然在試卷中也可以用編程題目來考查學生的編程能力,但在紙上寫程序與在計算機上寫程序有本質的不同。在紙上寫程序只需要寫出大致的邏輯即可,而在計算機上寫程序不僅要寫出正確的代碼,而且需要調試和跟蹤代碼,最終保證程序的正確執行。因此,筆試并不能很好地檢驗學生的動手實踐能力。
2 教學改革措施
2.1 加強教學過程的質量控制
C語言程序設計課程是一門實踐性強的課程,僅通過做一些常規練習無法達到教學質量監控的目的。為了更好地控制教學質量,需要從學生語法規則的掌握到動手編程這一系列環節進行掌握和跟蹤。為此,我們開發了一套在線作業系統用于教學質量的控制。
⑴ 作業題庫的建設
C語言程序設計的任課教師根據自己的經驗和理解來搜集和設計C語言題目,包括基礎知識的題目和編程實踐的題目。基礎知識的題目主要用于C語言知識點的訓練,包括填空題、選擇題、判斷題和程序閱讀題;編程實踐的題目主要用于編程能力的訓練,這類題目需要學生對問題進行正確分析、設計算法、編程并運行,最終得到結果。教師在給出題目時,需要提供測試數據和對應的結果。
⑵ 作業的布置與批改
教師可以根據每次課的教學大綱、課程內容,從作業題庫中選擇一些填空題、選擇題、程序閱讀題、編程題來建立課程作業供學生在課外完成。學生在規定的時間之內完成作業后提交作業,系統根據教師預先設定的答案進行自動批改,形成每個學生的作業記錄。如果學生在規定的時間之內沒有完成作業并提交則失去本次作業的記錄。教師通過查閱部分學生的解答來掌握學生對相關知識的掌握情況,特別是需要整理學生所犯的共性問題,并有針對性的開設習題課進行解答。
⑶ 配套政策
為了使學生重視平時作業的完成,課程的期末成績將考查平時作業的情況。如果學生沒有提交作業的次數在30%以上,則平時成績計0分,其他情況按照提交作業次數和作業得分根據一定的公式進行計算得到學生的平時成績。這種策略的主要目的在于督促學生跟著教學進度進行學習和訓練,不至于嚴重滯后于教學進度而失去學習的興趣,可有力地保證教學質量。
2.2 加強教學過程中的互動
課堂教學應該在一定程度上脫離PPT的教學,這樣才可以調動學生的積極性。加強師生之間的互動可以結合本課程特點進行。在講解課程知識點后,配以適合的案例進行教學,這些案例都是需要編寫C語言程序來實現的。此時,編程實現的環節不要通過PPT展示,而要在教師的計算機上動手編寫并運行得到結果,這樣可以改變教學節奏,吸引學生的注意力。C語言課程案例程序的一大特點是代碼量少,一般在20~30行之間,適宜在課堂上完成。
教師在編寫程序的過程中,可以向學生展示編程中需要注意的問題,同時,進一步講解C語言的語法和基本知識點。教師在編寫程序的過程中難免會犯小錯誤,或者是有針對性的故意犯一些學生經常犯的錯誤,在編程后的編譯運行時會有錯誤報出,這時對于提高師生交互是很好的機會。從學生的角度來說,他們的編程往往會有很多錯誤,編譯時會出現大量的錯誤提示。此時,學生可能就比較迷茫,不知道如何定位并解決錯誤。因此,當老師也出現錯誤,而且是學生經常遇到的錯誤時,學生往往是比較興奮的,希望能知道老師是如何處理錯誤的。從老師的角度來說,真實地反映程序編寫、編譯的過程,展示程序錯誤的發現、定位、解決的方法,能夠更快地提高學生的動手實踐能力。面對錯誤,教師還可以引導學生參與程序錯誤的解決,消除學生對程序錯誤的恐懼感。
在解決程序錯誤時可以參考以下步驟。首先,教師要把所有錯誤信息讀出來給學生聽,因為一般編譯出來的錯誤是用英文寫的,而且有些單詞學生不熟悉,因此,老師需要指出錯誤是變量重定義、變量沒有定義、還是其他錯誤;然后,指出核心錯誤的位置,教師要告訴學生程序報出很多錯誤信息往往是由一個小錯誤導致的,因此,老師要指導學生學會確定引起其他錯誤的核心錯誤;最后,在源程序中找到錯誤的位置,修改錯誤并重新編譯,得出運算結果。
這個錯誤處理過程是針對簡單語法錯誤的處理方法,如果程序中出現了邏輯錯誤,即程序編譯正確,但運行結果不是預期結果,此時,錯誤的處理方法更為復雜,可能需要重新檢查程序邏輯,并使用編譯環境進行程序中可疑變量的監視,通過觀察變量中的數值在程序運行過程的變化來確定錯誤。
通過實地編寫程序并調試,發現和解決程序錯誤,最終得到正確的計算結果,不僅能使同學更好地掌握程序編寫的方法,而且還能更好地與學生進行互動,提高教學效果。
2.3 強調代碼規范
有些老師在教學的過程中特別是演示程序時,注重于解決問題而忽視代碼規范,甚至是自己寫程序也是這樣,沒有代碼規范。雖然遵守代碼規范并不能改善程序的性能,但遵守代碼規范能夠使程序具有更好的可讀性、可維護性,是軟件代碼實施過程中軟件從業人員良好素質的重要體現。改善代碼規范可以從以下幾個方面進行。
⑴ 適當的縮進
每一行代碼不要頂格書寫,而要根據情況縮進。具有良好縮進格式的代碼不僅能少犯語法錯誤,還能夠使閱讀者快速掌握程序內容。
⑵ 適當的空行
函數與函數之間增加必要的空行,使得程序構成一目了然。
⑶ 適當增加代碼注釋
程序中函數的開頭最好加上注釋說明該函數的作用、參數的意義,在函數中重要邏輯的部分加入注釋說明該邏輯的主要思路、算法。
⑷ 代碼塊要用花括號界定
代碼塊盡量使用花括號來界定代碼范圍,即使代碼塊里只有一行代碼,這樣可以提高代碼的可閱讀性,防止閱讀者誤解程序。
⑸ 變量和函數的命名
盡量使用多個字母來命名變量和函數,使得程序閱讀者通過名稱即可大致了解變量的意義、函數的作用,提高程序的可讀性。
通過編碼規范的強調和實施,使學生認識到軟件開發的專業素質,對于提高學生的專業素養具有潛移默化的作用。
2.4 上機考試
上機考試采用在線考試的方式進行,考試環節包括如下幾個部分。
⑴ 試題庫的建設
C語言程序設計的任課教師負責組建上機試題庫,試題庫中的題目都是編程的題目,用于考核學生的編程能力。教師在組建試題庫時,標明每個試題的知識點和大致難度,并提供測試案例和對應的答案。題庫負責人負責查看、重新編輯每個題目,從題庫整體的角度更新每個試題的難度。
⑵ 上機考試的實施
為單次考試準備7個知識點和1個綜合知識點的題目,教師在考試之前為每個知識點選定難度相當的5個題目。每個學生登錄系統后,系統自動建立考卷,具體策略是從為每個知識點準備的5個題目中隨機選擇1題組成一個考卷,因此,該考卷包含8個題目,這8個考題要求學生在4小時內完成編程。考試時間一般定為上午8:00至中午12:00點。
學生根據隨機組成的考卷題目進行解答,為每道題目編程求解,并在學生機上利用示例測試用例檢驗代碼的正確性。如果在本地沒有通過檢測,則進行邏輯檢查,修改程序;如果本地通過測試,學生需要將代碼提交到服務器。服務器接收到代碼后,自動調用教師提供的更多的測試用例來檢測程序運行結果是否與預先設置的結果匹配,進行代碼邏輯黑盒測試。如果全部通過,則說明學生的編程邏輯是正確的,此時將學生成績記錄中對應的題目標為通過,并回顯“通過”給學生,學生繼續做下一道題目;如果其中有的用例運行結果不正確,則返回“錯誤”給學生,學生可以接著做本道題目,也可以選做另外一道題目,同時,在學生成績記錄中對應的題目標為錯誤。
教師在考試現場調取并查看所有學生成績記錄信息,如果發現異常信息,如在很短的時間內完成了過多的題目,則可能學生在作弊。此時,根據異常學生信息中的IP地址找到該學生,進行現場查證,如果確認為作弊則立即處理。如果學生正確完成了8道題中的5道題,則學生通過上機測試,否則,學生沒有通過上機測試。為了減輕學生的壓力,上機考試可以分兩次進行,如果第一次沒有通過上機考試,還可以組織學生進行第二次考試,取這兩次考試的較高分作為學生成績。
3 結束語
C語言程序設計是軟件工程專業的一門重要的基礎課程,其教學效果直接影響后續語言類課程的教學效果。
傳統的C語言程序設計在教學過程難以進行質量控制;師生之間缺少良好的交互,沒有強調編碼規范,沒有進行機試測試,導致教學效果難以保證。為此,本文提出了一系列改革措施,這些措施包括:利用在線練習系統來保障學生的課程作業得到及時的完成;通過課程程序的現場編寫、編譯等措施,加強與學生的互動交流;強調編碼規范提高學生的專業素養;通過在線考試提高學生的程序思維能力和動手實踐能力。
通過這些措施,學生學習C語言的進度基本能夠得以保證。由于學生平時就被要求在作業系統中進行程序的編寫并在線評判,從而具有了良好的編程能力,而且所編寫程序有較好的編碼風格,最終大多數學生能夠通過機試考試。實踐表明,本文所提出的改革措施提高了本專業學生的專業素養和動手實踐能力,有力地保證了后續語言課程的教學質量。
參考文獻:
[1] 鄧澤林,謝中科.教學團隊在軟件工程系列課程教學中的改革實踐[J].
計算機教育,2014.12(15):103-106
[2] 鄧澤林,謝中科.軟件工程專業實踐教學改革的研究與探討[J].中國
電力教育,2014.30(8):176-177
[3] 周波,劉興麗,喬付等.應用型本科院校學生軟件工程能力評價研究[J].
中國電力教育,2013.29(23):18-19
[4] 鐘美.培養應用型人才為目標的C語言教學改革[J].計算機教育,
2013.11(16):55-58
[5] 但志平,任東,王安慧等.地方高校C語言教學改革的探討與分析[J].
教育教學論壇,2014.6(20):56-58