延安大學(xué)計算機學(xué)院 李竹林
延安大學(xué)教務(wù)處 武忠遠
C 語言程序設(shè)計是高校軟件工程、計算機等相關(guān)專業(yè)的一門重要專業(yè)基礎(chǔ)課,是講授如何將自然語言轉(zhuǎn)換為計算機語言,如何利用計算機幫助人們解決實際問題的計算機語言課程。而計算機語言是用于人與計算機之間通訊的語言,是人與計算機之間傳遞信息的媒介,因此通常安排在計算機類專業(yè)學(xué)生入學(xué)后的第一學(xué)期。它是計算機語言入門課,也是后續(xù)數(shù)據(jù)結(jié)構(gòu)、C++、Java 語言程序設(shè)計等課程的基礎(chǔ)課程。然而,對于沒有一點計算機語言基礎(chǔ)的新生來說,C 語言概念抽象、知識點繁多、語句要符合規(guī)則、使用又非常靈活,致使學(xué)生不容易理解概念,程序很容易出錯,而更大的難題是編寫程序的解決。早在1940年,哈佛大學(xué)商學(xué)院Charles L.Gragg 就提出,聰明才智不是教出來的,而是干出來的。Gragg 認為,教育的目標(biāo)是培養(yǎng)學(xué)生將其所學(xué)付諸行動??梢姡覀儜?yīng)該傳授學(xué)生知識,更應(yīng)該教學(xué)生利用所學(xué)知識解決問題的方法。因此,如何使教好該門課程,使學(xué)生較快入門,并學(xué)會用模塊化的思想解決較大問題是教師面臨的問題。作者根據(jù)課程理論性難、實踐性強且具有工程性的特點,并結(jié)合多年的教學(xué)探索與實踐,認為問題與案例驅(qū)動的教學(xué)方法,是提高C 語言程序設(shè)計課程教學(xué)質(zhì)量的有效途徑。
該門課程在教學(xué)過程中的問題是兩方面的。一方面來自學(xué)生,另一方面來源于教師。
1.新生的學(xué)習(xí)能力和動手能力有較大差別。高等教育從“精英型”轉(zhuǎn)變到“大眾型”,同一年入學(xué)學(xué)生的學(xué)習(xí)能力和動手能力確實有較大差別。他們大致可分為三個層次:第一層次學(xué)生已有計算機語言的入門基礎(chǔ),該層次學(xué)生可以通過課堂教師的引導(dǎo)快速完成語法框架的學(xué)習(xí),迅速進入深入學(xué)習(xí)算法、解決問題的階段。第二層次學(xué)生具有一定的計算機基礎(chǔ),但對語言沒有接觸過。這個層次的學(xué)生,憑著對計算機的了解,雖然沒有程序設(shè)計的基礎(chǔ),但有濃厚的興趣,所以入門相對較快。第三層次的學(xué)生,對計算機幾乎沒有接觸,因此大腦中對計算機幾乎沒有認知,學(xué)習(xí)時放不開思想,操作時放不開手腳。由于學(xué)生參差不齊,要求教師第一要因材施教,第二要選擇引起學(xué)生興趣、調(diào)動其主動性的教學(xué)方法。
2.學(xué)生從自然語言到計算機語言過渡慢、入門難。對于新生來說,學(xué)習(xí)方式仍停留在高中階段,對大學(xué)每一節(jié)課的大信息量授課方式很難適應(yīng)。對于C 語言課程來說,學(xué)生還要從思維上轉(zhuǎn)變,將自然語言要轉(zhuǎn)變成計算機語言。這需要一個過渡階段,因為計算機語言有不同于人類自然語言的語法、結(jié)構(gòu)框架,而且知識點很多。因此,初學(xué)者普遍認為,該門課抽象、難理解。上課好像聽懂了,但課后要學(xué)生獨立完成編程或解決實際問題時,卻是錯誤百出,有的學(xué)生甚至無從下手,特別是對函數(shù)、指針、結(jié)構(gòu)以及文件知識的應(yīng)用。
3.照本宣讀的教學(xué)方式不適合C 語言課程。 傳統(tǒng)的教學(xué)方法基本上是按課本知識照本宣讀。這種模式下,老師是主動的,學(xué)生是被動的,學(xué)生的積極性很難調(diào)動,學(xué)習(xí)興趣很難培養(yǎng),學(xué)習(xí)的目標(biāo)不太明確。特別是近些年,教師基本上用多媒體授課方式,C 語言的語法、知識點以及程序全部寫在幻燈片上,一屏一屏地播放給學(xué)生,學(xué)生失去了與老師一起編程的過程,從而也很難培養(yǎng)學(xué)生的編程思維。漸漸地,學(xué)生會感到老師上課枯燥乏味,知識抽象難懂,編寫程序更是無從下手。
4.驗證型小實驗不利于學(xué)生綜合編程能力的提高。目前,C 語言理論課與實驗課的教學(xué)課時比例為64:36,從上課的第3周起隨同理論課按比例跟進,大部分老師也按章節(jié)知識的進度,為學(xué)生安排了章節(jié)知識的驗證型小實驗。而實際上,C 語言是一門實踐性很強、應(yīng)用性很廣的課程,理論與實際脫離的教學(xué)方式必然導(dǎo)致學(xué)生對所學(xué)知識的系統(tǒng)性理解不夠,綜合編程能力得不到鍛煉,不能為后續(xù)課程的學(xué)習(xí)打好基礎(chǔ),使得后續(xù)課程的學(xué)習(xí)變得越來越吃力。
針對上述問題,在理論課上,我們采取了問題與案例驅(qū)動的教學(xué)方法;實驗課教學(xué)上,采取了在驗證型小實驗的基礎(chǔ)上,增加緊密聯(lián)系實際的綜合性大題目的設(shè)計與實現(xiàn),取得了很好的成效。
1.問題驅(qū)動的教學(xué)方法。問題驅(qū)動教學(xué)法是一種以學(xué)生為主體,以切合實際的、專業(yè)的、合理的問題為導(dǎo)引,引起學(xué)生注意、明確學(xué)習(xí)目的,通過課堂交流、討論的互動方式,促使學(xué)生尋求解決問題的方法。在問題驅(qū)動的教學(xué)方法中,每門課程、每個章節(jié)的問題不是信手拈來,也不是隨意堆砌,而需要精心構(gòu)思與設(shè)計。課程組認為,問題設(shè)計必須遵循以下原則:
第一,設(shè)計的問題必須緊密聯(lián)系實際。一般來說,將來源于現(xiàn)實的問題根據(jù)章節(jié)知識的情況,進行簡化或?qū)⒋髥栴}分解成小問題。只有用這樣的問題驅(qū)動,才能引起學(xué)生的興趣,明確學(xué)習(xí)的目的。
第二,為課程的各章節(jié)設(shè)計的問題不是獨立的,而是前后有聯(lián)系的。這樣,一個個有聯(lián)系的小問題,隨著課程的講解進度,逐漸形成一個現(xiàn)實中存在的大問題。
第三,每個問題基本上都可以用本章節(jié)的知識或再加上以前的知識很好的解決,當(dāng)課程知識講授完畢,一個實際的大問題也得到了解決,學(xué)生解決問題的能力得到了鍛煉。
第四,由小問題形成的大問題,其實就是一個案例或簡化版的案例,因此為案例驅(qū)動教學(xué)法和課程設(shè)計打下了很好的基礎(chǔ)。
表1所示的是為C 語言程序設(shè)計課程設(shè)計的章節(jié)問題,主要圍繞學(xué)生熟知的學(xué)生成績管理系統(tǒng)展開的,雖然每個章節(jié)解決的是一個小問題,但是等課程知識全部講解后,一個大的問題就能通過一個學(xué)期的知識學(xué)習(xí)來系統(tǒng)地解決了,而且利用計算機語言還可解決人工計算復(fù)雜、易出錯或不易解決的問題,如計算n!、漢諾塔遞歸問題等。
表1 《C語言程序設(shè)計》課堂教學(xué)章節(jié)問題設(shè)計
采用這種問題驅(qū)動的課堂教學(xué)方法,學(xué)生的積極性、主動性很容易被調(diào)動,課堂上主動思考,熱烈參與討論;課后積極查閱相關(guān)資料,力求最佳解決問題的方法。
2.案例驅(qū)動的教學(xué)方法。所謂“案例驅(qū)動的教學(xué)方法”是指為某課程設(shè)計一個或兩個案例,貫穿課程教學(xué)的全過程。設(shè)計案例時必須遵循下列原則:
第一,案例必須來源于實際問題或項目,根據(jù)課程的需要對問題進行適當(dāng)?shù)暮喕?/p>
第二,精心構(gòu)思與設(shè)計,使其大小合適,所涉及到的技術(shù)基本上能覆蓋課本的所有知識,且要有代表性。
第三,用解決案例的方法將本課程的知識系統(tǒng)化與綜合應(yīng)用。這種章節(jié)之間知識面有機聯(lián)系的學(xué)習(xí)方式對知識鞏固、理解以及應(yīng)用能力有很大的幫助。
第四,設(shè)計的案例不是孤立的,每個章節(jié)設(shè)計的問題就盡可能來源該案例,也是實踐課教學(xué)中課程設(shè)計的典型題目。因此,對綜合性的大實驗或課程設(shè)計均具有指導(dǎo)意義。
在C 語言課程教學(xué)中,用的是“學(xué)生成績管理系統(tǒng)”的設(shè)計與實現(xiàn)。隨著全書章節(jié)知識的學(xué)習(xí),將案例中的數(shù)據(jù)逐步抽象出來,由上到下、逐步細化成一個要解決的大問題,實際上,系統(tǒng)化完成了一個案例的分析與實現(xiàn)。通過典型案例學(xué)習(xí)后,再遇到同類問題,就能透過表象,抽取數(shù)據(jù),最終歸納到典型案例的解決方法中。教學(xué)實踐證明,案例驅(qū)動的方法能夠行之有效得提高學(xué)生的學(xué)習(xí)效果,而且為后續(xù)課程的學(xué)習(xí)和實踐課程中的大實驗或課程設(shè)計順利開展打下扎實的基礎(chǔ)。
3.綜合性大題目的設(shè)計與實現(xiàn)。為了讓學(xué)生將所學(xué)知識系統(tǒng)化且得到綜合應(yīng)用,在驗證型小實驗的基礎(chǔ)上,給學(xué)生安排一次綜合性的大實驗。大實驗的題目來源于實際項目,但通常會給學(xué)生進行一定的簡化,與理論課中所用案例的問題本質(zhì)基本相同。形式上采取2-3人分工合作的模式進行。提交時除了調(diào)試運行正確的程序源代碼,還要提交文檔,文檔內(nèi)容包括:設(shè)計、實現(xiàn)、測試數(shù)據(jù)、運行結(jié)果、過程中遇到的問題與解決方法及學(xué)習(xí)體會等內(nèi)容。
C 語言大實驗題目有:學(xué)生檔案管理、圖書登記管理、小型通訊錄管理、小型商品管理系統(tǒng)、小型工資管理系統(tǒng)等。這些題目從表象看,與上課用的案例“學(xué)生管理系統(tǒng)”大不一樣,其實通過抽象與分析,將數(shù)據(jù)抽取出來,解決問題的方法大同小異。因此,學(xué)生不會束手無策。
為了能保證每個學(xué)生積極參與到大實驗中,完成好自己的工作,我們制定了大實驗的考核辦法,如表2所示。
表2 大實驗考核方式
通過綜合性大實驗的完成,不僅鞏固了所學(xué)知識,提高了學(xué)生的編程能力,而且培養(yǎng)了查閱資料的習(xí)慣,學(xué)生間的相互交流、溝通與合作的能力,撰寫文檔的思維與方式,也為后續(xù)的課程學(xué)習(xí)、課程設(shè)計、數(shù)學(xué)建模等環(huán)節(jié)打下堅實的基礎(chǔ)。
通過對我校軟件工程專業(yè)的一些重要專業(yè)課程,如數(shù)據(jù)庫原理等課程進行積極地改革與探索,摸索出行之有效的一些方法,形成了自己的課程特色,并取得了一些成效。
1.C 語言程序設(shè)計課程特色。在教學(xué)過程中,經(jīng)過不斷的探索與實踐,C 語言程序設(shè)計課程已形成自己的特色,主要體現(xiàn)為一個目標(biāo)、三個教學(xué)支撐以及兩種教學(xué)模式的綜合體系。
(1)一個目標(biāo)。整個教學(xué)活動,圍繞以學(xué)生為主體,以培養(yǎng)工科課程學(xué)習(xí)方式和提高綜合編程能力為目標(biāo)展開。
(2)三個教學(xué)支撐。問題支撐教學(xué)、案例支撐教學(xué)以及實際項目支撐教學(xué),將教學(xué)與問題的解決緊密結(jié)合。對專業(yè)主干課而言,問題是引導(dǎo)學(xué)生入門的鑰匙,案例是提高教學(xué)質(zhì)量的前提和基礎(chǔ),實際項目的開發(fā)是提高教學(xué)質(zhì)量的必由之路。在理論課堂上主動學(xué)習(xí),在實踐教學(xué)中解決實際問題,形成學(xué)習(xí)—實踐—再學(xué)習(xí)—再實踐的良性循環(huán),對于學(xué)生能力的提高是一種有效的途徑。
(3)兩種學(xué)習(xí)模式?!皢栴}與案例驅(qū)動”的理論課學(xué)習(xí)模式和“做中學(xué)”的實踐課學(xué)習(xí)模式能激發(fā)學(xué)生學(xué)習(xí)興趣,引導(dǎo)學(xué)生深入探研,同時使學(xué)生學(xué)會協(xié)作。尤其在團隊中學(xué)會交流與協(xié)作、團結(jié)與奮進,懂得責(zé)任與擔(dān)當(dāng),為以后的學(xué)習(xí)和工作培養(yǎng)了良好的專業(yè)素質(zhì)。
2.問卷調(diào)查分析.為了實時掌握對課程教學(xué)改革的效果并做出合理的改進,對軟件工程專業(yè)與計算機專業(yè)的軟件方向的3個班168名學(xué)生進行問卷跟蹤調(diào)查,調(diào)查統(tǒng)計結(jié)果如表3與表4所示。
表3 C語言課程教學(xué)方法滿意度調(diào)查問卷統(tǒng)計
表4 C語言教學(xué)方法對學(xué)生能力培養(yǎng)調(diào)查問卷整理結(jié)果
從表3和表4可以看出,學(xué)生對問題與案例驅(qū)動的教學(xué)方法是認可的,對學(xué)生各方面能力的培養(yǎng)與提高達到了教學(xué)目的,取得的效果是顯著的。
問題與案例驅(qū)動的教學(xué)方法,在C 語言課程中探索與實踐,取得了很好的教學(xué)效果。繼而又在計算機、軟件工程等工科的一些專業(yè)核心課程,如數(shù)據(jù)庫原理、數(shù)據(jù)結(jié)構(gòu)以及軟件工程等課程教學(xué)過程中進行了推廣應(yīng)用,也取得了較好的教學(xué)效果。信息化發(fā)展進入創(chuàng)新時代,計算機技術(shù)在日新月異,社會對人才的要求越來越高,如何傳授學(xué)生知識,提高學(xué)生能力,提升學(xué)生專業(yè)素質(zhì),是我們永遠思考與探索的問題。
[1]陳婷婷.普通本科院校計算機專業(yè)學(xué)生就業(yè)分析及應(yīng)對策[J].長春教育學(xué)院學(xué)報,2013
[2]石玉芳,劉思奇.淺析計算機語言的文化內(nèi)涵[J].福建電腦,2013
[3]楊 健,徐 東等.C 語言課程教學(xué)改革研究[J].科教文匯,2014
[4]羅佐清,黃景廣.動態(tài)網(wǎng)頁數(shù)據(jù)庫教學(xué)方法探索[J].成都信息工程學(xué)院學(xué)報,2007
[5]徐子珊.“算法設(shè)計與分析”課程教學(xué)和創(chuàng)新能力培養(yǎng)[J].合肥工業(yè)大學(xué)學(xué)報: 社會科學(xué)版,2008
[6]王文東,李竹林.C語言程序設(shè)計[M].西安:西北大學(xué)出版社,2014.8