摘要:根據(jù)編譯原理教學(xué)中學(xué)生反饋的主要問(wèn)題,由當(dāng)前的教學(xué)現(xiàn)狀分析問(wèn)題產(chǎn)生的主要原因,給出建議和措施,旨在指導(dǎo)和幫助學(xué)生如何查找資料,通過(guò)實(shí)踐練習(xí)透徹理解課程中的知識(shí),并提出結(jié)合當(dāng)前實(shí)際應(yīng)用的實(shí)驗(yàn)方案以配合教學(xué)。
關(guān)鍵詞:編譯原理;教學(xué)反饋;課程結(jié)構(gòu);實(shí)踐方案;網(wǎng)絡(luò)社區(qū);課程設(shè)計(jì)
0.引言
編譯原理是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的重要專業(yè)課,通過(guò)對(duì)本課程的學(xué)習(xí)使學(xué)生更深入地了解計(jì)算機(jī)以及計(jì)算機(jī)程序的本質(zhì),提高學(xué)生綜合分析問(wèn)題和求解問(wèn)題的能力。學(xué)習(xí)編譯原理需要的背景知識(shí)很多,可以說(shuō)這門課是對(duì)學(xué)生前階段計(jì)算機(jī)知識(shí)的一次大檢閱。無(wú)論從課程的理論性還是實(shí)踐性來(lái)看,要求都是非常高的。對(duì)于這樣一門難度極高的課程,需要教師和學(xué)生經(jīng)?;?dòng)交流,及時(shí)了解學(xué)生在學(xué)習(xí)中遇到的難點(diǎn)并給予解答。
那么,如何保證教學(xué)質(zhì)量?一方面,教師需要花費(fèi)更多的心思去琢磨教材,思考采取何種形式的教學(xué)方式使學(xué)生更容易理解;另一方面,需要采取合適的方式,盡可能地了解學(xué)生的學(xué)習(xí)情況,及時(shí)對(duì)他們課后的學(xué)習(xí)進(jìn)行引導(dǎo)。事實(shí)證明,在很多情況下后者相對(duì)于前者更顯重要。隨著Internet的發(fā)展,網(wǎng)絡(luò)社區(qū)和社交平臺(tái)的使用在學(xué)生中非常普遍。如果為學(xué)生在課后提供一個(gè)學(xué)習(xí)材料和信息非常豐富的網(wǎng)絡(luò)社區(qū),讓大家在這個(gè)平臺(tái)上積極討論,能有益于解決學(xué)習(xí)中普遍存在的難點(diǎn)問(wèn)題。筆者與同事結(jié)合多年的教學(xué)經(jīng)驗(yàn),在本文中對(duì)此做了一些總結(jié)。
1.“項(xiàng)目開發(fā)式”授課
傳統(tǒng)的教學(xué)體系中,無(wú)論采用“龍書”“虎書”“鯨書”“陳火旺”版,或是其他版本的教材,編譯原理課程的教學(xué)主干基本是相同的,比如詞法分析、語(yǔ)法分析、語(yǔ)義分析和中間代碼的產(chǎn)生、屬性文法與語(yǔ)法制導(dǎo)翻譯、運(yùn)行時(shí)存儲(chǔ)空間的組織和管理、代碼生成、代碼優(yōu)化等。編譯原理是一門綜合性和實(shí)戰(zhàn)性非常強(qiáng)的課程,如果教師僅僅是把所有的主干內(nèi)容在課堂上講完,通常來(lái)說(shuō)效果不會(huì)太好。學(xué)習(xí)編譯原理的學(xué)生在之前的學(xué)習(xí)中已經(jīng)練了很長(zhǎng)時(shí)間的基本功,如果到了這門課程我們還是強(qiáng)調(diào)基本功練習(xí),就失去了這門綜合課程的意義。根據(jù)課后調(diào)查,很多學(xué)生根本不知道編譯原理的知識(shí)除了做高級(jí)語(yǔ)言到低級(jí)語(yǔ)言的翻譯器以外還能干什么。由于今后從事與編譯器相關(guān)工作的人數(shù)畢竟不會(huì)很多,很多學(xué)生因此認(rèn)為本課程沒(méi)什么大不了。如果讓學(xué)生能夠在本門課中得到專業(yè)能力的綜合提高,效果就大不一樣了。
1.1“軟件工程”框架
1477dc8b7e1e4287f90df0db0abfe414筆者認(rèn)為,教學(xué)內(nèi)容的選取應(yīng)強(qiáng)調(diào)對(duì)編譯原理和技術(shù)的宏觀把握以及觸類旁通的綜合運(yùn)用,教學(xué)中突出主要框架,避免把學(xué)生的注意力分散到一些細(xì)節(jié)的算法和過(guò)程上。整個(gè)教學(xué)過(guò)程的主要部分可以按照軟件工程中的步驟對(duì)各個(gè)部分逐步求精,讓Top Down的思想在教學(xué)過(guò)程中起到把握全局的作用。具體說(shuō)來(lái),可以按照軟件工程里需求、設(shè)計(jì)、編碼、測(cè)試等幾個(gè)主要步驟來(lái)組織教學(xué)內(nèi)容。
(1)需求分析階段:教師幫助學(xué)生分析將要處理的任務(wù),然后對(duì)任務(wù)進(jìn)行詳講,制定出完成任務(wù)的方法和步驟。
(2)任務(wù)的設(shè)計(jì)階段:教師需要對(duì)教材進(jìn)行深入的分析,對(duì)每一章節(jié)的知識(shí)點(diǎn)有明確的把握,根據(jù)教學(xué)目標(biāo)、教學(xué)重難點(diǎn)和學(xué)生的實(shí)際學(xué)習(xí)情況來(lái)設(shè)計(jì)任務(wù)。在這個(gè)環(huán)節(jié)中,教師對(duì)學(xué)生進(jìn)行分組,分配每個(gè)小組具體的任務(wù)并挑選出專人負(fù)責(zé),小組工作將嚴(yán)格按照設(shè)計(jì)的任務(wù)和進(jìn)度來(lái)進(jìn)行。學(xué)生對(duì)給定的任務(wù)需要詳細(xì)分析出具體知識(shí)點(diǎn),對(duì)于沒(méi)有學(xué)過(guò)的知識(shí)點(diǎn)可以通過(guò)教材預(yù)習(xí)一課堂聽講一課后討論等方式掌握,最終帶著任務(wù)在工程中加以應(yīng)用。
(3)編程實(shí)現(xiàn)階段:這個(gè)環(huán)節(jié)直接關(guān)系到最終的教學(xué)效果。在任務(wù)實(shí)施之前,教師要對(duì)每組制定的計(jì)劃進(jìn)行檢查,及時(shí)糾正計(jì)劃中的錯(cuò)誤或漏洞,盡可能避免在任務(wù)實(shí)施過(guò)程中出現(xiàn)錯(cuò)誤。教學(xué)中,對(duì)于學(xué)生遇到的問(wèn)題和困難,教師不要急于告訴學(xué)生該如何做,而是通過(guò)適當(dāng)?shù)匾龑?dǎo)和指點(diǎn),鼓勵(lì)學(xué)生通過(guò)自己的努力找到解決問(wèn)題的方法。如果是普遍存在的共性問(wèn)題,教師則需要在全班統(tǒng)一指導(dǎo)和講解,從而確保任務(wù)的正常進(jìn)行。
(4)任務(wù)評(píng)價(jià)階段:學(xué)習(xí)過(guò)程是以任務(wù)為核心的,當(dāng)所布置的任務(wù)完成后,學(xué)生要學(xué)會(huì)如何及時(shí)評(píng)價(jià)自己的任務(wù)完成情況。自評(píng)、、組內(nèi)互評(píng)以及教師的綜合點(diǎn)評(píng)可以有機(jī)結(jié)合。通過(guò)評(píng)價(jià)訓(xùn)練,可以更深層次地加深對(duì)知識(shí)的把握。
1.2引用多領(lǐng)域?qū)嵗?/p>
編譯課程的目的在于讓學(xué)生系統(tǒng)地了解編譯程序設(shè)計(jì)的基本理論、編譯系統(tǒng)的結(jié)構(gòu)及編譯程序各部分的設(shè)計(jì)原理和實(shí)現(xiàn)技術(shù)。理想的結(jié)果是學(xué)生既能掌握編譯理論和編譯方法等方面的基本知識(shí),又具有設(shè)計(jì)、分析、實(shí)現(xiàn)和維護(hù)編譯程序等各方面的綜合能力。編譯原理理論知識(shí)包括形式語(yǔ)言、有窮自動(dòng)機(jī)理論等抽象內(nèi)容及大量的算法,較難理解和掌握。因此,深化學(xué)生對(duì)所學(xué)理論知識(shí)的理解,提高學(xué)生理論聯(lián)系實(shí)踐的能力和編程水平更顯重要。
教學(xué)中我們發(fā)現(xiàn),僅僅將書上的實(shí)例講給學(xué)生聽,學(xué)生并不好掌握,能運(yùn)用這些理論解決問(wèn)題的就更少了。如果在講完理論之后適當(dāng)引進(jìn)一些實(shí)例,例如:將狀態(tài)轉(zhuǎn)換圖在硬件設(shè)計(jì)中的應(yīng)用——設(shè)計(jì)狀態(tài)機(jī)模型介紹給學(xué)生,并給出相關(guān)學(xué)習(xí)資料和網(wǎng)站介紹,如此下來(lái),通過(guò)對(duì)狀態(tài)轉(zhuǎn)換圖的實(shí)例運(yùn)用,使得原來(lái)非常抽象的正則表達(dá)式概念學(xué)起來(lái)就具體多了。另外,由于Windows的普及以及微軟提供的強(qiáng)大技術(shù)支持,人們使用電腦非常方便了,但也使很多人誤認(rèn)為學(xué)計(jì)算機(jī)就是學(xué)Windows;甚至許多計(jì)算機(jī)專業(yè)的教學(xué)也都被局限在了Windows平臺(tái),一些教師也不愿意花過(guò)多的精力在其他的操作系統(tǒng)。坦白地說(shuō),Windows平臺(tái)雖然方便好用,但同時(shí)也阻止了初學(xué)者進(jìn)一步接觸操作系統(tǒng)的內(nèi)核,所以教學(xué)中不妨結(jié)合操作系統(tǒng)的內(nèi)容,引進(jìn)Linux的概念。學(xué)生在接觸了Linux操作系統(tǒng)之后,會(huì)發(fā)現(xiàn)Linux上的很多操作或表述都要用到正則表達(dá)式等相關(guān)知識(shí)。總之,學(xué)習(xí)編譯原理不僅僅在于讓學(xué)生掌握其本身的理論體系,更重要的是讓他們學(xué)會(huì)這些思維方式和方法去解決問(wèn)題,以及知道應(yīng)用前景。
2.編譯原理網(wǎng)絡(luò)社區(qū)的建設(shè)
上面說(shuō)的道理可能很多同行都已經(jīng)想到了,如何做到呢?尤其是教百人以上的合班課,建立專門的網(wǎng)絡(luò)社區(qū)對(duì)學(xué)生的理解程度進(jìn)行實(shí)時(shí)跟進(jìn)是個(gè)很好的選擇。此外,教學(xué)中我們還會(huì)收到這樣的反饋:很多學(xué)生聽老師講課似乎很明白,但自己轉(zhuǎn)述起來(lái)就很難。誠(chéng)然,在學(xué)生的理解過(guò)程中,會(huì)出現(xiàn)很多似懂非懂的問(wèn)題,討論是一個(gè)幫助達(dá)到透徹理解非常有效的方法。然而在課堂上甚至在課后教師也難以找出適合而充足的時(shí)間來(lái)組織這樣的討論。網(wǎng)絡(luò)社區(qū)可以有效地克服地域和時(shí)間上的困難,讓大家方便地交流意見和看法,教師也能及時(shí)發(fā)現(xiàn)問(wèn)題加以指導(dǎo)。
2.1分專題組成“聊天室”
不同的學(xué)生感覺到的學(xué)習(xí)困難不一樣。教師可以按不同的專題設(shè)立討論社區(qū),同時(shí)附上相關(guān)的課外材料、實(shí)驗(yàn)計(jì)劃和步驟,以及供參考的實(shí)驗(yàn)例程源代碼。好學(xué)的學(xué)生一般希望有機(jī)會(huì)表達(dá)自己的觀點(diǎn),教師可以引導(dǎo)他們發(fā)表自己的見解,激發(fā)其他同學(xué)的學(xué)習(xí)興趣。教師也要及時(shí)地對(duì)學(xué)生的留言進(jìn)行評(píng)議,進(jìn)行肯定和糾錯(cuò),使他們?cè)诩?lì)中主動(dòng)去思考,使學(xué)生由被動(dòng)學(xué)習(xí)變?yōu)橹鲃?dòng)學(xué)習(xí)。針對(duì)典型問(wèn)題,教師可以挑選出眾的學(xué)生到課堂上作簡(jiǎn)單的講解,讓他們自己制作PPT,鍛煉他們的語(yǔ)言組織和表達(dá)能力。學(xué)生闡述問(wèn)題的方式和語(yǔ)言雖然沒(méi)有教師那么精煉準(zhǔn)確,但往往能讓他們的同齡人更容易接受;另一方面,這種形式可以使學(xué)生明白網(wǎng)絡(luò)社區(qū)是和課堂緊密相連的,是課堂的延續(xù)。網(wǎng)絡(luò)社區(qū)的積極活動(dòng)很容易被量化,成為重要考評(píng)成分。
2.2課前問(wèn)題的提出和課后討論
這里分為課前和課后兩方面:教師在課前提出問(wèn)題,讓學(xué)生提前預(yù)習(xí)教材。編譯原理課程很多內(nèi)容乍一看會(huì)讓人一頭霧水,學(xué)生帶著問(wèn)題上課,效果要比教師直接灌輸好得多,這樣做既鍛煉了學(xué)生自學(xué)的能力,也提高了課堂效率。
課后討論可以集思廣益,面對(duì)同一個(gè)問(wèn)題,不同的學(xué)生有不同的解答方法,這樣不僅讓學(xué)生能從不同的角度去審視問(wèn)題,而且教師也可以在學(xué)生回答時(shí)發(fā)現(xiàn)不足,及時(shí)糾正錯(cuò)誤,同時(shí)也能讓教師打開思路給出一些更接近于學(xué)生的解釋和實(shí)例。如果單個(gè)學(xué)生對(duì)于問(wèn)題的深入有困難,可以以小組為單位進(jìn)行合作,這種合作學(xué)習(xí)的目的在于通過(guò)團(tuán)隊(duì)合作解決問(wèn)題,在此過(guò)程中培養(yǎng)學(xué)生創(chuàng)新精神,以及協(xié)同解決問(wèn)題的能力。
3.結(jié)語(yǔ)
編譯原理課程理論性較強(qiáng)、知識(shí)結(jié)構(gòu)復(fù)雜,學(xué)生普遍感到學(xué)起來(lái)困難。在多個(gè)班級(jí)同時(shí)授課時(shí),我們采用了以上的教學(xué)模式和技術(shù)措施,對(duì)2009級(jí)和2010級(jí)學(xué)生進(jìn)行了教學(xué)實(shí)驗(yàn)。不僅學(xué)生到課率較前幾屆明顯增加,而且在課程教學(xué)進(jìn)度剛剛過(guò)半時(shí),就有許多學(xué)生自己運(yùn)用C、C++或者Java實(shí)現(xiàn)簡(jiǎn)單的編譯器編寫。學(xué)生在整個(gè)課程的學(xué)習(xí)過(guò)程中,討論積極,互相講解,小組之間甚至自發(fā)出現(xiàn)了競(jìng)爭(zhēng)的好現(xiàn)象??偟恼f(shuō)來(lái),運(yùn)用新的教學(xué)方法在網(wǎng)絡(luò)社區(qū)的基礎(chǔ)上讓學(xué)生進(jìn)行課前課后的討論,改變了以往主要靠灌輸?shù)慕虒W(xué)模式,使多數(shù)學(xué)生參與到課堂教學(xué)中,從而讓整個(gè)學(xué)習(xí)過(guò)程變得主動(dòng)起來(lái),很大程度上激勵(lì)了學(xué)生的學(xué)習(xí)興趣,也使學(xué)生對(duì)知識(shí)的掌握更加清晰,逃課的學(xué)生明顯減少。從考試結(jié)果來(lái)看,不僅及格率明顯提高,高分人數(shù)也顯著增加,達(dá)到了編譯原理課程的教學(xué)目標(biāo)。