吳 清 許智宏
摘要:本文針對(duì)“編譯原理”在理論及實(shí)驗(yàn)教學(xué)中存在難度的現(xiàn)狀,探討了如何提高該課程教學(xué)效果的有效途徑,主要研究了課堂教學(xué)、實(shí)驗(yàn)教學(xué)及教學(xué)方法,并從中總結(jié)出規(guī)律性的策略,在有效幫助學(xué)生掌握扎實(shí)的基礎(chǔ)理論和技術(shù)的同時(shí)提高學(xué)生實(shí)際動(dòng)手能力,培養(yǎng)他們開(kāi)發(fā)大型軟件的工程意識(shí)、獨(dú)立思考和團(tuán)隊(duì)合作的精神。
關(guān)鍵詞:編譯原理;教學(xué)研究;教學(xué)效果
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B
編譯系統(tǒng)是計(jì)算機(jī)系統(tǒng)的基本組成部分,對(duì)它的研制是一項(xiàng)高難度的工程。作為一門理論性、實(shí)踐性均很強(qiáng)的課程,“編譯原理”對(duì)學(xué)生提高計(jì)算機(jī)軟件素質(zhì),拓寬思維方式,理解信息處理實(shí)質(zhì),綜合運(yùn)用所學(xué)知識(shí)分析問(wèn)題等具有重要作用。但由于這門課程的概念性強(qiáng),具有嚴(yán)密的邏輯性,內(nèi)容豐富且抽象,應(yīng)用其他課程的知識(shí)較多,容易使學(xué)生望而生畏,是公認(rèn)的計(jì)算機(jī)專業(yè)中既難教又難學(xué)的課程之一。同時(shí)由于編譯系統(tǒng)大而復(fù)雜,理論多而深?yuàn)W,而且目前課時(shí)又被壓縮,課堂學(xué)習(xí)時(shí)間相對(duì)短暫,因此怎樣收到理想的教學(xué)效果是一個(gè)亟待解決的問(wèn)題。
作者曾調(diào)查了往屆畢業(yè)生的學(xué)習(xí)情況,大部分學(xué)生表示在校期間沒(méi)有真正學(xué)好這門課。筆者根據(jù)多年的教學(xué)經(jīng)驗(yàn),對(duì)該課程的教學(xué)進(jìn)行了研究,逐步完善了課堂教學(xué)、實(shí)驗(yàn)教學(xué)及其教學(xué)方法,通過(guò)改進(jìn)教學(xué)實(shí)施環(huán)節(jié),協(xié)調(diào)計(jì)算機(jī)課程的合理銜接,鍛煉了學(xué)生的系統(tǒng)分析設(shè)計(jì)能力。加強(qiáng)實(shí)驗(yàn)教學(xué),使課程實(shí)驗(yàn)不再只是單純地實(shí)現(xiàn)編譯理論中的某些算法。我校學(xué)生在前續(xù)課程中從未開(kāi)發(fā)過(guò)大型軟件系統(tǒng),因此我們也對(duì)學(xué)生親身經(jīng)歷大型系統(tǒng)軟件開(kāi)發(fā)的全過(guò)程進(jìn)行了研究。
1完善的教學(xué)內(nèi)容
1.1理清課程的聯(lián)系,建立課程的有機(jī)銜接
課堂授課中,應(yīng)讓學(xué)生體會(huì)本課程是如何建立在前續(xù)課程——高級(jí)語(yǔ)言、匯編語(yǔ)言的基礎(chǔ)上的,運(yùn)用數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、計(jì)算機(jī)組成等課程的相關(guān)知識(shí)來(lái)解決編譯問(wèn)題,否則這門課就是孤立的,考完試就忘掉了。例如,以課堂討論的方式教學(xué),用編譯理論分析C語(yǔ)言中的語(yǔ)法現(xiàn)象,培養(yǎng)學(xué)生靈活運(yùn)用知識(shí)的能力。在課程設(shè)計(jì)方面,與同時(shí)開(kāi)設(shè)的“軟件工程”課程結(jié)合,用軟件工程的思想規(guī)范指導(dǎo)學(xué)生完成一個(gè)小型編譯器的開(kāi)發(fā)。課程快結(jié)束時(shí),引導(dǎo)學(xué)生思考編譯理論對(duì)今后學(xué)習(xí)內(nèi)容的指導(dǎo)意義。
為了跟上計(jì)算機(jī)技術(shù)的發(fā)展,教師還應(yīng)加強(qiáng)課外閱讀指導(dǎo)。例如,讓學(xué)生從C到C++語(yǔ)言的分析中體會(huì)程序設(shè)計(jì)思想的不斷發(fā)展和由此帶來(lái)的編程語(yǔ)言從過(guò)程式到對(duì)象式的演變。鑒于教材對(duì)編譯算法和模型的描述仍沿用C這類結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言的編譯過(guò)程,所以教師除應(yīng)在課堂授課時(shí)有重點(diǎn)地結(jié)合對(duì)象式思想講解外,還應(yīng)向?qū)W生推薦文獻(xiàn)資料,引導(dǎo)學(xué)生思考在過(guò)程式語(yǔ)言基礎(chǔ)上引入對(duì)象式語(yǔ)言的編譯原理和特點(diǎn),鼓勵(lì)學(xué)生探討面向?qū)ο缶幾g器對(duì)編譯前端(詞法、語(yǔ)法分析)和后端(語(yǔ)義分析)的影響。
另外,由于編譯程序使用的算法是較經(jīng)典的,其思想和實(shí)現(xiàn)技術(shù)可廣泛應(yīng)用于一般軟件的設(shè)計(jì)實(shí)現(xiàn)中,因此可鼓勵(lì)學(xué)生將學(xué)到的算法應(yīng)用到實(shí)際問(wèn)題中。這樣既對(duì)前期課程起到復(fù)習(xí)鞏固的作用,又能讓學(xué)生切實(shí)體會(huì)到本課程的實(shí)際應(yīng)用價(jià)值。
1.2抓住各章節(jié)重點(diǎn),注意各章節(jié)的聯(lián)系
一個(gè)典型的編譯程序的8個(gè)邏輯組成部分是相輔相成,互有聯(lián)系,緊密相關(guān)的,像一條鎖鏈,一環(huán)扣一環(huán)。教師要幫助學(xué)生觸類旁通,充分體會(huì)編譯程序體系的優(yōu)美性與和諧性,注意概念間的聯(lián)系,達(dá)到事半功倍的教學(xué)效果。
編譯程序是大型復(fù)雜的軟件系統(tǒng),在教學(xué)中要拆成各個(gè)部分,分階段講解,以使學(xué)習(xí)難度減低,但這卻往往導(dǎo)致學(xué)生到最后也不清楚各個(gè)部分是怎樣在整個(gè)系統(tǒng)中協(xié)調(diào)工作的。就像自然語(yǔ)言的翻譯工作,初學(xué)外語(yǔ)時(shí),即使認(rèn)識(shí)一個(gè)句子中所有的單詞,也不一定能譯出句子的正確意思;即使能譯出一個(gè)個(gè)句子的正確含義,若不會(huì)修辭加工,也得不到一篇優(yōu)質(zhì)的譯文——這實(shí)際就相當(dāng)于割裂了編譯系統(tǒng)各章節(jié)之間的聯(lián)系。因此教師應(yīng)幫助學(xué)生從宏觀和整體把握編譯技術(shù),而不應(yīng)使學(xué)生的注意力分散到局部算法上。
在講授各個(gè)章節(jié)時(shí),教師所用實(shí)例應(yīng)具有延伸性和完整性,以便容易把對(duì)此例的整個(gè)編譯過(guò)程分解后融入到各個(gè)開(kāi)發(fā)階段,使學(xué)生體驗(yàn)不同編譯階段成果的聯(lián)系與銜接。例如,將算術(shù)表達(dá)式賦值語(yǔ)句這一示例作為主線講解,不同章節(jié)各有側(cè)重。通過(guò)文法定義不同的算符優(yōu)先級(jí)和結(jié)合性,向?qū)W生傳授問(wèn)題抽象、形式化描述和句型分析等基本概念。通過(guò)將運(yùn)算數(shù)擴(kuò)展為數(shù)組,使學(xué)生理解不同語(yǔ)句語(yǔ)法制導(dǎo)翻譯及生成8086系列匯編代碼等。另外,示例只是授課載體,最重要的是要通過(guò)示例引導(dǎo)學(xué)生建立起對(duì)系統(tǒng)構(gòu)建、模塊化、逐步求精、算法設(shè)計(jì)與實(shí)現(xiàn)等計(jì)算機(jī)學(xué)科常用的、經(jīng)典的分析解決問(wèn)題的思想。
1.3教學(xué)方法的研究與學(xué)生能力的培養(yǎng)
課堂教學(xué)的實(shí)施與教師緊密相關(guān),要在傳授知識(shí)的同時(shí)講述問(wèn)題求解的典型思路和方法,使課堂真正成為訓(xùn)練學(xué)生科研方法和思路的重要場(chǎng)所,構(gòu)建民主和諧、積極活潑的教學(xué)環(huán)境是至關(guān)重要的。這需要教師轉(zhuǎn)變教學(xué)方式,從權(quán)威到和學(xué)生平等對(duì)話。教師在認(rèn)真?zhèn)湔n,激情講課的同時(shí),還應(yīng)講究授課的藝術(shù)性,通過(guò)循循善誘,使學(xué)生在融洽寬松的氣氛中愉快學(xué)習(xí)。教師應(yīng)充分肯定學(xué)生的探究成果,激發(fā)學(xué)生學(xué)習(xí)興趣和熱情,培養(yǎng)學(xué)生思維的批判性和創(chuàng)新性,引導(dǎo)他們從“這是什么”的學(xué)習(xí)心態(tài)轉(zhuǎn)變到“這是為什么”。
2行之有效的實(shí)驗(yàn)教學(xué)方法
設(shè)計(jì)和組織良好的實(shí)踐教學(xué)環(huán)節(jié)可以使“編譯原理”課程獲得良好的教學(xué)效果。2007年起,我們將授課學(xué)時(shí)壓縮為48,實(shí)驗(yàn)學(xué)時(shí)增加到30,且實(shí)驗(yàn)成績(jī)單獨(dú)計(jì)算。我們?cè)诮梃b其他院校和專家優(yōu)秀經(jīng)驗(yàn)的基礎(chǔ)上,不盲目追求與名??待R,而是找準(zhǔn)自己的定位。相對(duì)一流名校的學(xué)生,我校學(xué)生有的認(rèn)真刻苦,但較為被動(dòng),缺乏主動(dòng)思考、發(fā)現(xiàn)問(wèn)題的能力和質(zhì)疑精神,習(xí)慣于在引領(lǐng)之下按部就班地學(xué)習(xí);也有的學(xué)生思想活躍,興趣廣泛,活動(dòng)能力強(qiáng),但學(xué)習(xí)自覺(jué)性不高,單純憑興趣,更缺乏自信心和持之以恒的耐力,需要外界的督促和鼓勵(lì)。鑒于以上實(shí)際情況,本著“以學(xué)生為本”的原則,我們采用驗(yàn)證性實(shí)驗(yàn)和綜合設(shè)計(jì)實(shí)驗(yàn)相結(jié)合的兩階段實(shí)踐教學(xué)模式,認(rèn)真設(shè)計(jì)實(shí)驗(yàn)項(xiàng)目,劃分好各個(gè)實(shí)驗(yàn)環(huán)節(jié),并制定分階段的多指標(biāo)評(píng)價(jià)體系,實(shí)施嚴(yán)格的過(guò)程考核和管理。
2.1優(yōu)化驗(yàn)證性實(shí)驗(yàn)內(nèi)容,制定前后銜接的任務(wù)鏈?zhǔn)綄?shí)驗(yàn)題目
為了配合課堂授課內(nèi)容,使學(xué)練互動(dòng),教師需要選取合適工作量的、與授課同步的若干驗(yàn)證性實(shí)驗(yàn)題目,按照編譯原理的授課順序細(xì)化任務(wù),使每個(gè)學(xué)生都逐個(gè)完成與授課內(nèi)容相關(guān)的子模塊,使每次上機(jī)實(shí)驗(yàn)的編譯程序逐步完善長(zhǎng)大。由于每次實(shí)踐內(nèi)容比較簡(jiǎn)單,大部分學(xué)生都能完成,這就增加了他們的成就感和自信心,使他們養(yǎng)成一步一個(gè)腳印的扎實(shí)作風(fēng),循序漸進(jìn)地完成實(shí)驗(yàn)題目。教師在此過(guò)程中把自己擺在一個(gè)組織者和監(jiān)督者的位置上,而不是一個(gè)和學(xué)生一起完成任務(wù)的執(zhí)行者,避免了學(xué)生的依賴心理,激發(fā)其積極主動(dòng)的學(xué)習(xí)態(tài)度。
這些與教學(xué)同步完成的小規(guī)模驗(yàn)證性實(shí)驗(yàn)只是幫助學(xué)生解決對(duì)編譯系統(tǒng)主要技術(shù)、算法的理解和設(shè)計(jì),實(shí)驗(yàn)內(nèi)容還要讓學(xué)生掌握由這些理論和方法構(gòu)造的編譯程序的各個(gè)部件是如何在整個(gè)系統(tǒng)中協(xié)調(diào)運(yùn)行的。所以教師應(yīng)引導(dǎo)學(xué)生從整體上把握編譯系統(tǒng)的結(jié)構(gòu),再將其分解,使之能夠相互協(xié)調(diào)地工作在一個(gè)統(tǒng)一體中。
這一階段的訓(xùn)練使學(xué)生提高了對(duì)復(fù)雜問(wèn)題求解和數(shù)據(jù)表達(dá)的程序設(shè)計(jì)能力,他們不僅關(guān)注方法本身,更注重方法的實(shí)現(xiàn);不再拘泥于細(xì)節(jié)的記憶,而是轉(zhuǎn)到怎樣進(jìn)行整體設(shè)計(jì)和程序?qū)崿F(xiàn)上來(lái),為完成一個(gè)完整的編譯過(guò)程打下了基礎(chǔ)。
2.2增加課程設(shè)計(jì)環(huán)節(jié),培養(yǎng)學(xué)生開(kāi)發(fā)大型系統(tǒng)軟件的能力
為了保證實(shí)踐環(huán)節(jié)的教學(xué)效果,一定規(guī)模的綜合訓(xùn)練的課程設(shè)計(jì)不可缺少。學(xué)生在綜合訓(xùn)練中親身經(jīng)歷一個(gè)大型軟件開(kāi)發(fā)的全過(guò)程,提高理論聯(lián)系實(shí)際的能力。該課程的教學(xué)安排采用靈活的組織方式,部分學(xué)生可以結(jié)合軟件工程課程的實(shí)踐環(huán)節(jié)完成一個(gè)規(guī)模適當(dāng)?shù)木幾g程序的開(kāi)發(fā);或采用課內(nèi)外一體化的教學(xué)模式,教師布置利用課外時(shí)間必須完成的工作。
設(shè)計(jì)內(nèi)容要具有實(shí)用性和系統(tǒng)性,公布不同要求的題目,學(xué)生根據(jù)興趣選擇。學(xué)生組成4~5人的小組,選擇或自定設(shè)計(jì)題目,再由教師根據(jù)上一階段的表現(xiàn)和個(gè)體差異等平衡小組間實(shí)力,合理組織不同能力層次的學(xué)生分組開(kāi)發(fā),并就題目的難易程度和工作量與小組成員交流,最終確定要完成的主要工作。每組遵循完整的編譯器開(kāi)發(fā)方式,融入軟件工程的思想,細(xì)化課程設(shè)計(jì)內(nèi)容,分配角色和任務(wù),推舉組長(zhǎng)、分析員、設(shè)計(jì)員、程序員和測(cè)試員等,并在課程設(shè)計(jì)中進(jìn)行角色互換。每個(gè)學(xué)生都體驗(yàn)從分析設(shè)計(jì)、編碼測(cè)試到交付維護(hù)的軟件開(kāi)發(fā)全過(guò)程,提高工程意識(shí)和開(kāi)發(fā)大型軟件的系統(tǒng)結(jié)構(gòu)設(shè)計(jì)能力。
2.3精心組織實(shí)踐過(guò)程,嚴(yán)格監(jiān)督實(shí)驗(yàn)結(jié)果
課程設(shè)計(jì)之初,教師要進(jìn)行必要的輔導(dǎo),鼓勵(lì)學(xué)生相互探討,調(diào)動(dòng)學(xué)生共同參與的熱情,培養(yǎng)他們良好嚴(yán)謹(jǐn)?shù)拈_(kāi)發(fā)風(fēng)格,從一開(kāi)始就堅(jiān)決杜絕抄襲現(xiàn)象。每次上機(jī)時(shí)注意抽查,并就其工作進(jìn)行點(diǎn)評(píng)。如對(duì)運(yùn)行當(dāng)前獲得的編譯程序進(jìn)行檢驗(yàn),成功后才能進(jìn)行下一步實(shí)踐。加強(qiáng)過(guò)程管理,解決學(xué)習(xí)動(dòng)力不足的問(wèn)題??疾鞂W(xué)生對(duì)所開(kāi)發(fā)軟件的理解,有針對(duì)性地對(duì)系統(tǒng)中關(guān)鍵問(wèn)題提出疑問(wèn)。
實(shí)驗(yàn)結(jié)束后,學(xué)生要提交完整的軟件開(kāi)發(fā)文檔和源代碼。最終的成績(jī)?cè)u(píng)定包括教師對(duì)階段性成果和實(shí)驗(yàn)報(bào)告等文檔的評(píng)分,還包括系統(tǒng)演示、答辯以及學(xué)生的自評(píng)和他評(píng)成績(jī),按不同的比例構(gòu)成。具體考核內(nèi)容要細(xì)化,并在設(shè)計(jì)之初就向?qū)W生公布。例如小組成員依據(jù)參與熱情、努力程度、合作精神和貢獻(xiàn)大小等為每位學(xué)生評(píng)分。這種多項(xiàng)評(píng)價(jià)指標(biāo)方式全方位鍛煉學(xué)生能力,重點(diǎn)考核學(xué)生的工作態(tài)度、是否獨(dú)立完成和自身收獲。
3必要的課程教學(xué)及實(shí)驗(yàn)平臺(tái)
“工欲善其事,必先利其器”。為提高“編譯原理”這門抽象、難學(xué)、難懂課程的教學(xué)效果,教師要事先做大量工作,形成一套行之有效的教學(xué)保障體系。因此我們利用豐富的教學(xué)資源,結(jié)合畢業(yè)設(shè)計(jì),指導(dǎo)學(xué)生開(kāi)發(fā)建立了一個(gè)編譯系統(tǒng)的教學(xué)及實(shí)驗(yàn)平臺(tái)。
要取得理想的教學(xué)效果,課程講授離不開(kāi)傳統(tǒng)的板書,但多媒體輔助教學(xué)可以把抽象的概念和算法生動(dòng)形象地演示出來(lái),也是一種良好的教學(xué)手段。作為一種輔助教學(xué)手段,教師可在上課時(shí)演示部分關(guān)鍵算法和難點(diǎn),使抽象的理論具體化,便于學(xué)生理解和記憶。配合綜合教學(xué)網(wǎng)站,學(xué)生也可在課下使用。
任何一個(gè)功能完整齊全的高級(jí)語(yǔ)言編譯程序的體積都很大,而且編程技巧高,學(xué)生感到閱讀理解困難。因此我們還利用畢業(yè)設(shè)計(jì)開(kāi)發(fā)了一個(gè)教學(xué)用編譯程序及詳細(xì)的說(shuō)明文檔,設(shè)計(jì)了若干合適的實(shí)驗(yàn)題目和案例資料,有興趣的學(xué)生可以在參考前輩作品的基礎(chǔ)上自行開(kāi)發(fā)構(gòu)造編譯器,幫助學(xué)生融會(huì)貫通。
4結(jié)論
總之,每一位教師對(duì)教學(xué)效果的改善、教學(xué)質(zhì)量的提高都是責(zé)無(wú)旁貸的。建立便于理論聯(lián)系實(shí)際的教學(xué)內(nèi)容和課程體系;理清課程之間的有機(jī)銜接,整合本課程與其他課程的知識(shí);抓住各章節(jié)重點(diǎn),捋順每堂課之間的聯(lián)系;精心設(shè)計(jì)實(shí)驗(yàn)內(nèi)容,注意調(diào)動(dòng)學(xué)生的積極性,培養(yǎng)學(xué)生獨(dú)立思考和分析解決問(wèn)題的能力;加強(qiáng)實(shí)驗(yàn)結(jié)果的監(jiān)督;增加編譯系統(tǒng)課程設(shè)計(jì),使學(xué)生親歷一個(gè)大型系統(tǒng)軟件開(kāi)發(fā)的全過(guò)程;針對(duì)教學(xué)內(nèi)容研制一個(gè)編譯原理課程教學(xué)及實(shí)驗(yàn)的平臺(tái);在傳授知識(shí)的同時(shí),加強(qiáng)學(xué)生能力的培養(yǎng),激發(fā)學(xué)生的學(xué)習(xí)興趣和創(chuàng)造精神等探索性的嘗試,需在實(shí)踐中不斷豐富、提高。
參考文獻(xiàn):
[1] 陳火旺. 程序設(shè)計(jì)語(yǔ)言編譯原理[M]. 3版. 北京:國(guó)防工業(yè)出版社,2001.
[2] 蔣立源. 編譯原理[M]. 西安:西北工業(yè)大學(xué)出版社,2005.
[3] 陳意云,張昱,鄭啟龍. 編譯原理的教學(xué)與實(shí)際相結(jié)合的探討[J]. 教育與現(xiàn)代化,2005(4):32-36.
[4] 何炎祥,伍香春. 現(xiàn)代教學(xué)理論指導(dǎo)下的編譯原理教學(xué)綜合改革[J]. 計(jì)算機(jī)教育,2005(3):10-13.