夏一行
摘要:本文分析了目前高等院校中《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)中存在的問(wèn)題,從教學(xué)實(shí)踐、算法設(shè)計(jì)、綜合性項(xiàng)目練習(xí)、創(chuàng)新思維培養(yǎng)以及編程風(fēng)格等多個(gè)環(huán)節(jié)提出方法,從多個(gè)方面加強(qiáng)學(xué)生的編程思想和能力的培養(yǎng)。
關(guān)鍵詞:C語(yǔ)言;程序設(shè)計(jì)理念;編程實(shí)踐;教學(xué)方法
中圖分類(lèi)號(hào):G642.4文獻(xiàn)標(biāo)志碼:A文章編號(hào):1674-9324(2012)01-0043-02
在眾多高校的本科教學(xué)中,《C語(yǔ)言程序設(shè)計(jì)》課程是各個(gè)專(zhuān)業(yè)的一門(mén)重要公共技術(shù)基礎(chǔ)課,它為其他的專(zhuān)業(yè)課程奠定了程序設(shè)計(jì)的基礎(chǔ),在本科教學(xué)計(jì)劃中占有重要的地位和作用。C語(yǔ)言作為程序設(shè)計(jì)中的一個(gè)工具,是很多后續(xù)專(zhuān)業(yè)課程的基礎(chǔ)。掌握C語(yǔ)言的詞法、語(yǔ)法和結(jié)構(gòu),更重要的是培養(yǎng)學(xué)生的程序設(shè)計(jì)思想和方法,這才是《C語(yǔ)言程序設(shè)計(jì)》課程的最終目的。本文作者結(jié)合課程特點(diǎn)和教學(xué)過(guò)程中的實(shí)踐經(jīng)驗(yàn),從多個(gè)方面來(lái)講解如何培養(yǎng)學(xué)生的編程理念。
一、目前課程教學(xué)過(guò)程中存在的普遍問(wèn)題
《C語(yǔ)言程序設(shè)計(jì)》課程一般都針對(duì)大一新生,學(xué)生從小接受的是“應(yīng)試教育”,考試成績(jī)是教師考查評(píng)價(jià)學(xué)生的主要依據(jù)。在這種教學(xué)模式下,課程教學(xué)就存在很多局限性。
1.側(cè)重于語(yǔ)法結(jié)構(gòu),忽略程序設(shè)計(jì)思想的培養(yǎng)。該課程一般都是面向高校各個(gè)工科類(lèi)專(zhuān)業(yè)的,選擇同一本教材,課程結(jié)束統(tǒng)一進(jìn)行考核,這樣必然就導(dǎo)致教師上課時(shí)需緊扣教材;課程考核一般側(cè)重于要求學(xué)生掌握C語(yǔ)言的詞法、語(yǔ)法和結(jié)構(gòu),能解決一些簡(jiǎn)單的編程問(wèn)題;而程序設(shè)計(jì)最主要的編程思想和能力的培養(yǎng)往往被弱化了,教師經(jīng)常會(huì)反復(fù)強(qiáng)調(diào)書(shū)本上的知識(shí)點(diǎn)和示例,而真正程序設(shè)計(jì)中的編程環(huán)節(jié)花的時(shí)間比較少,這也是課程設(shè)置的局限性。
2.算法設(shè)計(jì)中數(shù)學(xué)思維能力薄弱。計(jì)算機(jī)程序是按照實(shí)際的工作步驟而事先編制好的、具有特殊功能的指令序列。而程序的核心是算法,它是程序所要解決問(wèn)題的規(guī)則、順序和步驟,在程序編制過(guò)程中有著重要的地位。算法提供一種思考問(wèn)題的方向和方法,算法設(shè)計(jì)的過(guò)程往往需要用到大量的數(shù)學(xué)知識(shí),需要用一種數(shù)學(xué)的思維來(lái)將問(wèn)題轉(zhuǎn)化成一系列的步驟。在教學(xué)過(guò)程中,發(fā)現(xiàn)學(xué)生編程時(shí)往往卡在數(shù)學(xué)問(wèn)題上,而有數(shù)學(xué)基礎(chǔ)的學(xué)生會(huì)具有較大的優(yōu)勢(shì)。
3.缺乏綜合性項(xiàng)目的練習(xí)。C語(yǔ)言課程的知識(shí)點(diǎn)繁多,一般按照課程大綱設(shè)置,整個(gè)教學(xué)過(guò)程時(shí)間比較緊張,所以教學(xué)模式上,是按知識(shí)點(diǎn)逐個(gè)講解,圍繞每個(gè)知識(shí)點(diǎn)結(jié)合示例加強(qiáng)理解。這些示例都比較簡(jiǎn)單,包含的知識(shí)點(diǎn)比較單一,這樣導(dǎo)致學(xué)生無(wú)法很好地將各個(gè)知識(shí)點(diǎn)融合。一般要到課程過(guò)半時(shí),會(huì)進(jìn)行一些簡(jiǎn)單的綜合性項(xiàng)目練習(xí),但這些項(xiàng)目編程實(shí)現(xiàn)也比較簡(jiǎn)單,實(shí)現(xiàn)代碼幾十行而已。而且課程后期,知識(shí)點(diǎn)難度加大和期末考試的臨近,學(xué)生壓力增大,對(duì)綜合性項(xiàng)目的練習(xí)缺乏激情。而綜合性項(xiàng)目的聯(lián)系是鍛煉學(xué)生思維能力和編程能力的有效途徑。
二、加強(qiáng)課程教學(xué)環(huán)節(jié)中編程理念的培養(yǎng)
大部分學(xué)生在開(kāi)始《C語(yǔ)言程序設(shè)計(jì)》課程時(shí),對(duì)程序設(shè)計(jì)概念知之甚少,在使得學(xué)生掌握這門(mén)語(yǔ)言的同時(shí),激發(fā)他們的興趣,培養(yǎng)編程思想和能力,這樣才算學(xué)好了這門(mén)課程。那如何培養(yǎng)學(xué)生的編程理念,從哪些環(huán)節(jié)來(lái)提高學(xué)生的編程能力,是每個(gè)任課教師需要考慮的問(wèn)題。
1.加強(qiáng)實(shí)踐環(huán)節(jié)。C語(yǔ)言詞法語(yǔ)法結(jié)構(gòu)復(fù)雜,需要學(xué)生記憶的內(nèi)容很多;而且很多學(xué)生是首次接觸程序設(shè)計(jì),這個(gè)課程與以往的數(shù)理化課程不同。如果教學(xué)時(shí)一味地強(qiáng)調(diào)知識(shí)點(diǎn)內(nèi)容的灌輸,那會(huì)引起學(xué)生的恐懼和反感。這樣,隨著后續(xù)內(nèi)容的難度加大,學(xué)生學(xué)習(xí)這門(mén)功課會(huì)越來(lái)越累。程序設(shè)計(jì)課程都會(huì)結(jié)合實(shí)踐環(huán)節(jié),一般是上機(jī)。這個(gè)環(huán)節(jié)在學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言的過(guò)程中起著至關(guān)重要的作用。教師需要通過(guò)這個(gè)環(huán)節(jié),將課堂上枯燥乏味的概念應(yīng)用到實(shí)際編程中,讓學(xué)生在自己的編程結(jié)果中體會(huì)到課程的神奇,激發(fā)學(xué)習(xí)的興趣。
那如何來(lái)更好地利用實(shí)踐環(huán)節(jié)呢?具體主要從兩個(gè)方面入手:一是結(jié)合有意思的程序示例來(lái)激發(fā)學(xué)生的興趣。怎樣讓學(xué)生喜歡程序設(shè)計(jì),主動(dòng)去學(xué)習(xí)C語(yǔ)言?那就要能讓學(xué)生體會(huì)到通過(guò)C語(yǔ)言能實(shí)現(xiàn)的奇妙結(jié)果。從學(xué)習(xí)這門(mén)課程開(kāi)始,就可以通過(guò)一些簡(jiǎn)單有趣的例子,讓學(xué)生對(duì)有趣現(xiàn)象背后的C語(yǔ)言產(chǎn)生好奇心。比如,學(xué)生比較喜歡游戲,課程開(kāi)始時(shí),可以演示“猜數(shù)字”這個(gè)小游戲。這個(gè)游戲早期在文曲星、掌上電腦上比較流行,學(xué)生能從這個(gè)示例中體會(huì)到簡(jiǎn)單的人機(jī)交互,當(dāng)他們看到跟計(jì)算機(jī)的較量產(chǎn)生輸贏時(shí),能形象地體驗(yàn)到程序設(shè)計(jì)帶給他們的小小沖擊。又比如,學(xué)習(xí)多重循環(huán)時(shí),外層、內(nèi)層循環(huán)嵌套,不同的循環(huán)變量的變化……這些概念會(huì)是學(xué)生倍感困惑。這時(shí),我們可以通過(guò)一些身邊熟悉的示例來(lái)演示:“百錢(qián)買(mǎi)百雞”,這是一個(gè)有意思的例子,100元錢(qián)去市場(chǎng)買(mǎi)100只雞,包括公雞、母雞和小雞,公雞5元1只,母雞3元1只,小雞1元買(mǎi)3只,用多重循環(huán)實(shí)現(xiàn)。假設(shè)公雞x只,母雞y只,那么小雞就是(100-x-y)只,編程時(shí),可以將x作為外層循環(huán)變量,y作為內(nèi)層循環(huán)變量,對(duì)每一組x和y進(jìn)行100元錢(qián)的判斷。這樣學(xué)生通過(guò)感性的例子,理解多重循環(huán)的流程。從實(shí)際的課堂效果來(lái)看,學(xué)生對(duì)這類(lèi)例子會(huì)表現(xiàn)得比較興奮,課堂氣氛同時(shí)也被調(diào)動(dòng)起來(lái)了。二是改變學(xué)生上機(jī)環(huán)節(jié)的方式。傳統(tǒng)的程序設(shè)計(jì)上機(jī)環(huán)節(jié),一般是采用某些編程環(huán)境,讓學(xué)生完成編程作業(yè)。學(xué)生面對(duì)單一的編程環(huán)境,程序設(shè)計(jì)就成了一件枯燥的事情。學(xué)習(xí)《C語(yǔ)言程序設(shè)計(jì)》課程的學(xué)生一般都是大一新生,在現(xiàn)在的“應(yīng)試教育”模式下,已經(jīng)習(xí)慣了以考試來(lái)衡量自己學(xué)習(xí)的結(jié)果。所以在上機(jī)環(huán)節(jié)引入考核模式,讓學(xué)生馬上能得到一個(gè)上機(jī)成績(jī),來(lái)激發(fā)他們的積極性。所以在上機(jī)環(huán)節(jié),采用本校計(jì)算機(jī)學(xué)院教師開(kāi)發(fā)的在線測(cè)試系統(tǒng)(http://acm.hdu.edu.cn)提供的C/C++模塊,作為學(xué)生上機(jī)練習(xí)的手段。這個(gè)在線測(cè)試模塊突破了傳統(tǒng)的考試系統(tǒng)只能對(duì)選擇、填空、判斷對(duì)錯(cuò)等客觀題進(jìn)行自動(dòng)評(píng)分的模式,可實(shí)現(xiàn)對(duì)C語(yǔ)言主觀編程題的自動(dòng)評(píng)分,根據(jù)學(xué)生程序的語(yǔ)法、語(yǔ)義和運(yùn)行結(jié)果,衡量學(xué)生程序的正確程度。而且教師可以結(jié)合課程內(nèi)容和進(jìn)度,添加自己的題庫(kù),讓學(xué)生更好地理解課堂內(nèi)容。經(jīng)過(guò)連續(xù)幾個(gè)學(xué)期的使用,受到了師生的普遍歡迎,大大提高了上機(jī)效率。以往上機(jī)環(huán)節(jié)學(xué)生忙于上網(wǎng)玩游戲的現(xiàn)象基本杜絕。
2.從多角度擴(kuò)展算法設(shè)計(jì)的思維。使用C語(yǔ)言程序設(shè)計(jì)解決問(wèn)題,要分析問(wèn)題,用算法對(duì)問(wèn)題進(jìn)行描述,然后才是具體的數(shù)據(jù)類(lèi)型、變量定義、結(jié)構(gòu)選擇等。計(jì)算機(jī)解決問(wèn)題的方法和思想與我們解決問(wèn)題的傳統(tǒng)習(xí)慣及想法是不一樣的,這就是我們?cè)趯W(xué)習(xí)程序設(shè)計(jì)時(shí),去學(xué)會(huì)、去思考計(jì)算機(jī)的想法,逐步適應(yīng)計(jì)算機(jī)的編程思想。教學(xué)過(guò)程中可以從多個(gè)方面來(lái)加強(qiáng)這方面的理念。一是掌握多個(gè)算法描述方法。算法描述有很多種方法,比如自然語(yǔ)言描述、程序流程圖、偽代碼等,復(fù)雜的問(wèn)題經(jīng)過(guò)這些算法描述會(huì)變得清晰簡(jiǎn)單。但是在教學(xué)過(guò)程中,由于課堂時(shí)間限制,這些方法的介紹和使用介紹得比較少,經(jīng)常課程結(jié)束了,學(xué)生還無(wú)法完成一個(gè)完整的流程圖。所以在實(shí)際程序設(shè)計(jì)過(guò)程中,很多學(xué)生忽略了算法設(shè)計(jì),只能做到模仿,首先考慮的是有沒(méi)有可以類(lèi)似的參考例子,然后可以仿照著寫(xiě)代碼。所以在課堂講授示例時(shí),應(yīng)該時(shí)時(shí)體現(xiàn)算法設(shè)計(jì)在程序設(shè)計(jì)中的重要性。解決一個(gè)問(wèn)題的時(shí)候,不是先把代碼展示給學(xué)生,而應(yīng)該現(xiàn)在分析問(wèn)題,從計(jì)算機(jī)思維的角度設(shè)計(jì)相應(yīng)的算法,并用合適的方法進(jìn)行描述,然后再引出代碼。讓學(xué)生更清楚代碼的來(lái)龍去脈,而不是去閱讀代碼、理解代碼。二是學(xué)會(huì)算法設(shè)計(jì)的靈活性?,F(xiàn)實(shí)生活中解決一個(gè)問(wèn)題的方法是多種的,比如要從A地到B地,路徑可以有很多條,選擇的行進(jìn)方式也可以多種。計(jì)算機(jī)程序也一樣,比如求1-100的平均值,算法設(shè)計(jì)可以先將1-100累加然后除以100,也可以1-100每個(gè)數(shù)除以100再累加。而實(shí)現(xiàn)的代碼也可以靈活多變,比如涉及到的100個(gè)數(shù)的累加環(huán)節(jié),用循環(huán)來(lái)實(shí)現(xiàn),可以靈活選擇while/do-while/for任一個(gè)循環(huán)結(jié)構(gòu)來(lái)編寫(xiě)代碼。所以C語(yǔ)言詞法語(yǔ)法方面是有約束規(guī)則的,但是算法設(shè)計(jì)是靈活多變的。在示例講解時(shí),可以有意識(shí)的“小題大做,一題多解”,通過(guò)講解一種方法,提示啟發(fā)學(xué)生用其他方法解決問(wèn)題,激發(fā)學(xué)生考慮問(wèn)題的靈活性。
3.加強(qiáng)綜合性項(xiàng)目的練習(xí)。除了改變上機(jī)環(huán)節(jié)的方式,還應(yīng)該加強(qiáng)綜合性項(xiàng)目的練習(xí),對(duì)所學(xué)的詞法語(yǔ)法能融會(huì)貫通??梢栽谡n程開(kāi)始時(shí),給學(xué)生布置一個(gè)較大型的綜合性項(xiàng)目,作為學(xué)期結(jié)束時(shí)需要上交的大作業(yè)。另外在平時(shí)的上機(jī)過(guò)程中,有意識(shí)地增加綜合性項(xiàng)目的練習(xí)。隨著課程進(jìn)度,將學(xué)過(guò)的知識(shí)點(diǎn)逐點(diǎn)加入練習(xí)項(xiàng)目,防止將各個(gè)知識(shí)點(diǎn)隔離獨(dú)立開(kāi)。
4.培養(yǎng)創(chuàng)新思維能力。C語(yǔ)言是一門(mén)成熟的編程語(yǔ)言,但是學(xué)生如果死記硬背這些詞法語(yǔ)法,是無(wú)法真正學(xué)好這門(mén)課程的。我們應(yīng)當(dāng)致力于培養(yǎng)學(xué)生運(yùn)用C語(yǔ)言解決實(shí)際問(wèn)題的編程能力,將成熟的C語(yǔ)言知識(shí)應(yīng)用到多變的實(shí)際問(wèn)題中,要求學(xué)生具有創(chuàng)新思維能力。教學(xué)過(guò)程中要開(kāi)拓視野,不能局限在教材上,如果將書(shū)本上的知識(shí)對(duì)學(xué)生進(jìn)行填鴨式灌輸,學(xué)生一方面會(huì)對(duì)教學(xué)產(chǎn)生排斥,更重要的是會(huì)限制了學(xué)生的思維。在教學(xué)各個(gè)環(huán)節(jié),應(yīng)該有意識(shí)培養(yǎng)學(xué)生的創(chuàng)新思維,鼓勵(lì)學(xué)生的創(chuàng)新想法。學(xué)生的想法很多時(shí)候是天馬行空,但要相信“存在即合理”。學(xué)生最開(kāi)始學(xué)習(xí)編程,首先考慮的是實(shí)現(xiàn),而不是代碼的效率問(wèn)題。當(dāng)學(xué)生設(shè)計(jì)了一種新算法時(shí),先不要帶著評(píng)判的眼光去看代碼,而應(yīng)該是鼓勵(lì)的態(tài)度。
5.培養(yǎng)良好的編程風(fēng)格。學(xué)生在學(xué)習(xí)程序設(shè)計(jì)的過(guò)程中,還應(yīng)該養(yǎng)成良好的編程風(fēng)格。一是有意識(shí)培養(yǎng)編程的完整過(guò)程,包括分析問(wèn)題、算法設(shè)計(jì)、代碼編寫(xiě)、調(diào)試程序和編寫(xiě)文檔等。二是代碼編寫(xiě)的良好風(fēng)格,雖然C語(yǔ)言對(duì)書(shū)寫(xiě)格式?jīng)]有嚴(yán)格要求,但一個(gè)良好的、規(guī)范的書(shū)寫(xiě)方式,可以提高程序的可讀性。初學(xué)C語(yǔ)言更應(yīng)該注意養(yǎng)成這方面的好習(xí)慣。
一個(gè)良好的編程理念不是簡(jiǎn)單形成的,需要教師有效地培養(yǎng)和訓(xùn)練。學(xué)習(xí)《C語(yǔ)言程序設(shè)計(jì)》課程,要使學(xué)生掌握C語(yǔ)言的詞法、語(yǔ)法、結(jié)構(gòu)以及結(jié)構(gòu)化程序設(shè)計(jì)的基本思想和方法,要使學(xué)生認(rèn)識(shí)到算法、實(shí)踐以及良好的程序設(shè)計(jì)風(fēng)格在本課程學(xué)習(xí)中的重要性,更要培養(yǎng)學(xué)生熟練使用C語(yǔ)言編程分析和解決實(shí)際問(wèn)題的能力,培養(yǎng)學(xué)生在以后學(xué)習(xí)、工作中,無(wú)論使用什么語(yǔ)言編程,都能靈活應(yīng)用這些思想和方法的能力,為學(xué)生進(jìn)一步學(xué)習(xí)其他專(zhuān)業(yè)課程和今后從事軟件開(kāi)發(fā)工作打下堅(jiān)實(shí)的基礎(chǔ)。
參考文獻(xiàn):
[1]何黎霞.傳統(tǒng)教學(xué)和案例教學(xué)在C語(yǔ)言程序設(shè)計(jì)教學(xué)中的應(yīng)用[J].電腦知識(shí)與技術(shù),2010,6(10).
[2]韓春成,邢鵬飛,燕揚(yáng).C語(yǔ)言程序設(shè)計(jì)教學(xué)改革實(shí)踐[J].長(zhǎng)春師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2010,29(5).
[3]袁柳,路綱.程序設(shè)計(jì)語(yǔ)言教學(xué)過(guò)程中的學(xué)生思維能力培養(yǎng)[J].計(jì)算機(jī)教育,2011,(12).
[4]陸蓓.C語(yǔ)言程序設(shè)計(jì)[M].北京:科學(xué)出版社,2009.