

摘要:筆者結合目前計算機專業本科核心課程教與學的實際情況,提出以編譯課程為切入點,在教學過程中加強與其他課程之間的聯系,實現計算機專業知識的滲透與融合。重點分析了以編譯課程為切入點,強化計算機專業知識融會貫通的必要性和可能性,并給出了編譯課程教學的幾點建議。
關鍵詞:編譯原理;專業知識;核心課程;專業素養
“編譯原理”、“操作系統”和“計算機體系結構”是計算機專業的三門核心課程,在計算機科學的教學體系中占有重要地位。學生對于這三門課程的掌握程度在一定程度上反映了他們對計算機專業知識的掌握情況;進一步講,能否確切理解編譯程序、操作系統和硬件系統之間的關聯及它們在計算機系統中的層次地位,直接反映了學生對專業知識的整體把握程度。遺憾的是,受限于目前的教學大綱和學時,這三門課程的教學很少涉及對相關課程的介紹和聯系,只注重課程自身教學內容的講解和分析,導致學生無法理解所學知識的應用背景,產生學無所用的想法。
由于編譯課程內容具有較強的理論性、邏輯性和實踐性,學生在學習過程中感到過于抽象和難以理解。編譯教學內容涉及到程序設計、操作系統和計算機系統結構等相關課程,掌握編譯技術有助于加深學生對整個計算機系統的理解[1]。目前,編譯課程的教學更多關注自身內容的講解和傳授,與其他課程橫向聯系的內容相對較少。許多學校雖然開設了實驗課及相應的課程設計,但只對編譯理論中的某些算法或編譯系統的某一階段功能進行單純的實現與驗證,缺少實際背景。另外,現行的編譯教材大部分都是從編譯技術本身的角度撰寫的,為的是讓學生掌握編譯的基
本理論與思想[2]。所有這些最終導致學生無法對高級語言程序設計每條指令的執行過程有清晰的認識和理解,因而不能實現專業知識的融會貫通。計算機專業的理論基礎對培養學生的計算機專業素養具有非常重要的作用[3],因此課程間封閉的教學方式不利于專業素養的培養和提高。
目前,這一現狀在短時間內很難改變。筆者認為應以編譯課程為切入點,在教學過程中加強相關課程的聯系,促進計算機專業知識的交叉融合。
1以編譯課程為切入點,強化專業知識融會貫通
編譯程序在計算機系統不同層次中處于核心地位,在程序設計及運行過程中起到橋梁和紐帶作用,因此應以編譯課程為切入點,促進專業知識的融合。按照教學大綱安排,學生入學后首先要學習程序設計的相關課程,進入高年級后,主要學習操作系統、計算機體系結構和編譯原理等核心專業課程,它們之間的關系如圖1所示。由圖1可以看出,編譯程序在從程序設計到程序運行產生輸出結果這一過程中處于核心地位,編譯系統對用程序設計語言編寫的源程序
進行編譯,編譯過程中會用到源語言自身的規范和庫程序,需要操作系統提供的庫程序和接口以及目標體系結構的相關信息生成可執行的二進制程序。可執行程序根據用戶的需要,由操作系統調度運行,并與下層的硬件系統產生密切的關系。為此,編譯課程的部分內容需要程序設計語言、操作系統和體系結構等課程作為支撐,這樣學生才能更好地理解計算機系統從軟件設計到程序執行的完整過程。
正是由于編譯系統在計算機系統中處于重要地位,以編譯課程為切入點,在教學過程中加強核心課程之間的橫向聯系,不僅有助于實現編譯課程抽象內容形象化,也有助于加強學生對整個計算機系統的認識。另外,隨著計算機系統結構的不斷發展與更新,嵌入式計算、并行計算與可重構計算系統逐漸得到發展和普及,這些都使編譯系統和計算機系統結構之間的關系變得比以往更加密切。一種新結構的出現需要新編譯系統的支持才能真正發揮作用,因此在編譯課程的教學中加強與其他課程的聯系,也是符合計算機系統發展的大趨勢。
2以編譯課程為切入點的可能性分析
以編譯課程為切入點,強化各個核心專業課程之間的關聯,其可能性概括如下:
(1) “編譯原理”是計算機專業重要的專業課程,且在計算機系統中具有重要地位。
(2) 編譯課程開課的學期較為合適。我們查閱了國內部分高校的教學計劃,研究了計算機核心專業課程的課程安排。如表1所示,在我們調查的高校中,除北京大學、北京航空航天大學和西安交通大學外,近一半高校編譯課程的開課學期多位于程序設計、操作系統和計算機體系結構等課程之后,或與操作系統和體系結構等課程同時講授,因此在編譯課程的講授過程中穿插聯系相關課程的內容比較合理。通過對相關知識進行整理歸納、鞏固與提升,能夠取得較好的教學效果。
(3) 編譯課程多次涉及其他專業課程的內容,例如“編譯原理教學引論”部分要講授程序設計語言的發展歷史、編譯程序在計算機軟件系統中的重要地位等內容;講授“編譯運行時的環境”部分時,一定學時用于講述存儲分配,特別是基于棧的運行時環境的動態存儲分配和基于堆的運行時環境的動態存儲分配部分,與操作系統相關內容相互滲透;在“代碼生成和優化”部分,尤其是過程(函數)調用的翻譯部分,針對目標系統結構的優化部分,亦需要體系結構相關知識作為支撐。反觀操作系統和體系結構等課程的教學內容,與其他課程的聯系則相對較少。
基于以上幾點認識,我們認為,以編譯課程為切入點,充分利用有限的學時,在部分教學內容中強化與其他核心課程的關聯,實現專業知識融會貫通的可能性是存在的。
3關于課程教學的幾點建議
如前所述,目前教與學的實際情況不利于學生對計算機專業知識的融會貫通,在注重軟件能力培養的計算機學院中,學生對圖1的陰影部分知之甚少,而對陰影前后兩部分的內容更加熟悉,掌握程度更高。所以,學生沒有從總體上對所學知識建立完整的知識體系,對所學專業課程沒有構成清晰的輪廓和概括。
為了強化編譯課程的教學效果,教師需要將課程教學置于計算機系統大的背景環境之中,重點闡述編譯程序在計算機軟件系統中的重要性,與其他核心專業課程之間的聯系,同時運用實例教學,使學生從抽象的教學內容中解脫出來,真正感受到所學知識的可用性和有用性。鑒于此,我們對編譯課程的教學提出如下幾點建議:
(1) 在引言部分強調編譯課程與其他課程的關系,重點說明編譯程序在整個計算機系統中的作用和層次地位。需要說明的是,教師不應只強調編譯程序自身的地位和作用,還要將其放入圖1所示的背景中,使學生能夠理解編譯程序在從語言到程序執行過程中所處的位置和作用,加強對計算機專業大背景的認識。
(2) 在運行環境、代碼生成和優化部分,教師應結合操作系統和計算機體系結構內容進行講解,使學生能更好地理解目標代碼格式、函數調用方式、基于棧的存儲管理、代碼優化的原因和目標等概念。
例1:對可優化的簡單程序源碼,使用同一編譯程序多次編譯,每次編譯時指定不同的優化級別,通過分析編譯程序生成的匯編源碼比較生成的可執行程序運行性能,向學生解釋編譯程序在編譯過程中實施的優化措施,說明優化的目的和效果。
例2:針對最簡單的C語言HelloWorld程序,通過分析其在具體平臺上編譯后的運行時函數調用圖(包括操作系統API),說明用戶編寫的程序與語言庫、系統庫之間的關系。
例3:結合具體型號的DSP處理器(例如TMS320 C6000系列)及其調試模式下指令的執行過程,說明針
對具體計算機系統結構進行編譯優化的必要性和重要性。
(3) 建議針對目前常用的系統平臺設計小型完整的實踐課程,實踐內容應適量涉及體系結構和操作系統的相關內容。針對常見的處理器架構和操作系統設計實踐課程,可以使學生在實際的系統中觀察到實踐結果,通過實際操作和驗證增強感官認識,對所學知識融會貫通。
例:針對學生熟悉的程序設計語言(C或者Java)、經常使用的操作系統(Windows或者Linux)、常見處理器架構(例如X86),設計簡單完整的實踐課程。教師提供能夠處理一小部分語法子集的完整編譯程序,供學生學習,作為實踐過程的參照。學生可以將一小部分沒有實現的語法子集作為實踐任務,完善已有的編譯程序,實現從詞法分析到代碼生成的各部分功能。最后應能使增強的編譯程序在現有的系統平臺上運行,編譯源碼文件并生成可運行的應用程序。
4結語
通過調查目前計算機核心專業課程教與學的實際情況,我們發現各個課程的教學相對封閉,因此提出了以編譯課程為切入點,強化專業知識的融會貫通,強調加強編譯課程與其他課程內容的交叉聯系,并從必要性和可能性等方面進行了論述,最后對具體教學內容提出了幾點建議,希望能夠拋磚引玉。
參考文獻:
[1] 李冬梅,施海虎.“編譯原理”課程的教學研究與探索[J]. 計算機教育,2008(8):103-104.
[2] 唐仕喜. 編譯技術可擴展式課程設計改革研究[J]. 計算機教育,2009(2):40-42.
[3] 何炎祥,伍春香. 計算機專業不需要開設編譯原理課程嗎?[J]. 計算機教育,2009(4):61-62.
Analysis of Professional Knowledge Infiltration and Integration in the Compiler Principle Teaching
JI Wei-xing, CHEN Ying, LI Kan, WANG Gui-zhen
(School of Computer Science and Technology, Beijing Institute of Technology, Beijing 100081, China)
Abstract: According to practical situation at present, this paper argues that we should pay close attention to internal relations of computer science professional curricula. Appropriate reference to other courses in the teaching of compiler principle is favorable to the infiltration and integration of profession knowledge. We selective analyze the necessity and possibility of digesting professional knowledge completely in the teaching of compiler principle. Some suggestions on compiler principle teaching are finally given for reference.
Key words: Compiler Principle; professional knowledge; core curriculum; professional attainment