文章編號(hào):1672-5913(2008)18-0010-03
摘要:本文在明確教學(xué)目標(biāo)的基礎(chǔ)上,提出并探討了案例實(shí)驗(yàn)教學(xué)法的組織策略和實(shí)施過(guò)程。文中以C語(yǔ)言為例詳細(xì)論述了如何圍繞案例組織教學(xué)內(nèi)容和設(shè)置實(shí)驗(yàn)環(huán)節(jié),并給出數(shù)組單元的教學(xué)方法。
關(guān)鍵詞:計(jì)算機(jī)語(yǔ)言;程序設(shè)計(jì);案例教學(xué);實(shí)驗(yàn);C語(yǔ)言
中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B
1教學(xué)目標(biāo)
計(jì)算機(jī)語(yǔ)言的學(xué)習(xí)存在著一種現(xiàn)象,學(xué)生在學(xué)習(xí)過(guò)程中,跟隨教師被動(dòng)地學(xué)習(xí),對(duì)程序設(shè)計(jì)沒(méi)有整體的觀念,缺乏明確的目的性,甚至學(xué)習(xí)效果如何也不知道,最后即使拿到高分,在真正編程時(shí)仍然覺(jué)得難以下手,沒(méi)有思路,完全不知道如何將所學(xué)的知識(shí)應(yīng)用到實(shí)際編程中。這種現(xiàn)狀讓我們不得不反思:我們的教學(xué)目的到底是什么?教學(xué)效果應(yīng)如何衡量?課程應(yīng)怎樣組織?
很顯然,僅僅讓學(xué)生掌握計(jì)算機(jī)語(yǔ)言的語(yǔ)句、語(yǔ)法等細(xì)節(jié)是不行的。通過(guò)計(jì)算機(jī)語(yǔ)言的學(xué)習(xí),學(xué)生應(yīng)具備程序設(shè)計(jì)的能力和實(shí)際解決問(wèn)題的能力,學(xué)生要掌握的是程序設(shè)計(jì)思想和相應(yīng)的學(xué)習(xí)方法,構(gòu)建相應(yīng)的知識(shí)體系,并具備知識(shí)擴(kuò)展的能力。因此可以從以下三個(gè)方面衡量教學(xué)效果:
●掌握一門(mén)語(yǔ)言的主干,并能在相關(guān)參考資料的幫助下解決實(shí)際問(wèn)題(知道如何和怎樣得到幫助);
●掌握一定的算法和程序設(shè)計(jì)思想;
●具備上機(jī)調(diào)試的能力。
相應(yīng)地,課程的教學(xué)有兩層目標(biāo):
●幫助建立程序設(shè)計(jì)中應(yīng)用到的概念以及理解計(jì)算機(jī)語(yǔ)言規(guī)則;
●幫助建立編程思想以進(jìn)行真正的編程活動(dòng)。
2案例實(shí)驗(yàn)教學(xué)法
不同于其他學(xué)科,計(jì)算機(jī)科學(xué)的學(xué)習(xí)僅僅有解決方案還不行,還需要?jiǎng)邮謱⑵渥優(yōu)楝F(xiàn)實(shí),也就是要通過(guò)實(shí)驗(yàn)來(lái)鞏固和驗(yàn)證所學(xué)。實(shí)驗(yàn)的過(guò)程還可以發(fā)現(xiàn)知識(shí)結(jié)構(gòu)的欠缺,進(jìn)一步引發(fā)學(xué)習(xí)動(dòng)機(jī)。因此教學(xué)過(guò)程中除了要重視案例的講解,也要重視實(shí)驗(yàn),這兩者是相輔相成的。在教學(xué)中結(jié)合案例的課堂講解,可以設(shè)置兩類(lèi)實(shí)驗(yàn):
●同步實(shí)驗(yàn):和課堂教學(xué)緊密結(jié)合,其目的是幫助學(xué)生建立和理解程序設(shè)計(jì)中用到的概念以及語(yǔ)言規(guī)則,學(xué)習(xí)基本的實(shí)驗(yàn)技能,掌握程序調(diào)試方法;
●自主實(shí)驗(yàn):通過(guò)階段性學(xué)習(xí)后進(jìn)行較為綜合的實(shí)驗(yàn),其目的在于幫助學(xué)生掌握編程的方法并進(jìn)行真正的編程活動(dòng)。
案例實(shí)驗(yàn)教學(xué)法的組織實(shí)施過(guò)程如圖1所示,教師首先從案例演示開(kāi)始,讓學(xué)生理解計(jì)算機(jī)語(yǔ)言應(yīng)用的場(chǎng)景,能解決的問(wèn)題,產(chǎn)生學(xué)習(xí)興趣;然后,逐步分解案例并進(jìn)行分析,幫助學(xué)生建立和理解學(xué)習(xí)目標(biāo),并引入不同的知識(shí)單元;再針對(duì)當(dāng)前知識(shí)單元,布置同步實(shí)驗(yàn)。通過(guò)階段性學(xué)習(xí)后,在學(xué)生已有知識(shí)基礎(chǔ)上對(duì)案例進(jìn)行擴(kuò)展,布置自主實(shí)驗(yàn),引導(dǎo)學(xué)生發(fā)現(xiàn)存在的問(wèn)題,促使其主動(dòng)學(xué)習(xí);而實(shí)驗(yàn)過(guò)程以及實(shí)驗(yàn)結(jié)果,也能讓教師了解學(xué)生的學(xué)習(xí)情況,相應(yīng)的調(diào)整教學(xué)方案,并且通過(guò)對(duì)學(xué)生成果的展示和評(píng)價(jià)進(jìn)一步激發(fā)學(xué)生學(xué)習(xí)的主動(dòng)性,提高學(xué)習(xí)興趣。
案例實(shí)驗(yàn)教學(xué)法的整個(gè)組織強(qiáng)調(diào)的是課堂講解和學(xué)生實(shí)踐的緊密結(jié)合,學(xué)生對(duì)知識(shí)的理解情況以及學(xué)生實(shí)驗(yàn)實(shí)施情況都成為后續(xù)教案設(shè)計(jì)中必須考慮的重要因素,而學(xué)生也能體會(huì)主動(dòng)學(xué)習(xí)以及成功的經(jīng)驗(yàn),主動(dòng)完成知識(shí)構(gòu)建。
3案例實(shí)驗(yàn)教學(xué)法的實(shí)施
從案例實(shí)驗(yàn)教學(xué)法的組織過(guò)程中可以看見(jiàn),案例和實(shí)驗(yàn)環(huán)節(jié)是聯(lián)系教和學(xué)的紐帶,也是教學(xué)活動(dòng)能有效實(shí)施的關(guān)鍵,下面以C語(yǔ)言為例,說(shuō)明案例和實(shí)驗(yàn)環(huán)節(jié)如何設(shè)置。
3.1案例選擇及知識(shí)點(diǎn)的分解
案例的選擇不能強(qiáng)調(diào)難度,而應(yīng)具備普遍的代表性且是學(xué)生易于理解和感興趣的。例如可以選擇用C語(yǔ)言實(shí)現(xiàn)的迷宮、貪吃蛇等游戲,也可以選擇簡(jiǎn)單的信息管理系統(tǒng),如書(shū)籍借閱、學(xué)生管理等。在這里我們以學(xué)生成績(jī)管理系統(tǒng)為例。選定案例后,先進(jìn)行程序的演示,以便學(xué)生理解C語(yǔ)言可以作什么,有感官上的認(rèn)識(shí),然后結(jié)合軟件工程設(shè)計(jì)思想,從需求分析、設(shè)計(jì)、編碼、調(diào)試、運(yùn)行各個(gè)階段展示案例,使得學(xué)生對(duì)將需求從客觀現(xiàn)實(shí)世界映射到計(jì)算機(jī)軟件世界有初步的了解。再結(jié)合面向過(guò)程程序設(shè)計(jì)思想,從功能角度將系統(tǒng)分為若干主要模塊:
第一階段:基本的程序設(shè)計(jì)和實(shí)現(xiàn)
(1) 數(shù)據(jù)的錄入和顯示:數(shù)據(jù)類(lèi)型、變量、常量、輸入輸出方法;
(2) 數(shù)據(jù)的計(jì)算:算法思想、表達(dá)式、三種控制結(jié)構(gòu);
(3) 成績(jī)排序和查詢(xún):數(shù)組、排序算法和查找算法;
第二階段:提高程序質(zhì)量
菜單的實(shí)現(xiàn):函數(shù)和預(yù)處理命令;
第三階段:高級(jí)應(yīng)用
(1) 數(shù)據(jù)的訪問(wèn):指針;
(2) 數(shù)據(jù)的存儲(chǔ):結(jié)構(gòu)體和共用體;
(3) 和外存的交互:文件;
上述模塊劃分后,學(xué)生很自然地了解程序設(shè)計(jì)和計(jì)算機(jī)語(yǔ)言學(xué)習(xí)的循序漸進(jìn)的過(guò)程:首先是在程序設(shè)計(jì)過(guò)程中我需要解決什么問(wèn)題,然后是用什么方法以及知識(shí)可以解決問(wèn)題。這樣學(xué)生就能理解各個(gè)知識(shí)點(diǎn)之間的關(guān)系,樹(shù)立明確的學(xué)習(xí)目標(biāo)。
在各個(gè)知識(shí)點(diǎn)的教學(xué)后設(shè)置同步實(shí)驗(yàn),對(duì)課堂知識(shí)進(jìn)行鞏固并作相應(yīng)的擴(kuò)展。將全部課程分為三個(gè)階段,在每一階段后引入自主實(shí)驗(yàn),通過(guò)一個(gè)較為綜合的實(shí)驗(yàn),培養(yǎng)學(xué)生的實(shí)踐能力,擴(kuò)大知識(shí)面。自主實(shí)驗(yàn)后應(yīng)有相應(yīng)的評(píng)價(jià)環(huán)節(jié),讓學(xué)生展示自己的成果并對(duì)欠缺的知識(shí)有一定的認(rèn)識(shí),為后階段的教學(xué)作鋪墊。
3.2案例實(shí)驗(yàn)教學(xué)法實(shí)例
教學(xué)活動(dòng)的設(shè)計(jì)和實(shí)施過(guò)程要始終圍繞培養(yǎng)學(xué)生的程序設(shè)計(jì)能力和實(shí)際解決問(wèn)題能力。程序的實(shí)現(xiàn)有兩個(gè)關(guān)鍵因素,一是算法,二是語(yǔ)言。對(duì)程序設(shè)計(jì)而言,語(yǔ)言?xún)H僅是一個(gè)工具,算法才是本質(zhì)的內(nèi)容,因此每一部分的學(xué)習(xí)首先都應(yīng)該強(qiáng)調(diào)算法的思想和程序設(shè)計(jì)的方法,然后才是具體的語(yǔ)法規(guī)則的學(xué)習(xí)。
計(jì)算機(jī)語(yǔ)言中數(shù)組是非常重要也很實(shí)用的存儲(chǔ)結(jié)構(gòu),而排序和查找算法則是計(jì)算機(jī)應(yīng)用中最基本的操作任務(wù)。下面以第一階段第三個(gè)知識(shí)點(diǎn)即學(xué)生成績(jī)的排序和查找為例說(shuō)明案例實(shí)驗(yàn)教學(xué)活動(dòng)是如何開(kāi)展的。
〔教學(xué)目的〕
1. 理解排序查找算法的思想
2. 數(shù)組的概念及其應(yīng)用
3. 強(qiáng)化順序、分支、循環(huán)控制結(jié)構(gòu)的應(yīng)用
〔案例教學(xué)過(guò)程〕
程序設(shè)計(jì)的目的是要解決實(shí)際問(wèn)題,在選擇了合適的教學(xué)案例后就應(yīng)根據(jù)實(shí)際的教學(xué)情況在合適的時(shí)候提出合適的問(wèn)題,以問(wèn)題驅(qū)動(dòng)教學(xué)可以更好地促使學(xué)生進(jìn)行主動(dòng)學(xué)習(xí),有效地提高教學(xué)效率。
1. 問(wèn)題引入:演示對(duì)M個(gè)學(xué)生N門(mén)功課的成績(jī)排序以及查詢(xún)某個(gè)學(xué)生各門(mén)課成績(jī)查詢(xún)的程序。為提高學(xué)生學(xué)習(xí)興趣,還可以結(jié)合當(dāng)前應(yīng)用熱點(diǎn)如數(shù)據(jù)庫(kù)、搜索引擎講解排序查詢(xún)算法的實(shí)際需求。提出問(wèn)題:如何實(shí)現(xiàn)查詢(xún)和排序?
2. 分析講解:通過(guò)對(duì)問(wèn)題的逐步分析,引導(dǎo)學(xué)生掌握算法思想和語(yǔ)法規(guī)則。
(1) 簡(jiǎn)化問(wèn)題,組織討論,理解算法提出的必要性。例如對(duì)a,b,c三個(gè)數(shù)進(jìn)行排序。初次接觸排序的學(xué)生首先想到用if…else…語(yǔ)句將三個(gè)數(shù)兩兩比較,直到完成排序。再提出問(wèn)題:當(dāng)數(shù)字的個(gè)數(shù)增加到四個(gè)、五個(gè)甚至任意個(gè)數(shù)時(shí),怎樣排序?上述解決方案是否可行?顯然,不可行,那么問(wèn)題出在哪里?回顧算法的要點(diǎn):算法應(yīng)具有通用的表達(dá)方式,可以給出計(jì)算機(jī)可執(zhí)行的操作步驟。上述方法不具有通用性。
(2) 引入一種排序算法如交換法的思想。利用動(dòng)畫(huà)引導(dǎo)學(xué)生聯(lián)想日常生活的場(chǎng)景,如N個(gè)人從高到矮排隊(duì)會(huì)怎么做?個(gè)子最高的站第一個(gè),然后是第二個(gè),…,在這個(gè)過(guò)程一直重復(fù)做兩件事情:比較和交換位置。引申到用計(jì)算機(jī)實(shí)現(xiàn)N個(gè)數(shù)的排序,學(xué)生能比較自然地接受交換法的思想。再次讓學(xué)生給出解決方案,畫(huà)出如圖2所示的算法流程圖。
(3) 提出問(wèn)題:上述解決方案在實(shí)際編程過(guò)程中N個(gè)數(shù)怎么存儲(chǔ)?引入數(shù)組這種重要的存儲(chǔ)結(jié)構(gòu)
(4) 核心知識(shí)的學(xué)習(xí):在這部分的學(xué)習(xí)中可以用典型的、較為簡(jiǎn)單的例題進(jìn)行講解,如Fibonacci數(shù)列、矩陣的簡(jiǎn)單計(jì)算以及字符串的復(fù)制等。幫助學(xué)生學(xué)習(xí)涉及的核心知識(shí)點(diǎn):一維數(shù)組、二維數(shù)組、字符數(shù)組的定義、引用和初始化方法,并熟悉數(shù)組結(jié)構(gòu)在程序中應(yīng)用的場(chǎng)景和方法
(5) 學(xué)生成績(jī)排序案例的程序講解
(6) 用類(lèi)似的方法完成查找算法思想的介紹和成績(jī)查詢(xún)案例的程序講解
3. 總結(jié)深化:教師就教學(xué)過(guò)程中應(yīng)掌握的知識(shí)點(diǎn)進(jìn)行總結(jié)歸納。在此基礎(chǔ)上,由學(xué)生提出自己的疑問(wèn),引起再一次的思考,以真正掌握知識(shí)。
〔同步實(shí)驗(yàn)〕
同步實(shí)驗(yàn)需要和課堂以及書(shū)本緊密結(jié)合,主要包括兩部分的內(nèi)容:其一,和課堂上的典型例題相似,學(xué)生通過(guò)讀程,仿照程序開(kāi)始編寫(xiě)程序的學(xué)習(xí),能較順利的開(kāi)始實(shí)驗(yàn),增強(qiáng)信心,也能通過(guò)積極的思考回顧并掌握課堂上的知識(shí)點(diǎn);其二,對(duì)課堂例題的延伸,如采用一題多變,一題多解等形式,鼓勵(lì)學(xué)生積極思考,突破思維定式,更好的掌握算法。
實(shí)驗(yàn)內(nèi)容:
1. 任意輸入10個(gè)整數(shù),存儲(chǔ)在一維數(shù)組中,實(shí)現(xiàn)數(shù)組的輸出、排序、查找
2. 二維矩陣的最大值求解并輸出其所在的行列
3. 打印楊輝三角
4. 字符串的輸入、輸出、在字符串前增加一個(gè)字符、排序、查找
〔自主實(shí)驗(yàn)〕
經(jīng)過(guò)階段性學(xué)習(xí)后,引入自主實(shí)驗(yàn)。除了布置實(shí)驗(yàn)內(nèi)容,教師還應(yīng)介紹學(xué)習(xí)資源(包括書(shū)籍、網(wǎng)站等),給出合適的問(wèn)題,讓學(xué)生帶有目標(biāo)的完成任務(wù)。其目的在于提高學(xué)習(xí)興趣,激發(fā)學(xué)生的創(chuàng)造性,鼓勵(lì)學(xué)生為解決問(wèn)題從不同途徑中獲得幫助,學(xué)會(huì)查找資料、使用資料的能力,使其具備擴(kuò)展自身知識(shí)體系的能力。
實(shí)驗(yàn)內(nèi)容:編寫(xiě)一個(gè)小型的游戲程序,如猜測(cè)計(jì)算機(jī)隨機(jī)生成的數(shù)字,實(shí)現(xiàn)玩家成績(jī)的排序或查找玩家的歷史成績(jī)。程序設(shè)計(jì)過(guò)程中請(qǐng)考慮:查找或排序的效率和哪些因素有關(guān)?還有哪些排序或查找算法可以使用,如何衡量查找或排序的效率?
〔實(shí)驗(yàn)講評(píng)〕
學(xué)生程序得以實(shí)現(xiàn)后,并不意味著實(shí)驗(yàn)的結(jié)束,必須進(jìn)行講評(píng),包括:
1. 對(duì)實(shí)驗(yàn)過(guò)程中遇到的常見(jiàn)問(wèn)題進(jìn)行講解,深化知識(shí)的理解
2. 學(xué)生有代表性解決方案的展示,使得學(xué)生對(duì)所作的工作有成就感,提升學(xué)習(xí)的興趣。在這個(gè)實(shí)驗(yàn)中,學(xué)生普遍對(duì)排序算法表現(xiàn)出極大的興趣,通過(guò)查閱相關(guān)的教材資料,嘗試了不同的排序方法,如選擇、冒泡、快速排序等,開(kāi)拓了視野。這顯然不同于以往學(xué)生局限于學(xué)習(xí)教材所講的一到二種算法。在排序效率分析上,除了常規(guī)的獲取系統(tǒng)時(shí)間的方法,還有同學(xué)想到用統(tǒng)計(jì)算法中比較次數(shù)和交換次數(shù)的方法。此時(shí),教師的鼓勵(lì)將達(dá)到事半功倍的效果
3. 對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行總結(jié),引發(fā)進(jìn)一步的思考。解決方案中是否有不完善的地方,用現(xiàn)有的知識(shí)能否解決?如不能,需要學(xué)習(xí)怎樣的知識(shí)?例如程序中猜數(shù)字、查找、排序等功能都在一個(gè)main()函數(shù)中實(shí)現(xiàn),會(huì)有什么樣的問(wèn)題?如果你作為語(yǔ)言的設(shè)計(jì)者會(huì)提供什么方法來(lái)解決呢?又如玩家每玩一次游戲,記錄成績(jī)的數(shù)組長(zhǎng)度就必須增加,但是數(shù)組定義又要求長(zhǎng)度是常量,所以只能選擇盡量大的值,那么在事先不確定游戲次數(shù)的情況下,如何實(shí)現(xiàn)不固定長(zhǎng)度的數(shù)組呢?這樣自然的引出后續(xù)的教學(xué)單元:函數(shù)、指針等內(nèi)容。
〔方案評(píng)價(jià)〕
教師根據(jù)案例的實(shí)施情況以及學(xué)生實(shí)驗(yàn)情況對(duì)教學(xué)方案進(jìn)行調(diào)整,最大程度的使教案適應(yīng)學(xué)生。當(dāng)然也可以讓學(xué)生參與教案的評(píng)價(jià)。
上述教案經(jīng)筆者實(shí)踐,學(xué)生反響積極,經(jīng)過(guò)第一階段的學(xué)習(xí),特別是自主實(shí)驗(yàn)后,學(xué)生理解了計(jì)算機(jī)語(yǔ)言學(xué)習(xí)的重點(diǎn)所在,學(xué)會(huì)資料的查找和使用,開(kāi)始大膽嘗試編程,后續(xù)的教學(xué)教師就可以在提高程序質(zhì)量和程序風(fēng)格上多加引導(dǎo)。
4結(jié)束語(yǔ)
案例實(shí)驗(yàn)教學(xué)法通過(guò)課堂講解、實(shí)驗(yàn)鞏固擴(kuò)展,將教和學(xué)緊密結(jié)合,在教學(xué)活動(dòng)中突出程序設(shè)計(jì)思想,在案例的分析、程序的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程中注重實(shí)驗(yàn)環(huán)節(jié),讓學(xué)生主動(dòng)參與,充分調(diào)動(dòng)學(xué)生的興趣,在掌握語(yǔ)法規(guī)則、熟悉且能應(yīng)用編程語(yǔ)言的同時(shí),能有效地培養(yǎng)學(xué)生的編程實(shí)踐能力和探索能力。
參 考 文 獻(xiàn)
[1] 董榮勝,古天龍著.計(jì)算機(jī)科學(xué)與技術(shù)方法論[M].北京:人民郵電出版社,2002.
[2] 史美蘭.體會(huì)哈佛案例教學(xué)[J].國(guó)家行政學(xué)院學(xué)報(bào),2005,(2).
[3] 陳建潮,李洛等.在程序設(shè)計(jì)課程中導(dǎo)入“案例式”教學(xué)方法[J].計(jì)算機(jī)教育,2007,(7).
[4] 譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,1999.