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