張英
(廈門技師學院,福建廈門 361101)
C語言是目前應用最廣泛的計算機高級語言之一,是現(xiàn)代學生步入智能化、信息化社會的一塊敲門磚。目前,全國大多數(shù)技工院校的理工科相關(guān)專業(yè)都開設(shè)了C語言程序設(shè)計這門課程。數(shù)據(jù)表明,通過C語言課程系統(tǒng)、深入地學習,學生不但可以了解程序設(shè)計的思維和方法,掌握高級語言程序設(shè)計的概念和知識,還可以運用C語言提高解決復雜問題的能力。多年來,許多從事C語言教學的教師、專家在教材編寫、教學實踐和教學改革等方面進行了大量的研究探索,取得了諸多的研究成果,對我們的教學有很強的實際指導意義,但卻缺乏針對不同專業(yè)采取不同教學模式的理論與實踐教育探索,特別是基于電子專業(yè)的C語言程序設(shè)計教學實踐研究相關(guān)內(nèi)容更是少之又少。近年來,筆者在廈門技師學院電子專業(yè)進行了基于學生專業(yè)學科內(nèi)容的C語言教學嘗試,取得了一定的教學效果。準確來說,就是以項目任務為基礎(chǔ),加入電子工程應用項目實例,讓C語言編程和電子學科的工程建設(shè)相結(jié)合,培養(yǎng)了學生運用所學知識和技能解決實際問題的能力。探索基于相關(guān)專業(yè)背景的教學模式具有一定的合理性和必要性,這一模式也將是C語言教學發(fā)展的未來趨勢。
C語言是當前主流的計算機語言,不僅是計算機專業(yè)的基礎(chǔ)課程,也是工科類專業(yè)的基礎(chǔ)課程。電子類專業(yè)的單片機和嵌入式系統(tǒng)等課程,也是用C語言進行編程的,因此C語言的應用范圍非常廣泛。作為一門實踐性和理論性均較強的課程,目前在電子專業(yè)中,主要還是采用傳統(tǒng)的理論教學方式,任課教師一般是計算機專業(yè)背景,主要側(cè)重于概念、語法和算法的等理論知識點。目前的C語言教材大多數(shù)側(cè)重于數(shù)學算法、計算機編程方面的內(nèi)容,和電子專業(yè)的相關(guān)知識關(guān)聯(lián)較少。技工院校學生的數(shù)學基礎(chǔ)普遍較差,有一些學生的理解能力和邏輯思維能力也不出色,很多學生在學習C語言的過程中很難理解書本中抽象的概念和編程思路,容易使學生產(chǎn)生挫敗感,大大降低學生學習C語言的興趣和驅(qū)動力,教學效果難以保證。沒有將C語言和電子專業(yè)的知識有效地結(jié)合,更多地側(cè)重于概念、語法、算法、計算機編程思路的C語言教學方法對于電子專業(yè)的學生來說,導致學生使用C語言解決實際的工程問題時不能將復雜問題分解成一個個簡單的小問題,從而不能快速地提出有效的解決方案。傳統(tǒng)的C語言教學大多數(shù)都是采用TurboC作為軟件平臺,這個界面對于學生的英文水平要有一定的要求,操作界面也是比較單調(diào)乏味的,這對于提高學生學習C語言的興趣也是一個不利的因素。
在電子專業(yè)中,傳統(tǒng)的C語言教學模式主要存在以下幾個問題:1.C語言教學的教材和電子專業(yè)融合點少,書本中的例題和項目大多數(shù)還是停留在C語言語法、算法等教學層面上,對于解決實際的工程問題涉及非常少。中、高職院校的學生本身的學習能力偏弱,大多數(shù)學生不會主動地去延伸、拓展地學習,目前市面上很難找到和專業(yè)相融合的C語言教材。2.學生自身的計算機基礎(chǔ)參差不齊,部分學生在初、高中階段接受的計算機基礎(chǔ)教學和操作訓練不足,導致學生突兀地進入程序編程階段,傳統(tǒng)的教學模式難以讓學生從零基礎(chǔ)順利地過渡到自主編程狀態(tài),容易導致學生產(chǎn)生挫敗感[1],有些挫敗感強的學生甚至失去學習C語言的興趣。3.C語言是一門需要較好的編程思維、較高的調(diào)試能力和較強的操作性的工程課程,傳統(tǒng)的教學模式過分強調(diào)語法和算法的學習,而忽略了電子專業(yè)中各功能模塊的結(jié)合,學習的過程是比較呆板和機械的,這樣就難以調(diào)動學生學習的積極性,學生的獨立編程和解決問題的能力也就得不到提高。4.在電子專業(yè)中,C語言和其他后續(xù)的進階課程關(guān)聯(lián)性極強,如《單片機技術(shù)與應用》《嵌入式系統(tǒng)》《Verilog硬件描述性語言》等課程的學習對C語言的知識有較高的要求,如果C語言掌握的情況不好,將會嚴重影響這些進階課程的掌握情況,對于專業(yè)課的學習是非常不利的。5.學生自身對C語言課程的重視程度不夠,他們認為自己學的是電子專業(yè)而不是計算機專業(yè),將來就業(yè)可能不會從事和C語言有關(guān)的工作,對課程的認識僅僅局限于C語言編程是計算機專業(yè)才應該熟練掌握的技能,所以在C語言的學習過程中不愿意付出多一點的時間和精力,導致學習狀況不佳,嚴重的甚至影響到其他專業(yè)課的學習。
本人多年來承擔電子專業(yè)的C語言教學工作,針對本專業(yè)的C語言教學模式做了一些改變、嘗試和探索,并取得了較好的教學效果,現(xiàn)分享如下:
教材是課程建設(shè)和人才培養(yǎng)的重要組成部分[2],為了適應電子行業(yè)的快速發(fā)展,必須選擇和本專業(yè)契合度高的教材。隨著我國各種新興技術(shù)日新月異的涌現(xiàn),C語言作為計算機語言中的“靈魂”語言在我國理工科專業(yè)中的廣泛普及,越來越多的C語言課程的優(yōu)秀教材層出不窮地涌現(xiàn),這些教材中有的注重教學內(nèi)容的連貫性與系統(tǒng)性,有的注重教學內(nèi)容的多樣性和豐富性,有的注重教學內(nèi)容的通俗性與實用性等。盡管C語言教材種類繁多,目前市面上能找到既能針對某具體專業(yè),又能達到傳播基礎(chǔ)知識效果的C語言教材仍然非常稀少,這使得C語言教學滯后于各個專業(yè)學科的快速發(fā)展,不利于基于本專業(yè)的C語言教學活動的開展。經(jīng)專業(yè)課教師團隊的多次探討,我們選用了電子工業(yè)出版社出版的《C語言程序設(shè)計項目教程(基于KeilC)》。KeilC軟件是目前單片機工程應用和嵌入式系統(tǒng)中廣泛應用的集成開發(fā)軟件,對于開發(fā)、調(diào)試、仿真等都有強大的技術(shù)支持。在KeilC軟件中使用仿真板仿真電子專業(yè)的相關(guān)實驗能拉近C語言和電子專業(yè)實際工程問題的距離,可以突出C語言在工程應用中的重要性和實效性。
在C語言的教學中,設(shè)計多個任務和工程有序地進行教學,每個任務都是按照“項目任務 —— 相關(guān)知識 —— 任務實現(xiàn) —— 工程應用 —— 歸納總結(jié)”這樣的模式循序漸進地進行教學,先將大任務分解成小任務,每個小任務中穿插著相關(guān)知識點的講解,將每個小任務用C語言來實現(xiàn),合并統(tǒng)籌成最終的大任務,并檢驗是否實現(xiàn)所有的功能。每個工程都包括“任務描述 —— 流程圖設(shè)計 —— 編程實現(xiàn) —— 調(diào)試與仿真”這幾個環(huán)節(jié),“任務描述”是為了讓學生明確本次任務所包含的功能有哪些;“流程圖設(shè)計”是為了幫助學生還原將功能轉(zhuǎn)化成代碼的思維過程;“編程實現(xiàn)”是將思維過程用C語言編寫出來,通過軟件來實現(xiàn)功能;“調(diào)試與仿真”是檢驗代碼是否符合C語言語法要求、是否滿足任務要求的過程,經(jīng)過多次的調(diào)試與仿真,最終實現(xiàn)任務要求的一個動態(tài)修改的過程。這樣的項目任務驅(qū)動法教學模式是符合程序設(shè)計類課程的教學規(guī)律,因為在教學過程中不是一味地照本宣科去講授知識,而是通過代碼調(diào)試和電子專業(yè)知識相結(jié)合的方式,將C語言的概念、語法、算法、編程思路、編程技巧以及調(diào)試方法穿插在各個任務和工程實踐中,達到了“教、學、做”融為一體的教學目的,使得學生能通過生動有趣的方式直觀地接收新知識,引起了學生的極大興趣,并最終達到了提高教學效果的目的。
傳統(tǒng)的C語言教學采用理論知識和上機操作分開的課時安排,學生經(jīng)過理論課后如果未及時復習和鞏固,在上機操作時容易將知識點遺忘,而且對于理論課上教師提出的重點和難點問題往往得不到好的解決,學生對于抽象的概念和算法也無法很好地理解和掌握。本次C語言教學實踐中,理論課和上機操作課每次一共安排4-6個課時,第一節(jié)課教師圍繞知識點、任務編程思路和重難點進行講解,如果知識點較多,一節(jié)課的時間無法全部講完,那再占用第二節(jié)課少部分的時間講解知識點,總之,知識點的講授一般不超過兩個課時,需要留出足夠的課堂時間給學生消化、鞏固知識點、獨立編程、調(diào)試程序。學生在獨立上機操作的同時,教師在課堂上及時地查看學生完成任務的情況,并針對學生的一些問題作出點評和反饋。整個過程做到了“教、學、做”融為一體,學生的自主學習得到了較好的體現(xiàn)。
不在算法和語法上對學生提過高的要求,而是注重編程思路的建立和調(diào)試能力的提高,同時注重用C語言編程來解決實際的工程問題。把C語言中的知識點,如變量、關(guān)系運算、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、數(shù)組、函數(shù)、指針等以不同的形式穿插在多個不同的任務中反復訓練,使學生建立起較好的編程思維,同時也提高編程技巧和調(diào)試能力。相同或不同的知識點在多個任務中反復出現(xiàn),無形中強化了學生的記憶,這些知識點也就在學生的大腦中形成了長時記憶,這樣的學習方式可以讓學生很好地掌握理論知識要點和技能操作要點,也體現(xiàn)了理論知識在工程中的實用性,學生更加樂于接受這樣的教學方式。
實驗仿真板和電子專業(yè)中的單片機結(jié)構(gòu)是完全一致的,可以通過單片機模塊實現(xiàn)若干個的單片機控制實驗,讓學生能一目了然看到工程結(jié)果,知道工程實現(xiàn)是需要硬件和軟件的配置,使學生直接了解了C語言在工程實踐中的應用領(lǐng)域,同時也使得學生提高了學習興趣、激發(fā)了學習熱情、拓寬了知識面,愿意以更大的熱情投入學習。
在選擇工程項目時,教師要嚴謹細致、精心考量,選擇的工程項目既要能符合C語言教學目標,又不能因為增加了過多的電子專業(yè)知識而超出學生的能力范圍,導致教學效果大打折扣。C語言工程項目要和其他電子專業(yè)課中所滲入的專業(yè)知識相一致,工程項目難度要和其他專業(yè)課難度相匹配,這樣才能使學生比較順利地接納C語言的項目教學方式,提升學生的學習積極性和學習興趣。單片機技術(shù)廣泛應用在消費電子、汽車電子、智能儀器等產(chǎn)品領(lǐng)域,是電子產(chǎn)品實現(xiàn)智能化的核心。目前的單片機技術(shù)應用大多數(shù)是用C語言進行編程的,因此在C語言的工程項目教學中,可以利用實驗仿真板搭配C語言程序模擬流水燈、交通燈、搶答器、串行通信等方面的實驗項目。在實際的教學過程中,首先需要結(jié)合電子技術(shù)、數(shù)字電路、模擬電路等電子專業(yè)知識給學生普及單片機基礎(chǔ)知識,比如要先根據(jù)功能分配單片機芯片的引腳,用C語言編寫程序時要結(jié)合引腳分配才能實現(xiàn)功能。其次要畫出程序流程圖,將程序流程圖轉(zhuǎn)換成符合C語言語法結(jié)構(gòu)和算法結(jié)構(gòu)的代碼。以8位流水燈為例說明電子專業(yè)C語言的項目教學過程。項目功能要求是使用單片機的P1端口作為輸出口,因為P1端口分別與8個發(fā)光二極管相連,通過編寫程序,循環(huán)將端口置“1”或清“0”,不斷向發(fā)光二極管輸送高低電平,實現(xiàn)流水燈的效果。因為發(fā)光二極管的正極連接的是高電平,負極連接的是P1端口,按照發(fā)光二極管的發(fā)光原理可知要使發(fā)光二極管能發(fā)光,需要讓P1端口輸出低電平,用C語言來描述的話就是“P1=0x00;”,因此,引導學生用電路的知識來理解每句代碼的含義,可以讓學生知其然,也知其所以然。為了使學生充分理解移位與LED燈光流動的關(guān)系,用多種代碼形式實現(xiàn)了移位的效果,讓學生體會到不同的C語言寫法可以實現(xiàn)同樣的功能,體現(xiàn)了C語言學習過程的開放性與個體性。基于項目的C語言教學可以極大地激發(fā)電子專業(yè)學生的學習熱情,部分學生在此基礎(chǔ)上還能進行了一些創(chuàng)新,比如有的同學實現(xiàn)了8個發(fā)光二極管花樣閃爍等。通過電子專業(yè)知識和C語言的教學融合,可以提升學生的參與熱情、團隊合作及創(chuàng)新意識,學生也收獲了寓教于樂的教學課堂,教學效果相對于傳統(tǒng)的C語言教學模式來說有了顯著提高。
基于電子專業(yè)的C語言教學模式實踐探索,給傳統(tǒng)教學思路帶來了一些改變,弱化了傳統(tǒng)課堂教學中以語法、算法為主的教學方式,而是在項目任務和工程應用中將知識點貫穿其中,并通過不同的項目任務和工程應用反復強化知識點。教學實踐表明,結(jié)合電子專業(yè)學生的學科背景,通過科學合理的C語言具體任務和工程應用的教學設(shè)置,既能夠達到提升學生學習興趣的目的,也能有針對性地滿足學生學習專業(yè)化、個性化的需求,對教學效果的提高起到事半功倍的作用[3]。