劉 兵,張 辰,謝紅俠,劉明明
(1.中國(guó)礦業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 徐州 221116;2.江蘇建筑職業(yè)技術(shù)學(xué)院 智能制造學(xué)院,江蘇 徐州 221008)
編譯原理是計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)綜合性和實(shí)踐性都很強(qiáng)的課程,根據(jù)工程教育認(rèn)證標(biāo)準(zhǔn)的要求,需要強(qiáng)化學(xué)生對(duì)系統(tǒng)軟件的規(guī)劃、組織、設(shè)計(jì)和實(shí)現(xiàn)的綜合能力和素質(zhì),訓(xùn)練其對(duì)大型軟件工程實(shí)施的技術(shù)與能力。針對(duì)本科編譯原理課程教學(xué)特點(diǎn)的開(kāi)源案例驅(qū)動(dòng)的教學(xué)模式,即“案例—理論—概念”的模式通過(guò)將任務(wù)驅(qū)動(dòng)與案例教學(xué)深度融合,以任務(wù)為載體,將開(kāi)源編譯器案例與相應(yīng)理論知識(shí)、基本原理有機(jī)結(jié)合,鍛煉學(xué)生自主學(xué)習(xí)、團(tuán)隊(duì)協(xié)作能力,保障工程教育認(rèn)證標(biāo)準(zhǔn)的真正落地。
面向工程教育認(rèn)證標(biāo)準(zhǔn),編譯原理課程以培養(yǎng)具有系統(tǒng)軟件開(kāi)發(fā)與軟件工程實(shí)施能力的人才為導(dǎo)向[1-3]。工程教育質(zhì)量關(guān)注課程的培養(yǎng)目標(biāo)、畢業(yè)要求、課程體系和課程教學(xué)。要求從經(jīng)驗(yàn)型的粗放辦學(xué)到科學(xué)精細(xì)化辦學(xué)的轉(zhuǎn)變、面向?qū)W科培養(yǎng)人才到面向社會(huì)需求培養(yǎng)人才的轉(zhuǎn)變、教為中心到學(xué)為中心的轉(zhuǎn)變、追求教了什么到追求學(xué)生學(xué)到了什么的轉(zhuǎn)變,始終以學(xué)生的學(xué)習(xí)和發(fā)展為中心,全面提升學(xué)生的工程技術(shù)創(chuàng)新能力。
然而,當(dāng)前編譯原理課程的實(shí)踐環(huán)節(jié)缺乏有效的開(kāi)源編譯代碼支撐,傳統(tǒng)的GCC 編譯器代碼較為復(fù)雜,很難要求學(xué)生在短期實(shí)踐環(huán)節(jié)掌握。從知識(shí)傳授到能力培養(yǎng)的轉(zhuǎn)換方法不足。本科編譯課程的教學(xué)內(nèi)容與實(shí)踐是“兩層皮”,教學(xué)內(nèi)容以教師傳授為主,理論知識(shí)缺乏與實(shí)際案例的結(jié)合,學(xué)生很難與實(shí)際使用的語(yǔ)言進(jìn)行關(guān)聯(lián)理解,而實(shí)踐環(huán)節(jié)往往缺乏對(duì)開(kāi)源編譯器的分析,實(shí)驗(yàn)內(nèi)容面向簡(jiǎn)單的虛擬語(yǔ)言,學(xué)生很難對(duì)熟悉的高級(jí)程序語(yǔ)言進(jìn)行驗(yàn)證性實(shí)驗(yàn)。此外,本科編譯教學(xué)內(nèi)容繁多,涉及編譯各階段使用的多種模型和算法。學(xué)生不僅要學(xué)習(xí)語(yǔ)言學(xué)相關(guān)理論,而且還需要學(xué)習(xí)詞法分析方法、語(yǔ)法分析以及中間代碼生成和優(yōu)化等。這些模型和算法組裝成一個(gè)完整的編譯器系統(tǒng)變得非常困難,如果沒(méi)有開(kāi)源編譯器和案例的支撐,學(xué)生很難在短時(shí)期內(nèi)將種類(lèi)繁多的分析算法進(jìn)行整合、調(diào)試和運(yùn)行。最后,盡管當(dāng)前有些章節(jié)內(nèi)容對(duì)高級(jí)程序語(yǔ)言(如C++)的編譯實(shí)例進(jìn)行了介紹,但不夠深入、系統(tǒng)和全面,缺乏面向開(kāi)源編譯器的系統(tǒng)性知識(shí)體系組織,從而導(dǎo)致學(xué)生出現(xiàn)學(xué)習(xí)編譯原理沒(méi)有用的錯(cuò)覺(jué)。綜上,當(dāng)前分片式的教學(xué)內(nèi)容組織難以滿(mǎn)足工程教育認(rèn)證所要求的提高復(fù)雜工程問(wèn)題解決能力的要求[4-6],因此,如何圍繞這一目標(biāo)開(kāi)展編譯原理課程教學(xué),是當(dāng)前編譯原理教學(xué)改革面臨的突出問(wèn)題。
為學(xué)生達(dá)到“對(duì)本領(lǐng)域復(fù)雜工程問(wèn)題具有分析、設(shè)計(jì)和實(shí)現(xiàn)等能力”的專(zhuān)業(yè)培養(yǎng)目標(biāo)奠定基礎(chǔ),具體目標(biāo)如下:
(1)使學(xué)生掌握職業(yè)生涯中反復(fù)用到的基礎(chǔ)理論和基本方法,以用于解決難度較大的問(wèn)題,處理復(fù)雜系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。對(duì)于畢業(yè)要求一達(dá)成提供支撐。
(2)強(qiáng)化學(xué)生數(shù)字化、算法、模塊化等專(zhuān)業(yè)核心意識(shí),對(duì)自頂向下、自底向上、遞歸求解、模塊化等典型方法的掌握,培養(yǎng)其包括功能劃分、多模塊協(xié)調(diào)、形式化描述、程序?qū)崿F(xiàn)等在內(nèi)的復(fù)雜系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)能力。對(duì)于畢業(yè)要求一的達(dá)成提供支撐。
(3)培養(yǎng)學(xué)生選擇適當(dāng)?shù)哪P?,以形式化的方法去描述語(yǔ)言及其翻譯子系統(tǒng),將它們用于系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的能力。對(duì)于畢業(yè)要求一的達(dá)成提供支撐。
(4)使學(xué)生經(jīng)歷復(fù)雜系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),培養(yǎng)其對(duì)多種方法、工具、環(huán)境的比較、評(píng)價(jià)和選擇能力。方法選擇:選擇實(shí)現(xiàn)詞法、語(yǔ)法分析的方法;實(shí)現(xiàn)途徑選擇:直接設(shè)計(jì)實(shí)現(xiàn)、使用某種自動(dòng)生成工具設(shè)計(jì)實(shí)現(xiàn)(自學(xué));工具與環(huán)境選擇:使用的開(kāi)發(fā)語(yǔ)言和環(huán)境;比較與評(píng)價(jià):通過(guò)按組完成系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)培養(yǎng)學(xué)生團(tuán)隊(duì)協(xié)作能力。學(xué)生需要在分工、設(shè)計(jì)、實(shí)現(xiàn)、口頭和書(shū)面報(bào)告等環(huán)節(jié)中相互協(xié)調(diào)、相互配合。對(duì)畢業(yè)要求二的達(dá)成提供一定的支撐。
基于以上分析,課程目標(biāo)的制訂見(jiàn)表1。
表1 課程目標(biāo)的制訂
面向工程教育認(rèn)證標(biāo)準(zhǔn),編譯原理課程以培養(yǎng)具有系統(tǒng)軟件開(kāi)發(fā)與軟件工程實(shí)施能力的人才為導(dǎo)向[1-3]。重點(diǎn)培養(yǎng)具有以下3 方面素質(zhì)的人才:一是理論性的,主要是對(duì)編譯原理中模型的理解和運(yùn)用;二是實(shí)踐性的,主要是分析掌握開(kāi)源編譯器系統(tǒng)軟件的能力;三是應(yīng)用性的,主要利用編譯原理中的方法解決具體行業(yè)應(yīng)用問(wèn)題的能力。為了實(shí)現(xiàn)工程教育認(rèn)證所要求的解決復(fù)雜工程問(wèn)題的要求,選擇Clang+LLVM 編譯器組織教學(xué)。課程體系的構(gòu)建步驟如圖1 所示。
以Clang+LLVM 為例組織教學(xué),不僅可以讓學(xué)生更深刻地理解編譯器整體框架和編譯的一般流程,還能鍛煉學(xué)生獨(dú)立分析和改進(jìn)編譯系統(tǒng)軟件的水平,開(kāi)拓學(xué)生獨(dú)立承擔(dān)科研任務(wù)的能力。通過(guò)課程知識(shí)體系與案例的融合,并與完成任務(wù)的相關(guān)知識(shí)串接起來(lái),呈現(xiàn)一條明確的學(xué)習(xí)線(xiàn)索,同時(shí)結(jié)合案例,強(qiáng)調(diào)課程的基本原理和方法。學(xué)生易于建立對(duì)編譯器的整體概念。通過(guò)典型案例引領(lǐng)、任務(wù)驅(qū)動(dòng)學(xué)習(xí)模式設(shè)計(jì),使課程學(xué)習(xí)貼近工作實(shí)際,學(xué)生學(xué)習(xí)興趣濃厚,通過(guò)任務(wù)來(lái)驅(qū)動(dòng)學(xué)生知識(shí)構(gòu)建并提升編程和解決實(shí)際問(wèn)題的能力。課程內(nèi)容系統(tǒng)性更強(qiáng),經(jīng)典案例全面覆蓋這些重要知識(shí)點(diǎn)。根據(jù)課程的知識(shí)體系,學(xué)生根據(jù)周教學(xué)目標(biāo)對(duì)應(yīng)學(xué)習(xí)目標(biāo),并對(duì)新知識(shí)進(jìn)行自主探究式學(xué)習(xí)。同時(shí)學(xué)生進(jìn)行分組,進(jìn)行團(tuán)體協(xié)作學(xué)習(xí),共同完成項(xiàng)目任務(wù)。學(xué)生的團(tuán)隊(duì)合作意識(shí)顯著提高,能力差的同學(xué)也能夠通過(guò)主動(dòng)學(xué)習(xí)和小組交流提高編程能力,能夠完成要求的可視化編譯子程序。
該教學(xué)方法以工程教育認(rèn)證標(biāo)準(zhǔn)為導(dǎo)向,以開(kāi)源案例為載體,形成開(kāi)源案例與任務(wù)驅(qū)動(dòng)結(jié)合的教學(xué)模式。根據(jù)教學(xué)內(nèi)容組織,提出學(xué)生學(xué)習(xí)目標(biāo)和學(xué)習(xí)任務(wù)。教師需要引導(dǎo)學(xué)生以任務(wù)為主線(xiàn),對(duì)相關(guān)任務(wù)進(jìn)行自主學(xué)習(xí),鼓勵(lì)學(xué)生協(xié)作,鍛煉團(tuán)隊(duì)合作精神,共同完成任務(wù),以學(xué)生為主體進(jìn)行師生互動(dòng),具體方式如下。
(1)教師通過(guò)案例引出任務(wù)和目標(biāo)。教師需要精心設(shè)計(jì)案例與任務(wù)的對(duì)應(yīng)關(guān)系,并細(xì)化各教學(xué)階段的任務(wù),通過(guò)理論介紹與引導(dǎo),對(duì)任務(wù)進(jìn)行分工,同時(shí)要對(duì)每個(gè)階段的任務(wù)進(jìn)行評(píng)價(jià)和總結(jié)。
(2)學(xué)生為主體完成任務(wù)。學(xué)生通過(guò)理論知識(shí)學(xué)習(xí)和教師引導(dǎo),明確各階段任務(wù),通過(guò)自主學(xué)習(xí)和協(xié)作學(xué)習(xí),分析研究各階段任務(wù),最后通過(guò)教師的評(píng)價(jià)反饋進(jìn)行總結(jié)和提高。
LLVM 是一個(gè)完整的編譯器架構(gòu),也可以認(rèn)為它是一個(gè)用于開(kāi)發(fā)編譯器、解釋器相關(guān)的庫(kù),是構(gòu)架編譯器(compiler)的框架系統(tǒng)。Clang 是一個(gè)C++編寫(xiě)、基于LLVM、發(fā)布于LLVM BSD許可證下的C/C++/Objective-C/Objective-C++編譯器。相比于傳統(tǒng)的GCC 編譯器,Clang 是一個(gè)高度模塊化開(kāi)發(fā)的輕量級(jí)編譯器。以輕量級(jí)的Clang+LLVM 架構(gòu)組織教學(xué),不僅可以讓學(xué)生更深刻地理解編譯器整體框架和編譯的一般流程,還能鍛煉學(xué)生獨(dú)立分析和改進(jìn)編譯系統(tǒng)軟件的水平,開(kāi)拓學(xué)生獨(dú)立承擔(dān)科研任務(wù)的能力,具體步驟如下。
(1)面向開(kāi)源編譯器的教學(xué)內(nèi)容的劃分。根據(jù)課程的知識(shí)體系,以Clang+LLVM 編譯器為平臺(tái),以開(kāi)源案例驅(qū)動(dòng)的教學(xué)內(nèi)容組織為核心,將編譯器劃分為一個(gè)個(gè)模塊。
(2)局部到整體的教學(xué)內(nèi)容組織。LLVM 整體架構(gòu)中各個(gè)子模塊又相對(duì)獨(dú)立,分別對(duì)應(yīng)不同的具體子階段,既能給學(xué)生提供整體概念,又能通過(guò)具體的案例庫(kù)設(shè)計(jì)實(shí)現(xiàn)學(xué)生對(duì)編譯系統(tǒng)各階段功能的掌握。
(3)課堂教學(xué)與實(shí)踐環(huán)節(jié)的有機(jī)融合。在教學(xué)內(nèi)容劃分的基礎(chǔ)上,將每個(gè)子模塊與實(shí)踐環(huán)節(jié)相對(duì)應(yīng),明確學(xué)習(xí)和研究的目標(biāo)。
課程評(píng)價(jià)是工程教育認(rèn)證的重要組成部分。課程評(píng)價(jià)仍然要以學(xué)生產(chǎn)出為導(dǎo)向,分析目標(biāo)的達(dá)成度和改進(jìn)措施。要綜合考慮學(xué)生在解決復(fù)雜工程問(wèn)題過(guò)程中所體現(xiàn)的認(rèn)知、態(tài)度、表達(dá)、實(shí)踐能力等多方面因素。要重視過(guò)程評(píng)價(jià),在任務(wù)驅(qū)動(dòng)的基礎(chǔ)上,發(fā)揮學(xué)生的主體作用,提高學(xué)生完成任務(wù)的積極性,并根據(jù)完成的情況進(jìn)行分析評(píng)價(jià),從而改變過(guò)去以期末考試為單一的評(píng)價(jià)方式,變單一評(píng)價(jià)為綜合評(píng)價(jià)。真正充分發(fā)揮課程評(píng)價(jià)機(jī)制的反饋、導(dǎo)向和激勵(lì)功能,完成工程教育認(rèn)證的目標(biāo)。本課程采用過(guò)程考核和結(jié)課考試(閉卷)相結(jié)合的評(píng)價(jià)方式。教師根據(jù)課程進(jìn)度安排課外作業(yè)和隨堂測(cè)驗(yàn)等過(guò)程考核,過(guò)程考核成績(jī)占課程最終成績(jī)比例為30%,結(jié)課考試成績(jī)占課程最終成績(jī)比例為70%。最終成績(jī)按百分制給出,60 分為及格。課程目標(biāo)、考核內(nèi)容與評(píng)價(jià)方式見(jiàn)表2。
編譯技術(shù)課程平時(shí)成績(jī)由1 次隨堂測(cè)驗(yàn)、3次課后作業(yè)和實(shí)驗(yàn)環(huán)節(jié)組成,隨堂測(cè)驗(yàn)的內(nèi)容包括有限自動(dòng)機(jī)、正規(guī)表達(dá)式及正規(guī)文法理論;課程實(shí)驗(yàn)主要考核詞法分析、語(yǔ)法分析和中間代碼生成的設(shè)計(jì)與實(shí)現(xiàn)。隨堂測(cè)驗(yàn)、課后作業(yè)均按照百分制計(jì)分,每次各占平時(shí)成績(jī)的25%。
1)隨堂測(cè)試評(píng)定。
隨堂測(cè)驗(yàn)教師課前出題、課堂考試、限時(shí)答題。采取了書(shū)面答題的形式,考試提交紙質(zhì)答案。具體評(píng)定標(biāo)準(zhǔn)見(jiàn)表3。
2)課后作業(yè)評(píng)定。
作業(yè)評(píng)定依據(jù)包括:①對(duì)問(wèn)題的理解是否準(zhǔn)確,特別是解決問(wèn)題的思路是否正確;②算法分析與分析表構(gòu)造是否正確,書(shū)寫(xiě)是否準(zhǔn)確和規(guī)范。具體評(píng)定標(biāo)準(zhǔn)見(jiàn)表4。
表3 課堂測(cè)試評(píng)定標(biāo)準(zhǔn)
表4 作業(yè)評(píng)定標(biāo)準(zhǔn)
3)實(shí)踐環(huán)節(jié)評(píng)價(jià)。
在實(shí)驗(yàn)教學(xué)環(huán)節(jié),同樣以Clang+LLVM 編譯器為平臺(tái),通過(guò)對(duì)開(kāi)源案例與實(shí)驗(yàn)任務(wù)進(jìn)行分階段的設(shè)計(jì),把整個(gè)編譯階段劃分成一個(gè)個(gè)獨(dú)立的子任務(wù)。針對(duì)每個(gè)任務(wù),對(duì)學(xué)生進(jìn)行分組,以工程項(xiàng)目的形式組織開(kāi)發(fā)團(tuán)隊(duì),利用軟件工程管理方法對(duì)項(xiàng)目開(kāi)發(fā)進(jìn)行管理,設(shè)置學(xué)生在項(xiàng)目開(kāi)發(fā)過(guò)程中的角色定位。在項(xiàng)目開(kāi)發(fā)中鍛煉學(xué)生的自主開(kāi)發(fā)能力、團(tuán)隊(duì)協(xié)作能力、項(xiàng)目管理能力以及復(fù)雜工程問(wèn)題解決能力,不僅可以加深對(duì)課堂知識(shí)的理解,而且能夠在解決問(wèn)題中自主、探究和協(xié)作學(xué)習(xí),巧妙地把工程教育認(rèn)證標(biāo)準(zhǔn)與實(shí)驗(yàn)教學(xué)環(huán)節(jié)相對(duì)應(yīng)。我們通過(guò)過(guò)程評(píng)價(jià)機(jī)制對(duì)實(shí)踐環(huán)節(jié)進(jìn)行綜合評(píng)價(jià),引導(dǎo)學(xué)生由易到難、由淺入深、由局部到整體逐步深入地掌握課程要求的知識(shí)體系和工程實(shí)踐能力。
面向工程教育認(rèn)證的編譯原理課程教學(xué)改革,推動(dòng)了開(kāi)源編譯器案例驅(qū)動(dòng)的教學(xué)體系建設(shè),有力地促進(jìn)了課程教學(xué)與工程實(shí)踐的深度融合,實(shí)踐證明能夠更有效地培養(yǎng)學(xué)生解決編譯器復(fù)雜工程問(wèn)題的創(chuàng)新實(shí)踐能力。然而,需要注意的是,教學(xué)評(píng)價(jià)是整個(gè)工程教育認(rèn)證中的重要一環(huán),新的教學(xué)體系需要根據(jù)教學(xué)效果和達(dá)成度進(jìn)行持續(xù)改進(jìn),促進(jìn)教學(xué)質(zhì)量的不斷提升。