


摘要:在分析近年來計算機及相關專業的編譯原理課程的教學方法和模式的改革方案的基礎上。提出“以編譯原理知識為體、以計算思維和工程能力為翼”的“一體兩翼式”的面向物聯網工程專業的新課程教學模式,闡述這種模式在編譯原理課程中的實施過程及實施效果。
關鍵詞:編譯原理;物聯網工程;教學模式;一體兩翼式教學
0.引言
教育部高教司于2012年初啟動實施了“十二五”專業綜合改革試點項目。江蘇大學的物聯網工程專業有幸得到該項目的資助,并于2012年的下半年啟動。該試點專業建設的基本出發點包括辦學定位、學科特色和服務面向3個方面。在辦學定位方面,主要是培養兼具“計算思維”和“工程能力”的物聯網專業卓越人才;在學科特色方面,主要是以優勢學科支持物聯網專業跨學科人才的培養;在服務面向方面,主要是面向長三角地區經濟發展中行業物聯網人才的需求。為了響應教育部“十二五”專業綜合改革的號召,并緊跟江蘇大學物聯網工程專業綜合改革的步伐,筆者將探索面向物聯網工程專業的編譯原理課程教學新模式,即一體兩翼模式。
一體兩翼教學模式是指給物聯網專業人才裝上“計算思維”和“工程能力”這一對有力的翅膀,使他們向“卓越”飛翔。多年來我國的教學和工程實踐均表明,項目應用中的“工程能力”和創新解決問題的“思維能力”,是卓越人才必須依賴的一對翅膀。翅膀的深度和廣度將決定人才離開學校后發展的高度。因此,此次面向物聯網工程專業的編譯原理課程教學新模式的初探,就是要從實踐中摸索一套以“編譯原理專業知識為體、以計算思維和工程能力為翼”的“一體兩翼式”編譯原理課程教學新模式。
1.研究現狀
近年來,國內外各大學從編譯原理課程的教學內容、教學方式、教學手段以及實踐教學環節制訂等多個方面對這門理論性和工程性較強的課程進行深入的研究和探討,并發表了大量的教改論文。
以加州Berkeley大學和佐治亞理工學院為代表的國內外計算機領域專家和學者對編譯原理課程改革這一問題進行了深入思考,并提出了一系列的教學改革方案,歸納起來有以下3點:
(1)明確了編譯原理課程教學對象的變化,即從面向編譯器設計專家轉變為面向一般性軟件專家。Berkeley大學的Rastislav Bodik在文獻中明確表示,編譯原理課程的教學內容已經從主要集中于后端優化等最新技術,向更加重視前端分析器設計的方向轉變。
(2)設計新型的實驗型編譯器和小型語言,以盡量滿足不同領域教學對象的需求。如采用DSL等專用語言,以提高學生對編譯實際應用的理解與動手能力。
(3)基于云平臺完成編譯課程的實驗和課程設計。這種方法使學生不再受開放環境、上機時間和地點的限制,可以更方便快捷地掌握編譯技術的內容,并極大地提高學生的工程能力。
此外,國內編譯原理課程的權威專家何炎祥教授提出了基于人本主義的教學新模式,是以學生為主、師生互動的全新教學模式,即明確指出教師的任務不是教學生學習知識,也不是教學生如何學習,而是為學生提供各種學習資源,提供一種促進學習的氣氛,讓學生自己決定如何學習。王強提出形象化的教學方法,即通過多媒體的形式向學生演示復雜的算法過程。徐振強提出研討式教學模式,這種教學模式注重師生互動和主動學習。衷璐潔以引導式、實例化的真實業界編譯器GCC來開展教學。該教學模式是一種與“概念-理論-應用”的傳統教學模式完全相反的教學模式,它的教學思路是“案例一理論一概念”。柴艷妹提出除了具備必要的知識與信息獲取能力、基本學科能力和團隊合作能力外,通過編譯原理課程的教學還應鍛煉學生的抽象、發散、創新思維及動手能力。
通過跟蹤最新的國內外有關編譯技術教學改革的成果,發現當前的教學方法、教學理論以及教學模式的改革所采用的方法和手段不具有針對性,上述方法和手段同樣適用于其他學科,包括文科專業。鑒于此,如何針對物聯網工程專業人才的培養目標,為其量體裁衣,提出有針對性的、目的性較強的編譯原理課程教學方法和教學模式的改革思路是具有挑戰性的課題。
要想真正理清編譯原理課程在物聯網工程專業教學中的位置和需要進行的改革,必須尋找高水平物聯網工程專業人才培養的客觀規律,并據此對現有的編譯原理課程的目標、內容和方法進行創新和完善。下面以此為線索,對編譯課程的“一體兩翼式”創新教學體系結構進行探討和思考。
2.一體兩翼式的教學模式
面向物聯網工程專業的編譯原理課程一體兩翼教學模式體系結構見圖1。以培養物聯網工程專業人才為目標,圍繞這個需求和目標設計編譯原理課程的一體兩翼教學新模式。那么,面向物聯網工程專業的編譯原理課程教學新模式就是“一體兩翼”教學體系結構的主體,而計算思維和工程能力就是該體系結構的兩翼。在編譯原理課程中,培養學生計算思維的核心是喬姆斯基在1959年提出的形式語言與自動機,其中包括形式語言的基本概念(元語言、符號串和產生式等)、形式語言的描述(巴科斯范式、文法和語義等)及其識別系統——自動機(有窮自動機、下推自動機和圖靈機等);培養學生工程能力的核心內容是設計與實現嵌入型的小型編譯器,比如在傳感器節點上設計與實現基于nesC語言的小型編譯器。
在該體系結構中,計算思維和工程能力這對有力的翅膀決定了學生通過編譯原理課程的學習到底能飛多高、飛多遠,同時也決定了此次編譯原理教學模式改革的成敗。要特別說明的是,計算思維和工程能力這對翅膀不是相互獨立的,而是相互依賴、相互支撐的關系,缺一不可。僅掌握計算思維,而不具備工程能力的學生在就業和升學時,會被冠以動手能力不強而被企業和高校面試所淘汰;僅具備簡單的編碼能力,而不具備計算思維的學生,在整個金字塔式的產業鏈中,永遠只能做最底層的碼農,沒有上升的空間。因此,如何通過編譯原理課程的改革使學生擁有這對有力的翅膀是本次教學改革成敗的關鍵。
3.一體兩翼式教學在編譯原理課程中的實施
3.1一體兩翼在理論教學中的實施
在理論教學環節,一體兩翼式教學模式的重點在于培養學生的計算思維能力。掌握這種技能的學生通常能夠解決工程中遇到的實際技術難題。具體實施策略如下:
1)“1-3-4-2”課堂組織形式。
在我們看來,教學不僅是教師的舞臺,同時也是學生學習知識、提高技能并展現自我的舞臺。因此,提出“1-3-4-2”課堂組織形式,它指的是課堂教學時間的分配及在該階段時間內教師和學生應該共同完成的授課和學習任務。其中,“1”指復習上次課所學內容的時間,以50分鐘的授課時間為例,大約就是5分鐘。在這5分鐘的時間里,選2-3位學生回答上次課程所講述內容的相關問題,主要目的是幫助學生回憶上次課程所學內容,把握學生對課程所學內容的掌握情況;“3”指留給學生在本次授課過程中要學內容的預習時間,大約15分鐘。在這15分鐘內,學生要按照教師的要求完成對本次授課內容的自學,以達到熟悉本次課程內容要用到的符號系統,并提高自學能力的效果;“4”指教師的授課時間,用于講述本次課程的重難點,大約20分鐘。在這段時間內,學生可以重點學習自己在預習時看不明白的地方,學生學習和教師授課都更具針對性;“2”指學生和教師的探討時間、學生的練習時間及答疑時間,大約10分鐘。在這10分鐘內,主要達到所有學生當堂問題當堂解決的效果。
2)綜合運用多元授課方式。
針對編譯原理課程在不同階段的不同授課內容,綜合運用多元授課方式,包括實例化教學、演示教學、啟發式教學及任務驅動教學。下面逐一進行說明。
(1)實例化教學:源于哈佛大學的案例教學法,其含義是采用與傳統教學的“概念一理論一應用”模式完全相反的教學模式,即“案例一理論一概念”的模式。由于LR(0)和SLR(1)語法分析器的算法描述比較抽象,按照傳統的教學方法,初學者往往有聽天書的感覺,同時,教師授課也同樣困難,鑒于此,我們就采用了實例化教學方法。首先拋開抽象的概念和理論,在學生已掌握有限自動機這一知識的基礎上,用通俗的語言和動畫演示的方法講述拓廣文法的生成、活前綴自動機的構造、SLR(1)分析表的生成及如何使用分析表來分析一個句子是否符合語言的語法。之后,在學生具備了感性認識的基礎上,開始講述“項目”、“活前綴”、項目集的閉包、GO狀態函數這些抽象的概念。最后,講述構造SLR(1)分析表的算法。
(2)演示教學:是一種直觀的教學方法,主要用于建立學生的感性認知和對抽象理論可行性的感知。該方法通常用在抽象難懂內容的授課中。在這里,我們將PPT的演示動畫和事先編寫好的編譯系統作為演示的內容,通常將其穿插在授課之始和之末。把這段演示內容放在授課之始,目的是建立學生的感性認知,看得見摸得著的東西往往比抽象理論的講解更容易引起學生的興趣,激發他們學習本次課程的內在動力,這一點是非常重要的;把這段演示內容放在授課之末,目的是在學習完抽象的理論后,給學生以信心,告訴他們這些理論并不是空洞的、無用的,而是實實在在可行、可實現的。圖2所示是一個簡單的編譯演示系統,包括詞法分析、語法分析、語義分析和中間代碼生成等功能。而圖3是圖2中IF條件語句的詞法分析結果。
(3)啟發式教學:此教學方法在強調傳授知識的同時重視學生能力的培養及非智力因素的發展。它把學生真正置于主動者位置,充分調動學生的積極性,激發學生的內在動力。由于本課程理論性較強,概念原理較多,所以充分激發學生的積極性顯得尤為重要。這里仍以自底向上的LR語法分析為例進行說明。LR語法分析包括LR(0)、SLR(1)、LR(1)以及LALR語法分析方法。若教師不加區分、割裂地去講述上述內容,會給學生的學習帶來額外的負擔。其中上述內容之間的關系緊密,這里可以采用啟發式教學方法,即首先詳細地講述LR(0)分析方法,因為它是其他LR語法分析方法的基礎。然后,舉一個算術表達式文法的例子,讓學生用LR(0)分析方法對其進行分析,結果學生會發現自己所構造的LR(0)分析表存在沖突。這就迫使他們主動尋求解決該沖突的方案。此時,在教師的指導下,學生發現用求非終結符的集和集的方法可以解決LR(0)分析表構造中存在的沖突問題。這樣,便掌握了SLR(1)語法分析方法。之后,按照這種方式,學生可以輕松地掌握LR(1)及LALR語法分析方法。
(4)任務驅動教學:是將要學習的新知識隱含在一個或幾個任務中,學生通過對任務進行分析、討論,明確涉及的知識,并找出新知識,然后在教師的指導幫助下找出解決問題的方法,在完成任務的同時培養學生分析問題、解決問題的能力。在“語義分析和中間代碼生成”章節的講述中,我們采用了任務驅動教學。這是因為語義分析不像詞法分析和語法分析那樣可以分別用正規文法和上下文無關文法描述。語義是上下文有關的,因此語義的形式化描述是非常困難的。以這一挑戰問題為任務,引導學生找出解決語義分析的方案,即利用語法制導翻譯來實現語義分析。這種語義分析方法首先為每個產生式添加語義動作,即語義子程序。然后,在語法分析的同時,同步調用語義子程序,那么,在完成語法分析時,也就實現了語義分析。這種方法避免了對語義進行形式化描述這一難題,在已有成熟方法和理論的基礎上,通過擴展語義棧,巧妙地解決了該技術難題。
3.2一體兩翼在實踐教學中的實施
在實踐教學環節,一體兩翼教學模式的重點在于培養學生的工程實踐能力。掌握這種技能的學生通常能夠將模型轉換成系統,完成系統的落地。具體實施策略如下:
1)上機實驗。
結合理論教學,在學習相關章節的理論內容后,即可進行上機實驗。例如,在完成詞法分析章節內容的學習后,即可讓學生進行詞法分析的上機實驗。實驗內容設置應與課堂教學內容一致,實驗目標明確,并給出具體的測試用例和實驗結果供學生參考。
2)課程設計。
課程設計的目的是讓學生在完成設計的同時,加深對所學內容的理解深度,提高動手實踐能力。課程設計的內容涵蓋詞法分析、語法分析、語義分析與中間代碼生成、代碼優化、符號表與錯誤處理等內容。區別于其他計算機專業的編譯原理課程設計,我們采用面向無線傳感器節點的通用編程語言nesC作為嵌入型編譯器的開發語言實現上述功能。鑒于傳感器節點的資源有限,我們首先在計算機上建立交叉編譯環境,然后在交叉編譯環境下完成基于nesC的編譯器開發。之后,將編譯成功的代碼移植到Mica2傳感器節點上。最后,再在Mica2傳感器節點實現其上層應用系統的編譯。
4.教學改革成效
我們對2011級物聯網專業本科學生運用了一體兩翼教學法。在課程結束后,讓49名學生在網上進行了匿名的教學質量評價,結果表明一體兩翼教學法教學效果明顯好于傳統的按章節授課的單一教學模式。表1所示是從授課內容條理清晰、重點突出、課堂氣氛活躍、教學內容充實、能夠激發學生興趣、啟迪學生思維、授課內容能夠實現理論聯系實際、培養學生綜合能力等方面進行的教學效果對比分析,其中的數據來源于江蘇大學教務管理系統。
通過對表1中的數據進行對比分析可知,一體兩翼教學模式在各方面都明顯優于傳統的單一教學模式,特別是在激發興趣、啟迪學生思維、培養學生理論聯系實際的能力、計算思維能力和工程能力方面,93%以上的學生都表示滿意。
5.結語
筆者針對物聯網專業人才的培養需求,提出基于一體兩翼新教學模式的編譯原理課程改革方案。一體兩翼新教學模式重在激發學生的興趣。培養學生理論聯系實際的能力、計算思維能力和工程實踐能力。通過匿名式的網上問卷調查發現,絕大部分學生認同一體兩翼新教學模式更有利于他們掌握基本理論和基本技能,提高理論聯系實際及工程實踐能力的觀點。他們普遍反映在面對實際項目時,不再有手足無措之感,總能夠將大而難的問題分解為多個可以實現的小問題,并將其一一擊破。教師們也普遍反映一體兩翼新教學模式使教學質量和教學效果有了明顯的提升。匿名調查結果達到了預期目標。
然而,通過問卷調查還發現編譯原理課程改革中仍存在一些問題,如講述重點還不夠突出等。因此,在教案中還需要加入一些通俗易懂、便于學生理解的案例作為引子。今后的工作是將教學內容重新梳理,使得教學重難點更加突出。