熊啟軍+程格平+屈俊峰+谷瓊
摘 要:針對程序設(shè)計課程群的教學(xué),以人才培養(yǎng)目標的定位為基礎(chǔ),提出基于五導(dǎo)法的教學(xué)模式,分別闡釋“導(dǎo)教、導(dǎo)學(xué)、導(dǎo)思、導(dǎo)用、導(dǎo)創(chuàng)”的含義和具體實施辦法,說明如何圍繞教學(xué)內(nèi)容建立三維的教學(xué)資源,實施混合式教學(xué),采用多樣化的考核方式,以提高程序設(shè)計課程群的教學(xué)質(zhì)量。
關(guān)鍵詞:程序設(shè)計;課程群;教學(xué)模式;混合式教學(xué)
文章編號:1672-5913(2017)05-0089-03
中圖分類號:G642
1 背 景
程序設(shè)計課程群包含的課程主要有程序設(shè)計基礎(chǔ)(C語言)、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο蟪绦蛟O(shè)計(Java語言)、程序設(shè)計課程設(shè)計等,是計算機專業(yè)的基石。這些課程之間存在緊密的依存、遞進關(guān)系。對于廣大的地方高校來說,開展程序設(shè)計課程群的教學(xué)研究,就是研究這些課程知識的“教法、學(xué)法、用法、創(chuàng)法”。文章將從教與學(xué)著手,探討在教學(xué)中的所用、所感、所思、所改。
2 五導(dǎo)法
所謂“五導(dǎo)法”就是在教學(xué)過程中進行的導(dǎo)教、導(dǎo)學(xué)、導(dǎo)思、導(dǎo)用、導(dǎo)創(chuàng)。
2.1 導(dǎo) 教
2.1.1 知識點化繁為簡
對于地方院校來說,計算機類專業(yè)人才培養(yǎng)計劃中通常會先講授程序設(shè)計基礎(chǔ)(C語言)、再講授數(shù)據(jù)結(jié)構(gòu)、最后講授最流行的面向?qū)ο笳Z言——Java。在這些課程中存在大量的基本語法、原理和技巧,譬如:C語言的輸入輸出格式控制、運算符、表達式、運算規(guī)則、賦值語句等,靈活多樣;數(shù)據(jù)結(jié)構(gòu)中指針的使用無處不在;Java語言中包含權(quán)限的交叉融合、對象與引用的多態(tài)性等。對于初學(xué)者來說,教師必須采取有效的策略,比如選擇性講授,即先講授最常使用的知識、應(yīng)用方式,且大量運用演示法、案例法,讓學(xué)生在實例中逐步理解、掌握、熟悉;再逐步延伸,增加深度和廣度;最后還需要有畫龍點睛的總結(jié)。
在C語言教學(xué)中,若只顧及語法知識的全面性、完整性,將會導(dǎo)致顧此失彼、欲速而不達的結(jié)果;若只注重算法,而輕視、忽視基本語法,將導(dǎo)致程序代碼的編寫寸步難行、錯誤百出。所以,要秉持語法夠用的原則。
在數(shù)據(jù)結(jié)構(gòu)課程中,大量的教材在講述順序線性表時,都是直接采用動態(tài)申請連續(xù)空間的方式來存儲線性表中的元素[1]。這種方式顯著地增加了學(xué)生學(xué)習(xí)的難度。為什么不先講述使用靜態(tài)的數(shù)組來存儲元素,再過渡到動態(tài)的存儲方式呢?所以,教師講授時要化繁為簡、由易及難、逐步深入,遵循循序漸進的認知規(guī)律。
2.1.2 思維的轉(zhuǎn)化
雖然程序設(shè)計的算法來源于數(shù)學(xué),但不能照搬數(shù)學(xué)思維。
譬如:三個數(shù)如何求最大值。數(shù)學(xué)思維使用的是三個單分支的if語句,且每個if語句中的表達式都是由兩個與運算符連接三個關(guān)系表達式構(gòu)成的;而程序設(shè)計思維使用的是一個賦值語句、兩個單分支的if語句,且每個if語句中的表達式只是一個簡單的關(guān)系運算。顯然,后者不僅效率高,而且運用了程序設(shè)計中經(jīng)常使用的一種技巧和思維,即“假設(shè)第一個數(shù)就是最大值”[2]。
數(shù)學(xué)思維向程序設(shè)計思維的轉(zhuǎn)變,需要一個過程、一段時間,需要培養(yǎng)。
在程序設(shè)計教學(xué)的推進過程中,還存在著一個程序的main函數(shù)向多個子函數(shù)的轉(zhuǎn)變(即程序模塊化)、過程化程序設(shè)計向?qū)ο蠡绦蛟O(shè)計的轉(zhuǎn)變等,這是思維的轉(zhuǎn)變,也是教學(xué)的難點。
2.2 導(dǎo) 學(xué)
2.2.1 量變到質(zhì)變
學(xué)習(xí)沒有捷徑,只有經(jīng)歷大量的代碼練習(xí),才能保證編程水平質(zhì)的提高。對于常用算法必須爛熟于心,日積月累,才能熟練生巧,才能應(yīng)用,才可能有創(chuàng)新。
2.2.2 課堂內(nèi)外“三步曲”
每一門課程,教師必然對其有著深入的研究;每一節(jié)課,課堂上的教學(xué)內(nèi)容必然是豐富的,重點和難點必然是清晰的。因此,需要學(xué)生課前預(yù)習(xí)、課上專心、課后復(fù)習(xí)。只有做到了課前預(yù)習(xí),課堂上的學(xué)習(xí)才會是有的放矢;只有做到了課后復(fù)習(xí),才能鞏固課堂知識。所以,只有真正做到了“課前預(yù)習(xí)、課上專心、課后復(fù)習(xí)”的課堂內(nèi)外三步曲,才能實現(xiàn)高效課堂。
2.2.3 “三動”學(xué)習(xí)法
在實際教學(xué)中,教師發(fā)現(xiàn),程序設(shè)計的初學(xué)者,在閱讀自己或他人編寫的程序代碼時,采取的方式只是“動眼”,即用眼睛死死地盯著程序代碼行中的各個符號。這樣僅僅了解單個表達式、單條語句的表面意思,而不可能清楚變量值的變化、哪些語句被選擇或被循環(huán)執(zhí)行了,也就搞不清變量、表達式、語句的真正作用和含義,當然不能歸納出程序的功能,也得不出程序的正確結(jié)果。
正確的做法是:拿出筆、攤開紙,依照程序語句的次序,認真地手工執(zhí)行程序代碼,把每個變量當前的值記錄下來,如果存在循環(huán),則把循環(huán)體重復(fù)執(zhí)行3~5次,這樣才能清晰掌握每個變量值的變化情況、每條語句的執(zhí)行情況,進而推導(dǎo)、得出程序的功能或結(jié)果。也就是說,對于一段程序、一個算法,只有手工執(zhí)行,才能理清其執(zhí)行過程、功能。
因此,在學(xué)習(xí)程序設(shè)計時,務(wù)必堅信不勞而獲是天方夜譚,務(wù)必時刻執(zhí)行勤能補拙,務(wù)必每題實踐著“三動”學(xué)習(xí)法,即“動手、動腦、動眼”[3]。
2.3 導(dǎo) 思
2.3.1 思考的廣度
自頂向下、逐步求精,是程序設(shè)計的原則之一。任何復(fù)雜的問題都可以找到簡單的原理或者雛形。
譬如:3個整數(shù)求最值、10個整數(shù)求最值、數(shù)組求最值、選擇排序等。這些問題的求解包括從順序結(jié)構(gòu)到選擇結(jié)構(gòu)、到一重循環(huán)、到二重循環(huán);從單一的main函數(shù)實現(xiàn)到使用子函數(shù)實現(xiàn)。從這個例子可以看出,只有深刻理解求最值的雛形,才能順利向廣度推進。
再譬如:使用線性表實現(xiàn)各種集合運算,對順序存儲來說基本操作就是元素的移動(即選擇性賦值),對鏈式存儲來說基本操作就是鏈的連接(即指針賦值)。
2.3.2 思考的深度
在求最值的例子中,包含著這樣一個拓展的問題:如何求解一個數(shù)組中的最大值和次大值。一種算法是這樣的:endprint
max1=max2=a[0];
for(i=1;i if(max1 max2=max1; max1=a[i]; }