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