延安大學計算機學院 李竹林
延安大學教務處 武忠遠
C 語言程序設計是高校軟件工程、計算機等相關專業的一門重要專業基礎課,是講授如何將自然語言轉換為計算機語言,如何利用計算機幫助人們解決實際問題的計算機語言課程。而計算機語言是用于人與計算機之間通訊的語言,是人與計算機之間傳遞信息的媒介,因此通常安排在計算機類專業學生入學后的第一學期。它是計算機語言入門課,也是后續數據結構、C++、Java 語言程序設計等課程的基礎課程。然而,對于沒有一點計算機語言基礎的新生來說,C 語言概念抽象、知識點繁多、語句要符合規則、使用又非常靈活,致使學生不容易理解概念,程序很容易出錯,而更大的難題是編寫程序的解決。早在1940年,哈佛大學商學院Charles L.Gragg 就提出,聰明才智不是教出來的,而是干出來的。Gragg 認為,教育的目標是培養學生將其所學付諸行動。可見,我們應該傳授學生知識,更應該教學生利用所學知識解決問題的方法。因此,如何使教好該門課程,使學生較快入門,并學會用模塊化的思想解決較大問題是教師面臨的問題。作者根據課程理論性難、實踐性強且具有工程性的特點,并結合多年的教學探索與實踐,認為問題與案例驅動的教學方法,是提高C 語言程序設計課程教學質量的有效途徑。
該門課程在教學過程中的問題是兩方面的。一方面來自學生,另一方面來源于教師。
1.新生的學習能力和動手能力有較大差別。高等教育從“精英型”轉變到“大眾型”,同一年入學學生的學習能力和動手能力確實有較大差別。他們大致可分為三個層次:第一層次學生已有計算機語言的入門基礎,該層次學生可以通過課堂教師的引導快速完成語法框架的學習,迅速進入深入學習算法、解決問題的階段。第二層次學生具有一定的計算機基礎,但對語言沒有接觸過。這個層次的學生,憑著對計算機的了解,雖然沒有程序設計的基礎,但有濃厚的興趣,所以入門相對較快。第三層次的學生,對計算機幾乎沒有接觸,因此大腦中對計算機幾乎沒有認知,學習時放不開思想,操作時放不開手腳。由于學生參差不齊,要求教師第一要因材施教,第二要選擇引起學生興趣、調動其主動性的教學方法。
2.學生從自然語言到計算機語言過渡慢、入門難。對于新生來說,學習方式仍停留在高中階段,對大學每一節課的大信息量授課方式很難適應。對于C 語言課程來說,學生還要從思維上轉變,將自然語言要轉變成計算機語言。這需要一個過渡階段,因為計算機語言有不同于人類自然語言的語法、結構框架,而且知識點很多。因此,初學者普遍認為,該門課抽象、難理解。上課好像聽懂了,但課后要學生獨立完成編程或解決實際問題時,卻是錯誤百出,有的學生甚至無從下手,特別是對函數、指針、結構以及文件知識的應用。
3.照本宣讀的教學方式不適合C 語言課程。 傳統的教學方法基本上是按課本知識照本宣讀。這種模式下,老師是主動的,學生是被動的,學生的積極性很難調動,學習興趣很難培養,學習的目標不太明確。特別是近些年,教師基本上用多媒體授課方式,C 語言的語法、知識點以及程序全部寫在幻燈片上,一屏一屏地播放給學生,學生失去了與老師一起編程的過程,從而也很難培養學生的編程思維。漸漸地,學生會感到老師上課枯燥乏味,知識抽象難懂,編寫程序更是無從下手。
4.驗證型小實驗不利于學生綜合編程能力的提高。目前,C 語言理論課與實驗課的教學課時比例為64:36,從上課的第3周起隨同理論課按比例跟進,大部分老師也按章節知識的進度,為學生安排了章節知識的驗證型小實驗。而實際上,C 語言是一門實踐性很強、應用性很廣的課程,理論與實際脫離的教學方式必然導致學生對所學知識的系統性理解不夠,綜合編程能力得不到鍛煉,不能為后續課程的學習打好基礎,使得后續課程的學習變得越來越吃力。
針對上述問題,在理論課上,我們采取了問題與案例驅動的教學方法;實驗課教學上,采取了在驗證型小實驗的基礎上,增加緊密聯系實際的綜合性大題目的設計與實現,取得了很好的成效。
1.問題驅動的教學方法。問題驅動教學法是一種以學生為主體,以切合實際的、專業的、合理的問題為導引,引起學生注意、明確學習目的,通過課堂交流、討論的互動方式,促使學生尋求解決問題的方法。在問題驅動的教學方法中,每門課程、每個章節的問題不是信手拈來,也不是隨意堆砌,而需要精心構思與設計。課程組認為,問題設計必須遵循以下原則:
第一,設計的問題必須緊密聯系實際。一般來說,將來源于現實的問題根據章節知識的情況,進行簡化或將大問題分解成小問題。只有用這樣的問題驅動,才能引起學生的興趣,明確學習的目的。
第二,為課程的各章節設計的問題不是獨立的,而是前后有聯系的。這樣,一個個有聯系的小問題,隨著課程的講解進度,逐漸形成一個現實中存在的大問題。
第三,每個問題基本上都可以用本章節的知識或再加上以前的知識很好的解決,當課程知識講授完畢,一個實際的大問題也得到了解決,學生解決問題的能力得到了鍛煉。
第四,由小問題形成的大問題,其實就是一個案例或簡化版的案例,因此為案例驅動教學法和課程設計打下了很好的基礎。
表1所示的是為C 語言程序設計課程設計的章節問題,主要圍繞學生熟知的學生成績管理系統展開的,雖然每個章節解決的是一個小問題,但是等課程知識全部講解后,一個大的問題就能通過一個學期的知識學習來系統地解決了,而且利用計算機語言還可解決人工計算復雜、易出錯或不易解決的問題,如計算n!、漢諾塔遞歸問題等。

表1 《C語言程序設計》課堂教學章節問題設計
采用這種問題驅動的課堂教學方法,學生的積極性、主動性很容易被調動,課堂上主動思考,熱烈參與討論;課后積極查閱相關資料,力求最佳解決問題的方法。
2.案例驅動的教學方法。所謂“案例驅動的教學方法”是指為某課程設計一個或兩個案例,貫穿課程教學的全過程。設計案例時必須遵循下列原則:
第一,案例必須來源于實際問題或項目,根據課程的需要對問題進行適當的簡化。
第二,精心構思與設計,使其大小合適,所涉及到的技術基本上能覆蓋課本的所有知識,且要有代表性。
第三,用解決案例的方法將本課程的知識系統化與綜合應用。這種章節之間知識面有機聯系的學習方式對知識鞏固、理解以及應用能力有很大的幫助。
第四,設計的案例不是孤立的,每個章節設計的問題就盡可能來源該案例,也是實踐課教學中課程設計的典型題目。因此,對綜合性的大實驗或課程設計均具有指導意義。
在C 語言課程教學中,用的是“學生成績管理系統”的設計與實現。隨著全書章節知識的學習,將案例中的數據逐步抽象出來,由上到下、逐步細化成一個要解決的大問題,實際上,系統化完成了一個案例的分析與實現。通過典型案例學習后,再遇到同類問題,就能透過表象,抽取數據,最終歸納到典型案例的解決方法中。教學實踐證明,案例驅動的方法能夠行之有效得提高學生的學習效果,而且為后續課程的學習和實踐課程中的大實驗或課程設計順利開展打下扎實的基礎。
3.綜合性大題目的設計與實現。為了讓學生將所學知識系統化且得到綜合應用,在驗證型小實驗的基礎上,給學生安排一次綜合性的大實驗。大實驗的題目來源于實際項目,但通常會給學生進行一定的簡化,與理論課中所用案例的問題本質基本相同。形式上采取2-3人分工合作的模式進行。提交時除了調試運行正確的程序源代碼,還要提交文檔,文檔內容包括:設計、實現、測試數據、運行結果、過程中遇到的問題與解決方法及學習體會等內容。
C 語言大實驗題目有:學生檔案管理、圖書登記管理、小型通訊錄管理、小型商品管理系統、小型工資管理系統等。這些題目從表象看,與上課用的案例“學生管理系統”大不一樣,其實通過抽象與分析,將數據抽取出來,解決問題的方法大同小異。因此,學生不會束手無策。
為了能保證每個學生積極參與到大實驗中,完成好自己的工作,我們制定了大實驗的考核辦法,如表2所示。

表2 大實驗考核方式
通過綜合性大實驗的完成,不僅鞏固了所學知識,提高了學生的編程能力,而且培養了查閱資料的習慣,學生間的相互交流、溝通與合作的能力,撰寫文檔的思維與方式,也為后續的課程學習、課程設計、數學建模等環節打下堅實的基礎。
通過對我校軟件工程專業的一些重要專業課程,如數據庫原理等課程進行積極地改革與探索,摸索出行之有效的一些方法,形成了自己的課程特色,并取得了一些成效。
1.C 語言程序設計課程特色。在教學過程中,經過不斷的探索與實踐,C 語言程序設計課程已形成自己的特色,主要體現為一個目標、三個教學支撐以及兩種教學模式的綜合體系。
(1)一個目標。整個教學活動,圍繞以學生為主體,以培養工科課程學習方式和提高綜合編程能力為目標展開。
(2)三個教學支撐。問題支撐教學、案例支撐教學以及實際項目支撐教學,將教學與問題的解決緊密結合。對專業主干課而言,問題是引導學生入門的鑰匙,案例是提高教學質量的前提和基礎,實際項目的開發是提高教學質量的必由之路。在理論課堂上主動學習,在實踐教學中解決實際問題,形成學習—實踐—再學習—再實踐的良性循環,對于學生能力的提高是一種有效的途徑。
(3)兩種學習模式。“問題與案例驅動”的理論課學習模式和“做中學”的實踐課學習模式能激發學生學習興趣,引導學生深入探研,同時使學生學會協作。尤其在團隊中學會交流與協作、團結與奮進,懂得責任與擔當,為以后的學習和工作培養了良好的專業素質。
2.問卷調查分析.為了實時掌握對課程教學改革的效果并做出合理的改進,對軟件工程專業與計算機專業的軟件方向的3個班168名學生進行問卷跟蹤調查,調查統計結果如表3與表4所示。

表3 C語言課程教學方法滿意度調查問卷統計

表4 C語言教學方法對學生能力培養調查問卷整理結果
從表3和表4可以看出,學生對問題與案例驅動的教學方法是認可的,對學生各方面能力的培養與提高達到了教學目的,取得的效果是顯著的。
問題與案例驅動的教學方法,在C 語言課程中探索與實踐,取得了很好的教學效果。繼而又在計算機、軟件工程等工科的一些專業核心課程,如數據庫原理、數據結構以及軟件工程等課程教學過程中進行了推廣應用,也取得了較好的教學效果。信息化發展進入創新時代,計算機技術在日新月異,社會對人才的要求越來越高,如何傳授學生知識,提高學生能力,提升學生專業素質,是我們永遠思考與探索的問題。
[1]陳婷婷.普通本科院校計算機專業學生就業分析及應對策[J].長春教育學院學報,2013
[2]石玉芳,劉思奇.淺析計算機語言的文化內涵[J].福建電腦,2013
[3]楊 健,徐 東等.C 語言課程教學改革研究[J].科教文匯,2014
[4]羅佐清,黃景廣.動態網頁數據庫教學方法探索[J].成都信息工程學院學報,2007
[5]徐子珊.“算法設計與分析”課程教學和創新能力培養[J].合肥工業大學學報: 社會科學版,2008
[6]王文東,李竹林.C語言程序設計[M].西安:西北大學出版社,2014.8