摘要:“能力導(dǎo)向”教學(xué)符合本科教育的基本追求,更有利于培養(yǎng)學(xué)生的可持續(xù)發(fā)展能力。“編譯原理”作為計算機(jī)專業(yè)的傳統(tǒng)核心課程,其所含知識是本專業(yè)實施能力培養(yǎng)的最佳載體之一,對學(xué)生專業(yè)能力的培養(yǎng)具有重要意義。本文從專業(yè)能力培養(yǎng)的視角討論“編譯原理”的教學(xué)。
關(guān)鍵詞:計算機(jī);專業(yè)能力;編譯原理;面向能力培養(yǎng)
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B
高等教育為國家的現(xiàn)代化建設(shè)培養(yǎng)人才。根據(jù)我國現(xiàn)代建設(shè)的需要,計算機(jī)科學(xué)與技術(shù)專業(yè)要為信息化建設(shè)的需要培養(yǎng)計算機(jī)人才——每年約十萬的招生量和約十萬的畢業(yè)生可以看成是社會對計算機(jī)專業(yè)本科人才的基本需求。教育部高等學(xué)校計算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會的發(fā)展戰(zhàn)略研究報告指出,他們應(yīng)該被分為科學(xué)型、工程型、應(yīng)用型人才,而且絕大多數(shù)應(yīng)該是工程型和應(yīng)用型的。從本科畢業(yè)生的基本工作情況看,他們中確實只有極少數(shù)人專門從事計算機(jī)科學(xué)理論的研究,也只有很少數(shù)人從事操作系統(tǒng)、編譯系統(tǒng)、數(shù)據(jù)庫系統(tǒng)等的研究和開發(fā)。作為計算機(jī)科學(xué)與技術(shù)專業(yè)的“經(jīng)典”核心課程,“操作系統(tǒng)原理”、“編譯原理”、“數(shù)據(jù)庫系統(tǒng)原理”等還有什么樣的存在價值?計算機(jī)專業(yè)的學(xué)生為什么還要學(xué)習(xí)這些課程呢?這涉及到本科教育的基本問題,本文以“編譯原理”課程為例,討論有關(guān)問題。
1培養(yǎng)專業(yè)能力
根據(jù)《中華人民共和共教育法》,本科教育應(yīng)當(dāng)使學(xué)生比較系統(tǒng)地掌握本學(xué)科、專業(yè)必需的基礎(chǔ)理論、基本知識,掌握本專業(yè)必要的基本技能、方法和相關(guān)知識,具有從事本專業(yè)實際工作和研究工作的初步能力——這規(guī)定了高等教育在知識、能力、素質(zhì)三方面的具體要求。其中的“能力”在學(xué)生的可持續(xù)發(fā)展和創(chuàng)新精神與能力的形成中具有非常重要的作用。所以,教育不僅要強(qiáng)調(diào)知識基礎(chǔ),更要強(qiáng)調(diào)能力基礎(chǔ)。
在知識基礎(chǔ)和能力基礎(chǔ)的追求上,東西方教育存在一定的差異。相對而言,東方教育表現(xiàn)出更注重夯實扎實知識基礎(chǔ)的傾向,而西方教育更注重夯實能力基礎(chǔ)。實際上,“知識基礎(chǔ)”和“能力基礎(chǔ)”并不矛盾,兩者是相輔相成的關(guān)系:以知識為載體,通過對知識的學(xué)習(xí),掌握恰當(dāng)?shù)膯栴}求解思想和方法,培養(yǎng)學(xué)生的(專業(yè))能力;能力的增強(qiáng),會促進(jìn)學(xué)生學(xué)習(xí)、掌握甚至發(fā)現(xiàn)更多的知識。所以,先進(jìn)的教育倡導(dǎo)研究型“教”與“學(xué)”,尊崇的是“能力導(dǎo)向”。
在大學(xué)里,學(xué)習(xí)一門課程,不能簡單、膚淺地看成是對這門課程所含內(nèi)容的研究、設(shè)計和開發(fā),而是關(guān)注是否在有限的時間內(nèi)最有利于專業(yè)能力的培養(yǎng)。所以,我們不僅反對面向系統(tǒng)的教育,更反對產(chǎn)品教育。由于計算學(xué)科仍然是一個年輕的學(xué)科,其專業(yè)教育總體上還不夠成熟,所以才有了今天的“操作系統(tǒng)”、“數(shù)據(jù)庫系統(tǒng)”、“網(wǎng)絡(luò)系統(tǒng)”、“編譯系統(tǒng)”等面向系統(tǒng)的課程。相信隨著學(xué)科的發(fā)展,計算機(jī)專業(yè)教育會不斷成熟,會有更能體現(xiàn)專業(yè)教育需要的課程出現(xiàn)。就目前的情況,應(yīng)該努力做到“使用工具、探索規(guī)律”、“實現(xiàn)具體系統(tǒng)、研究基本原理”,也就是“使用工具,不可忽略規(guī)律”、“學(xué)習(xí)系統(tǒng),切莫冷落原理”。
那么,作為計算機(jī)專業(yè)的學(xué)生,應(yīng)該具有什么樣的基本能力呢?首先,作為一名受過高等教育的高級人才,交流、獲取知識與信息的基本能力、基本學(xué)科能力、創(chuàng)新能力、工程實現(xiàn)能力、團(tuán)隊合作能力等,是不可或缺的。另外,作為接受專業(yè)教育的專業(yè)人員,更應(yīng)該具備專業(yè)基本能力。自2002年開始,筆者就將計算機(jī)專業(yè)人才的專業(yè)基本能力歸納成計算思維(目前看,它的含義應(yīng)該既有廣義的,還有狹義的)、算法設(shè)計與分析能力、程序設(shè)計與實現(xiàn)能力(硬件和軟件實現(xiàn))、系統(tǒng)能力(系統(tǒng)的認(rèn)知、分析、開發(fā)與應(yīng)用)。4大基本能力有著自己豐富的內(nèi)涵,它們的培養(yǎng)需要落實到各個教學(xué)環(huán)節(jié)中,特別是各門主干課程的教學(xué)中。
例如,系統(tǒng)能力要求學(xué)生站在系統(tǒng)的全局去看問題、分析問題和解決問題,并實現(xiàn)系統(tǒng)優(yōu)化,對計算機(jī)專業(yè)人才來說,狹義的系統(tǒng)能力包括對一定規(guī)模系統(tǒng)的“全局掌控能力”(全局地掌控一定規(guī)模系統(tǒng))和在構(gòu)建系統(tǒng)時能夠系統(tǒng)地考慮問題的求解。要想培養(yǎng)學(xué)生的系統(tǒng)能力,就需要在基本思想的指導(dǎo)下從教學(xué)的點滴入手。例如,自頂向下是系統(tǒng)設(shè)計的重要思想方法,學(xué)習(xí)它是為了引導(dǎo)學(xué)生分層次考慮問題,逐步求精;鼓勵學(xué)生由簡到繁,進(jìn)行復(fù)雜程序的設(shè)計,是一個逐漸深入、逐漸擴(kuò)展規(guī)模的過程;結(jié)合計算機(jī)硬件系統(tǒng)、編譯系統(tǒng)、操作系統(tǒng)等的教學(xué),可以使學(xué)生學(xué)會關(guān)注和掌握系統(tǒng)邏輯,引導(dǎo)學(xué)生從宏觀到微觀去分析、理解和把握系統(tǒng);通過讓學(xué)生參與較大型系統(tǒng)的設(shè)計與實現(xiàn),鼓勵他們在工作過程中努力掌握系統(tǒng)的總體結(jié)構(gòu),關(guān)心本人承擔(dān)工作在系統(tǒng)中的地位等方式來增強(qiáng)學(xué)生的系統(tǒng)觀和合作能力。教學(xué)中要不斷提升學(xué)生的眼光,實現(xiàn)學(xué)生從系統(tǒng)級上對算法和程序的再認(rèn)識。
2計算機(jī)專業(yè)的一門好課程
“編譯原理”是一門非常好的課程。Alfred V.Aho編著的《Compilers: Principles, Techniques, and Tools》被認(rèn)為是編譯領(lǐng)域里的經(jīng)典教材,加上其“封面龍”的造型,被人們尊稱為“龍書”。作為第一章的第一句話,作者這樣寫道:“編寫編譯器的原理和技術(shù)具有十分普遍的意義,以至于在每個計算機(jī)科學(xué)家的研究生涯中,本書中的原理和技術(shù)都會反復(fù)用到?!边@句話給出了這門課程的真正教學(xué)定位。
從課程體系總體設(shè)計看,“編譯原理”課程的主要教學(xué)目標(biāo)之一是使學(xué)生在系統(tǒng)的級別上重新認(rèn)識算法和程序,提升學(xué)生的系統(tǒng)能力。實際上,除了這些之外,該課程還在于進(jìn)一步培養(yǎng)學(xué)生的形式化描述能力:如何給出問題的形式化描述,基于這種描述設(shè)計出自動化處理的過程,最后實現(xiàn)“自動計算”。
雖然編譯課程(通常稱為“編譯原理”、“編譯方法”、“編譯技術(shù)”等)是計算機(jī)專業(yè)的重要經(jīng)典課程,但是隨著高等教育的大眾化,有些人對計算機(jī)專業(yè)是否需要開設(shè)“編譯”課程出現(xiàn)了疑問,特別由于該課程的基本內(nèi)容涉及到的一些重要理論基礎(chǔ)具有抽象性,使得學(xué)生對其的理解產(chǎn)生了較大困難,加上有些人認(rèn)為畢業(yè)生中很少有人將來設(shè)計與實現(xiàn)編譯系統(tǒng),使得該課程的“重要性”、“經(jīng)典性”受到了懷疑。課程的設(shè)置雖然要看知識的“直接有用性”,但更要考慮專業(yè)能力培養(yǎng)的重要性。如果忽視了本科教育培養(yǎng)學(xué)生基本專業(yè)能力、可持續(xù)發(fā)展能力這一基本目的,課程設(shè)置就是不恰當(dāng)?shù)摹嶋H上,計算機(jī)科學(xué)與技術(shù)專業(yè)的本科生是否要開設(shè)編譯課程,要考慮具體的培養(yǎng)目標(biāo)等因素,要從總體目標(biāo)的需求上去考慮,要看它是否是在總學(xué)時的限制下,是實現(xiàn)總目標(biāo)的最佳課程。
計算學(xué)科問題求解的基本思路是“問題、形式化描述、計算機(jī)化”,以抽象、理論、設(shè)計為其學(xué)科形態(tài)。編譯原理涉及的是一個比較適當(dāng)?shù)某橄髮用嫔系臄?shù)據(jù)變換,既有明確的、便于抽象的問題,又有較成熟的理論,而且在限定規(guī)模下又容易實現(xiàn)(設(shè)計),所以“編譯原理”是計算機(jī)專業(yè)本科生的重要專業(yè)技術(shù)基礎(chǔ)課程,屬于教學(xué)計劃中四大系列之軟件技術(shù)系列。
除了知識外,該課程內(nèi)容還含有基本問題求解的典型思想、技術(shù)和方法,所以該課程對于培養(yǎng)學(xué)生的計算思維、程序設(shè)計與實現(xiàn)、算法設(shè)計與分析、計算機(jī)系統(tǒng)的認(rèn)知、開發(fā)和利用等4大學(xué)科基本能力非常重要。學(xué)生是在程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)與算法等課程中受到一定的鍛煉后,從系統(tǒng)的級別上對程序、算法的認(rèn)識進(jìn)行再提高,通過該課程進(jìn)一步提升計算機(jī)問題求解的水平,增強(qiáng)系統(tǒng)能力,體驗實現(xiàn)自動計算的樂趣。這些方法和思想包括掌握程序變換基本概念、問題描述和處理方法(自頂向下、自底向上、逐步求精、遞歸求解,目標(biāo)驅(qū)動,問題分析、問題的抽象與形式化描述,算法設(shè)計與實現(xiàn),系統(tǒng)構(gòu)建、模塊化)。通過學(xué)習(xí)這些知識、思想和方法,學(xué)生養(yǎng)成“問題、形式化描述、計算機(jī)化”問題求解習(xí)慣,實現(xiàn)從“實例計算”到“類計算”和“模型計算”的跨越;增強(qiáng)理論結(jié)合實際能力,獲得更多的“頂峰體驗”;從宏觀到微觀、從微觀到宏觀,形成系統(tǒng)能力。所以,鼓勵有條件的計算機(jī)專業(yè)為本科生開設(shè)“編譯”課程,并通過強(qiáng)調(diào)課程恰當(dāng)?shù)男螒B(tài)的內(nèi)容,達(dá)到與專業(yè)培養(yǎng)目標(biāo)吻合的課程教學(xué)目標(biāo)。
3瞄準(zhǔn)專業(yè)能力培養(yǎng)開展教學(xué)
總體上,我們可以將“編譯原理”課程目標(biāo)定義為:掌握編譯原理中的基本概念、基本理論、基本方法,在系統(tǒng)級上再認(rèn)識程序和算法,提升計算機(jī)問題求解的水平,增強(qiáng)系統(tǒng)能力,體驗實現(xiàn)自動計算的樂趣,具體從如下幾方面實現(xiàn)對學(xué)生能力的培養(yǎng):
(1) 掌握程序變換基本概念、問題描述和處理方法
這些方法主要有:自頂向下、自底向上、逐步求精、遞歸求解,目標(biāo)驅(qū)動,問題分析、問題的抽象與形式化描述,算法設(shè)計與實現(xiàn),系統(tǒng)構(gòu)建、模塊化等方法。這些都是本學(xué)科最經(jīng)典、最常用的問題求解和系統(tǒng)設(shè)計方法。
(2) 實現(xiàn)“問題、形式化描述、計算機(jī)化”的修養(yǎng)
修養(yǎng)“問題、形式化描述、計算機(jī)化”這一典型問題的求解過程,推進(jìn)從“實例計算”到“類計算”和“模型計算”的跨越。
計算機(jī)學(xué)科發(fā)展到今天,早已經(jīng)從一些單一的具體問題的求解發(fā)展到對一類問題的求解,也就是尋求一類問題的系統(tǒng)求解。完成單一的具體問題求解的計算稱為“實例計算”;完成一類問題系統(tǒng)求解的計算稱為“類計算”。當(dāng)然,在“類計算”中,一大部分高層次的計算是“模型計算”。這是區(qū)別于其他專業(yè)的學(xué)生的重要方面之一。學(xué)生的培養(yǎng),通常都是從“實例計算”開始,逐漸推進(jìn)到“類計算”,實現(xiàn)學(xué)生“計算”理念的跨越。
(3) 增強(qiáng)理論結(jié)合實際能力,獲得更多的“頂峰體驗”
“編譯原理”是理論和實踐結(jié)合最好的計算機(jī)課程之一,不僅含有恰當(dāng)?shù)睦碚撝R,而且直接涉及到這些理論的實踐,讓學(xué)生親歷理論結(jié)合實踐的樂趣,使優(yōu)秀的學(xué)生獲得更多的“頂峰體驗”,培養(yǎng)他們理論結(jié)合實際的能力。
(4) 從宏觀到微觀、從微觀到宏觀,培養(yǎng)系統(tǒng)能力
站在系統(tǒng)的全局去看問題、分析問題和解決問題,并實現(xiàn)系統(tǒng)優(yōu)化。經(jīng)驗表明,培養(yǎng)學(xué)生以系統(tǒng)的觀點去看問題,是非常重要的,也是比較困難的,可稱之為“系統(tǒng)”能力。軟件技術(shù)系列課程接在程序設(shè)計與算法系列之后,實現(xiàn)學(xué)生的系統(tǒng)認(rèn)知、分析、設(shè)計和應(yīng)用能力的培養(yǎng),并使學(xué)生進(jìn)一步在系統(tǒng)級別上認(rèn)識程序和算法。
“編譯系統(tǒng)”雖然是一個具有相當(dāng)規(guī)模和相當(dāng)復(fù)雜度的系統(tǒng)(含總體結(jié)構(gòu)),但對問題本身的分析和處理的分解非常清楚,使得其規(guī)模和復(fù)雜度可控,宜于讓學(xué)生掌握,通過教師的引導(dǎo),強(qiáng)化對學(xué)生系統(tǒng)能力的培養(yǎng),這對應(yīng)用型計算機(jī)專業(yè)人才非常重要。
(5) 不斷探索未知,培養(yǎng)創(chuàng)新能力
開展研究型教學(xué),挖掘知識背后的內(nèi)容,通過講授思想、方法,模擬大師們的創(chuàng)新思維,培養(yǎng)學(xué)生的創(chuàng)新意識和創(chuàng)新能力。
(6) 強(qiáng)調(diào)理論指導(dǎo)下的實踐,提升算法設(shè)計和程序設(shè)計能力
“編譯原理”課程涉及的是一個比較適當(dāng)?shù)某橄髮用嫔系臄?shù)據(jù)變換,除了相應(yīng)的知識非常重要外,其中一些基本的問題求解方法、處理問題的思路也是非常重要的。所以,“編譯原理”課程的實踐必須在理論指導(dǎo)下進(jìn)行。學(xué)生在學(xué)習(xí)了基本的理論之后進(jìn)行實驗系統(tǒng)的設(shè)計與實現(xiàn);教師在掌握系統(tǒng)總體構(gòu)成和基本原理、方法的基礎(chǔ)上提出實驗的最基本要求。鼓勵學(xué)生選擇適當(dāng)?shù)姆椒ㄟM(jìn)行系統(tǒng)的設(shè)計,包括選擇自動化生成的方法。為了實現(xiàn)相應(yīng)的效果,學(xué)生一定要先完成設(shè)計,然后再進(jìn)入到實現(xiàn)階段,以提高對復(fù)雜問題的求解能力。
另外,由于對問題的形式化描述及其系統(tǒng)的復(fù)雜性,許多理論知識需要在實踐教學(xué)中得到印證,只有這樣,才能使學(xué)生更好地掌握這些內(nèi)容——就像吃梨子一樣,親自嘗嘗使用這些“一輩子都會不斷使用的方法”的“味道”。通過實踐,學(xué)生感受到成功的樂趣,提高了學(xué)習(xí)興趣,加深對理論知識的理解,提高了理論聯(lián)系實際的能力。
(7) 總體設(shè)計下的系統(tǒng)設(shè)計與實現(xiàn),提升系統(tǒng)和程序?qū)崿F(xiàn)能力
作為一個經(jīng)典的、很成熟的系統(tǒng),編譯系統(tǒng)的構(gòu)建涉及多方面的內(nèi)容,既有分析,又有綜合,對于培養(yǎng)學(xué)生的4大學(xué)科基本能力非常重要。無論從其復(fù)雜度還是技術(shù)含量上說,都是很適合教學(xué)的系統(tǒng)。
考慮到在一開始就講授編譯系統(tǒng)總體結(jié)構(gòu),可以在總體結(jié)構(gòu)指導(dǎo)下,將其分解為“詞法分析器設(shè)計與實現(xiàn)”、“語法分析器設(shè)計與實現(xiàn)”、“語義分析與中間代碼器設(shè)計與實現(xiàn)”,每個程序?qū)⒗们耙粋€程序的結(jié)果,最終形成一個簡單的編譯系統(tǒng)。這樣就采用了功能遞增的方式對實驗進(jìn)行引導(dǎo)性劃分,使學(xué)生在學(xué)習(xí)詞法分析時就可以著手進(jìn)行相關(guān)的設(shè)計,隨著教學(xué)的開展和教學(xué)內(nèi)容的深化,組織系列化的上機(jī)實驗,學(xué)生逐步完成詞法分析器的設(shè)計與實現(xiàn)、語法分析器的設(shè)計與實現(xiàn),優(yōu)秀的學(xué)生進(jìn)一步完成語義分析與中間代碼生成器的設(shè)計與實現(xiàn)。在最后一個實驗完成后,學(xué)生已經(jīng)開發(fā)出一個滿足要求的程序變換程序,完成整個系統(tǒng)的構(gòu)建。
參考文獻(xiàn):
[1] 教育部高等學(xué)校計算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會. 高等學(xué)校計算機(jī)科學(xué)與技術(shù)專業(yè)核心課程教學(xué)實施方案[M]. 北京:高等教育出版社,2009.
[2] 教育部高等教育計算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會. 高等教育計算機(jī)科學(xué)與技術(shù)專業(yè)公共核心知識體系與課程[M]. 2版. 北京:清華大學(xué)出版社,2008.
[3] 蔣宗禮. 堅持抽象第一的基本原理,追求問題的系統(tǒng)求解[C]//林闖. 第七屆全國高校計算機(jī)系系主任論壇論文集.北京:清華大學(xué)出版社,2004:77-82.
[4] 蔣宗禮. 論計算機(jī)學(xué)科的形態(tài)與研究生培養(yǎng)的關(guān)系[J]. 學(xué)位與研究生教育,2004.11:11-15.
[5] 蔣宗禮. 論“編譯”的性質(zhì)及其知識載體屬性的開發(fā)利用[J]. 計算機(jī)教育,2004(Z1):53-56.
[6] 蔣宗禮. 談高水平計算機(jī)人才的培養(yǎng)[J]. 中國大學(xué)教學(xué),2005(9):24-27.
[7] 蔣宗禮. 編譯原理教材需各取所長[J]. 教材周刊,2005(12):10.
[8] 蔣宗禮. 編譯課程教材建設(shè)[J]. 計算機(jī)教育,2007(11):74-76.
[9] 蔣宗禮. 推進(jìn)編譯原理課程教學(xué)改革,提高課程效果[C]//大學(xué)計算機(jī)課程報告論壇組委會. 大學(xué)計算機(jī)課程報告論壇文集.北京:高等教育出版社,2007:558-561.
[10] 蔣宗禮. “編譯原理”教學(xué)設(shè)計[J]. 計算機(jī)教育2008(3):26-30.
[11] 蔣宗禮. 以能力培養(yǎng)為導(dǎo)向,提高計算學(xué)科教育教學(xué)水平[J]. 中國大學(xué)教學(xué),2008(8):35-37.
[12] 蔣宗禮. 工程教育認(rèn)證的特征、指標(biāo)體系與評估的比較[J]. 中國大學(xué)教學(xué),2009(1):36-38.
[13] 蔣宗禮. 研究專業(yè)核心課程教學(xué)實施方案,引導(dǎo)大眾化教育背景下的課程教學(xué)[J]. 計算機(jī)教育,2009(3):4-6.
[14] 蔣宗禮. 推進(jìn)專業(yè)改革,提高辦學(xué)水平[J]. 計算機(jī)教育,2009(16):8-11.