繆裕青+劉少兵+俸皓+朱細平+楊兵+劉洪波

摘要:《程序設計與問題求解》課程強調以實際問題驅動,學生通過大量實驗來解決實際問題,從而提高編程能力。在實驗方式上,提出以分組完成綜合性習題方式訓練學生團隊協作和實踐動手能力;在實驗驗收上,嘗試引入斯坦福大學的Moss系統來甄別實驗抄襲,引導學生獨立完成實驗。通過實際教學效果驗證了對該門課程實驗教學改革是值得借鑒和推廣的。
關鍵詞:C語言;程序設計;實驗教學改革;Moss系統
中圖分類號:G642.41 ? ? 文獻標志碼:A ? ? 文章編號:1674-9324(2015)20-0158-02
一、背景
《程序設計與問題求解》(以下簡稱《求解》)是2007年我校對IEEE/CS和ACM任務組給出CC2005報告和CS2001核心課程進行研究之后為計算機科學與技術等相關專業新開的一門專業基礎必修課程,這門課程的前身是《C語言程序設計》[1]。
《求解》課程教學采取實際問題驅動方式,通過大量實例講授程序設計的基本概念、基本方法,把重點放在解題思路上。即通過針對實際問題進行分析,構建數學模型,設計算法,最后通過C語言編程實現這一過程來訓練學生程序設計的能力。
經過6年多的教學實踐,取得良好的效果,但發現存在以下問題。
1.學生對理論知識的理解和掌握不夠,具體體現在作業完成情況較差,考試成績不理想(卷面考試成績不及格率大于15%,勉強及格學生比例高達20%)。
2.不能按要求完成實驗內容。過半數的學生不能按時獨立完成實驗,收獲較小。
3.實驗抄襲現象嚴重,導致后續課程學習上的困難。
鑒于上述問題,如果再不對《求解》教學尤其是實驗教學進行改革,那么培養出來的學生勢必是缺乏競爭力的。任課教師已經發現了這門課程在教學學時、教學內容安排、理論與實驗教學的比例分配以及采用什么語言工具進行教學等方面存在的問題,正在探索更加有效合理的方案。
那么,是什么導致了上述問題呢?這是項目組這次研究的主要課題,通過對上面問題的研究,找出問題的癥結,探討方案,討論和更新教學大綱和實驗大綱,更新實驗指導書,提出新的教學方式和方法。通過課題組的集體討論和教學實踐,形成一個高效合理的教學方案,具有很緊迫的現實意義。因此改革勢在必行。
目前,國內的多所高校已經早于我校開展了《求解》這門課程,但總體上說,對這門課程的教學還都處在實踐和探索的階段,因此,進行《求解》這門課程的教學改革研究,具有更廣泛的實際意義。關于《求解》理論教學的方法探討請參考筆者的第一篇參考文獻。本文主要討論實驗教學。
二、實驗教學內容改革
當前,計算機軟件方面的實驗課程大多都已經按照規范文本羅列出了實驗目標、實驗內容、實驗報告等組成元素。采用了教師輔導、學生主導一人一機獨立完成實驗相結合的方式進行授課,已經得到大家的共識和學生的認可。
但本課題組認為,對待《求解》這門特別強調學生的動手能力的課程,要有更高的要求:那就是學生通過本課程的學習,應該具備有解決綜合問題的編程能力。而限于實驗學時有限,學生很難在規定的2個小時完成實驗內容,從而不能客觀地評價學生。這樣導致很多實驗內容顯得知識點單一,考核內容單一,不能充分調動學生的學習積極性,學生最后的動手能力不能得到充分的挖掘和開發。
某班期末考試科目為數學(MT)、英語(EN)和物理(PH),有最多不超過30人參加考試。考試后要求:①計算每個學生的總分和平均分;②按總分成績由高到低排出成績的名次;③打印出名次表,表格內包括學生編號、各科分數、總分和平均分;④任意輸入一個學號,能夠查找出該學生在班級中的排名及其考試分數。
應該說上面的實驗題基本滿足了對數組知識的學習和實踐編程要求。不足之處也是顯見的:一方面是考核的知識點單一,主要是數組;二是考核的題目太模型化,學生的建模能力不能得到很好的鍛煉;三是不適合小組形式合作完成,學生如果不能完成,但為了拿學分,必然導致抄襲過關;四是題目太少,全班學生做相同的題目,一人做出,全班做出的局面很常見。
為了較好地解決上述不足,課題組提出從函數這一章之后,每次實驗的內容至少包含1道綜合實驗題,一個綜合題包括3~4個模塊,由一個小組(建議每個小組3~4人)來共同完成。
還是拿數組這一章的實驗舉例,比如可以引入“驗證哥德巴赫猜想”作為一道綜合實驗題。哥德巴赫猜想的概要流程圖可參考文獻[2]。
這里可以用數組PrimeList[]來存放生成的素數。用函數CreatPrimeList(int PrimeList[])來生成素數表;用NextPrimeNumber(int p,int PrimeList[])來生成下一個素數;用main()函數來完成主流程編程并對上面兩個模塊進行調用[2],從而完成實驗內容。
這樣把一個大的問題分成若干小的模塊,該題可以由3個同學協作完成,一人完成一個模塊,由于絕對工作量的減少,學生能夠在2個小時的實驗時間完成;又是團隊合作,學生的自信心會明顯增強,而在完成任務的過程中的相對工作量和知識點沒有減少,不影響知識的學習和應用。
這樣的實驗內容安排有以下優點:(1)讓學生更好地體會“自頂向下,逐步取精”的結構化程序設計方法。(2)題目綜合性強,模塊化結構明顯,適合分工協作。可以討論共同完成,克服單兵作戰的恐懼心理。(3)考核的知識點全面,內容涉及數組、函數、循環、算法等幾乎前面所學的所有知識點。(4)綜合習題的完成帶來更大成就感,從而增強學生的學習興趣,形成良性循環。(5)培養了大學生之間的協作能力,有效地降低了學生大面積抄襲行為。
具體方法如下:一是合理利用網絡資源。C語言已經是除英語、高數、政治理論等課程之外開設最廣的一門課程,開設歷史悠久,因而相應的資源很容易從網上獲得。每一章實驗找到3道左右供學生選做的綜合題是完全可以實現的;二是實驗題目要多,采用學生學號2位尾數(比如除4)求余數的方式做對應的實驗題來規避大面積抄襲的風險。比如一次實驗的基本題出4道題,那么學號尾數是01、05、09的強制做第一題,學號尾數是10、02、06的強制做第二題,以此類推。
三、實驗驗收方法:嘗試引入斯坦福大學的Moss系統,甄別抄襲現象
1.Moss系統簡介。斯坦福大學的Moss(Measure Of Software Similarity)[3]系統是一個簡單易用的編程語言雷同檢測系統。它主要用于計算C、C++、Java、Pascal、Ada、ML、Lisp等一些形式化語言所編寫的程序之間的相似性。哈工大計算機學院已經成功地運用Moss在一些程序設計類課程中檢測學生程序之間的雷同[4]。該系統目前只用于教學系統,是一個免費的系統,因此不會增加成本。
2.電子作業抄襲比書面作業抄襲更可怕。當前,作業雷同現象很普遍:“抄襲”會讓所有教學手段失去效能。程序拷貝抄襲他人作業比書面抄襲帶來的危害更大,通過拷貝方式在抄襲者腦海里所留下的知識點印象更弱,而且拷貝的獲取更容易,很容易培養出“慣犯”,從而導致教育的失敗。[5]因此,嚴打雷同作業必須作為實驗驗收時非常重要的手段來督促學生認真獨立地完成實驗內容。
引入了Moss系統后,可以采用如下的制度來嚴打抄襲作業現象[6]:雷同雙方當次作業記0分;兩次雷同以往作業成績全部清零;三次以上雷同,所有作業成績全部清零。所謂“嚴師出高徒”,通過嚴打雷同作業,往往會有意想不到的收獲。激發潛能:“我”居然能把作業做出來了!為了作業不雷同,“我”想到了一種特別的方法等。維持誠信:這是當今社會正在缺失的特質。
當然,簡單的實驗作業可能由于巧合存在很多誤判雷同的情況,這點需要任課老師區別對待。
四、結論
到完成這篇論文之前,課題組成員已經嘗試用上述教學方法進行了實驗指導書的部分更新并按照新的實驗指導書來指導學生實驗。但對于實驗作業的雷同部分,限于時間原因,由于要比對雷同作業要將每一批次的作業上傳到斯坦福大學網站進行比對而暫時還沒有進行。這是本課題組后面要大力積極推進的重點內容。目前已經完成了1個學年的《求解》實驗教學任務,表1給出了采用上述教學方法后的實驗考試成績分布,還有通過后續課程教師的反饋來看,基本上比較客觀地反映出了這樣的教學方法還是值得大家借鑒的。當然,每門課程都有各自的特點,因材施教,因課施教,是不斷摸索和積累的過程。
參考文獻:
[1]劉少兵,等.《程序設計與問題求解》理論教學方法研討[J].科學時代,2010,(22):106-107.
[2]羅建軍,等.C++程序設計教程[M].第二版.北京:高等教育出版社,2007:187-190.
[3]http://theory.stanford.edu/~aiken/moss/
[4]http://cms.hit.edu.cn/course/view.php?id=44
[5]http://cms.hit.edu.cn/mod/forum/search.php?id=44&search=Moss
[6]http://sunner.cn/lectures/