畢 冉,姚衛紅,任健康,劉 倩
(大連理工大學 計算機科學與技術學院,遼寧 大連 116024)
2016年6月2日國際工程聯盟大會全票通過了中國的轉正申請,中國成為國際本科工程學位互認協議的正式會員。以學生為中心、以產出為導向(outcome-based education, OBE)、持續改進是工程教育專業認證推行的三大教育理念。它主張根據社會和行業需求,逆向制訂專業培養目標,建立畢業能力達成度的評價體系,并將評價結果用于該專業培養的持續改進。OBE教育理念聚焦于工程背景,培養學生解決復雜工程問題的能力,其特點是強調學生的實際學習產出結果[1-2]。編譯原理是為計算機專業學生開設的專業必修課。通過本課程的學習,學生掌握編譯程序的構造體系和基本原理,課程致力于培養學生運用專業知識掌握編譯器的設計方法,奠定解決工程問題的基礎。該課程具有較強的理論性,課程涉及的數學模型較抽象,學生不易理解,學習熱情不高[3]。因此,編譯原理作為理論性和實踐性要求均較強的一門綜合課程,如何高效地組織理論教學內容,使學生奠定堅實的理論基礎,同時面向產出提高解決復雜工程問題的能力,是值得探討和解決的關鍵問題。
與中國工程教育認證通用標準全面對接,畢業要求應涵蓋工程知識、問題分析、設計/開發解決方法等12個方面。編譯原理課程是計算機專業的必修課程之一,所含內容既有抽象的數學問題,又有較強的理論支撐,涉及問題抽象、基礎理論、設計3個形態[4]?!熬幾g”是將高級語言描述的程序變換成與之等價的另一種語言(面向硬件)表達的程序,在編譯程序的設計與實現中,運用了很多計算機學科的基本技術、原理和方法[5]。綜上分析,在面向產出的教育模式中該課程主要支撐以下2個畢業要求。
(1)工程知識:能夠將數學知識、自然科學知識、工程基礎知識、計算機專業知識用于解決計算機科學與技術領域的復雜工程問題。
(2)問題分析:能夠應用數學、自然科學和工程科學的基本原理,識別、表達并通過文獻研究分析復雜計算機工程及其相關領域的問題,以獲得有效結論。
扎實的基礎理論和工程知識是解決復雜工程問題、保證畢業生研究潛力和創新能力的基礎。這2項通用畢業要求由專業課程、專業實踐課程和大類平臺課程等教學環節支撐,通過平時作業、書面考試或提交報告的形式考核,以2年為一個評價周期進行評價。具體畢業要求指標分解如下:
(1)能夠將數學與自然科學的基本概念運用到工程問題的恰當表述中(H)。
(2)能夠根據所學科學知識的基本原理識別和表達復雜計算機工程及其相關領域問題(M)。
(3)能夠正確表述一個工程問題解決方案并獲得有效結論(M)。
其中,H表示編譯原理課程對該指標點對應的畢業能力為高支撐;M表示該課程對該指標點對應的畢業能力為中支撐。
編譯原理課程的知識體系一般由詞法分析、語法分析、語義分析、中間代碼生成、代碼優化、目標代碼生產以及存儲空間管理和錯誤處理幾個章節組成。上述章節中,最難理解的部分是詞法分析和語法分析。該課程的各部分內容抽象繁雜,理論性較強,導致學生對該課程缺乏信心,降低了學習興趣[6-7]。在課程實踐過程中,學生感覺其中的原理晦澀難懂,不知為何而學、不知用于何處等,很難找到相應的實驗項目進一步關聯和理解。針對上述問題,可以進行如下幾方面的改革。
1)理論課程定位。
課程教學目標為:學生通過本課程學習編譯原理基礎知識和基本理論知識,掌握扎實的本專業基礎知識和基本理論知識,對應畢業要求(1);掌握程序變換基本概念、問題描述和處理方法,培養“問題、形式化描述、計算機化”問題求解典型過程,培養計算思維能力[4],對應畢業要求(2);理解并熟練掌握詞法分析程序的數學模型—有窮狀態自動機的設計技術,掌握自頂向下及自底向上的語法分析方法,理解語法制導翻譯的實現思想,并具有設計、實現、分析和維護編譯程序等方面的能力,對應畢業要求(3)。最終配合實驗,使學生具有能夠簡單設計編譯程序的能力。在系統級上再認識程序和算法,提升計算機問題求解的水平,增強系統能力,體驗實現自動計算的樂趣。
2)實驗課程定位與項目設計。
與理論教學緊密結合,學生通過實驗教學訓練,加深對理論知識的進一步理解,把抽象的知識轉化為與實際相結合的具體運用,使學生能夠掌握一些常用詞法分析和語法分析的基本設計方法,提高學生的實際動手能力、分析問題和解決問題的能力。主要實驗項目設計如下:
(1)掌握文法及其所描述的語言(源語言定義)。
(2)對PL/0語言或自定義語言(如C—子集)完成詞法分析器,主要包括編制一個能夠分析數字、標識符、主要運算符和主要關鍵字的詞法分析程序。有能力的學生可適當擴充語言定義,如增加數據類型、增加for語句、增加函數調用等。
(3)掌握計算機語言的語法分析程序設計(與屬性文法)的實現方法,設計實現一個能進行語法分析(并生成三地址代碼,如四元式碼)的編譯程序。
(4)掌握解釋程序的實現方法,設計中間代碼解釋器,實現一個能對前述所生成的中間代碼進行解釋執行的程序。
(5)書寫實驗報告,并給出正確和錯誤的測試用例。
目前編譯原理教學效果的評價主要由兩部分組成:一是學生的考試,考試成績由平時作業成績、測驗成績以及期末考試成績組成,這是對學生成績的評定;二是教務處組織的對教師教學效果的評價。此外,還應建立以產出為導向的課程目標達成度評價,根據每年的達成度結果對課程進行適當調整。編譯原理為計算機科學與技術的專業基礎類課程,對應畢業要求的指標點分別為(1)、(2)和(3)。其中,(1)是對畢業能力的強支撐,(2)和(3)是對畢業能力的中支撐,以試卷、作業和平時測驗作為評價依據,以學期考試作為評價方式,以課堂講授、課后作業和學期考試作為達成途徑。近兩年考題與畢業能力達成關系見表1。
近兩年的課程達成度見圖1,在進行達成度評價過程中,經分析發現存在的問題是:目標(1)相關的工程基礎知識掌握較好,而(2)相關的問題表達能力和(3)相關的復雜計算機工程解決能力較弱。
該課程是偏理論的計算機專業基礎課,教學方式有別于一般課程,學生需要一定的適應期。目前的理論課程和實驗課程的內容設置與最新的學科發展和學生能力培養目標不適應,主要體現在:①注重原理性的知識,缺乏工程性的方法;②注重分析式的教學,缺乏系統性的實踐與創新。鑒于2015年的達成度指標,2016年秋季學期開始著力解決以上問題,主要采取了如下途徑:在教學模式上,提出了面向工程的編譯原理教學模式,構思“工程牽引—問題驅動—分析引入—學用結合”教學法,建立“應用—問題—分析—歸納”的教學模式。

表1 近兩年考題與畢業能力達成關系表

圖1 近兩年考題與畢業能力達成度對比圖示
實現問題牽引式教學,改變重理論弱應用、重分析少歸納的狀況,提升學生對問題的抽象能力和分析能力。例如,在引入NFA(不確定的有窮自動機)實例時,為學生講解NFA是如何識別非負偶整數的。對于給定的整數,圖2給出的NFA似乎具有“智能”,對于給定的非負偶數,給出的NFA總能“自適應地”找到到達終態的路徑。然而,這種智能導致不能夠依據NFA設計確定的程序實現非負偶數的識別。NFA的不確定性使FA的設計變得簡單,然而這種不確定性導致NFA的程序化變得不可能。因此,要將NFA確定化,轉化為與其等價的DFA。最終,根據DFA設計能夠識別非負偶數的算法并實現。在講解DFA時,會通過更多的實例引導學生發現每個DFA都對應一個確定的算法,可用于解決一類問題。問題牽引教學方式能夠激發學生的學習熱情,提升自我思考的能力,使學生發現自動計算的樂趣。

圖2 識別非負偶整數NFA圖示
例如,在LR文法分析引入過程中,可以先給出指定語句的語法分析樹;其次,在語法樹上給出LR分析的過程,逐步引導學生發現LR分析的本質,即找到句柄,最后,在當前語法樹上標記出何為最左直接短語(句柄)。這種以實例為引入的教學方式使學生從被動接受轉變為主動思考,提高創新和問題解決能力[6]。此外,在課堂作業中適當增加工程實際問題的討論與分析,能提升學生對課程的學習熱情。
基于產出為導向的教育模式對編譯原理教學提出了更高的要求,引起了對課程教學和考核評估的新思考。首先,需要根據專業畢業要求對課程的教學目標進行分解。其次,根據平時作業成績、課堂表現、測驗成績、期末考試成績以及實踐課程的完成情況制定課程目標達成度評價體系,根據達成度情況對課程的講授進行調整。OBE教育模式是一種教育范式的革新,希望本文給出的教學方法和評價指標為高校的編譯原理課程的教學提供一些借鑒。下一步希望能根據畢業生反饋和企業反饋給出更全面的課程目標達成度評價方法。