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