諶志群 王榮波 黃孝喜
摘 要: 第一堂課如何上,很大程度上決定了課程教學(xué)的成敗。首先介紹了第一堂課的教學(xué)內(nèi)容和教學(xué)方法,然后重點(diǎn)介紹了我們課程組在“編譯原理”第一堂課中采用的教學(xué)手段和教學(xué)方法,如圖表法、動態(tài)演示法等。本研究對計算機(jī)相關(guān)專業(yè)的課程教學(xué),以及其他工科專業(yè)的課堂教學(xué)可起到一定借鑒作用。
關(guān)鍵詞: 第一堂課; 編譯原理; 教學(xué); 動態(tài)演示
中圖分類號:TP314 文獻(xiàn)標(biāo)志碼:A 文章編號:1006-8228(2014)03-59-03
0 引言
請經(jīng)驗(yàn)豐富、學(xué)術(shù)造詣深厚的名師為大學(xué)新生開設(shè)學(xué)科導(dǎo)論課,可讓學(xué)生更好地了解本學(xué)科和專業(yè)的知識體系及發(fā)展趨勢,掌握本學(xué)科和專業(yè)的研究方法和思維方式,解決本專業(yè)“為何學(xué)、學(xué)什么、怎么學(xué)”的問題[1]。同樣,對于一門課,也需要在教學(xué)的開始安排導(dǎo)論性的內(nèi)容,以幫助學(xué)生解決這門課“為何學(xué)、學(xué)什么、怎么學(xué)”的問題。這就要求任課教師精心進(jìn)行教學(xué)設(shè)計,上好課程教學(xué)的第一堂課。
1 如何上好第一堂課
如果說學(xué)科是一片森林,那么課程就是一棵棵樹木,如果說學(xué)科導(dǎo)論課是為了讓學(xué)生掌握森林的導(dǎo)航地圖,那么課程導(dǎo)論就是為了讓學(xué)生掌握某棵樹木的總體概貌。課程導(dǎo)論要說清楚樹木在森林中的位置與作用,以及樹木本身的主要枝杈,而不是去研究細(xì)小的枝丫,甚至樹葉。第一堂課如何上,很大程度上決定了課程教學(xué)的成敗。
1.1 第一堂課的教學(xué)內(nèi)容
第一堂課應(yīng)以教師講授為主,需要向?qū)W生講授的內(nèi)容有以下幾個方面。
⑴ 課程在學(xué)科體系中的地位
學(xué)科的知識體系是由一門一門的課程構(gòu)建起來的,每門課在學(xué)科知識體系中都有其特有的地位和作用。第一堂課首先要介紹課程的歷史、現(xiàn)狀和發(fā)展趨勢,介紹該門課的前導(dǎo)課程和后續(xù)課程,以及該課程與前導(dǎo)課程和后續(xù)課程之間的關(guān)系,讓學(xué)生對該課程在學(xué)科體系中的地位和作用有個清楚的認(rèn)識,使得學(xué)生在后續(xù)的學(xué)習(xí)過程中明確大方向。
⑵ 課程主要內(nèi)容概覽
每門課都有自身的核心內(nèi)容和知識結(jié)構(gòu),對學(xué)生來說,課程學(xué)習(xí)首先就需要解決“學(xué)什么”的問題。第一堂課需要向?qū)W生概略性地介紹本門課程的主要內(nèi)容、知識點(diǎn),以及知識點(diǎn)之間的關(guān)系。最好是能將課程的主要內(nèi)容以知識點(diǎn)為單位串聯(lián)起來,形成一個完整的知識圖譜,使得學(xué)生在后面的學(xué)習(xí)過程中做到胸中有丘壑,在學(xué)習(xí)具體章節(jié)或者知識點(diǎn)的時候不會迷路。
⑶ 課程的作用
學(xué)習(xí)某門課程,其作用體現(xiàn)在很多方面。一是可以通過課程學(xué)習(xí)來構(gòu)建完整的學(xué)科知識體系,并為后續(xù)學(xué)習(xí)打下基礎(chǔ);二是可以通過學(xué)習(xí)掌握本課程的相關(guān)知識,為將來解決實(shí)際問題提供幫助;三是課程學(xué)習(xí)對培養(yǎng)學(xué)生專業(yè)素養(yǎng)和能力的促進(jìn)作用,這一點(diǎn)很重要。在第一堂課中應(yīng)向?qū)W生介紹本課程的多方面作用,解決學(xué)生“為何學(xué)”的問題,這對于激發(fā)學(xué)生的學(xué)習(xí)興趣非常重要。
⑷ 課程的學(xué)習(xí)方法
每門課都有其自身的性質(zhì)和特點(diǎn),計算機(jī)專業(yè)的課程可分為理論類、實(shí)踐類、編程類等。課程的性質(zhì)和特點(diǎn)不同,學(xué)習(xí)方法也各不相同。第一堂課需要向?qū)W生介紹課程的類屬,本課程與別的課程的區(qū)別與類同之處,課程各部分內(nèi)容的比例,課程的實(shí)驗(yàn)或者上機(jī)要求等。然后結(jié)合課程特點(diǎn),介紹本課程的學(xué)習(xí)方法,比如是采用理論思辨、算法分析,還是編程驗(yàn)證,為學(xué)生解決“如何學(xué)”的問題。
1.2 第一堂課的教學(xué)方法
第一堂課的目的是介紹課程的總體概貌,激發(fā)學(xué)生的學(xué)習(xí)興趣。要達(dá)到這個教學(xué)目的,需要采用合適的教學(xué)方式。首先不能讓課堂氣氛嚴(yán)肅壓抑,而應(yīng)該營造得輕松愉快一點(diǎn)。最好以講故事的方式開始,介紹課程的發(fā)展史和發(fā)展過程中重要科學(xué)家的事跡。在介紹課程內(nèi)容概貌時,應(yīng)該采用形象、直觀、易記的方式,比如圖、表、動畫、音頻、視頻等。為介紹課程的作用,增強(qiáng)學(xué)生學(xué)習(xí)動力,可以用具體實(shí)例說明課程知識在解決實(shí)際問題過程中的應(yīng)用,以及在專業(yè)素養(yǎng)和專業(yè)能力培養(yǎng)方面所發(fā)揮的作用??梢哉f上好第一堂課,課程教學(xué)就成功了一半。
2 “編譯原理”第一堂課
“編譯原理”是計算機(jī)專業(yè)的重要基礎(chǔ)課,在教學(xué)中存在著教難、學(xué)難、實(shí)驗(yàn)組織難等問題,是計算機(jī)專業(yè)教學(xué)中一門公認(rèn)的難上課程[2],因此上好“編譯原理”第一堂課顯得尤為重要。
編譯系統(tǒng)在現(xiàn)代計算機(jī)系統(tǒng)中占有重要的地位,它是直接運(yùn)行在操作系統(tǒng)之上的一類重要系統(tǒng)軟件,如圖1所示。
[裸機(jī)][操作系統(tǒng)][編譯系統(tǒng)]
圖1 編譯系統(tǒng)的地位
編譯原理課程的目的在于系統(tǒng)地向?qū)W生講述編譯系統(tǒng)的結(jié)構(gòu)、工作流程及編譯程序各組成部分的設(shè)計原理和實(shí)現(xiàn)技術(shù),使學(xué)生通過課程學(xué)習(xí),既掌握編譯理論和方法方面的基本知識,也初步掌握設(shè)計、實(shí)現(xiàn)、分析和維護(hù)編譯程序的技能。編譯原理課程與其他課程之間的關(guān)系如圖2所示。
[高級語言程序設(shè)計][自動機(jī)和形式語言][操作系統(tǒng)][數(shù)據(jù)結(jié)構(gòu)][離散數(shù)學(xué)][編譯理論][素材] [控制對象][技術(shù)][基礎(chǔ)]
圖2 “編譯原理”與其他課程的關(guān)系
向?qū)W生介紹編譯原理課程在學(xué)科體系中的地位之后,還需向?qū)W生概略性介紹課程的主要內(nèi)容。編譯原理課程內(nèi)容綱要如圖3所示。編譯原理課程教學(xué)中幾乎所有內(nèi)容都是圍繞這一綱要展開的。
[符號表管理][中間代碼生成][語義分析][語法分析][詞法分析][目標(biāo)代碼生成][代碼優(yōu)化][源程序][目標(biāo)代碼][錯誤診斷處理]
圖3 “編譯原理”課程內(nèi)容綱要
編譯原理課程要重點(diǎn)介紹編譯的整個過程,這一過程包括詞法分析、語法分析、語義分析、中間代碼生成、代碼優(yōu)化和目標(biāo)代碼生成等步驟(見圖3)。編譯過程是非常復(fù)雜的,但是編譯過程中每個階段完成的主要工作又是非常明確的。
讓學(xué)生掌握編譯過程各階段分別完成哪些編譯工作,并在腦海中建立深刻印象,對后續(xù)教學(xué)是非常關(guān)鍵的。為此,我們采用多媒體開發(fā)工具FLASH CS3[3],自行設(shè)計開發(fā)了一個“編譯過程動態(tài)演示系統(tǒng)”,系統(tǒng)導(dǎo)航界面如圖4所示。
圖4 編譯過程動態(tài)演示系統(tǒng)導(dǎo)航界面
系統(tǒng)將文本、表格、圖形、音頻、視頻等不同的媒體結(jié)合在一起,以形象直觀的方式動態(tài)演示高級程序設(shè)計語言編譯過程各個階段對源程序或其中間表示的處理工作,并以一個典型的源程序例子為對象,展示其編譯過程中的變換情況。圖5是代碼優(yōu)化階段的實(shí)例變換情況動態(tài)展示。
圖5 代碼優(yōu)化實(shí)例展示
通過播放以上演示系統(tǒng),可以使學(xué)生輕松掌握編譯中的幾個核心概念,更重要的是可以牢固把握整個高級程序的編譯過程及其特點(diǎn),更深刻理解編譯原理課程學(xué)習(xí)的核心內(nèi)容,使得學(xué)生在后續(xù)學(xué)習(xí)中無論在學(xué)習(xí)哪部分內(nèi)容都明白當(dāng)前內(nèi)容在課程知識體系中所處的位置。
編譯原理是計算機(jī)相關(guān)專業(yè)尤其是軟件類專業(yè)的核心課程,對于學(xué)科知識體系的構(gòu)建是不可或缺的,這對于提高學(xué)生的專業(yè)素養(yǎng)和軟件開發(fā)能力是至關(guān)重要的。如果一個軟件類專業(yè)的學(xué)生不能深刻理解高級語言程序的編譯理論與核心算法,在進(jìn)行程序開發(fā)的時候也就無法寫出高質(zhì)量的程序。雖然編譯原理課程主要講述編譯理論(形式語言與自動機(jī))與經(jīng)典的編譯算法,而絕大多數(shù)學(xué)生畢業(yè)后并不會從事編譯器開發(fā)工作,但是學(xué)習(xí)該課程仍然是重要的和有益的。首先編譯器本身就是一個大型軟件,剖析這一大型軟件的系統(tǒng)結(jié)構(gòu),對于培養(yǎng)學(xué)生的軟件開發(fā)能力非常有幫助。另外,編譯原理課程中涉及到的算法與技術(shù)可應(yīng)用到其他軟件的開發(fā)中,如文本分析與處理器、情報檢索軟件、模式識別軟件等。應(yīng)該在第一堂課向?qū)W生講述課程的重要作用,激發(fā)學(xué)生對本課程的學(xué)習(xí)興趣。
編譯原理是一門典型的理論與實(shí)踐相結(jié)合的課程,如何學(xué)好這門課程也是在第一堂課需要向?qū)W生重點(diǎn)闡述的。學(xué)好該課程,首先需要牢固掌握編譯的經(jīng)典算法,雖然這些算法已有幾十年的歷史,但是在現(xiàn)代編譯器設(shè)計中仍然被廣泛采用,這一點(diǎn)必須向?qū)W生說清楚,以免其對學(xué)習(xí)產(chǎn)生抵觸心理。為了讓學(xué)生能輕松掌握編譯中的主要算法,我們采用Flash CS3,設(shè)計實(shí)現(xiàn)了一個編譯算法動態(tài)演示系統(tǒng)[4],能夠?qū)讉€經(jīng)典的編譯算法(NFA到DFA的等價轉(zhuǎn)換算法、LL分析器的組成和分析算法、SLR分析器的組成和分析算法)進(jìn)行全方位動態(tài)演示。
要學(xué)好編譯原理,只學(xué)習(xí)理論是不夠的,也是難以真正掌握的,根據(jù)學(xué)習(xí)進(jìn)程去剖析一個實(shí)際編譯器的源代碼是一個很好的學(xué)習(xí)方法,最好在第一堂課就提供這樣一個編譯程序?qū)嵗⑾驅(qū)W生提出具體的要求。
實(shí)驗(yàn)部分是編譯原理課程教學(xué)中的重要環(huán)節(jié)。目前大多數(shù)高校在編譯原理課程的實(shí)踐環(huán)節(jié)都要求學(xué)生能上機(jī)實(shí)現(xiàn)一個小型模型語言的編譯程序。這對于大部分學(xué)生來說似乎是一個不可能完成的任務(wù)。為了克服學(xué)生的畏難心理,我們在第一堂課向?qū)W生提供一個類Pascal語言的可拆卸式編譯器[5]。該編譯器是往屆學(xué)生在課程實(shí)驗(yàn)中設(shè)計實(shí)現(xiàn)的。這樣,一方面提供了一個編譯器的范例供學(xué)生學(xué)習(xí)參考,另一方面也告訴學(xué)生,編譯器設(shè)計并沒有那么神秘,通過他們自身努力是可以實(shí)現(xiàn)的,從而增強(qiáng)學(xué)生上機(jī)實(shí)驗(yàn)的動力,并進(jìn)一步激發(fā)其學(xué)習(xí)興趣。
3 結(jié)束語
第一堂課是教師和學(xué)生的第一次見面,第一堂課教學(xué)效果的優(yōu)劣在很大程度上決定了整個課程教學(xué)的成敗,因此教師必須高度重視第一堂課。第一堂課的內(nèi)容一般是導(dǎo)論性的,涉及課程的性質(zhì)、地位和作用,課程的學(xué)科基礎(chǔ)、主要內(nèi)容、知識結(jié)構(gòu)、學(xué)習(xí)方法和應(yīng)用領(lǐng)域等多個方面。本文簡要介紹了第一堂課的教學(xué)內(nèi)容和教學(xué)方法,重點(diǎn)介紹了我們課程組在“編譯原理”第一堂課中的教學(xué)手段和教學(xué)方法,如圖表法、動態(tài)演示法等。在教育界不斷強(qiáng)調(diào)提高本科教育質(zhì)量,強(qiáng)調(diào)素質(zhì)教育的今天,希望本文研究不僅對編譯原理教學(xué),也對計算機(jī)相關(guān)專業(yè)課程,甚至對其他工科專業(yè)的課堂教學(xué)起到參考作用。
參考文獻(xiàn):
[1] 朱振岳.杭州電子科大教授給新生做“向?qū)А盵N].中國教育報,
2013.10.11.
[2] 諶志群,王小華,朱文華.編譯原理課程的教學(xué)改革思路[J]. 杭州電子
科技大學(xué)學(xué)報(社會科學(xué)版),2007.3(4):69-72
[3] 王環(huán),李安宗.新編中文Flash CS3實(shí)用教程[M].西北工業(yè)大學(xué)出版
社,2009.
[4] 諶志群,王榮波.基于Flash的編譯算法動態(tài)演示系統(tǒng)設(shè)計[J].計算機(jī)
時代,2011.9:59-61
[5] 諶志群,王小華.面向試驗(yàn)教學(xué)的可拆卸小型編譯器設(shè)計[J].現(xiàn)代教
育技術(shù),2009.19(6):111-113