李卓 趙津燕 李益民
(北華大學計算機科學技術學院,吉林 132021)
C程序設計基礎課程是許多工科類普通高校計算機和非計算機專業公共基礎必修課,多為大學一年級新生開設的首門高級程序設計課程。通過這門課的學習,學生不僅要掌握C語言本身的基本概念和語法規則,更要掌握程序設計的思想、方法和技能,為后續課程的學習和本專業應用打下較扎實的理論和實踐基礎。通過以往的教學實踐,我們發現很多大學新生認為C程序設計基礎課程是一門比較難學好的課程,由于內容多、課時緊、知識與高中相比跨度大,使得一些學生在學習過程中有畏難情緒,學習興趣不夠濃厚,往往出現教師教的累,學生學不會的現象。所以提高這門課程的教學質量,激發學生的學習興趣,對于培養學生程序設計能力、靈活的思維方式以及較強的動手能力都是非常重要的。
C程序設計基礎是一門理論和實踐緊密結合的課程,而實踐必須要在理論的指導下才能正確進行,所以對于理論課教學內容的設定和調整是提高教學質量的前提。傳統的教材基本上是以一門語言的自身體系的脈絡來展開,過于注重語句語法的細節,沒有把編程解題思路放在主體地位[1],使得部分學生學完后有種“只見樹木,不見森林”的感覺,遇到本專業領域的實際問題時,不知道如何去分析和解決,學以致用的能力沒有得到很好地培養。
對于教學內容的改進可以從以下兩個方面來進行:其一,內容的精簡與整合。具體而言就是對于一些過多過細的語法點要進行精簡,而對于一些前后聯系比較緊密的內容可以不按照教材上的書寫順序來進行整合。例如,輸入輸出函數中對于格式控制符的介紹很詳細[2],在教學中,我們可以將一些不常用的格式控制符的使用說明作為精簡的內容,學生在使用時可以通過查閱資料方式來獲得。又如,還可以將預處理命令部分作為精簡內容,因為這部分內容易于理解可以留給學生進行自學,使得學生在自學過程中提高了獨立分析和解決問題的能力。另外,對于指針[3]的學習一直是本門課程教學的重點和難點,由于數組和指針這兩部分的教學內容聯系緊密,可以將其進行整合。例如,可以在一維數組的講解中引入指針的概念,使得學生更容易理解什么是指針,從而為進一步應用指針打下良好的基礎。
其二,內容的補充與擴展。為了提高學生的程序設計能力,在以C語言本身知識作為教學內容的基礎上,還要補充一些數學建模、算法設計、程序設計風格以及軟件工程等方面的知識,使得學生在學習過程中不局限在對于一門語言本身的掌握,而是能從更高角度來認識和感受程序設計的精妙之處,做到“既見樹木,亦見森林”。另外,隨著互聯網技術的飛速發展,還可以指導學生充分利用網絡來獲取書本之外的寶貴學習資源,例如,一些優秀的程序設計論壇,免費的視頻學習網站等,從而擴展學生的視野,激發學生主動學習的內在動力。
傳統的“填鴨式”教學方法存在的弊端已經越來越明顯,為了更好地實現教學內容的組織思路[4],應該采用能夠激發學生學習興趣和主觀能動性的教學方法,對傳統教學方法進行改進,具體的改進方式主要有以下兩方面:其一,基于問題的啟發式教學。也就是說在教學中,要圍繞所要解決的問題,以學生為主體,教師為“協作者”逐步引導學生掌握解決問題的方式方法。例如,在講解“冒泡排序”算法時,教師可以在介紹該排序算法思想的基礎上,以一組具體的數據為例,引導學生來模擬計算機完成排序的過程,并啟發學生如何從程序設計的角度來實現模擬的排序過程,進而由具體數據排序過程擴展到對任何N個數據進行冒泡排序規律的尋找,最終得到整個排序算法的代碼框架。在這一過程中,將學生作為解決問題的主體,教師作為輔助者,在一個個問題獲得解決的過程中,可使學生獲得學習的成就感,從而提高學習興趣。
其二:適當進行角色互換。在課時允許的情況下,可以事先選擇一些內容,讓學生自學,然后學生采取自愿原則作為教師講解這部分內容,而教師則扮演學生角色。待學生講解完畢后,師生一起以討論方式對該生所講解的內容進行點評和補充。例如:在學生學習完一維數組的基礎上,就可以選擇二維數組作為教學內容進行角色互換,在這一過程中不僅可以提高學生的自學能力和表達能力,激發學習的主觀能動性,而且在角色互換的過程中還能讓學生體會到教師備課的辛勞,從而在學習過程中能更尊重教師的勞動成果。另外,教師在角色互換過程中,還可以從學生身上獲得一些教學啟示,從而達到教學相長的目的。
C程序設計基礎課程有其自身的特點,學生聽不會,也看不會,只能練會[5],為了鞏固和加強理論課教學內容,提高學生實踐技能,培養工程意識和創新能力,必須加強實踐訓練,使學生在大量的練習中掌握知識,提高程序設計能力。
為了真正提高學生的程序設計能力,我們對實踐課教學主要從以下兩方面進行改進:其一,實驗課的實驗題目分梯度進行設置。傳統的實驗題目對所有學生都是統一設定的,這樣往往就會出現一些學生“吃不了”,而另一些學生“吃不飽”的現象。為了滿足不同程度學生的學習需要,我們將實驗題目劃分為三個梯度,分別為:驗證型題目、半設計型題目和設計型題目。其中,驗證型題目不僅給出題目描述而且還給出了程序代碼,通過這類題目可以培養學生讀程序和調試程序的基本能力;半設計型題目給出了題目描述和至少一種解決問題的算法描述,通過這類題目可以培養學生部程序設計和編寫能力;設計型題目只給出題目描述,要求學生自己建立解決問題的數學模型并最終通過程序來實現,通過這類題目可以培養學生算法設計、程序設計和程序調試等多方面綜合實踐能力。
其二,以項目為驅動,分小組進行課程設計。實踐課教學的改進除了常規實驗課改進之外,還要在學生基本完成C程序設計基礎課程學習之后,分出兩個星期的時間進行課程設計。學生自由組成課程設計軟件開發小組(即開發團隊),每組為3人左右,并選舉1人任組長。每個軟件開發小組可以選擇教師擬定的課程設計題目中的一個課題或自選題目進行小型項目的開發,每組獨立完成設計任務。課程設計按小組驗收,要求學生演示設計的程序,講解設計思路、方法、解決的主要問題,教師根據具體情況向每個學生提問2至3個問題。另外,每位同學在課程設計驗收結束后要上交一份內容充實、寫作規范的設計報告。經過這樣的實踐訓練,不僅培養了學生綜合運用所學知識獨立完成課題的能力,而且還培養了他們的團隊合作精神,為今后在學習過程中工程意識和創新能力的進一步提高打下了扎實的基礎。
現在還有許多高校的C程序設計基礎課程教學評價方式以筆試為主,這樣就會導致很多學生對于上機實踐不夠重視,出現“高分低能”的現象。為了提高學生的實踐能力,在日后激烈的就業競爭中能夠脫穎而出,我們需要對本門課程的考核方式進行改進:其一,加大上機實踐考核比例。具體而言,就是將期末筆試成績與上機考試成績的考核比例設定為1:1,其中上機考試成績又由平時實驗課成績和單獨的上機考核成績兩部分組成,如果單獨的上機考核學生沒有通過,則本門課程成績直接計為不及格。其二,調整上機實踐考核的時間。由于學生期末考試復習時間比較緊張,所以可以考慮將單獨的上機考核時間安排在第二學期開學的第一周進行,這樣既可以緩解學生期末考試的壓力,另外一些在學習過程中實踐能力較弱的學生還可以利用假期時間進行充電,最終達到提高學生實際動手能力,多編程序,編寫好程序的目的。其三,筆試采用“教考分離”方式。也就是說任課教師不能作為本門課程期末試題的命題教師,考試題目由試題庫隨機抽取產生,從而可以更客觀地考核學生對課程的掌握程度。
如何提高C程序設計基礎課程的教學質量,切實培養學生的程序設計能力,是一個非常值得去探索的課題。筆者從理論教學、實踐教學和考試評價方式三個方面對C程序設計基礎課程教學改革提出了一些改革的思路,在實際教學中也收到了較好的教學效果。隨著社會對高等教育人才需求的改變,我們也要與時俱進,在教學中不斷探索和實踐,使得培養出來的學生能夠學有所長,學以致用,成為適應社會發展需求的合格人才。
[1]李靜雯.關于提高C語言教學質量的探討[J].電腦知識與技術,2007(04):1149-1150.
[2]黃群.C語言程序設計課程教學設計探討[J].計算機教育,2010(05):78-81.
[3]譚浩強.C程序設計[M].北京:清華大學出版社,2005.
[4]何欽銘,顏暉.“C程序設計基礎及實驗”國家精品課程的建設經驗[J].計算機教育,2008(19):28-31.
[5]吳文虎.精心鑄精品理念須先行-談“程序設計基礎”課程改革[J].計算機教育,2008(13):46-49.