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