楊海燕 史曉華 張 莉
摘 要:“編譯技術(shù)”作為一門核心專業(yè)必修課,其實(shí)踐環(huán)節(jié)對(duì)本科學(xué)生培養(yǎng)動(dòng)手能力有重要作用。但在教學(xué)過(guò)程中,筆者發(fā)現(xiàn)對(duì)于這種軟件類課程的實(shí)踐環(huán)節(jié)而言,通常的題目設(shè)置和考核方案并不能真正確保學(xué)生獨(dú)立完成、學(xué)有所獲,在過(guò)程中加強(qiáng)監(jiān)督和控制才是有效的辦法。本文給出在教學(xué)實(shí)踐中采用的質(zhì)量管理體系,并通過(guò)兩年來(lái)的應(yīng)用情況分析了該體系的效果。
關(guān)鍵詞:編譯技術(shù);實(shí)踐環(huán)節(jié);質(zhì)量管理體系
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B
1 引言
“編譯器的原理和技術(shù)具有十分普遍的意義,在每一個(gè)計(jì)算機(jī)科學(xué)家的研究生涯中,這些原理和技術(shù)都會(huì)反復(fù)用到”。為了讓學(xué)生了解“編譯技術(shù)”這個(gè)推動(dòng)了計(jì)算機(jī)學(xué)科發(fā)展的重要研究領(lǐng)域,北京航空航天大學(xué)計(jì)算機(jī)學(xué)院將“編譯技術(shù)”課程作為一門核心專業(yè)必修課。這門課不僅要求學(xué)生掌握有關(guān)編譯的經(jīng)典基礎(chǔ)理論,還要其學(xué)會(huì)運(yùn)用先進(jìn)的軟件開發(fā)技術(shù)構(gòu)造實(shí)際編譯系統(tǒng)的方法,是一門理論和實(shí)踐要求都很高的課程,是學(xué)生在本科學(xué)習(xí)階段培養(yǎng)動(dòng)手能力的一個(gè)非常重要的環(huán)節(jié),在教學(xué)中具有重要地位。
在教學(xué)中,“編譯技術(shù)”課分為兩個(gè)部分:理論部分和實(shí)踐環(huán)節(jié)(課程設(shè)計(jì))。學(xué)生學(xué)習(xí)了編譯程序的基本概念、原理、方法和技術(shù)之后,要完成一個(gè)小型語(yǔ)言的編譯系統(tǒng)。在教材[2]中,提供了由國(guó)際著名計(jì)算機(jī)科學(xué)家N.Wirth編寫的“PL/0語(yǔ)言編譯程序”和“Pascal-S編譯系統(tǒng)”這兩個(gè)經(jīng)典教學(xué)編譯系統(tǒng)實(shí)例作為參考,目的是通過(guò)對(duì)編譯系統(tǒng)實(shí)例“小麻雀”的剖析,使學(xué)生較快地對(duì)一個(gè)高級(jí)語(yǔ)言編譯的全過(guò)程建立起完整的概念。
但是在實(shí)踐環(huán)節(jié)的教學(xué)過(guò)程中,筆者發(fā)現(xiàn),雖然編譯系統(tǒng)的構(gòu)造在理論上已形成完整的體系,實(shí)現(xiàn)技術(shù)也相當(dāng)完善,但要使學(xué)生從學(xué)習(xí)基本理論、理解原理、掌握編譯器的構(gòu)造技術(shù)到實(shí)現(xiàn)一個(gè)完整的編譯系統(tǒng)卻是十分困難的,是一門公認(rèn)的難教難學(xué)的課程。對(duì)于一些學(xué)生來(lái)說(shuō),難度太大導(dǎo)致的后果就是完全放棄自己的努力,轉(zhuǎn)而向其他學(xué)生尋求“舶來(lái)品”。另外,課程設(shè)計(jì)的題目大都是基于PL/0和Pascal-S兩個(gè)教學(xué)編譯系統(tǒng)的,這兩個(gè)系統(tǒng)的源代碼是完成課程設(shè)計(jì)的基礎(chǔ),因此,即便是自己獨(dú)立完成的作業(yè),在源代碼上也有一些相似性,從源代碼相似性的角度來(lái)甄別兩份作業(yè)是否抄襲未免有些偏頗。這種現(xiàn)象在其他軟件類課程的實(shí)踐環(huán)節(jié)中也是類似的。筆者認(rèn)為,要讓學(xué)生在這類課程的實(shí)踐環(huán)節(jié)中真正做到獨(dú)立完成、學(xué)有所獲,在題目的設(shè)置上不能“一概而論”,既要滿足基本的教學(xué)要求,又要考慮各種不同程度學(xué)生的實(shí)際情況;同時(shí),不能僅對(duì)最終提交的作業(yè)進(jìn)行考量,還需要在實(shí)踐環(huán)節(jié)的整個(gè)過(guò)程進(jìn)行質(zhì)量監(jiān)控,才能達(dá)到預(yù)期的目的和效果。
從2005年開始,筆者在教學(xué)過(guò)程中設(shè)計(jì)了一套用于保證實(shí)踐環(huán)節(jié)質(zhì)量的管理體系,讓學(xué)生在完成課程設(shè)計(jì)的過(guò)程中,自始至終受到督促和監(jiān)控,幫助并促使學(xué)生在實(shí)踐環(huán)節(jié)中真正獨(dú)立完成。下面對(duì)質(zhì)量管理體系及兩年來(lái)的實(shí)踐效果進(jìn)行介紹。
2 質(zhì)量管理體系
在“編譯技術(shù)”課程的實(shí)踐環(huán)節(jié)中,從布置題目到提交作業(yè)的時(shí)間跨度通常有3個(gè)月。為了讓學(xué)生在這段時(shí)間內(nèi)有計(jì)劃、按步驟、保質(zhì)量地完成作業(yè),筆者從題目設(shè)置、題目分配和考核方案等方面考慮,多方位、多角度促進(jìn)學(xué)生提高作業(yè)的質(zhì)量。這套辦法,本文稱之為質(zhì)量管理體系,如圖1所示。
(1) 題目設(shè)置
設(shè)置不同難度的題目,讓學(xué)生按需選取。為了避免因題目難度過(guò)大而讓學(xué)生放棄自己的努力,將題目設(shè)計(jì)為五個(gè)不同的難度等級(jí),每個(gè)等級(jí)有不同的難度系數(shù)(即最高分?jǐn)?shù)),讓學(xué)生根據(jù)自身的情況進(jìn)行選取。在“編譯技術(shù)”課程設(shè)計(jì)中,題目的總體要求為實(shí)現(xiàn)一個(gè)小型語(yǔ)言的編譯器,難度的不同主要在于文法和生成的目標(biāo)代碼的不同。
(2) 題目分配
隨機(jī)分配文法。同一難度的題目有多個(gè)不同的文法,這些文法是語(yǔ)法成分有所不同的類Pascal、類C語(yǔ)言的文法。借助于教學(xué)輔助平臺(tái),學(xué)生能夠在選取難度等級(jí)后,獲得一個(gè)隨機(jī)分配的文法。
(3) 考核方案
區(qū)別于通常只對(duì)學(xué)生提交的最終作業(yè)進(jìn)行考核,本質(zhì)量管理體系中,在四個(gè)不同時(shí)間設(shè)置了考核點(diǎn),規(guī)定了每次考核的內(nèi)容和方式。
① 對(duì)教學(xué)示例系統(tǒng)的源代碼閱讀情況進(jìn)行考核。教材上提供的PL/0、Pascal-S編譯系統(tǒng)的源代碼是學(xué)生完成課程設(shè)計(jì)的主要參考資料,對(duì)它們的深入理解和分析是學(xué)生完成課程設(shè)計(jì)的重要基礎(chǔ)。這部分內(nèi)容是讓學(xué)生自學(xué),為了不讓自學(xué)的要求流于形式,本體系對(duì)此環(huán)節(jié)采用面試的方式進(jìn)行考核,師生一對(duì)一讓學(xué)生回答與示例系統(tǒng)源代碼有關(guān)的問(wèn)題。
② 要求學(xué)生提交詳細(xì)設(shè)計(jì)文檔,進(jìn)行中期檢查。為了讓學(xué)生的課程設(shè)計(jì)有規(guī)劃、有進(jìn)展地進(jìn)行,本體系要求學(xué)生在課程設(shè)計(jì)的中期提交詳細(xì)設(shè)計(jì)文檔作為考核內(nèi)容。
③ 最終成果進(jìn)行現(xiàn)場(chǎng)考核。當(dāng)學(xué)生在完成課程設(shè)計(jì)后,通過(guò)教學(xué)輔助平臺(tái)提交包括源代碼、可執(zhí)行文件和文檔的最終成果。教師安排統(tǒng)一的時(shí)間對(duì)每個(gè)學(xué)生逐一進(jìn)行現(xiàn)場(chǎng)考核,具體方案如下:
? 在指定的計(jì)算機(jī)上編譯、運(yùn)行、演示自己的作業(yè)(用自備的測(cè)試程序),并回答老師提出的問(wèn)題;
? 用老師指定的測(cè)試程序?qū)ψ鳂I(yè)進(jìn)行檢測(cè),并對(duì)運(yùn)行的結(jié)果進(jìn)行解釋;
? 對(duì)測(cè)試程序進(jìn)行修改,以獲得老師要求運(yùn)行結(jié)果(含出錯(cuò)信息)。
④ 組織申優(yōu)答辯。對(duì)于申優(yōu)(即希望成績(jī)?cè)?0分以上)的學(xué)生,除了要求選擇難度等級(jí)為“高”的題目外,還要在通過(guò)了現(xiàn)場(chǎng)考核之后,進(jìn)行10~15分鐘的申優(yōu)答辯。
(4) 文檔規(guī)范化
讓學(xué)生按軟件工程的要求完成課程設(shè)計(jì),在開發(fā)過(guò)程中形成規(guī)范的文檔。在教學(xué)平臺(tái)上給學(xué)生提供了文檔模板,教師對(duì)學(xué)生提交的文檔逐一進(jìn)行檢查。
(5) 評(píng)分精細(xì)化
制定了精細(xì)的評(píng)分規(guī)則。每次考核有若干考核項(xiàng),每個(gè)考核項(xiàng)有相應(yīng)的評(píng)分標(biāo)準(zhǔn)。評(píng)分規(guī)則在布置作業(yè)時(shí)就公布給學(xué)生,讓學(xué)生有明確的努力方向。在每次考核時(shí),記錄下各個(gè)考核項(xiàng)得到的分?jǐn)?shù),最終借助Excel表的公式計(jì)算出一個(gè)總成績(jī)。
3 實(shí)踐效果分析
通過(guò)對(duì)上述質(zhì)量管理體系的應(yīng)用,筆者發(fā)現(xiàn),在教學(xué)中產(chǎn)生的作用是顯著的:
(1) 設(shè)置不同難度的題目,有助于對(duì)學(xué)生因材施教。在這樣的安排下,即便是程度稍差的學(xué)生也能夠完成一個(gè)完整的編譯程序,讓他們對(duì)編譯系統(tǒng)從理論到實(shí)踐都有明確、直觀的認(rèn)識(shí)。而對(duì)于學(xué)有余力的優(yōu)秀學(xué)生,鼓勵(lì)他們對(duì)文法進(jìn)行擴(kuò)充或自選題目,將編譯原理應(yīng)用到實(shí)際遇到的問(wèn)題中,這樣極大地調(diào)動(dòng)了他們的積極性和主動(dòng)性,也培養(yǎng)和發(fā)揚(yáng)了創(chuàng)新精神。
(2) 對(duì)于同一難度的題目,借助于教學(xué)輔助平臺(tái)隨機(jī)分配文法,這能夠有效地杜絕學(xué)生的抄襲。文法之間差別不大,但卻各不相同,學(xué)生必須踏踏實(shí)實(shí)地按自己獲得的文法構(gòu)造編譯程序,才能順序通過(guò)檢測(cè)。從別人那里拿過(guò)來(lái)的程序一經(jīng)測(cè)試程序檢測(cè),立即會(huì)“露餡”。
(3) 通過(guò)考核的方式確保學(xué)生對(duì)教學(xué)示例系統(tǒng)的源代碼進(jìn)行閱讀,不僅有利于讓學(xué)生深入了解編譯程序的組織結(jié)構(gòu)和構(gòu)造方法,也讓學(xué)生對(duì)課程設(shè)計(jì)題目的難度有更準(zhǔn)確的認(rèn)識(shí),讓學(xué)生有勇氣選擇難度更大的題目。在教學(xué)中的安排是讓學(xué)生閱讀完源代碼并進(jìn)行考核之后,再讓他們通過(guò)教學(xué)輔助平臺(tái)進(jìn)行選題。從2003級(jí)和2004級(jí)兩屆學(xué)生的選題情況可以看出,選擇難度較大的學(xué)生的比例在大幅度增加,如圖2所示。
(4) 筆者在以前的教學(xué)過(guò)程中發(fā)現(xiàn),很多學(xué)生完成作業(yè)的時(shí)限取決于交作業(yè)的最后期限。在前面有充足的時(shí)間時(shí),拖拖拉拉,漫不經(jīng)心,而發(fā)現(xiàn)截止日期快到時(shí),才匆匆忙忙,加班加點(diǎn)。這樣造成的后果是學(xué)生并沒有充分利用時(shí)間進(jìn)行仔細(xì)鉆研,而在最后草草了事,甚至在沒有時(shí)間自己解決問(wèn)題的情況下,拷貝別人的程序來(lái)應(yīng)付。要求提交作為中期檢查內(nèi)容的詳細(xì)設(shè)計(jì)文檔之后,筆者發(fā)現(xiàn)這種方式確實(shí)能夠有效地敦促學(xué)生有計(jì)劃、按步驟地完成作業(yè)。
(5) 進(jìn)行最終作業(yè)的逐一現(xiàn)場(chǎng)考核能夠讓這類實(shí)踐課程存在一個(gè)正規(guī)的考試環(huán)節(jié),相比教師單獨(dú)評(píng)判作業(yè)給出一個(gè)分?jǐn)?shù)更能給學(xué)生造成緊迫感和壓力,讓他們?cè)谕瓿勺鳂I(yè)的過(guò)程中認(rèn)真對(duì)待。同時(shí),一對(duì)一的現(xiàn)場(chǎng)交流能夠讓學(xué)生有更多的機(jī)會(huì)展示的成果,如果出現(xiàn)一些小小的失誤還可以在現(xiàn)場(chǎng)進(jìn)行調(diào)試,既確保了學(xué)生的利益,也能調(diào)動(dòng)起學(xué)生的主動(dòng)性。
(6) 申優(yōu)答辯是在現(xiàn)場(chǎng)考核之后進(jìn)行的,提出申請(qǐng)的學(xué)生只有通過(guò)了現(xiàn)場(chǎng)考核才有資格參加申優(yōu)答辯。答辯以一種嚴(yán)格規(guī)范的方式進(jìn)行,要求學(xué)生準(zhǔn)備10~15分鐘的演示文件,評(píng)委由課程組的幾位老師擔(dān)任。根據(jù)學(xué)生報(bào)告及回答問(wèn)題的情況,老師給出自己的分?jǐn)?shù),各個(gè)分?jǐn)?shù)綜合起來(lái)得到該生的申優(yōu)答辯成績(jī)。申優(yōu)答辯環(huán)節(jié)除了讓學(xué)生更充分地展示自己的成果外,還能培養(yǎng)學(xué)生的口頭表達(dá)能力和溝通能力,為今后的各種報(bào)告、答辯打下基礎(chǔ)。
(7) 按照工程化的方法完成軟件的開發(fā)是計(jì)算機(jī)專業(yè)的學(xué)生應(yīng)有的技能和素質(zhì)。“編譯技術(shù)”的課程設(shè)計(jì)作為本科學(xué)生要完成的第一個(gè)較大規(guī)模的編程作業(yè),在工程化思想和方法的培養(yǎng)中起著重要的作用。這個(gè)環(huán)節(jié)也是學(xué)生在學(xué)習(xí)了“軟件工程”課程后的一次真正的實(shí)踐。
(8) 精細(xì)化的評(píng)分方式能夠讓學(xué)生的成績(jī)更客觀、公正。在上述各個(gè)階段,教師根據(jù)各次考核的情況給學(xué)生若干項(xiàng)具體的分?jǐn)?shù),并且大多數(shù)時(shí)候都是在考核現(xiàn)場(chǎng)直接給出的,這比以前由教師根據(jù)學(xué)生的作業(yè)單獨(dú)進(jìn)行評(píng)判更公開、透明。同時(shí),精細(xì)的分?jǐn)?shù)計(jì)算公式也讓學(xué)生感受到工程技術(shù)領(lǐng)域的嚴(yán)謹(jǐn)和規(guī)范,有助于培養(yǎng)他們誠(chéng)信、公正的品質(zhì)。
4 結(jié)語(yǔ)
本文提出的質(zhì)量管理體系已經(jīng)在“編譯技術(shù)”課程設(shè)計(jì)中成功應(yīng)用了兩年,并正在當(dāng)前的課程設(shè)計(jì)中繼續(xù)應(yīng)用。在這套質(zhì)量管理體系的管理、監(jiān)控之下,絕大多數(shù)學(xué)生都能按要求完成作業(yè)并收到應(yīng)有效果。即便是最高難度的題目,也有不少學(xué)生能順利完成,2003級(jí)有36人申優(yōu),32人獲優(yōu),2004級(jí)有21人申優(yōu),18人獲優(yōu)。學(xué)生對(duì)這種嚴(yán)格的過(guò)程質(zhì)量管理是理解并贊同的。在課程設(shè)計(jì)提交的內(nèi)容中,有“總結(jié)感想”一項(xiàng),要求學(xué)生對(duì)完成“編譯技術(shù)”課程設(shè)計(jì)的情況進(jìn)行總結(jié),以此了解學(xué)生的意見和建議。從學(xué)生反饋的情況看,按照教學(xué)的要求完成課程設(shè)計(jì)后,他們均感到受益匪淺。
下面就摘錄幾個(gè)學(xué)生的總結(jié)片段作為本文的結(jié)束語(yǔ):
“通過(guò)c0編譯器的實(shí)現(xiàn),讓我得到了很大的鍛煉,不僅是技術(shù)能力方面的提高,更重要的是在自己的心態(tài)方面,只要自己努力了,就一定能夠取得一定的成績(jī),也許不能成功,但至少努力了,不會(huì)遺憾。”(34060518)
“通過(guò)編寫編譯器,也使我明白了許多做項(xiàng)目的方法。在實(shí)際的項(xiàng)目中,會(huì)發(fā)生各種各樣的情況,因此需要有較好的處理異常的功能,就像編譯器中的錯(cuò)誤處理一樣,不能一遇到錯(cuò)誤就死掉?!?34060824)
“我希望這門課的老師們能繼續(xù)堅(jiān)持這樣的作風(fēng),畢竟現(xiàn)在真正認(rèn)認(rèn)真真地檢查課程設(shè)計(jì)的科目是越來(lái)越少了,所以我很欣賞你們!希望我們的師弟師妹們能繼續(xù)‘被迫這樣認(rèn)真地完成課程設(shè)計(jì),因?yàn)檫@將是對(duì)他們大有好處的!:)”(34060328 )
“這個(gè)編譯器是自己讀計(jì)算機(jī)專業(yè)以來(lái),第一個(gè)獨(dú)立實(shí)現(xiàn)的稍具規(guī)模的項(xiàng)目,雖然不敢說(shuō)自己為之自豪,但確實(shí)有種成就感,對(duì)自己的專業(yè)學(xué)習(xí)也有了信心。那句話真的說(shuō)得不錯(cuò)‘世上無(wú)難事,只怕有心人,只要肯付出,肯努力學(xué)習(xí),不管什么都能學(xué)會(huì)。
最后,很感謝老師給我這個(gè)自己鍛煉的機(jī)會(huì),也很感謝老師的敦促,說(shuō)實(shí)話如果沒有老師的敦促,我說(shuō)不定會(huì)讓這個(gè)大好的機(jī)會(huì)溜掉?!?34060707)
參考文獻(xiàn):
[1] Alfred V. Aho, Ravi Sethi, Jeffrey D.Ullman. 編譯原理[M]. 李建中,姜守旭,譯. 北京:機(jī)械工業(yè)出版社,2003.
[2]高仲儀,金茂忠. 編譯原理及編譯程序構(gòu)造[M]. 北京:北京航空航天大學(xué)出版社,2001.