孫守卿



摘要:針對工程教育專認證中關于“復雜工程問題”的培養要求,對計算機類專業的基礎核心課程《編譯原理》的課程標準、教學內容及實驗實踐內容、教學模式、考核形式等進行了相應的改革。通過改革,使得學生的理論知識掌握更加扎實,培養了學生解決復雜工程問題能力。
關鍵詞:工程教育認證;復雜工程問題;產出導向;持續改進
中圖分類號:G642 文獻標識碼:A
文章編號:1009-3044(2019129-0104-03
2016年6月2日,我國正式加人《華盛頓協議》,這是中國高等教育具有里程碑意義的事情?!度A盛頓協議》(Washing-ton Accord,WA)是以培養專業工程師為主要目標的本科工程學位國際工程師互認協議?!耙詫W生為中心”“產出導向(OBE)”“持續改進”是其核心理念。根據協議,我國《工程教育專業認證標準》給出12條畢業時必須達到能力標準。在計算機專業課程支撐畢業要求指標點課程矩陣中,《編譯原理》課程需要支撐指標點1-3、指標點2.3,指標點4.1。為了使課程能夠很好地支撐畢業要求,需要對該課程從課程標準到教學模式、考核方式等方面進行改革。
1修訂課程標準
2014級之前的課程標準不具有針對性,考核內容中對實踐的難度和復雜程度不高。這樣導致學生對理論知識的認識和理解程度不深,很多學生學完了《編譯原理》之后,對編譯原理的認識還停留在有限自動機、算符優先語法分析等比較初級、片面的知識點上。學生不僅不會寫編譯程序,更不會運用形式化的理論對復雜問題進行抽象建模及解決復雜工程問題。
為了能更好地滿足專業認證對學生素質的培養要求,完成課程支撐的畢業要求指標點,對《編譯原理》課程標準做了如下修改:
1)掌握程序設計語言語法描述、編譯程序的詞法分析、語法分析、語法制導翻譯和中間代碼生成、代碼優化、目標代碼生成等基本知識。通過本課程的學習,使學生掌握計算機專業知識并能對計算機軟硬件系統的設計方案和模型進行推理和驗證。(支持畢業要求1.3)
2)使學生掌握實現編譯程序的具體編程技術;在進行一般程序設計時,知道怎樣寫出安全、可靠、高效的代碼。培養學生能夠應用專業知識進行問題分析,通過實驗、推理等方法,驗證解決方案的合理性,得到有效結論。(支持畢業要求2.3)
3)加深學生對程序設計語言的理解,培養學生設計、分析和實現中大型軟件的初步能力,從而培養學生能夠針對計算機復雜工程問題的關鍵因素,基于科學原理制定實驗目標和方法,設計實驗方案,進一步提升學生的計算機專業素養。
通過對課程標準的修訂,使得課程的教學內容更加精煉,教學內容不再是單純的講授知識原理,而是側重對學生計算思維的訓練,進而培養學生解決復雜問題的能力。
2利用網絡教學平臺進行教學模式的改革
工程教育專業認證要求大學教育“以學生為中心”和“產出導向”,因此,原有的封閉式的、以教師為中心的、單純依靠PPT+書本進行知識講授的教學模式已經不足以滿足教學需要。在《編譯原理》授課過程中,采用混合式教學模式,充分發揮網絡教學平臺的優勢,從教學活動的組織、學生的管理、課程學習資源的共享等各方面對《編譯原理》課程進行了更全面的課程信息化建設。
1)使用導學清單,組織學生預習
針對編譯原理課程難度大,知識概念多,內容抽象,算法復雜等特點。在課程講授之前,教師根據課程內容制定導學清單供學生預習。本課程對語言及文法、詞法分析、語法分析樹等抽象性高的知識點分別制定了導學清單,通過導學清單,學生可以通過對課程資料的準備、提前閱讀對課程的內容有了一個初步的了解,同時也對未知的知識有了探究的興趣。如:通過語言及文法導學清單中的問題,以學生熟知的英語、漢語等自然語言為例,將字母、漢字、單詞與C程序設計語言中的關鍵詞、標識符、if語句聯系在一起,啟發學生思考,引導學生把抽象的形式語言中的文法和自然語言中的語法進行對比、聯想,激發學生對課程學習的積極性。
2)豐富課程學習資源
通過進一步豐富課程資源,使課程的學習資源多樣化、系統化。拓寬學生自主學習的渠道。在課程資源里,除了有來自斯坦福大學計算機科學系的編譯原理課程視頻資料,也有來自國防科技大學的經典慕課資源。同時,也有課程組老師自己錄制的課程資源。針對一些難度大的算法,還有專門錄制的長度為5-10分鐘的微課視頻。
通過課件、微視頻、在線課程等多種形式的課程內容呈現,學生可以課下,根據自身情況自主復習、重點難點知識。
網絡教學平臺的使用提高了學生自主學習的能力,使得對課程的學習更加靈活、自主。
3)組織學生翻轉課堂
改變過去授課過程中,教師對所有的知識點一講到底、面面俱到的教學模式。對算符優先分析、LALR(1)分析算法等進階性的知識點,采用教師指導、學生分組討論學習的方式進行。通過已有的知識作為載體,培養學生自己根據形式化的文法構建有限自動機模型,實現相應的算法。
4)活躍在線答疑討論區
在線答疑討論區使得師生之間的互動和討論延續到課下。使得傳統課堂的單向知識流動變為師生之間的雙向流動,在課堂的答疑討論區,學生分別把自己對課程的疑問,學習中出現的錯誤進行分享討論,課堂的開放程度得到了擴大。
通過教師及時回復學生自主學習中的問題,保證了學生能夠按時完成自主學習任務。在知識反饋過程中,教師也可以及時收集到學生知識的困惑區,在課堂上有針對性的講解。課堂進入良性循環。
5)在線測試鞏固知識
在學期中,對課程的每個章節分別組織在線測試和隨堂測試,完成對課程知識點的階段性鞏固。如,對于非確定性自動機的確定化算法、確定性有限自動機的化簡算法進行強化考核。通過時間為10-15分鐘的小測形式,學生及時發現學習的不足,增強學習的動力。
3ACM在線測試平臺進行實驗測試
原有的編譯課程實驗基本上都上驗證性實驗。學生只是簡單完成算法的編寫,并未理解不同的語法分析算法之間的性能區別等。通過ACM進行實驗,將《編譯原理》課程的實驗根據課程進度進行了有層次的安排,實驗項目之間難度由淺入深,只有學生掌握了詞法分析,才可以進行語法分析算法的實現,進而編寫語義分析和中間代碼生成的實驗,通過ACM平臺,學生可以直接得到實驗結果,看見代碼體積,程序運行時間、耗費內存等算法效率的分析數據??梢詫Σ煌乃惴▽崿F的優劣性進行直觀的比較和分析,加深對算法的理解。
通過將編譯程序分解成若干子程序、子問題。學生在這個過程中逐步掌握了復雜問題的分解能力,提高了解決復雜問題的能力。
4項目考核——小C語言編譯器的設計
根據工程教育專業認證產出導向的教育理念,從培養學生解決分析復雜工程問題的能力這個教學目標出發,在課程考核過程中添加了小c語言編譯器設計這個環節。
小C程序抽取了C語言部分有代表性的語法,要求學生以小組為單位,從軟件工程的角度出發,分階段完成以下任務:
(1)進行需求分析:從全局性出發,對項目應實現的功能及技術可行性進行分析;
(2)采用形式語言建模:用正規文法及上下文無關文法描述小C語言的詞法及語法;
(3)獨立完成一個小型C語言編譯器(要求至少包含詞法分析、語法分析、語義分析及中間代碼生成功能);
(4)測試;完成功能測試及性能測試分析;
(5)文檔書寫整理:格式規范;
(61項目答辯;學生需對整個項目的情況進行陳述,如:團隊內任務的分工、貢獻度、項目的創新點,具體的技術實現等。
小C編譯器的設計及實現具有一定的復雜性學生需要綜合考慮很多系統性、全局性的問題。
在項目驅動下,學生集思廣益,自發選出項目組長。并根據學習能力和個人意愿,分派和承擔不同的任務。每個小組就像一個IT項目團隊一樣,每個人扮演不同的角色。學生們互幫互助,共同發揮各自的優點。在這個過程中,學生都能綜合利用數據結構、操作系統、計算機硬件基礎、軟件工程等專業知識完成該項目。
5結果反饋
通過對16級計科卓越(01-04班)實施該改革,學生的成績分布如表1,表2所示:
根據學生的在線測試、ACM實驗成績、分組小c語言的編譯器設計成績的畢業要求指標點達成度情況如表4所示。
通過對學生成績分析可以看出,《編譯原理》課程對工程教育專業認證要求支撐的指標點達成度較好。但是,對于指標點2-3的達成度低于其他兩項。這個主要反映在學生分組完成小C語言編譯器設計時,對于目標代碼生成及寄存器分配這個功能,很多小組完成度不夠好。很多學生反饋說由于對計算機體系結構不夠了解,對匯編語言掌握程度不熟練,所以,盡管學生了解了寄存器的分配算法,但是還是不能很好地完成該設計。
6總結與改進
根據工程教育認證的“持續改進”的理念,根據學生的成績反饋,在《編譯原理》課程的后續改革中,我們將繼續加強對學生工程實踐能力的訓練,使得學生不僅能很好地掌握編譯的原理,更能掌握編譯的技術,從而滿足行業對人才的要求。