李軍 曹記東 林勇 郭天印
摘要:分析傳統(tǒng)的以程序設(shè)計(jì)語(yǔ)言知識(shí)體系為脈絡(luò)的程序設(shè)計(jì)基礎(chǔ)課程教學(xué)的弊端,結(jié)合陜西理工學(xué)院程序設(shè)計(jì)基礎(chǔ)課程教學(xué)改革與實(shí)踐經(jīng)驗(yàn),提出以語(yǔ)言知識(shí)為基礎(chǔ)和以問(wèn)題求解方法為主線的課程教學(xué)模式,確立程序設(shè)計(jì)基礎(chǔ)課程面向應(yīng)用,讓學(xué)生學(xué)會(huì)分析問(wèn)題、設(shè)計(jì)算法、運(yùn)用語(yǔ)言知識(shí)編寫(xiě)程序的教學(xué)基本原則,并給出課程內(nèi)容及實(shí)踐環(huán)節(jié)的教學(xué)改革方案。
關(guān)鍵詞:程序設(shè)計(jì)基礎(chǔ)課;問(wèn)題求解方法;教學(xué)改革
程序設(shè)計(jì)基礎(chǔ)主要培養(yǎng)學(xué)生運(yùn)用程序設(shè)計(jì)語(yǔ)言求解問(wèn)題的基本能力,包括讓學(xué)生了解高級(jí)程序設(shè)計(jì)語(yǔ)言的結(jié)構(gòu)、掌握計(jì)算機(jī)問(wèn)題求解的基本思想方法以及基本的程序設(shè)計(jì)過(guò)程和技巧、熟悉并適應(yīng)計(jì)算機(jī)的問(wèn)題求解模式,從提出問(wèn)題、模型建立、數(shù)據(jù)表示、算法設(shè)計(jì)到編寫(xiě)程序代碼、測(cè)試和調(diào)試程序、分析結(jié)果的過(guò)程中,培養(yǎng)學(xué)生將問(wèn)題抽象化、設(shè)計(jì)與選擇解決方案的能力,以及用程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)方案并進(jìn)行測(cè)試和評(píng)價(jià)的能力。
程序設(shè)計(jì)基礎(chǔ)課程在大學(xué)一年級(jí)開(kāi)設(shè),是大學(xué)生認(rèn)識(shí)和應(yīng)用計(jì)算機(jī)的入門(mén)課程,是計(jì)算機(jī)及相關(guān)專業(yè)的一門(mén)重要基礎(chǔ)課程,對(duì)后續(xù)課程的學(xué)習(xí)乃至學(xué)生的整個(gè)職業(yè)生涯都有至關(guān)重要的作用;而如何講好這門(mén)課程,更需要廣大計(jì)算機(jī)專業(yè)教師不斷地探索、改革和創(chuàng)新。
1、課程改革的必然性
目前,國(guó)內(nèi)程序設(shè)計(jì)基礎(chǔ)課程名稱較多,如C語(yǔ)言程序設(shè)計(jì)、高級(jí)語(yǔ)言程序設(shè)計(jì)、程序設(shè)計(jì)基礎(chǔ)等。縱觀這些課程的開(kāi)設(shè)情況,我們可以發(fā)現(xiàn)教學(xué)內(nèi)容大多都是以某個(gè)具體的程序設(shè)計(jì)語(yǔ)言(如C語(yǔ)言)知識(shí)及其自身體系為脈絡(luò),教學(xué)模式以課堂講解和學(xué)生上機(jī)練習(xí)為主。按照這一模式組織教學(xué),產(chǎn)生的副作用主要有以下幾個(gè)方面。
(1)學(xué)生在課程學(xué)習(xí)過(guò)程中,面對(duì)程序設(shè)計(jì)語(yǔ)言中繁雜的語(yǔ)法規(guī)則,會(huì)產(chǎn)生嚴(yán)重的厭學(xué)情緒,使得課堂逃課率較高;還有不少學(xué)生通過(guò)抄襲他人作業(yè)或考試作弊的方式完成課程學(xué)習(xí)。
(2)一些能夠完成課程學(xué)習(xí)的學(xué)生自認(rèn)為掌握了程序設(shè)計(jì)方法,但是在解決實(shí)際問(wèn)題時(shí)卻發(fā)現(xiàn)對(duì)問(wèn)題求解毫無(wú)頭緒,由此產(chǎn)生心理落差,嚴(yán)重挫傷學(xué)習(xí)熱情,沒(méi)有學(xué)習(xí)成就感。
(3)另外一些能夠完成課程學(xué)習(xí)的學(xué)生認(rèn)為他們滿懷希望來(lái)學(xué)習(xí),但沒(méi)有從該課程的學(xué)習(xí)中獲得編程的愉快感。
這種模式在我國(guó)計(jì)算機(jī)教育事業(yè)中曾經(jīng)發(fā)揮過(guò)極其重要的作用,但它是從“狹義工具論”的思想出發(fā),過(guò)于注重語(yǔ)句、語(yǔ)法等語(yǔ)言細(xì)節(jié)的教學(xué),沒(méi)有把問(wèn)題求解方法和計(jì)算思維能力培養(yǎng)置于首要位置,對(duì)于如何分析問(wèn)題和解決問(wèn)題的思路講得很少,對(duì)學(xué)生編程能力的訓(xùn)練不夠。這一模式?jīng)]有很好地為課程開(kāi)設(shè)目標(biāo)服務(wù),課程的開(kāi)設(shè)只能起到事倍功半的效果,同時(shí)也成為制約計(jì)算機(jī)及相關(guān)專業(yè)教學(xué)質(zhì)量提高的一個(gè)瓶頸。
2、更新課程教學(xué)理念
理念更新是教學(xué)改革的思想保證,正確合理的課程教學(xué)理念是課程改革成敗的關(guān)鍵。為了破除“狹義工具論”的課程建設(shè)觀念,秉承“授之以魚(yú)不如授之以漁”的理念,我們將以語(yǔ)言知識(shí)為主線的教學(xué)模式轉(zhuǎn)變?yōu)橐哉Z(yǔ)言知識(shí)為基礎(chǔ)、以問(wèn)題求解方法為主線的教學(xué)模式,確立了程序設(shè)計(jì)基礎(chǔ)課程面向應(yīng)用,讓學(xué)生學(xué)會(huì)分析問(wèn)題、設(shè)計(jì)算法、運(yùn)用語(yǔ)言知識(shí)編寫(xiě)程序的教學(xué)基本原則,而不是讓學(xué)生一味地研究語(yǔ)言本身。按照這一思想,陜西理工學(xué)院將傳統(tǒng)的C語(yǔ)言程序設(shè)計(jì)課程更名為程序設(shè)計(jì)基礎(chǔ),并確立以下教學(xué)理念。
(1)淡化語(yǔ)言,強(qiáng)化程序設(shè)計(jì)方法,幫助學(xué)生樹(shù)立正確的程序設(shè)計(jì)觀念和思想方法。
(2)淡化編碼,強(qiáng)化算法運(yùn)用與分析,訓(xùn)練學(xué)生的抽象思維及建模能力。
(3)案例驅(qū)動(dòng),強(qiáng)化實(shí)踐,引導(dǎo)學(xué)生獲取正確的問(wèn)題解決方案。
(4)由易到難,貫通案例,滿足學(xué)生的學(xué)習(xí)成就感,激發(fā)學(xué)生的學(xué)習(xí)興趣。
3、課程教學(xué)改革方案
3.1 課程內(nèi)容的優(yōu)化安排
依據(jù)程序設(shè)計(jì)基礎(chǔ)課程的開(kāi)設(shè)目標(biāo)和根本任務(wù),課程內(nèi)容應(yīng)包含問(wèn)題求解的基本方法和實(shí)現(xiàn)這些方法的計(jì)算機(jī)語(yǔ)言基礎(chǔ)知識(shí)等,因此課程內(nèi)容的優(yōu)化安排原則是以語(yǔ)言知識(shí)為基礎(chǔ),以程序設(shè)計(jì)的基本理論和基本方法(含問(wèn)題求解方法)為核心。據(jù)此原則,課程教學(xué)組對(duì)課程內(nèi)容按照程序設(shè)計(jì)的應(yīng)用需求進(jìn)行合理取舍,將知識(shí)點(diǎn)分成門(mén)檻跨越、體系拓展、創(chuàng)新應(yīng)用3個(gè)部分。
(1)門(mén)檻跨越主要解決的是程序設(shè)計(jì)入門(mén)必需的語(yǔ)言知識(shí)學(xué)習(xí)問(wèn)題。教師通過(guò)講解語(yǔ)言體系核心集合,讓學(xué)生在很短的時(shí)間內(nèi)完成語(yǔ)言知識(shí)的學(xué)習(xí)并將其應(yīng)用于實(shí)踐,學(xué)生學(xué)習(xí)語(yǔ)言知識(shí)獲得的成就感與愉悅感能夠激發(fā)并延長(zhǎng)學(xué)生的學(xué)習(xí)熱情。
(2)體系拓展主要是在門(mén)檻跨越的基礎(chǔ)上圍繞程序設(shè)計(jì)的基本方法展開(kāi)。教師通過(guò)一些常用且典型的算法,讓學(xué)生初步掌握算法的基本知識(shí),并為后續(xù)的教學(xué)埋下伏筆,以激發(fā)學(xué)生的求知欲。
(3)創(chuàng)新應(yīng)用是在前2個(gè)體系基礎(chǔ)上實(shí)現(xiàn)的以問(wèn)題為中心的階段性實(shí)踐訓(xùn)練。此處的問(wèn)題規(guī)模較大,程序代碼有相應(yīng)要求,學(xué)生通過(guò)多人合作完成對(duì)問(wèn)題的分析、建模及程序?qū)崿F(xiàn)。
3.2 課程教學(xué)策略
要實(shí)現(xiàn)知識(shí)點(diǎn)3個(gè)部分所達(dá)到的教學(xué)目標(biāo),教師必須采用適當(dāng)?shù)慕虒W(xué)策略,綜合應(yīng)用課堂講授、案例穿插、啟發(fā)誘導(dǎo)等多種教學(xué)方法;從程序設(shè)計(jì)的角度出發(fā),按照分析建模、算法設(shè)計(jì)、程序編碼、測(cè)試與維護(hù)等環(huán)節(jié),培養(yǎng)學(xué)生從能夠遵守程序設(shè)計(jì)準(zhǔn)則到習(xí)慣成自然地按照程序設(shè)計(jì)準(zhǔn)則完成創(chuàng)新應(yīng)用問(wèn)題的程序設(shè)計(jì)。此外,教師還需在教學(xué)過(guò)程中針對(duì)教學(xué)內(nèi)容的組織處理好以下關(guān)系。
(1)處理好該課程與后續(xù)課程的關(guān)系。程序設(shè)計(jì)基礎(chǔ)不僅是一門(mén)獨(dú)立的課程,而且是后續(xù)課程的基礎(chǔ),因此教學(xué)內(nèi)容的安排既要考慮對(duì)后續(xù)課程的鋪墊作用,又不能過(guò)多涉及算法與數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,避免超出課程的內(nèi)容范圍。
(2)突出重點(diǎn),分散難點(diǎn),淡化細(xì)節(jié)。教師對(duì)于語(yǔ)言基礎(chǔ)知識(shí)的教學(xué)應(yīng)以應(yīng)用為目的,對(duì)于一些語(yǔ)言細(xì)節(jié)可一帶而過(guò)。例如,指針既是結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言的難點(diǎn),又是后續(xù)課程的一個(gè)應(yīng)用重點(diǎn),教師可避免像傳統(tǒng)教學(xué)那樣集中講解指針的概念,而是將這些難點(diǎn)提前并分散到相關(guān)章節(jié)進(jìn)行處理,以逐步降低指針內(nèi)容的難度并減少學(xué)生的心理壓力。
(3)程序設(shè)計(jì)方法的講解主要通過(guò)案例來(lái)實(shí)現(xiàn)。例如,教師在講解C語(yǔ)言基礎(chǔ)知識(shí)各章節(jié)內(nèi)容時(shí),可以“快遞運(yùn)費(fèi)計(jì)價(jià)問(wèn)題”為例,逐步擴(kuò)展,加入條件,從分析問(wèn)題、建立模型、設(shè)計(jì)算法、進(jìn)行程序設(shè)計(jì)等方面進(jìn)行講解,貼近實(shí)際,不斷激發(fā)學(xué)生對(duì)知識(shí)的探索欲望。
(4)以常用算法為紐帶,實(shí)現(xiàn)邏輯思維與程序設(shè)計(jì)方法的有效融合。例如,針對(duì)遞推法、倒退法、迭代法、窮舉法可以不同的有趣實(shí)例,如兔子繁殖問(wèn)題、猴子吃桃問(wèn)題、牛頓迭代法解方程、雞兔同籠問(wèn)題、邏輯問(wèn)題等,對(duì)其進(jìn)行總結(jié)和應(yīng)用,讓學(xué)生體驗(yàn)程序設(shè)計(jì)的實(shí)現(xiàn)過(guò)程,既反映問(wèn)題的難度及求解規(guī)模的變化,又彰顯知識(shí)和求解方法的多樣性。
4、課程實(shí)踐環(huán)節(jié)建設(shè)
程序設(shè)計(jì)是高強(qiáng)度的腦力勞動(dòng),不是聽(tīng)會(huì)的,也不是看會(huì)的,而是練會(huì)的。只有讓學(xué)生動(dòng)手,學(xué)生才會(huì)有成就感,進(jìn)而對(duì)課程產(chǎn)生興趣,學(xué)起來(lái)才比較從容。在“狹義工具論”思想指導(dǎo)下,傳統(tǒng)的實(shí)踐環(huán)節(jié)內(nèi)容比較單一,以課程實(shí)驗(yàn)為主,內(nèi)容基本上是程序設(shè)計(jì)語(yǔ)言的語(yǔ)法驗(yàn)證,實(shí)驗(yàn)項(xiàng)目與實(shí)際應(yīng)用問(wèn)題結(jié)合不緊密,學(xué)生做完實(shí)驗(yàn)沒(méi)有成就感。因此,課程的實(shí)踐教學(xué)應(yīng)遵循以應(yīng)用為目的,以任務(wù)驅(qū)動(dòng),循序漸進(jìn)。我們將課程完整的實(shí)踐環(huán)節(jié)分為課程實(shí)驗(yàn)、課程實(shí)訓(xùn)和課程設(shè)計(jì)3大部分。
4.1 課程實(shí)驗(yàn)
課程實(shí)驗(yàn)由基礎(chǔ)實(shí)驗(yàn)和綜合實(shí)驗(yàn)組成?;A(chǔ)實(shí)驗(yàn)與課程講授內(nèi)容同步,形成配套的實(shí)驗(yàn)項(xiàng)目,加深學(xué)生對(duì)相關(guān)語(yǔ)言知識(shí)及某個(gè)主題領(lǐng)域知識(shí)的理解和應(yīng)用;綜合實(shí)驗(yàn)主要是針對(duì)多個(gè)知識(shí)點(diǎn)進(jìn)行綜合訓(xùn)練,加強(qiáng)學(xué)生對(duì)課程內(nèi)容的整體認(rèn)識(shí)。
1)基礎(chǔ)實(shí)驗(yàn)。
基礎(chǔ)實(shí)驗(yàn)項(xiàng)目按照程序跟蹤、改錯(cuò)調(diào)試、設(shè)計(jì)實(shí)現(xiàn)3個(gè)遞進(jìn)層次,從多角度培養(yǎng)學(xué)生的程序設(shè)計(jì)能力。前2個(gè)層次的基礎(chǔ)實(shí)驗(yàn)項(xiàng)目訓(xùn)練學(xué)生對(duì)語(yǔ)言知識(shí)的運(yùn)用能力,后1個(gè)層次的基礎(chǔ)實(shí)驗(yàn)項(xiàng)目訓(xùn)練學(xué)生求解問(wèn)題的能力。
程序跟蹤是依據(jù)項(xiàng)目的主題給出完整的程序,讓學(xué)生利用調(diào)試工具跟蹤并觀察程序的運(yùn)行結(jié)果,并對(duì)結(jié)果進(jìn)行分析,回答給定問(wèn)題,畫(huà)出程序流程圖,這些題目主要是為了加強(qiáng)和鞏固學(xué)生的語(yǔ)言知識(shí)。改錯(cuò)調(diào)試是在給定功能的程序中設(shè)置幾個(gè)語(yǔ)法或算法錯(cuò)誤,讓學(xué)生上機(jī)進(jìn)行調(diào)試并除錯(cuò),主要目的是訓(xùn)練學(xué)生在理解程序主要功能及整體框架的基礎(chǔ)上進(jìn)行程序調(diào)試的能力。設(shè)計(jì)實(shí)現(xiàn)是按照項(xiàng)目的主題給出幾個(gè)可選的題目,讓學(xué)生根據(jù)自己的能力選擇完成。這一層次的題目主要是讓學(xué)生掌握從提出問(wèn)題、模型建立、數(shù)據(jù)表示、算法設(shè)計(jì)、編寫(xiě)代碼到測(cè)試調(diào)試程序等開(kāi)發(fā)過(guò)程和方法,培養(yǎng)學(xué)生將問(wèn)題抽象化、設(shè)計(jì)與選擇解決方案、用程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)方案并進(jìn)行測(cè)試和評(píng)價(jià)的能力。
2)綜合實(shí)驗(yàn)。
綜合實(shí)驗(yàn)的目的是使學(xué)生綜合應(yīng)用復(fù)雜數(shù)據(jù)類型實(shí)現(xiàn)復(fù)雜數(shù)據(jù)處理與存儲(chǔ),培養(yǎng)學(xué)生根據(jù)給定問(wèn)題編寫(xiě)具有多個(gè)模塊程序的能力。實(shí)驗(yàn)內(nèi)容都是一些與實(shí)際應(yīng)用結(jié)合緊密且具有較復(fù)雜數(shù)據(jù)結(jié)構(gòu)的問(wèn)題。
4.2 課程實(shí)訓(xùn)
課程實(shí)訓(xùn)在課程結(jié)束后進(jìn)行,主要是給出一些典型問(wèn)題,要求學(xué)生運(yùn)用特定的數(shù)據(jù)結(jié)構(gòu)及算法編程實(shí)現(xiàn),其綜合程度要高于實(shí)驗(yàn)項(xiàng)目。例如,針對(duì)x∈A、A n B及A u B等集合問(wèn)題的運(yùn)算,要求每個(gè)學(xué)生分別用數(shù)組和鏈表2種數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),而且對(duì)于每種結(jié)構(gòu)都要求用一些指定的編程方法。教師要按照問(wèn)題實(shí)現(xiàn)的方法與步驟,根據(jù)學(xué)生的語(yǔ)言知識(shí)運(yùn)用情況制訂嚴(yán)格的實(shí)現(xiàn)要求和標(biāo)準(zhǔn),按照標(biāo)準(zhǔn)當(dāng)場(chǎng)對(duì)學(xué)生編寫(xiě)的程序進(jìn)行評(píng)價(jià)并給出成績(jī)。
4.3 課程設(shè)計(jì)
課程設(shè)計(jì)安排在課程結(jié)束后的下一個(gè)學(xué)期初,大約2周時(shí)間,將3~5人分為一個(gè)小組。小組成員在教師的指導(dǎo)下,分工協(xié)作完成有較大實(shí)際價(jià)值的程序設(shè)計(jì)項(xiàng)目。課程設(shè)計(jì)重在培養(yǎng)學(xué)生對(duì)程序設(shè)計(jì)課程所學(xué)知識(shí)的創(chuàng)新應(yīng)用能力,讓學(xué)生深刻體會(huì)軟件工程方法,初步掌握大型程序設(shè)計(jì)思想和開(kāi)發(fā)方法,訓(xùn)練學(xué)生的團(tuán)隊(duì)協(xié)作精神以及集體責(zé)任感。
5、課程改革成效
以問(wèn)題求解為主線的教學(xué)改變了程序設(shè)計(jì)基礎(chǔ)課程的教學(xué)重點(diǎn),教學(xué)內(nèi)容強(qiáng)調(diào)程序設(shè)計(jì)思想和方法,摒棄過(guò)去以語(yǔ)言知識(shí)為主的做法。教學(xué)策略的改變強(qiáng)化了學(xué)生獨(dú)立思考和動(dòng)手的能力,提高了學(xué)生的實(shí)際程序設(shè)計(jì)能力。
學(xué)生在對(duì)課程評(píng)價(jià)時(shí),認(rèn)為“老師從多方面對(duì)一個(gè)問(wèn)題進(jìn)行闡述,激發(fā)學(xué)生的學(xué)習(xí)興趣”“老師講課很好,本來(lái)枯燥的語(yǔ)言課在老師的講述下一下子有了趣味性,給我們留下很大的思考空間,更一步激發(fā)我們的學(xué)習(xí)興趣”“通過(guò)本學(xué)期的學(xué)習(xí),我學(xué)到看書(shū)的方法和程序設(shè)計(jì)思維,深刻地理解‘程序設(shè)計(jì)=算法+數(shù)據(jù)結(jié)構(gòu)的思想內(nèi)涵”。
2008-2011級(jí)近4屆計(jì)算機(jī)科學(xué)與技術(shù)系學(xué)生的程序設(shè)計(jì)基礎(chǔ)課程考試成績(jī)逐年提高,其成績(jī)統(tǒng)計(jì)如表1所示。
從試卷分析可以看出,學(xué)生較以前各屆學(xué)生程序分析、調(diào)試、查錯(cuò)及知識(shí)的綜合應(yīng)用能力明顯提高;后續(xù)課程的主講教師也反映學(xué)生能將該課程中學(xué)到的基本方法和技能運(yùn)用到后續(xù)課程的學(xué)習(xí)中。
由于該課程為學(xué)生打好了程序設(shè)計(jì)的基礎(chǔ),大多數(shù)學(xué)生程序設(shè)計(jì)的信心較前有大幅度提升,因此申報(bào)校級(jí)創(chuàng)新實(shí)驗(yàn)項(xiàng)目并獲得立項(xiàng)的人數(shù)正在逐年增長(zhǎng),參加“挑戰(zhàn)杯”大學(xué)生課外科技作品競(jìng)賽的人數(shù)也逐漸增多,并且連續(xù)2屆計(jì)算機(jī)科學(xué)與技術(shù)系的學(xué)生在省級(jí)“挑戰(zhàn)杯”競(jìng)賽中獲得獎(jiǎng)勵(lì)。
6、結(jié)語(yǔ)
以問(wèn)題求解方法為主線的程序設(shè)計(jì)基礎(chǔ)課程教學(xué)內(nèi)容及模式的建設(shè)工作是一項(xiàng)持續(xù)化的工作,現(xiàn)在我們才剛剛起步,今后還要在課程的教材建設(shè)、學(xué)生自主學(xué)習(xí)及評(píng)測(cè)平臺(tái)的建設(shè)、師資隊(duì)伍的建設(shè)等方面多下工夫,逐步提升該課程的教學(xué)效果,以達(dá)到省級(jí)精品課程的要求。