摘要:為使學(xué)生深入地了解C語(yǔ)言的本質(zhì),提出了基于開源軟件教授c語(yǔ)言程序設(shè)計(jì)的方法。教學(xué)實(shí)踐表明,使用這種教學(xué)方法可以培養(yǎng)學(xué)生的動(dòng)手能力、思維能力以及創(chuàng)新能力,能有效地改善教學(xué)效果,提高教學(xué)質(zhì)量。
關(guān)鍵詞:c語(yǔ)言;開源軟件;教學(xué)方法;程序設(shè)計(jì)
引言
現(xiàn)今國(guó)內(nèi)高校在教授c語(yǔ)言時(shí),多數(shù)教師基于Windows開發(fā)環(huán)境來講述c語(yǔ)言編程技術(shù)。由于Windows平臺(tái)的局限性,教師在教授計(jì)算機(jī)編程語(yǔ)言時(shí),無法深入講解相關(guān)的一些知識(shí)和技術(shù),使得學(xué)生對(duì)于編程語(yǔ)言的理解僅僅停留在表面,不能理解計(jì)算機(jī)編程語(yǔ)言c的本質(zhì),很多相關(guān)專業(yè)的畢業(yè)生所能從事的開發(fā)工作基本上還都是一些技術(shù)含量比較低的應(yīng)用層開發(fā)工作。究其原因是我們?cè)谑谡n的過程中過分依賴集成度很高的IDE開發(fā)工具,讓學(xué)生一鍵式完成開發(fā)全過程,而卻對(duì)整個(gè)過程一無所知,對(duì)細(xì)節(jié)基本上不清楚。高校作為承載和傳承技術(shù)的機(jī)構(gòu),理當(dāng)在平常的教學(xué)過程中竭盡所能把每一技術(shù)細(xì)節(jié)都講透、講到位,這樣才能培養(yǎng)出合格、有用、適合社會(huì)需求的高級(jí)技術(shù)開發(fā)人才。
國(guó)內(nèi)有很多優(yōu)秀的企業(yè)在基于開源軟件開發(fā)自己企業(yè)的產(chǎn)品,很多的產(chǎn)品都是用很簡(jiǎn)陋的工具而不是在諸如Vc這么強(qiáng)大的IDE開發(fā)環(huán)境下開發(fā)完成的。這些開源工具盡管集成度不是很高,但是每個(gè)工具各具功能,在產(chǎn)品開發(fā)的各個(gè)階段起著不同的作用,簡(jiǎn)單且實(shí)用。如果學(xué)生能理解這些工具的作用,實(shí)際上也就真正理解了開發(fā)一項(xiàng)產(chǎn)品的全過程,把握住了細(xì)節(jié)、核心。
鑒于以上所述并結(jié)合我校的特點(diǎn)和學(xué)以致用的辦學(xué)宗旨,我們?cè)谛!⒃侯I(lǐng)導(dǎo)的鼓勵(lì)和大力支持下,大膽嘗試基于開源軟件去講授c語(yǔ)言編程技術(shù),多角度去展現(xiàn)c的魅力和本質(zhì),放棄了在集成度很高的Windows下單純講述c語(yǔ)言知識(shí)點(diǎn)的傳統(tǒng)方式,教學(xué)取得了較好效果。
1 講授Gcc編譯器深入理解C語(yǔ)言開發(fā)過程
任何用高級(jí)語(yǔ)言編寫的程序都要經(jīng)歷由源代碼到預(yù)處理代碼、匯編代碼、計(jì)算機(jī)可識(shí)別的目標(biāo)代碼到最后的可執(zhí)行代碼的轉(zhuǎn)換才能運(yùn)行。但在Windows平臺(tái)下的IDE開發(fā)環(huán)境里僅僅需要點(diǎn)擊某個(gè)按鈕就一步生成可執(zhí)行文件,這表面上看很便捷,但學(xué)生很難在其中體驗(yàn)到高級(jí)語(yǔ)言程序運(yùn)行原理的一些相關(guān)細(xì)節(jié)。IDE幫我們做了太多的事情而隱含了過程細(xì)節(jié),使得學(xué)生很難將學(xué)習(xí)到理論和實(shí)際聯(lián)系起來。我們?cè)诮虒W(xué)實(shí)踐中嘗試使用最簡(jiǎn)單的Gee編譯器,講述Gee的各項(xiàng)參數(shù),可以使學(xué)生比較直觀的體驗(yàn)到一個(gè)高級(jí)語(yǔ)言編寫的程序是如何從源代碼逐步變成計(jì)算機(jī)可執(zhí)行文件的過程。在授課過程中講述編譯器的各項(xiàng)參數(shù),例如-E參數(shù)產(chǎn)生的結(jié)果是預(yù)處理文件,通過分析這個(gè)文件學(xué)生真正理解了預(yù)處理到底在做些什么工作,也就很容易理解include和關(guān)鍵字define的作用;而在講解Gee的_o參數(shù)時(shí),通過示例分析學(xué)生自然可以明白為什么要在源程序的開頭要調(diào)用#include
2 引入Makefile概念理解項(xiàng)目本質(zhì)
企業(yè)需要的是有多年項(xiàng)目開發(fā)經(jīng)驗(yàn)、基本功扎實(shí)的開發(fā)工程師,所以在教授此門課程時(shí),注意到要讓學(xué)生建立項(xiàng)目的基礎(chǔ)概念和培養(yǎng)起扎實(shí)的基本功。一般,在講述c語(yǔ)言程序設(shè)計(jì)時(shí)多數(shù)老師會(huì)教學(xué)生使用諸如Turbo c、Vc++等軟件。這些軟件是好用,集成度高,但是屏蔽掉了很多的技術(shù)細(xì)節(jié)。隨便寫寫就可編成一個(gè)應(yīng)用程序,學(xué)生會(huì)有很多的困惑:我就寫了一個(gè)小程序怎么就生成這么大的一個(gè)應(yīng)用程序呢?而在教學(xué)過程中增補(bǔ)makefile知識(shí),使學(xué)生對(duì)系統(tǒng)和項(xiàng)目的組成關(guān)系有了一定的認(rèn)識(shí)。這較之傳統(tǒng)的一個(gè)c文件講述所有c語(yǔ)言的教學(xué)模式有了很大的變革。這樣在學(xué)生在走出校門進(jìn)入企業(yè)前已在自己的腦海里對(duì)項(xiàng)目、模塊有了一個(gè)基本的概念。磨刀不誤砍柴工,基礎(chǔ)打好了,干起活來才得心應(yīng)手。
3 放棄圖形化調(diào)試手段使用Gdb調(diào)試器
多數(shù)Windows平臺(tái)下的IDE開發(fā)工具所提供的c語(yǔ)言調(diào)試程序,可以很方便地對(duì)c語(yǔ)言代碼中的錯(cuò)誤跟蹤定位。但是越是方便的工具越是阻礙了學(xué)生處理問題的能力的培養(yǎng),過于依賴圖形就會(huì)使學(xué)生在學(xué)習(xí)新知識(shí)的過程中逐步放棄邏輯思維和抽象思維的訓(xùn)練,也不利于學(xué)生對(duì)事物本質(zhì)的挖掘。基于此,我們?cè)赾語(yǔ)言教學(xué)過程中大膽放棄使用IDE開發(fā)工具去調(diào)試c語(yǔ)言程序,而向?qū)W生介紹使用開源軟件Gdb。學(xué)生通過學(xué)習(xí)break命令明白設(shè)置斷點(diǎn)的含義,通過學(xué)習(xí)bt命令了解函數(shù)調(diào)用棧的概念,通過學(xué)習(xí)info local了解棧幀、局部變量的意義,從而既鞏固了前期課程的知識(shí)又能深入理解調(diào)試程序的意義。實(shí)踐表明在c語(yǔ)言學(xué)習(xí)過程中介紹引入Gdb調(diào)試器知識(shí)可以使得學(xué)生養(yǎng)成獨(dú)立思考解決問題的習(xí)慣。
4 開源工具鏈多角度展示C本質(zhì)魅力
c語(yǔ)言程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,同時(shí)也是一門很難理解的課程,如果可以把一個(gè)知識(shí)點(diǎn)從多角度地向?qū)W生展現(xiàn),勢(shì)必能夠幫助學(xué)生更好地理解c語(yǔ)言。在開源軟件里有很多的小工具可以很方便地從各個(gè)方面向?qū)W生傳遞c語(yǔ)言的本質(zhì)。例如可以用vim編輯器寫入ab兩個(gè)字符并保存為ab.c,之后我們可以用oat ab.c將文件的內(nèi)容打印到屏幕上,而如果我們用od ab.c則可以以八進(jìn)制的方式把文件打印到屏幕上,而用hexdump ab.c則可以以十六進(jìn)制方式打印。顯然,一個(gè)事物可以多角度去看去辨析,才能更全面地了解事物的本質(zhì)。教學(xué)中我們采用了工程實(shí)際中常用的幾個(gè)開源工具向?qū)W生多角度展示c的本質(zhì)和魅力,例如用objdump-dsSx app>obj.txt這條命令可以很輕松地將一個(gè)應(yīng)用程序反匯編并保存下來。很多學(xué)生都想成為計(jì)算機(jī)高手,這條命令的引入極大地激發(fā)起他們的學(xué)習(xí)興趣,而再引入strings、nm等命令從不同的角度去看同一個(gè)可執(zhí)行應(yīng)用程序時(shí),學(xué)生學(xué)習(xí)c語(yǔ)言程序設(shè)計(jì)的興趣大增。學(xué)生學(xué)習(xí)這門課程的原動(dòng)力一旦得到激發(fā),學(xué)習(xí)過程自然也就由“要我學(xué)”變成“我要學(xué)”。
5 結(jié)束語(yǔ)
c語(yǔ)言是一門很完美的程序設(shè)計(jì)語(yǔ)言,教授c語(yǔ)言的教師更是一名優(yōu)秀的演員,需要盡全力把這門語(yǔ)言傳授給學(xué)生。選取Linux下的開源軟件為工具授課不僅可以擴(kuò)展學(xué)生的眼界,而且可以多角度充分展示c語(yǔ)言的每一知識(shí)點(diǎn),從而讓學(xué)生深入理解c語(yǔ)言的精髓和本質(zhì)。只有結(jié)合課堂討論、現(xiàn)場(chǎng)演示講解等多種教學(xué)手段使得學(xué)生喜愛并真正掌握如何編寫c語(yǔ)言程序去解決工程實(shí)際問題,才能充分調(diào)動(dòng)學(xué)生的積極性、主動(dòng)性和創(chuàng)造性,激發(fā)學(xué)生的學(xué)習(xí)興趣。只有引導(dǎo)學(xué)生通過獨(dú)立思考,融會(huì)貫通地掌握系統(tǒng)的c語(yǔ)言知識(shí),讓學(xué)生主動(dòng)、愉快地學(xué)習(xí),滿足他們的求知欲,才能取得較好的教學(xué)效果。