徐利軍 韓彥嶺 馮國富 葛艷 賀琪 沈曉晶 鄭宗生 袁小華 趙丹楓
摘要:《程序設計語言》是一門重要的專業基礎課,具有很強的實踐性,為改善實驗課的教學效果,我校圍繞在線評測系統重新設計了實驗教學環節。實踐結果表明現在的實驗課模式取得了良好的教學效果。
關鍵詞:程序設計;在線評測系統
中圖分類號:G434 文獻標志碼:A 文章編號:1674-9324(2018)50-0271-02
一、引言
《程序設計語言》是我校計科相關專業學生的一門重要的專業基礎課。教學大綱要求學生通過該課程的學習,既要掌握高級編程語言(C/C++)的語法規則,又要學習程序設計的方法和思路,學生能夠熟練運用C/C++進行程序設計,具備利用計算機求解實際問題的能力,初步具備一定的工程實踐能力。《程序設計語言》作為一門實踐性很強的課程,必須通過大量的編程訓練和工程仿真實踐,才能更好地達到課程教學要求。我校將《程序設計語言》課程學習分為兩學期:大一上學期授課內容為面向過程的C語言,理論學習與上機實驗時間之比為3∶2;大一下學期傳授面向對象的C++語言,理論學習與上機實驗之比為2∶1。此外,為培養學生的工程實踐能力,在大一下學期期末集中安排一周的時間完成一個中等規模的項目。從時間安排來看,為切實提高學生的動手能力,我們安排了充足的實驗時間,但實際執行效果卻不佳,在大一結束時,學生動手能力差仍舊是一個普遍問題。這主要因為,同其他編程語言相比,C/C++語言概念復雜、規則眾多,對初學者是一個不小的挑戰。由于大一新生還沒有培養出必要的計算思維能力,編程的時候,不少同學只能簡單照抄現成程序,不能靈活運用,常因為一個簡單的運行時錯誤或者邏輯錯誤便束手無策,而老師和助教的數量有限,難以及時協助學生解決問題。對于此類矛盾明顯的問題,我們可以通過增加助教來緩解這個問題,但其實實驗課中還隱藏著一個更為嚴重的問題,由于學生編程經驗的匱乏,無法自行編寫合適的測試用例,往往學生以為正確的程序其實是不完善的,而老師也不可能逐一驗證程序,導致實驗課上遺留了很多本來可以解決的問題。教師布置的課后作業,目的是培養學生的自主學習能力,但是因為在編程過程中無法得到及時反饋形成良好的互動,也無法達到目的。教學中老師的精力不得不放在解決代碼正確性的問題,忽視培養學生養成良好的代碼編寫習慣,而大一作為培養學生遵守代碼規范的黃金時間卻因老師的精力有限無暇顧及而浪費了。
二、改革探索
針對實驗教學中存在的問題,我校以在線評測系統(Online Judge)為核心,重新構建了實驗教學環節。
1.在線評測系統介紹。在線評測系統起源于ACM國際大學生程序設計競賽,它是基于B/S架構的程序代碼評測系統,采用黑盒測試驗證程序正確性。用戶提交源代碼后,系統會即時編譯成可執行代碼,使用預先設定的測試用例,從程序的運行時間、占用內存和運行結果的正確性等各方面檢查代碼,并返回詳細的評測結果。評測結果包括:(1)正確;(2)格式錯:程序輸出可能包含了多余的空格或空行;(3)答案錯:算法不正確;(4)運行錯:除零、錯誤指針、下標越界等運行時錯誤;(5)編譯錯:語法錯誤;(6)超時:算法效率太低或存在死循環;(7)程序輸出數據超出限制:輸出太多數據。在線測評系統應用極為廣泛,不僅可用于實驗教學、課后作業和課程考試,而且可以用于學生平時的自我訓練以及程序設計競賽。基于不同測試用例的評測結果可以有效地協助學生查找程序錯誤。對于測試失敗的用例,系統會提示代碼可能存在的問題,學生不斷修改的過程就是一個不斷自我完善的過程,這個過程帶來的成就感可以極大地調動學生學習的積極主動性。
2.實驗課課程設計。課前準備,教師依照理論課的授課順序和內容安排實驗課的實驗內容。在每次上課前,教師除了準備傳統實驗課的內容講解,還需要在線評測系統后臺準備實驗方案。課中安排。授課教師首先簡單復習理論課的內容,主要進行重要知識點講解,之后學生登錄在線評測系統完成實驗內容,系統會自動記錄學生的練習進度和練習時間,教師可隨時查看個體學生報告和全體學生的總報告,針對錯誤率較高的知識點進行重點講解。對于知識點內容較多的實驗課,可以預先對知識點進行分組,對應這些知識點設置多個針對性實驗方案。比如,按照教學計劃講授C語言循環結構時共安排了兩次實驗課,第一次實驗課的內容是熟悉while、do…while和for語句的語法,第二次實驗課是學習break和continue語句的使用。以其中第一次實驗課為例:(1)課前,教師依據知識點將本次實驗課分為兩組實驗方案,第一組實驗方案包含的知識點有while和do…while語句的基本語法以及while和do…while語句的區別與聯系;第一組實驗方案涉及的知識點有for語句的基本語法和for語句的多種使用方式。授課教師登錄在線評測系統后臺,依據知識點完成實驗方案的組織。(2)上課時,教師首先回顧while和do…while語句的知識點,隨后學生選擇第一組實驗方案進行自測答題。教師可隨時登錄系統查看學生練習情況報告,就實驗中出現的易錯題或者學生感覺難度較高的題目進行重點講解。第一階段實驗完成后,教師繼續講授for語句的知識點,學生打開并完成第二組實驗方案。教師隨后根據練習情況再次進行重點講解。(3)下課后,因為在線評測系統安裝在校園網服務器中,仍存有疑問的同學可使用個人電腦自行登錄系統,進一步強化學習。使用在線評測系統的實驗課組織模式,與傳統實驗課組織方式相比,優點明顯,為師生雙方提供了極大的便利。傳統實驗課中教師經常會被多個學生同時提問分身乏術,導致學生長時間等待教師解答而影響學習效果,而現在學生在練習時遇到的問題大部分能夠得到及時準確的解答。新的實驗課模式顯著提高了學生學習的主動性,實驗課的學習氣氛有了明顯改善,對比傳統實驗課得過且過的學生數量大大減少。在線評測系統顯著地減少了教師的工作量,而且教師通過練習結果的報表分析功能也能及時掌握學生的學習狀況,在隨后的教學過程中專注于重難點問題的分析講解,做到有的放矢。在實行實驗課教學改革之后,學生的考試成績和編程能力都有了明顯的提高。
三、強調遵守代碼規范
我校在教學中還有一個突出的特點,強調代碼規范的重要性,爭取讓學生在初始階段就培養出良好的編碼習慣。雖然遵守代碼規范并不能改善程序的性能,但遵守代碼規范能夠使程序具有更好的可讀性、可維護性,而且還能減少不必要的語法錯誤和邏輯錯誤。良好的編碼習慣是軟件工程師良好專業素質的重要體現。代碼規范包括以下幾個方面。
1.適當的縮進:根據程序邏輯,以縮進格式書寫代碼。
2.適當的空行:函數與函數之間增加必要的空行,使得程序結構一目了然。
3.適當增加代碼注釋:子函數的開頭需有注釋說明該函數的作用、參數的含義;程序中重要業務邏輯的部分加入注釋說明該段代碼的思路以及算法。
4.代碼塊要用花括號界定。即使代碼塊里只有一行代碼,也盡量使用花括號來界定代碼塊。
5.變量和函數的命名。盡量使用自說明的標志符來命名變量和函數,通過名稱即可大致了解變量的用途和函數的作用。
雖然目前無法通過系統自動檢查程序是否符合代碼規范,但是相對于驗證程序的正確性,該項任務僅需要較少的工作量。我們通過演示示例代碼、點評典型代碼和評分時額外加分引導學生遵守代碼規范。通過編碼規范的強調和實施,對提高學生的專業素養具有潛移默化的作用。
四、結語
實驗教學改革以來,在線評測系統輔助的實驗課模式有效地激發了學生的學習興趣,培養他們的自主學習能力,同時該方式也極大了減少了教師的工作量,使教師有時間關注于培養學生良好的編程習慣。實踐表明在線評測系統輔助的實驗課模式取得了良好的教學效果。