鴻 磊 張雪松
目前,國內(nèi)高等職業(yè)院校程序設計基礎課程的教學內(nèi)容一般偏重于計算機編程語言或完全是編程語言的教學。教學模式一般也是傳統(tǒng)的模式,即十分注重某種編程語言基本語句、語法和一些細節(jié)的分析。這樣,該類課程基本上是以高級語言自身的體系為脈絡展開教學的。由于教學不是站在如何應用計算機工具編程解決實際問題或實際項目的角度,就沒有把邏輯與編程解題思路放在主體地位,也就沒有很好講解如何分析問題和解決問題。結果導致學生程序設計能力、上機解題能力訓練不夠,更談不上引導學生進行課題研究和科研探索。于是,很多學生在學習時感到內(nèi)容枯燥難學,學過之后又不能用程序設計有效解決實際問題。
根據(jù)以上經(jīng)驗教訓,經(jīng)過清華大學吳文虎教授的特別指點,本人在本學院某些班級進行程序設計課程改革試點,積累適合高職學生特點的教學素材并通過具體的試驗得出有效的教學方法。最終總結出12個字:“重興趣,重實踐,引競爭,引接口”。
重興趣——興趣是最好的老師
我國的高專學生,他們雖然高考成績比較差,但在其他方面,只要他們感興趣,學習就很有效果。這說明他們的智力和記憶力不比其他本科學生差,關鍵是學生有沒有興趣。老師要發(fā)掘他們潛在的能力,使用同學們感興趣的方法講授他們感興趣的內(nèi)容,即使是枯燥的程序設計。否則,此課程將如同他們學習第二外語。
本課程要鍛煉學生掌握解決實際問題的程序設計思想和養(yǎng)成良好的程序設計習慣,使學生具備用計算機解決實際問題的思想和眼光。要開闊思想,打好一個思維設計的基礎。
我首先引用校園中的“程序”:
NO1.學生到指定的教室上課
NO2.老師檢查上課筆記
NO3.帶筆記的學生,可以讓老師檢查,轉到NO5;否則,回宿舍拿筆記(選擇),轉到NO4
NO4. 回到宿舍,拿到筆記,轉到NO1
NO5.老師檢查筆記
NO6.上課,學生認真聽老師講課,并記筆記
NO7. 下課鈴響了,上午4節(jié)課(循環(huán))是否上完(條件),上完轉到NO8,否則轉到NO1執(zhí)行
NO8.下課去食堂
然后,通過具體實例而分散的介紹語法難點,避免了學生因枯燥和畏難而產(chǎn)生厭學情緒。
例如:已知side1,side2,side3為三角形的三邊,根據(jù)公式area=sqrt(fabs(p*(p- side2)*(p-side3)))求其面積。其中p=(side1+side2+side3)/2。通過此例說明計算機程序分析和編寫的過程,學習相關的語法點。要求呈現(xiàn)在學生面前的是一個程序的整體,而非一個個相對凌亂的語法點。分析的具體步驟如下:
(1)學習根據(jù)題意如何分析算法;
(2)學習并畫出流程圖;
(3)根據(jù)流程圖寫出代碼,主要代碼如下:
p=(side1+side2+side3)/2;
area=sqrt(fabs(p*(p-side2)*(p-side3));//求三角形面積
cout<<“三角形面積為:”<<“area”<<endl;//輸出面積
(4)分析講解代碼中使用的新語法點;
(5) 根據(jù)原有知識遇到困難,再拓展其他相關的新語法點。將外在的需要轉化為學生內(nèi)在的求知欲。
首先,通過實際舉例輸入2,2,9,讓學生自己找到程序的漏洞,引出選擇語句if…else…。主要算法如下:
if((side1+side2)>side3&&(side1+side3)>side2&&(side2+side3)>side1)
{p=(side1+side2+side3)/2;
area=sqrt(fabs(p*(p-side1)*((p-side2)*(p-side3));//求三角形面積
cout<<“三角形面積為:”<<“area”<<endl;}//輸出面積
else
cout<<“輸入出錯”;//輸出“輸入出錯”
然后,通過實際運行操作。當輸入數(shù)值不滿足條件,運行立即結束。這讓學生感覺不方便。于是引出循環(huán)語句while。
核心算法如下:
while(?。ǎ螅椋洌澹保螅椋洌澹玻荆螅椋洌澹常ΓΓǎ螅椋洌澹保螅椋洌澹常荆螅椋洌澹玻ΓΓǎ螅椋洌澹玻螅椋洌澹常荆螅椋洌澹保?/p>
{cout<<“輸入錯誤,請重新輸入:”<<endl;//輸出“輸入錯誤,請重新輸入:”
cin>>side1>>side2>>side3;//初始化
}
在此過程中遇到什么新知識講什么,實例講完一定要通過知識進行總結,通過多種解法把相關的其他語言點進行系統(tǒng)的分析。這樣知識有了連貫,既使學生產(chǎn)生興趣,新知識的引入也有理有據(jù),水到渠成,學生更容易接受。
重實驗——實踐出真知
我第一節(jié)課就講編譯環(huán)境的使用。首先要求學生上機自己調試修改錯誤的程序,漸漸根據(jù)某一段核心算法補全程序。然后通過某一流程圖和具體測試數(shù)據(jù),自己上機分析程序的具體流向,切實保證學生理解并掌握每一條語句,例如選擇和循環(huán)語句。最后,要求學生根據(jù)實際有趣的題目分析簡單的算法,編寫自己第一個程序。做到根據(jù)學生知識水平逐漸增加,實驗的難度也逐漸增加,實驗難度和學生知識水平一定要保持相對同步,使他們每次上機都有比較適合的任務,每次上機都有成就感。否則,很可能挫傷他們的自信,因而討厭學習程序設計,特別是在開始階段和第一次寫程序階段。
引競爭——重獎之下必有勇夫
我每一節(jié)課都以完整的程序講授,每周給同學一兩道比較超前的有意思的題目,一個月之后我會根據(jù)能力挑選出小老師,輔導其他同學上機,成為小老師的同學,期末成績給90分,以此作為鼓勵。不出一個月,果然有幾個同學的程序設計水平明顯高于其他同學。通過幾位帶動十幾位,十幾位帶動全班,使得學習氣氛越來越濃。以前,大多數(shù)同學有從眾心理,上課不聽講,上機玩游戲;現(xiàn)在,通過興趣和超前題目的引導,讓班級幾個比較有悟性的同學先掌握程序設計編程和上機,并帶動其他想學但接受能力慢的同學,使不想學的同學自己開始想辦法學。上機實驗大家比著學,比著練。
引接口——承上啟下
根據(jù)高職高專的教學要求,老師講授的應該是直接解決實際工作問題的具體辦法,應以解決工作問題的模式傳授知識。所以,課程針對性越來越強,但針對性強的同時局限性也越大,課程之間缺少必要的聯(lián)系。使得同學們雖然在解決實際問題時能把所學的知識用上,但缺少與其他知識的聯(lián)系,無法解決其他比較復雜的問題。例如:學習程序設計基礎這門基礎課后,開設一些不同的程序設計專業(yè)課程,而此類課程沒有與程序設計基礎進行很好的過渡。使學生很難把以前的知識與新學的知識融會貫通,從而更好的掌握新的知識。所以,我們在講授程序設計基礎之后,根據(jù)專業(yè)需要做一些接口教學,計算機相關專業(yè)可以增加OOP程序設計思想,還可以根據(jù)要求補充MFC或 .NET編程的基礎知識,從具體的系統(tǒng)實例出發(fā),讓學生對MFC或 .NET設計有個感性認識,為以后學習打好基礎;電子信息相關專業(yè)可以增加C語言嵌入式系統(tǒng)編程,從“交通燈序列控制器”,“電動恐龍”實例出發(fā),通過使用業(yè)界標準的編譯器Keil C介紹嵌入式軟件編程,并通過硬件仿真器仿真。最終,使程序設計基礎以一種平臺的方式可以與不同專業(yè)方向的相關程序設計課程進行無縫連接,做到程序設計的連貫性。
經(jīng)過具體的教學實踐,我們?nèi)〉昧溯^好的教學效果,學生也給予了很高的評價。
總之,學好這門課既要動手,又要動腦,必須經(jīng)過理性思維和理性實踐。