張?bào)K先,岳 昆
(云南大學(xué) 信息學(xué)院,昆明 650031)
高級(jí)程序設(shè)計(jì)課程教學(xué)研究及探討
張?bào)K先,岳 昆
(云南大學(xué) 信息學(xué)院,昆明 650031)
程序設(shè)計(jì)是計(jì)算機(jī)、通信技術(shù)等大部分理工專(zhuān)業(yè)學(xué)生的必修課程。一般采用C語(yǔ)言作為講解內(nèi)容。傳統(tǒng)課程的教學(xué)法運(yùn)用到程序設(shè)計(jì)課程的教學(xué)時(shí)存在著一些不足,如關(guān)鍵概念學(xué)生理解困難,實(shí)踐與教學(xué)脫節(jié),學(xué)生對(duì)程序設(shè)計(jì)積極性不高等問(wèn)題。文中從教學(xué)內(nèi)容,教學(xué)方法,教學(xué)實(shí)踐三個(gè)方面對(duì)程序設(shè)計(jì)課程進(jìn)行研究和探討,將提升教學(xué)質(zhì)量,培養(yǎng)學(xué)生程序設(shè)計(jì)能力及積極性作為課程主要教學(xué)目標(biāo)。經(jīng)過(guò)實(shí)踐檢驗(yàn),收到了較好的成效。
程序設(shè)計(jì);C語(yǔ)言;教學(xué)內(nèi)容;教學(xué)方法;教學(xué)實(shí)踐
程序設(shè)計(jì)是一門(mén)較特殊的課程,與其說(shuō)學(xué)習(xí)程序設(shè)計(jì)是對(duì)學(xué)生的挑戰(zhàn),不如說(shuō)講授程序設(shè)計(jì)是對(duì)教師的挑戰(zhàn)[1]。第一,要求教師對(duì)程序設(shè)計(jì)的思想和內(nèi)涵把握得很到位,要清楚地知道學(xué)生在理解一些理論知識(shí)時(shí)為什么會(huì)遇到障礙,會(huì)遇到什么樣的障礙,才能設(shè)計(jì)出良好的教學(xué)方案[2];第二,也要求教師有較長(zhǎng)時(shí)間的程序設(shè)計(jì)實(shí)踐經(jīng)驗(yàn),把握程序設(shè)計(jì)課程的授課重點(diǎn),避免在一些意義不大的概念上進(jìn)行糾纏[3];第三,教師有義務(wù)讓學(xué)生認(rèn)識(shí)到程序設(shè)計(jì)是一門(mén)優(yōu)雅的藝術(shù),培養(yǎng)學(xué)生對(duì)程序設(shè)計(jì)的熱情。但是,做到以上幾點(diǎn)并不容易,因?yàn)槟壳俺绦蛟O(shè)計(jì)課程還存在以下的問(wèn)題:
(1)學(xué)生在學(xué)習(xí)程序設(shè)計(jì)課程時(shí)沒(méi)有任何基礎(chǔ);(2)傳統(tǒng)的教學(xué)方法不適用于程序設(shè)計(jì)課程;(3)以往的教學(xué)實(shí)踐方案不利于學(xué)生提高程序設(shè)計(jì)能力。
基于以上三個(gè)問(wèn)題,本文從教學(xué)內(nèi)容、教學(xué)方法和教學(xué)實(shí)踐三個(gè)方面探討程序設(shè)計(jì)課程教學(xué)改革。
程序設(shè)計(jì)課程的開(kāi)課背景往往針對(duì)大一新生,這些學(xué)生在高中階段雖然接觸過(guò)計(jì)算機(jī),但很少有人接觸過(guò)程序設(shè)計(jì),所以一來(lái)就開(kāi)始講授程序設(shè)計(jì)內(nèi)容是不妥的。這里以C語(yǔ)言為例,討論幾個(gè)授課時(shí)學(xué)生難以理解而容易被忽視的概念。
1.1 如何切入程序設(shè)計(jì)課程
要了解程序設(shè)計(jì),必須首先了解程序是如在計(jì)算機(jī)中運(yùn)行的,這個(gè)時(shí)候可以以學(xué)生熟悉的方式,如QQ客戶(hù)端,游戲,音樂(lè),視頻是如何在計(jì)算機(jī)中工作及存儲(chǔ)為例子進(jìn)行講解,讓學(xué)生對(duì)數(shù)據(jù)存儲(chǔ)和程序執(zhí)行流程等關(guān)鍵概念建立起一個(gè)初步的認(rèn)識(shí);而后通過(guò)比喻的手法引入內(nèi)存地址的概念,從第一節(jié)課就為后期講授程序設(shè)計(jì)中比較難的部分如數(shù)組,指針,數(shù)據(jù)結(jié)構(gòu)埋下了伏筆,使學(xué)生在后期的學(xué)習(xí)過(guò)程中可以較為平滑的過(guò)度。當(dāng)學(xué)生理解了這些概念后,再將重點(diǎn)轉(zhuǎn)移到如何編寫(xiě)程序上,這時(shí)學(xué)生已經(jīng)明白程序是從何而來(lái),以及程序設(shè)計(jì)的目的和意義。在完成了這些鋪墊的工作后,才能開(kāi)始講授程序設(shè)計(jì)課程的內(nèi)容。
1.2 如何講授數(shù)據(jù)類(lèi)型
數(shù)據(jù)類(lèi)型是一個(gè)抽象的概念[4],學(xué)生在無(wú)法看到“字節(jié)”的實(shí)體時(shí),要理解數(shù)據(jù)類(lèi)型是非常困難的。這時(shí)可借助學(xué)生接觸過(guò)的一些計(jì)算機(jī)基本常識(shí),如內(nèi)存大小、硬盤(pán)大小和歌曲視頻大小,來(lái)對(duì)字節(jié)的概念進(jìn)行闡述,使學(xué)生對(duì)計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)建立從微觀到宏觀的完整概念模型,才能對(duì)不同數(shù)據(jù)類(lèi)型的存儲(chǔ)特點(diǎn)和方式記得牢靠。
1.3 如何講授函數(shù)
要理解函數(shù)的作用首先要理解函數(shù)出現(xiàn)的意義,書(shū)上一般對(duì)函數(shù)的描述是可以將一些重復(fù)出現(xiàn)的計(jì)算邏輯獨(dú)立出來(lái),從而增強(qiáng)程序的合理性和健壯性[5]。這樣的描述只通過(guò)幻燈或者板書(shū)是無(wú)法讓學(xué)生真正感受到函數(shù)的作用的。這時(shí)可以舉一個(gè)例子,如生活中我們?cè)谙硎軇e人提供的服務(wù),但是我們并不關(guān)心是誰(shuí)提供的這種服務(wù),來(lái)讓學(xué)生明白函數(shù)的獨(dú)立性以及封裝性。函數(shù)的另外一個(gè)重要的概念是C語(yǔ)言的函數(shù)參數(shù)傳遞機(jī)制是值傳遞,但是很多書(shū)上認(rèn)為指針作為參數(shù)時(shí),傳遞的是地址,從而獨(dú)立出地址傳遞這個(gè)概念。這樣理解當(dāng)然并無(wú)問(wèn)題,但對(duì)于學(xué)生理解C語(yǔ)言的內(nèi)涵有些不妥。所以在講授這個(gè)知識(shí)點(diǎn)的時(shí)候,教師不必將傳遞值和地址區(qū)別對(duì)待,只告訴學(xué)生地址也是一類(lèi)特殊的值,這樣的傳遞方式并沒(méi)有破壞C語(yǔ)言參數(shù)傳遞機(jī)制。當(dāng)學(xué)生對(duì)函數(shù)參數(shù)傳遞機(jī)制建立起一種統(tǒng)一的概念以后,理解指針作為函數(shù)參數(shù)時(shí)是如何運(yùn)作的會(huì)非???。
所以,C語(yǔ)言前幾章的內(nèi)容才是授課的難點(diǎn),因?yàn)檫@涉及程序設(shè)計(jì)的基礎(chǔ)概念,如果學(xué)生不能對(duì)這個(gè)概念建立起一個(gè)完成的認(rèn)識(shí)的話(huà),后面的課程很難開(kāi)展。而傳統(tǒng)意義上難點(diǎn)如數(shù)組、指針和數(shù)據(jù)結(jié)構(gòu)卻并不是難點(diǎn),因?yàn)閷W(xué)生一旦對(duì)數(shù)據(jù)存儲(chǔ)和程序執(zhí)行有了宏觀和微觀上認(rèn)識(shí)后,理解這些概念并不困難。但這里需要注意的是在學(xué)生對(duì)程序設(shè)計(jì)漸入佳境后,需要對(duì)他們的編程習(xí)慣進(jìn)行有針對(duì)性的培養(yǎng),對(duì)于程序設(shè)計(jì)的規(guī)范性如函數(shù)名,變量名,參數(shù)名命名等要進(jìn)行透徹的講解。類(lèi)似寫(xiě)文章,代碼同樣需要具有可讀性和觀賞性。
以往C語(yǔ)言的教學(xué)多采用板書(shū)和幻燈結(jié)合的方式,用這種方式進(jìn)行程序設(shè)計(jì)教學(xué)時(shí),學(xué)生無(wú)法通過(guò)黑板和幻燈片獲知程序如何編譯,如何執(zhí)行。因此,上課時(shí)教師采用現(xiàn)場(chǎng)編程的方式,對(duì)一些較復(fù)雜的程序,直接通過(guò)開(kāi)發(fā)環(huán)境進(jìn)行編寫(xiě),并且將編寫(xiě)過(guò)程投影到大屏幕上。程序的每一步,教師都對(duì)學(xué)生提問(wèn),讓學(xué)生來(lái)幫教師決定如何設(shè)計(jì),這樣學(xué)生對(duì)編程的過(guò)程會(huì)有一個(gè)直觀的認(rèn)識(shí),也會(huì)對(duì)一些關(guān)鍵算法記得更牢。最后編寫(xiě)的程序通過(guò)編譯和運(yùn)行得到正確結(jié)果,學(xué)生會(huì)有很強(qiáng)的成就感,從而激發(fā)對(duì)編程的興趣。教師還必須強(qiáng)調(diào)程序的調(diào)試技術(shù)。以往很多學(xué)生在學(xué)完了一學(xué)期的程序設(shè)計(jì)課程后仍然不會(huì)進(jìn)行程序調(diào)試,所以在現(xiàn)場(chǎng)編程演示中,每當(dāng)程序運(yùn)行得到不正確的結(jié)果時(shí),教師都對(duì)程序進(jìn)行調(diào)試,學(xué)生在課堂中可以學(xué)習(xí)到如何對(duì)一個(gè)程序進(jìn)行斷點(diǎn)設(shè)置、變量查看、內(nèi)存查看、函數(shù)調(diào)用棧查看、匯編語(yǔ)句查看和單步跟蹤等簡(jiǎn)單調(diào)試技術(shù),這些對(duì)于學(xué)生理解程序執(zhí)行流程有很大好處。值得注意的是,學(xué)校的多媒體教室一般都裝有還原系統(tǒng),每次裝好的開(kāi)發(fā)環(huán)境關(guān)機(jī)后就被還原了??梢圆捎肅odeBlock集成開(kāi)發(fā)環(huán)境,這個(gè)開(kāi)發(fā)環(huán)境最大的好處是跨平臺(tái)、安裝文件小、安裝速度快,幾十秒鐘就可以安裝成功,比VC6和Visual Studio更方便。CodeBlock支持標(biāo)準(zhǔn)的C及C++程序開(kāi)發(fā),而且它是ACM-ICPC(國(guó)際大學(xué)生程序設(shè)計(jì)大賽)指定使用的開(kāi)發(fā)環(huán)境,這也為后期培養(yǎng)ACM參賽學(xué)生提前打下了基礎(chǔ)。
程序設(shè)計(jì)是一門(mén)實(shí)踐的藝術(shù),相應(yīng)的實(shí)踐課程的設(shè)計(jì)和安排也相當(dāng)重要,采用以下兩種方法進(jìn)行改進(jìn)。
3.1 第一種方法
是將實(shí)踐活動(dòng)從個(gè)體行為改為集體行為。以往是實(shí)踐都是以單個(gè)學(xué)生作為考核對(duì)象,采用做作業(yè)的方式對(duì)學(xué)生掌握的內(nèi)容進(jìn)行考核,這種方式在某種程度上的確會(huì)取得較好的效果。但這是一種逼著學(xué)生學(xué)的方法,學(xué)生在考過(guò)試以后不會(huì)再對(duì)這門(mén)課有興趣,效果并不好。教學(xué)中采用的方式是將3名學(xué)生作為一組進(jìn)行考核。因?yàn)?,解決一個(gè)難題并不是一個(gè)人的事情,應(yīng)該是一個(gè)團(tuán)隊(duì)的合作,每個(gè)人在解決問(wèn)題中所能貢獻(xiàn)的能力是不一樣的。比如,有的人邏輯思維縝密,但是代碼功底不強(qiáng),有的人編寫(xiě)代碼能力很強(qiáng),但是算法功底不扎實(shí),這樣的配合方式可以很快提高自身所缺乏的能力。組與組之間形成的是競(jìng)爭(zhēng)關(guān)系,這樣小組成員會(huì)想盡一切辦法來(lái)提高自己小組的競(jìng)爭(zhēng)力,力求獲得更大的成效。例如,在一次實(shí)踐課中,如果能當(dāng)堂完成課題的小組可以提前走,獲得較高分?jǐn)?shù),沒(méi)有完成課題的小組需要回去完成這個(gè)課題,并書(shū)寫(xiě)一份課題報(bào)告在下節(jié)課時(shí)交上來(lái)。這種競(jìng)爭(zhēng)機(jī)制會(huì)激發(fā)學(xué)生的積極性,在提高學(xué)生解決問(wèn)題的能力的同時(shí)還培養(yǎng)了團(tuán)隊(duì)合作精神。
3.2 第二種方法
是對(duì)實(shí)踐內(nèi)容的改進(jìn),以往的實(shí)踐課程多是讓學(xué)生對(duì)書(shū)后的習(xí)題進(jìn)行編寫(xiě),此類(lèi)習(xí)題一般與日常生活聯(lián)系較少,有些習(xí)題理解起來(lái)比較晦澀,有些習(xí)題所闡述的問(wèn)題在實(shí)際項(xiàng)目中很少遇到,這就會(huì)使學(xué)生降低熱情,認(rèn)為程序設(shè)計(jì)都是解決一些不實(shí)用的問(wèn)題。在教學(xué)中,教師充分參考國(guó)內(nèi)各大高校ACM-OJ(Online Judge)網(wǎng)站,并從中整理出一些適合程序設(shè)計(jì)實(shí)踐課程的簡(jiǎn)單題目,進(jìn)行了分類(lèi),這些題目最大的優(yōu)點(diǎn)是沒(méi)有標(biāo)準(zhǔn)答案,可以讓學(xué)生自己建立合理的數(shù)學(xué)模型,并進(jìn)行驗(yàn)證。雖說(shuō)對(duì)于剛開(kāi)始學(xué)習(xí)編程的學(xué)生有一定難度,但確培養(yǎng)了學(xué)生的邏輯思維能力,也具有很強(qiáng)的趣味性,在這種競(jìng)爭(zhēng)的環(huán)境中充分體現(xiàn)了快樂(lè)學(xué)習(xí)的過(guò)程。
程序設(shè)計(jì)課程與其他類(lèi)型課程在授課方式上有很大不同,因?yàn)槌绦蛟O(shè)計(jì)培養(yǎng)的是學(xué)生抽象的邏輯思維能力,所以在理論知識(shí)的講解上要注重方式和方法,要通俗易懂,將復(fù)雜的概念簡(jiǎn)單化描述,讓學(xué)生理解概念的來(lái)龍去脈。還要注重培養(yǎng)學(xué)生解決科學(xué)問(wèn)題能力,程序設(shè)計(jì)只是一種用于解決科學(xué)問(wèn)題的工具,不應(yīng)該單純的對(duì)工具的使用進(jìn)行訓(xùn)練,而需要首先培養(yǎng)學(xué)生解決科學(xué)問(wèn)題的思維方式和建模能力。需要培養(yǎng)學(xué)生將這種思維和模型轉(zhuǎn)換為程序的實(shí)踐能力,養(yǎng)成良好的編程習(xí)慣,并且對(duì)程序設(shè)計(jì)保持長(zhǎng)時(shí)間的熱情。只有達(dá)到了以上幾點(diǎn),才能算是較為成功的完成了程序設(shè)計(jì)課程的教學(xué)工作。
[1]陳旭東,陳偉君,羅予東. 地方本科院校計(jì)算機(jī)應(yīng)用型人才培養(yǎng)模式探討[J]. 計(jì)算機(jī)教育. 2010(5):56-58.
[2]周軍妮,楊潤(rùn)玲,江莉.C語(yǔ)言的多維立體教學(xué)系統(tǒng)[J]. 計(jì)算機(jī)教育,2013(2):83-86.
[3]張長(zhǎng)海,陳娟.以“程序設(shè)計(jì)”為主線(xiàn)、以“案例”為驅(qū)動(dòng)的程序設(shè)計(jì)教學(xué)改革[J].計(jì)算機(jī)教育,2008(8):143-145.
[4]Stephen Prata. C Primer Plus[M]. 北京.人民郵電出版社,2005:36.
[5]裘宗燕. 從問(wèn)題到程序[M].北京:機(jī)械工業(yè)出版社,2005:136.
Thinking about Advanced Programming Courses in College Curricula
ZHANG Jixian, YUE Kun
(School of Information Science and Technology, Yunnan University, Kunming 650091, China)
Programming language is the obligatory course for most polytechnic students. Generally, the teachers use C language teach to student. However, it still has some shortcomings of traditional didactics applied to teaching programming courses, such as misunderstanding key concepts, separately practicing and teaching, unenthusiastic for progra mming. In this paper, we research and discuss the program design curricula from the teaching content, teaching methods, teaching practice. The conclusion will enhance the quality of students programming skills and motivation as the main teaching curriculum objectives. It has been proved to get the better effects by the above teaching measures.
advanced program language; C language; teaching content; teaching methods; teaching practice
2014-06-17;修改日期:2014-07-03
云南省級(jí)精品課程資源共享平臺(tái)建設(shè)基金資助項(xiàng)目(X3112019)。
張?bào)K先(1980-),男,博士,講師,研究方向:移動(dòng)互聯(lián)網(wǎng)、云計(jì)算和移動(dòng)互媒體。
G642.4;G423.07
A
10.3969/j.issn.1672-4550.2015.03.052
實(shí)驗(yàn)科學(xué)與技術(shù)2015年3期