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