尹存燕,劉奇志,陳家駿
(南京大學 計算機科學與技術系,江蘇 南京 210023)
程序設計基礎這門課程主要講授過程式程序設計的基本思想和方法。在南京大學,這門課目前不僅是計算機類專業的基礎平臺課,還是面向全校開放的選修課。程序設計基礎理論教學環節由于是大班教學,課堂上教學互動時間有限,多數學生是被動學習,被動接受知識的輸入,而程序設計本身對實踐有較高要求,學生必須通過編程實踐,才能真正掌握程序設計的基本思想和方法,因此實驗教學環節在程序設計基礎這門課中顯得尤為重要。實驗教學環節的目標是充分激發學生興趣,以提高實驗教學質量和效果。
傳統程序設計實驗教學的主要形式是教師布置實驗內容,學生根據實驗要求完成相關編程實踐。實驗內容主要是教材上的習題。實驗課上,教師和學生的互動主要是回答學生編程中遇到的問題。此外,為了檢驗學生的編程能力,還安排隨堂測驗,要求學生當堂閉卷完成編程題目。
通過收集學生的反饋信息,可以了解到:有些學生感覺程序設計實驗的過程比較枯燥;編程基礎薄弱的學生,特別是中學階段沒有接觸過編程訓練的學生普遍認為程序設計難度大;實驗教學課時少,在實驗課上教師無法和所有學生互動,有些內向的學生遇到問題時就選擇沉默。對于有一定復雜度的編程題,一部分學生在編程中會有挫敗感,失去編程的興趣。
分析學生的反饋信息,不難發現其中的原因,主要有3點:①受到中學教學方式的影響,學生還習慣于被動接受知識輸入,學習主動性不夠;②教材習題往往是為了配合程序設計基本知識而設計,和實際應用有一定的偏差,實驗程序缺乏趣味性;③編程能力本身需要經過一定代碼量的實踐訓練才能提高,不可能一蹴而就。初學者往往會因為編程中遇到的困難而氣餒,慢慢失去編程實踐的積極性。
以上這些原因歸結到一個最根本的因素就是學生缺乏編程的興趣。做學問的本質是以趣味始,以趣味終[1]。盧梭有句名言“問題不在于教他各種學問,而在于培養他愛好學問的興趣,而且在這種興趣充分增長起來的時候,教他以研究學問的方法。”學生如果對編程產生了興趣,就會主動學習程序中涉及的基本知識和方法,主動分析問題、思考問題和解決問題[2]。
以興趣為導向的實驗教學實踐針對實驗教學的形式和內容,從編程趣味性的角度出發,充分激發和培養學生的編程興趣,挖掘學生的潛能,讓他們由被動學習變主動學習,充分參與編程實踐,最終達到提高編程能力的教學目標。
就實驗教學形式而言,首先,借鑒翻轉課堂的教學形式[3-5],除了隨堂測驗的題目外,實驗題目及相關知識點一般提前一周在課程網站上公布。學生提前了解實驗內容及相關知識點,就會對實驗難度做到心中有數,如果有不熟悉的知識點,可以提前在教材上找到相關編程示例學習。有了提前的知識準備,實驗課上學生就不會手足無措。
其次,除了傳統的學生提問、老師回答之外,實驗課上還采用以下幾種形式激發學生興趣。
(1)學生相互批改作業程序。初學者在編程中遇到的問題主要是語法問題和邏輯問題。這些問題涉及的知識點,教師覺得很基本,學生應該會很快掌握,但是實際編程實踐中,初學者要經過多次訓練才能掌握。如果只是單一地布置編程訓練,學生難免會覺得乏味。采用相互批改作業的方式,學生首先要看懂別人的程序,才能判斷程序的對錯。學生在閱讀別人的程序過程中,可以充分體會到良好程序設計風格的重要性,在今后的編程實踐中會有意識地形成良好的程序設計風格;在調試別人程序的過程中,根據別人的錯誤現象,可以加強自身對語法知識點的理解和記憶。
(2)小組討論。將學生分成若干小組,每個小組的平均編程能力相近,針對某個問題進行討論。每名學生都要提出對問題的分析思路以及解決方法,小組成員共同探討哪些思路和方法是可行的。通過小組討論,學生能夠拓展編程思維,看到同一個問題,可以有不同的解決方法,并且經過編程實踐可以對比不同方法的優點和缺點。
(3)項目答辯。項目實驗考查的是學生綜合分析問題和解決問題的能力,項目程序往往具有一定復雜度和難度。程序設計基礎實驗教學目標是每名學生都積極參與編程,通過項目答辯,可以考查每名學生是否真正參與項目程序的設計。項目評分包括項目報告、項目程序和項目答辯,對于個別編程能力較弱的學生來說,不會因為其無法完整實現項目所有功能,就評分很低。項目評分機制的改變使得這些學生不再畏懼項目實驗,而會盡自己的能力完成項目,鍛煉自己的編程能力。學生能獨立完成項目基本功能,要好于抄襲完成所有功能。
(4)編程小競賽。編程小競賽在每年的暑假進行,面向所有學生。編程能力的培養是一個持續的過程,單憑一個學期的實驗課訓練是遠遠不夠的。實驗課上舉辦編程小競賽,就是想讓已經完成程序設計實驗課程的學生再次回顧編程訓練,在學生中制造一種人人愛編程的氛圍。考慮到參賽者的編程能力差異,競賽題目難度設計上應既考慮到基礎薄弱的學生,又考慮到編程能力強的學生,這樣可以吸引更多的學生參加。在競賽形式上,可以盡量舉辦得活潑生動,如今年的競賽名稱叫“編程甜品會”,競賽規則是在規定時間內完成一題就可以獲得一個甜點或者飲料,學生以輕松愉快的心情參加競賽,對競賽的參與度越來越高。
最后,實驗教學如果單單局限于有限的課時,勢必會出現部分學生不能及時得到教師幫助的情況。如果學生性格內向,課上不主動和教師交流,課后也不向同學請教,問題越積越多,一個學期過去,其編程能力就會和同班同學存在明顯的差距。為了能讓所有學生得到及時的幫助,每屆實驗課班級都建立有QQ群。在QQ群里,不僅學生可以及時和教師交流,而且學生間的交流也有所加強。一個學生提出問題,不僅教師回答,其他學生還會參與回答。課程群里允許匿名提問,這樣內向害羞的學生也敢于提出問題,從而獲取幫助。QQ群濃厚的學習氣氛可以感染所有學生,促進大家共同進步。
除了實驗教學形式,實驗教學內容的設置也要以激發學生興趣為導向。實驗內容既要保證基礎薄弱的學生看得懂、跟得上、積極性不減,又要充分激發學生的創新意識和創新思維。
教材上每章習題的設計出發點是說明語法細節或者基本程序設計思想,因而和實際應用有一定的偏差。這些題目用于編程訓練固然沒有問題,但是要想提高學生的編程興趣,就需要引入吸引學生的編程題目。
首先,對于本科一年級的學生來說,還沒有深入學習算法、數據結構等相關知識,實驗題目如果有較多的算法題,會讓學生感覺實驗課較為枯燥,此外,算法題目一般具有一定的難度,會讓一部分基礎薄弱的學生對編程產生畏懼感。在實驗內容上舍棄一些需要復雜算法和數據結構的項目實驗,引入一些和實際應用相關的題目,如編程實現某個小游戲,將某個應用實例的功能簡化到大多數學生可以編程實現的程度。布置項目實驗時,明確項目實驗的目的是考查學生對基本程序設計思想和方法的綜合應用,目標是鍛煉學生思考問題、分析問題和解決問題的能力。在項目實驗編程規模上,設定是每個學生都能獨立完成,不考慮組隊完成,每名學生都需要努力訓練和提高自己的編程能力。
其次,學生之間的編程能力差異是客觀存在的現象,有的學生在中學階段就已經接觸編程知識,而有的學生沒有充足的計算機基礎知識,在學習程序設計課程時,明顯比有基礎的學生感覺難度大,因此若要激發學生的學習興趣,實驗內容設置就要考慮到不同層次學生的接受能力。實驗課內容劃分難度層次,基礎薄弱的學生可以選擇從基本驗證實驗開始訓練;有一定編程基礎的學生可以選擇從綜合實驗題目開始訓練。這樣,基礎薄弱的學生有成功完成實驗的經歷,就會增強自信心,會有嘗試挑戰綜合實驗題目的欲望;而有一定編程基礎的學生,通過完成綜合實驗題目,有了編程的成就感,會更加迫切地想學習后面的編程內容。
最后,鼓勵運用多種方法實現程序。現在的高校人才培養提倡加強創新意識和創新思維的培養。在編程實踐中,鼓勵學生不拘一格,打開思路,學會從不同的角度分析題目,在完成一個題目的編程后,思考是否還有其他方法也可以實現題目要求的功能。教師針對每個實驗進行總結,列出學生提交的不同方法,讓學生通過比較,學習不同的編程方法,對所學的編程知識點融會貫通。
實驗教學實踐環節需要不斷探索。為了跟蹤學生的學習狀況,我們在學期初和學期末都會讓學生在線填寫調查問卷。反饋的問卷信息顯示,在學期初一般會有一半甚至一半以上的學生對“你對編程是否有興趣”的選擇是“否”,而到了學期末,選擇“否”的比例會明顯下降。最近一次調查中,選擇“否”的比例下降到15%以下。隨著學生的編程積極性逐年提高,后續專業課程的教師對學生編程能力的滿意度也在提高。在今后的實驗教學環節中,我們還將繼續探索更加生動有趣的實驗形式,優化實驗內容,加深其趣味性,努力使每一名學生都能愛上編程實驗課,積極參與編程實踐,訓練并提高自己的編程能力,為今后的專業學習打下堅實的基礎。
參考文獻:
[1]梁啟超. 飲冰室合集5[M]. 北京: 中華書局, 1989: 15.
[2]朱衛東, 邱振戈, 欒奎峰, 等. 計算機編程促發興趣的教學模式實踐與思考[J]. 電腦知識與技術, 2015(29): 140-141.
[3]屈微, 姚琳, 汪紅兵. 程序設計課程中的翻轉教學模式[J]. 計算機教育, 2016(1): 142-145.
[4]王世蓉, 高騰剛, 黃政. 程序設計課程混合教學模式改革與實踐[J]. 大學教育, 2017(5): 29-30.
[5]李洪建. 基于混合式教學模式的計算機教學改革[J]. 計算機教育, 2015(24): 36-40.