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