摘要:針對編譯原理教學(xué)過程中“教難、學(xué)難、實踐更難”的現(xiàn)狀,本文從激發(fā)學(xué)生興趣、培養(yǎng)學(xué)生專業(yè)素質(zhì)和提高學(xué)生動手能力三個方面入手,研究并提出了一系列教學(xué)改革的具體步驟和方法。實踐證明,這些方法在改善教學(xué)質(zhì)量方面達到了預(yù)期的目的。
關(guān)鍵詞:編譯原理;思維訓(xùn)練;素質(zhì)培養(yǎng);教學(xué)實踐
基金項目:中央財經(jīng)大學(xué)‘211工程’三期(CUFEXX2011-3-1);“中財121人才工程青年博士發(fā)展基金”項目(QBJGL201005);中央財經(jīng)大學(xué)精品實驗課程;中央財經(jīng)大學(xué)科研創(chuàng)新團隊支持計劃。
作者簡介:柴艷妹,女,講師,研究方向為圖像處理,模式識別;馬燕林,女,教授,中央財經(jīng)大學(xué)信息學(xué)院副院長,研究方向為信息系統(tǒng)管理。
編譯原理是計算機軟件及其相關(guān)專業(yè)的一門主干課和必修課。它系統(tǒng)地向?qū)W生講述了如何利用計算機,實現(xiàn)從程序設(shè)計語言到匯編語言和機器語言的自動轉(zhuǎn)換。在利用計算機求解現(xiàn)實世界問題的過程中,通常我們需要先有現(xiàn)實問題的自然語言描述,再經(jīng)過一次或多次的語言轉(zhuǎn)換,得到問題的形式化描述,再編寫程序,并最終編譯成可供計算機執(zhí)行的匯編程序或二進制代碼來解決問題。從抽象的角度看,這種問題求解過程就是一個“語言轉(zhuǎn)換”過程?!罢Z言轉(zhuǎn)換”可以看成計算機學(xué)科求解現(xiàn)實問題過程的縮影,是計算機專業(yè)思維的集中體現(xiàn)。因此,該課程講授的編寫編譯器的原理和技術(shù)具有非常普遍的意義,是從事計算機工作必不可少的。在計算機從業(yè)人員的職業(yè)生涯中,這些原理和技術(shù)都會反復(fù)用到。
編譯原理與其他計算機學(xué)科課程關(guān)系緊密,其先導(dǎo)課程是匯編語言程序設(shè)計、計算機組成原理、數(shù)據(jù)結(jié)構(gòu)、高級語言程序設(shè)計和離散數(shù)學(xué)等,后繼課程有形式語言與自動機、軟件工程和計算機體系結(jié)構(gòu)等,是一門理論深度和實踐要求并重的課程。
1編譯原理課程教學(xué)現(xiàn)狀
編譯原理課程由于涉及了數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計語言、離散數(shù)學(xué)、計算機組成原理等課程知識,具有知
識點多、概念關(guān)系復(fù)雜、算法抽象難懂等特點,因此,長期以來都被看作是計算機本科教學(xué)中“教難、學(xué)難、實驗更難”的一門課程。造成這種現(xiàn)象的原因主要有以下幾點:
1) 課程理論性強。編譯原理這門課內(nèi)容豐富且抽象,具有嚴密的邏輯性,除了編譯器自身的理論體系外,還涉及了大量其他理論知識,如形式語言、自動機、集合論、圖論等知識,這些理論的學(xué)習(xí)有一定難度,容易使學(xué)生感覺課程枯燥、望而生畏。
2) 學(xué)習(xí)目標(biāo)不明確。不少學(xué)生認為學(xué)習(xí)編譯原理的目的是為了構(gòu)造編譯器,而目前各大軟件公司的編譯器已經(jīng)非常優(yōu)秀沒有必要重復(fù)開發(fā)。加之這門課程理論性較強,覺得即使學(xué)會書本上的理論也未必能開發(fā)出復(fù)雜的編譯器,因此認為這門課程缺乏實用價值。
3) 實踐環(huán)節(jié)薄弱。由于編譯系統(tǒng)的實現(xiàn)涉及到若干其他課程,算法復(fù)雜、綜合性很強,即使是針對簡單文法的編譯器設(shè)計對于大多數(shù)同學(xué)來說都存在較大難度,因此會挫傷學(xué)生實踐的積極性。再加上教學(xué)過程中課時數(shù)量的限制,實踐成為教學(xué)中較為薄弱的環(huán)節(jié)。
因此,如何提升學(xué)習(xí)積極性、如何在授課過程中訓(xùn)練和培養(yǎng)學(xué)生能力、如何合理安排難易適度的實驗內(nèi)容就顯得尤為重要。本文將以現(xiàn)代教育理論為指導(dǎo),在教學(xué)過程中,針對教學(xué)模式、教學(xué)輔助、思維訓(xùn)練、能力培養(yǎng)、課程實踐等環(huán)節(jié)進行探索和創(chuàng)造性的改革與實踐,以期改觀本課程的教學(xué)效果,從而達到提高教學(xué)質(zhì)量的目的。
2樹立新的教學(xué)目標(biāo)
“在新時代條件下,培養(yǎng)什么樣的人?怎樣培養(yǎng)人?”是教育改革要回答的首要問題。作為計算機專業(yè)的學(xué)生,除了具備必要的知識與信息獲取能力、基本學(xué)科能力和團隊合作能力外,更重要的是具備思維創(chuàng)新能力和工程實現(xiàn)能力。這就要求在本科階段的教學(xué)中能有效訓(xùn)練學(xué)生思維、培養(yǎng)他們敏銳地發(fā)現(xiàn)問題、正確地分析問題和創(chuàng)造性地解決問題的能力。
從課程體系結(jié)構(gòu)上來看,編譯原理正是這樣一門優(yōu)秀課程。學(xué)生在程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)等課程中受到一定的鍛煉之后,在該課程中可進一步從系統(tǒng)級別上重新認識算法和程序,能有效提升學(xué)生的系統(tǒng)設(shè)計能力。此外,該課程中所涉及的形式化理論、詞法分析、語法分析等知識是本專業(yè)實施計算思維訓(xùn)練的最佳載體之一,可有效訓(xùn)練學(xué)生的邏輯抽象思維能力及培養(yǎng)創(chuàng)新性意識。因此,對于編譯原理課程的教學(xué)目標(biāo)不能僅定位于編譯器設(shè)計和實現(xiàn)中的基本概念、基本理論和基本方法的學(xué)習(xí)。除了理論知識外,更應(yīng)注重學(xué)生的計算思維、程序設(shè)計與實現(xiàn)、算法設(shè)計與分析、計算機系統(tǒng)的認知、開發(fā)和利用等4大專業(yè)基本素質(zhì)的培養(yǎng)[1]。
3教學(xué)改革措施與實踐
在編譯原理教學(xué)過程中,我們緊緊圍繞新的教學(xué)目標(biāo),從激發(fā)學(xué)生興趣、培養(yǎng)學(xué)生專業(yè)素質(zhì)和提高學(xué)生動手能力三個方面入手,加強學(xué)生的素質(zhì)和能力培養(yǎng)。
3.1采用多種教學(xué)模式,激發(fā)學(xué)習(xí)興趣
興趣是人們力求認識某種事物或愛好某種活動的心理傾向,是推動學(xué)生學(xué)習(xí)活動的內(nèi)在驅(qū)動力。要想讓學(xué)生學(xué)得好,需要不斷地激發(fā)他們的學(xué)習(xí)興趣,從而變被動學(xué)習(xí)為主動學(xué)習(xí)[2]。
1) 啟發(fā)式教學(xué)。
激發(fā)學(xué)生學(xué)習(xí)興趣的方法之一就是“啟發(fā)式教學(xué)”??鬃釉唬骸安粦嵅粏ⅲ汇话l(fā)”,即教師要對學(xué)生嚴格要求,先讓學(xué)生積極思考,再進行適時啟發(fā)。它把學(xué)生真正置于主動者位置,充分調(diào)動學(xué)生的積極性,激發(fā)學(xué)生的學(xué)習(xí)興趣。
在授課過程中,教師應(yīng)注重引導(dǎo)學(xué)生發(fā)現(xiàn)問題。例如,可以提問:“我們平時都是通過編寫程序來指揮計算機完成任務(wù)的,學(xué)過組成原理之后,大家知道計算機只能執(zhí)行0/1組成的機器指令,而我們編寫程序用的則是C、Java之類的高級程序設(shè)計語言,它們是如何被執(zhí)行的?”通過問題,引導(dǎo)學(xué)生積極思考,回憶他們從編寫代碼到執(zhí)行程序的過程,從而引出編譯系統(tǒng)的功能和作用。又例如,可以從英語文章到漢語的翻譯過程出發(fā),首先啟發(fā)學(xué)生分析英語翻譯的詳細過程,并思考高級程序設(shè)計語言翻譯與英語翻譯的關(guān)系,再得出“本質(zhì)上一致”的結(jié)論,從而引出編譯程序的構(gòu)造過程[3],并用圖示方法進行對比展示(如圖1所示)。這種啟發(fā)式的模式能使學(xué)生更自然、自主地接受新知識。
圖1高級程序設(shè)計語言翻譯與英語翻譯的關(guān)系
2) 互動式教學(xué)。
現(xiàn)代教育理論認為,教學(xué)過程是教與學(xué)的雙邊互動過程。在這個過程中,通過調(diào)節(jié)師生關(guān)系及相互作用,形成和諧的師生互動,生生互動,甚至學(xué)習(xí)個體與教學(xué)中介的互動,以產(chǎn)生教學(xué)共振,達到提高教學(xué)效果目的[4]。該模式也正符合培養(yǎng)目標(biāo)的要求,通過讓學(xué)生分組研討和查閱資料,教給他們提出問題、分析問題和解決問題的思想和方法,從而增強學(xué)生的溝通表達能力和團隊合作能力。
在課程大綱的框架下,合理分配課堂講授和研討的學(xué)時及內(nèi)容,適當(dāng)選擇研討課題。例如,“符號表的組織和管理”一章,可讓學(xué)生分組調(diào)研不同的構(gòu)造和查找算法,并要求各組派代表在課堂上講解算法過程、分析計算復(fù)雜度以及優(yōu)缺點比較等。通過任務(wù)驅(qū)動,可增加學(xué)生學(xué)習(xí)的主動性,進一步激發(fā)學(xué)習(xí)興趣。通常情況下,選擇的研討課題應(yīng)當(dāng)是學(xué)生通過自學(xué)、討論和教師的適當(dāng)指導(dǎo)就可以掌握的,難度不大知識點。難度大的內(nèi)容仍要按照常規(guī)教學(xué)方法進行詳細講解。
3) 形象化教學(xué)。
由于本課程涉及的概念和定理 很多,從詞法分
析、語法分析、語義分析,一直到代碼生成,包含了大量的算法。很多算法過程復(fù)雜、理論抽象。比如,語法分析中的LR分析過程包含很多步驟,不同的動作(移進、歸約、接受等)涉及的數(shù)據(jù)結(jié)構(gòu)也不同,為了讓學(xué)生更直觀地接受這些內(nèi)容,必須借助形象化教學(xué)手段。CAI(Computer Aided Instruction,計算機輔助教育)通過把文字、數(shù)據(jù)、圖形、音頻和視頻等不同媒體結(jié)合起來,實現(xiàn)對教學(xué)內(nèi)容的合理有效的組織和管理,因其具有形象、生動、直觀等特點,可以極大地調(diào)動學(xué)生的積極性,具有提高教學(xué)效果、擴大教學(xué)范圍和延伸教師功能的作用。
除了使用PPT課件中的動畫功能,還可以用Flash、Authorware等技術(shù)生動形象地演示抽象的概念和算法。為了加深學(xué)生的理解,還可以將類似的算法進行類比和對比,如簡單優(yōu)先分析算法和算符優(yōu)先分析算法的比較、自上而下分析法和自下而上分析法的比較等,使學(xué)生在輕松愉快中掌握知識要點,并進一步深化理解,做到知其然更知其所以然。
4) 網(wǎng)絡(luò)輔助教學(xué)。
課堂授課時間通常有限,為了幫助學(xué)生課外學(xué)習(xí)、方便師生交流,可采用網(wǎng)絡(luò)輔助教學(xué)方法。通過建立編譯原理課程網(wǎng)站,使學(xué)生隨時隨地在網(wǎng)上利用教學(xué)資源進行學(xué)習(xí)、做練習(xí)、模擬考試和答疑服務(wù)等,真正實現(xiàn)編譯原理課程教學(xué)方法和手段的現(xiàn)代化。
該課程網(wǎng)站的系統(tǒng)結(jié)構(gòu)圖如圖2所示。學(xué)生除了可以下載課堂內(nèi)容的PPT課件進行自學(xué)外,還提供了上傳/下載作業(yè)、答疑、測試、討論等服務(wù),并為學(xué)生提供教學(xué)大綱、教學(xué)日歷和參考資料等諸多信息,為學(xué)生在課堂外的自學(xué)、復(fù)習(xí)提供了豐富的資源。
圖2編譯原理網(wǎng)絡(luò)教學(xué)資源管理系統(tǒng)結(jié)構(gòu)圖
綜合采用多種教學(xué)模式,全方位、多角度的教學(xué)環(huán)境,極大提高了學(xué)生學(xué)習(xí)的主動性,有效激發(fā)了學(xué)生的學(xué)習(xí)興趣,給學(xué)生提供了寬廣的互動學(xué)習(xí)空間。
3.2注重思維能力訓(xùn)練,培養(yǎng)學(xué)生專業(yè)素質(zhì)
“授人以魚,不如授人以漁”。編譯原理課程的教學(xué)目標(biāo)最主要是對學(xué)生思維能力的訓(xùn)練,培養(yǎng)學(xué)生具備計算機從業(yè)人員的專業(yè)素養(yǎng)。
1) 抽象思維的培養(yǎng)。
抽象思維是思維的高級形式,是利用科學(xué)概念和理論,借助符號語言進行思維的方法。抽象思維的主要特點是通過協(xié)調(diào)運用分析、綜合、概括等基本方法,揭示事物的本質(zhì)和規(guī)律性聯(lián)系[5]。由于大量涉及形式語言和自動機理論,“抽象性”是編譯原理課程的一大特點。除了采用CAI輔助教學(xué)方法使內(nèi)容形象化之外,通過實例逐步引申和講解的方法可以幫助學(xué)生掌握具體問題抽象的方法。例如,在引入自動機概念之前,先用日常生活中打電話的例子構(gòu)造一個簡單的自動機,再借助文法的四元組定義形式引申出自動機的五元組形式化定義,從而使學(xué)生掌握從具體到抽象的思維過程。
2) 發(fā)散思維的培養(yǎng)。
思維能力不僅僅是指抽象知識的聚合能力,更重要的是推而廣之的發(fā)散思維。發(fā)散思維又稱“多向思維”,是指從一個目標(biāo)出發(fā),沿著各種不同的途徑去思考,探求多種答案的思維方式。發(fā)散思維常常是創(chuàng)新的基礎(chǔ),它對新事物比較敏感,具有不依循常規(guī)、尋求變異的特點。對學(xué)生發(fā)散思維的培養(yǎng)就是要培養(yǎng)學(xué)生多種方法解決問題的能力。例如,給定一個語言,要求學(xué)生寫出相應(yīng)文法的時候,先不給學(xué)生答案,讓學(xué)生把不同的答案寫在黑板上,然后逐一進行分析和點評,最后得出結(jié)論:語言和它所對應(yīng)的文法不是一對一的。這樣不僅可以加深學(xué)生對知識點的印象,并且鼓勵學(xué)生進行多向思維。
3) 創(chuàng)新思維的培養(yǎng)。
創(chuàng)新思維就是不受常規(guī)思路的約束,尋求對問題的全新的、獨特性的解答和方法的思維過程。逆向思維就是培養(yǎng)創(chuàng)新性的有效方法之一。例如,在講完自上而下語法分析之后,可以提問學(xué)生:“這個過程逆過來是否也可以完成句子的識別呢?如果可以,需要借助怎樣的數(shù)據(jù)結(jié)構(gòu)?如何進行分析?”學(xué)生經(jīng)過思考、分析探討,再加上適當(dāng)?shù)闹笇?dǎo),得出的結(jié)論將會記憶比較深刻,會對自下而上的語法分析方法了解的更深入。
此外,研究型教學(xué)也是培養(yǎng)學(xué)生創(chuàng)新能力的方法。選擇一些有新意、有一定前瞻性的題目讓學(xué)生分組研究,例如,讓學(xué)生充分想象和調(diào)研,編譯原理算法可以在哪些領(lǐng)域應(yīng)用?學(xué)生發(fā)現(xiàn),在搜索引擎、人工智能、模式識別等領(lǐng)域都有編譯算法的應(yīng)用。這種知識的拓展一方面可以訓(xùn)練他們的創(chuàng)新意識,另一方面還可以讓學(xué)生認識到學(xué)習(xí)編譯的重要性,從而產(chǎn)生濃厚的興趣。
3.3加強教學(xué)實踐環(huán)節(jié),提高學(xué)生動手能力
實踐教學(xué)是培養(yǎng)學(xué)生動手能力和工程實現(xiàn)能力的主要途徑。學(xué)生只有在不斷的實驗環(huán)節(jié)中嘗試、探索和研究,才能不斷提高解決工程問題的能力。因此,除了訓(xùn)練學(xué)生的思維能力和培養(yǎng)創(chuàng)新意識之外,實踐能力的培養(yǎng)也至關(guān)重要。
編譯原理課程對學(xué)生實踐能力要求較高,學(xué)生在實驗過程中除了需要掌握一些重要的算法,還需要將數(shù)據(jù)結(jié)構(gòu)、高級語言等內(nèi)容融會貫通。為了消除學(xué)生對該課程的“神秘感”和“畏難感”,實驗教學(xué)中應(yīng)做好以下幾項工作:
1) 合理安排實驗內(nèi)容。
實驗內(nèi)容的安排要循序漸進,一開始不要給太難的任務(wù),否則,容易挫傷學(xué)生的信心和積極性。例如,在作詞法分析器設(shè)計實驗之前,可以先給出去除源程序中代碼注釋的實驗。然后,依次給出詞法分析器實驗、語法分析器實驗、語義分析和中間代碼生成器實驗。有了上面的基礎(chǔ),最后給出一個拓展的綜合性編譯器設(shè)計實驗。
2) 給出難度適中的實驗要求。
在給學(xué)生布置實驗任務(wù)的時候,要明確告訴學(xué)生實驗?zāi)康暮鸵_到的要求,即有明確的輸入和輸出內(nèi)
容。有些實驗,如遞歸下降子程序法進行語法分析,還需要進一步劃分好模塊,給出粗略的流程圖,以防學(xué)生完全沒有思路,無從下手。但太過細致的提示又會限制學(xué)生的創(chuàng)新思維,因此在布置實驗任務(wù)前,教師需要根據(jù)學(xué)生情況反復(fù)推敲,給出適宜的難度。
3) 完善評分機制。
在以前的教學(xué)實踐中,經(jīng)常發(fā)生代碼雷同和類似的結(jié)果,單憑測試結(jié)果無法甄別是否存在抄襲現(xiàn)象,對于成績的評定和考試的公平性有一定的阻礙和影響,也影響到部分學(xué)生課程實踐的積極性。因此,在實驗評價中,除了程序結(jié)果測試和實驗報告之外,加入了隨機答辯環(huán)節(jié)。隨機抽取某段程序,讓學(xué)生給老師和其他同學(xué)講解其功能、工作過程和設(shè)計思想。這樣一來,較好地避免了課程實踐中經(jīng)常出現(xiàn)的剽竊程序或偷懶現(xiàn)象,讓學(xué)生真正做到理論聯(lián)系實際。
3結(jié)語
為了改善編譯原理課程的教學(xué)效果,我們在教學(xué)模式、思維訓(xùn)練、專業(yè)素質(zhì)培養(yǎng)以及提高動手能力方面進行了一系列改革,如采用多種教學(xué)模式激發(fā)學(xué)習(xí)興趣、注重思維能力和專業(yè)素質(zhì)以及加強教學(xué)實踐環(huán)節(jié)提高動手能力等。這些措施極大地激發(fā)了學(xué)生的學(xué)習(xí)興趣,學(xué)生普遍反映編譯原理課程沒有想象中的難,厭學(xué)現(xiàn)象也減少了,對教學(xué)質(zhì)量的提高起到了促進的效果。
參考文獻:
[1] 蔣宗禮.“編譯原理”課程與專業(yè)能力培養(yǎng)[J]. 計算