韓慧 王春玲 孫俏 陳志泊
摘要:在Java理論課程教學(xué)方法的研究與實(shí)踐方面,提出推行“學(xué)生為主體,教師為主導(dǎo)”的研究型課堂教學(xué)模式、進(jìn)行對(duì)比教學(xué)、引入Java的新動(dòng)向和新應(yīng)用等措施激發(fā)學(xué)生的學(xué)習(xí)積極性;在實(shí)驗(yàn)課程教學(xué)方法的研究與實(shí)踐方面,介紹如何設(shè)計(jì)由簡(jiǎn)到繁、具有原創(chuàng)性的實(shí)驗(yàn),鼓勵(lì)學(xué)生從不同的角度思考問(wèn)題和實(shí)現(xiàn)任務(wù),培養(yǎng)學(xué)生的自主學(xué)習(xí)能力;在考試模式的研究與實(shí)踐方面,探討如何采用合理的考試模式、體現(xiàn)過(guò)程考核的重要性、優(yōu)化考試內(nèi)容等,更加合理地評(píng)價(jià)學(xué)習(xí)效果。
關(guān)鍵詞:Java程序設(shè)計(jì);對(duì)比教學(xué);啟發(fā)式教學(xué);類(lèi)庫(kù)學(xué)習(xí)
0、引言
現(xiàn)階段,Java程序設(shè)計(jì)在教學(xué)方法和考試模式方面存在一些不足之處。在教學(xué)方法上,授課方式還是采用以教師為主體的教學(xué)模式,教師沒(méi)有引導(dǎo)學(xué)生積極主動(dòng)地參與到課堂教學(xué)活動(dòng)中,容易導(dǎo)致學(xué)生被動(dòng)接受和不善于思考,從而降低學(xué)生的學(xué)習(xí)主動(dòng)性和積極性;教師在授課過(guò)程中與學(xué)生的討論和溝通不夠,導(dǎo)致教師不了解學(xué)生對(duì)所學(xué)知識(shí)點(diǎn)的掌握程度;課程與發(fā)展前沿、應(yīng)用領(lǐng)域的結(jié)合不夠緊密,導(dǎo)致學(xué)生對(duì)所學(xué)課程的應(yīng)用不明確;在實(shí)驗(yàn)環(huán)節(jié)中,實(shí)驗(yàn)的設(shè)置通常是一個(gè)實(shí)驗(yàn)對(duì)應(yīng)一個(gè)章節(jié)的知識(shí)點(diǎn),跨章節(jié)的綜合實(shí)驗(yàn)較少,導(dǎo)致學(xué)生在面對(duì)大的任務(wù)時(shí)沒(méi)有思路,不知從哪方面人手,無(wú)法將所學(xué)內(nèi)容自如地應(yīng)用到實(shí)際領(lǐng)域中。在考試模式方面,紙制試卷考核和機(jī)考方式各有優(yōu)勢(shì)和不足。
針對(duì)上述問(wèn)題,筆者從理論課程教學(xué)、實(shí)驗(yàn)課程教學(xué)和考試模式3個(gè)方面,探討如何整合和優(yōu)化Java程序設(shè)計(jì)課程的教學(xué)方法和考試模式,使其更為合理,從而有效激發(fā)學(xué)生的學(xué)習(xí)積極性,培養(yǎng)學(xué)生主動(dòng)思考和解決問(wèn)題的能力以及創(chuàng)新和實(shí)踐能力。
1、理論課程教學(xué)方法的研究與實(shí)踐
1.1 推行“學(xué)生為主體。教師為主導(dǎo)”的研究型課堂教學(xué)模式
現(xiàn)有的教學(xué)方法還是以教師講授為主,容易導(dǎo)致學(xué)生學(xué)習(xí)興趣不高,因此必須改革傳統(tǒng)的教學(xué)方法,推行“學(xué)生為主體,教師為主導(dǎo)”的研究型課堂教學(xué)模式。教師授課不能只局限于讓學(xué)生學(xué)會(huì)表面內(nèi)容,從而停留在簡(jiǎn)單使用的階段。教師在課堂上要采用啟發(fā)式教學(xué)方式,多問(wèn)為什么,培養(yǎng)學(xué)生主動(dòng)思考問(wèn)題的意識(shí),引導(dǎo)學(xué)生理解課程知識(shí)點(diǎn)深層次的內(nèi)容。對(duì)于每一個(gè)知識(shí)點(diǎn),教師需要精心設(shè)置一系列巧妙的環(huán)環(huán)相扣的問(wèn)題,增強(qiáng)教學(xué)過(guò)程的趣味性,使學(xué)生積極地參與其中,在互問(wèn)互答中自覺(jué)、主動(dòng)地掌握所學(xué)知識(shí)。例如,學(xué)生在學(xué)習(xí)TreeSet
……
TreeSet
//tree調(diào)用add( )方法依次添加多個(gè)字符串
tree.add("milk");
tree.add("coffee");
tree.add("apple");
tree.addCegg");
tree.add("noodle");
//使用Iterator
Iterator
while(t,hasNextO)
{
String s=t.next0;
System.out.println(s);
}
……
上述程序可以將多個(gè)字符串按照字典序由小到大輸出,即apple coffee eggmilknoodle。學(xué)生基本都能編寫(xiě)上述程序,但是教師不能到此止步,還應(yīng)繼續(xù)提問(wèn):為什么tree對(duì)象中的各個(gè)字符串可以按照字典序輸出?然后由此繼續(xù)討論,引出tree的結(jié)構(gòu)是如圖1所示的平衡排序二叉樹(shù)(序號(hào)①~⑤表示tree添加各個(gè)節(jié)點(diǎn)的先后順序)。
圖1中,任一節(jié)點(diǎn)的左子樹(shù)(左分支)都比該節(jié)點(diǎn)小,右子樹(shù)(右分支)都比該節(jié)點(diǎn)大。讀取時(shí),要從根節(jié)點(diǎn)“milk”開(kāi)始,向下遍歷到最底層的左子樹(shù)節(jié)點(diǎn)“apple”,之后按照?qǐng)D1中虛線的方向順序讀取,再按照實(shí)線的方向順序讀取,最終將字符串按照字典序讀取出來(lái)。
該例子不僅讓學(xué)生學(xué)會(huì)如何進(jìn)行程序設(shè)計(jì),還能讓學(xué)生了解底層的原理,增強(qiáng)學(xué)生主動(dòng)思考的意識(shí)。因此,教師需精心選擇知識(shí)模塊,引導(dǎo)學(xué)生最大限度地參與課程的各個(gè)環(huán)節(jié),包括授課材料的搜集、討論、篩選、講解以及問(wèn)題的釋疑、分析總結(jié)等,充分調(diào)動(dòng)學(xué)生的學(xué)習(xí)積極性和主動(dòng)性。
1.2 進(jìn)行對(duì)比教學(xué),加強(qiáng)學(xué)習(xí)效果
(1)注重Java語(yǔ)言和先修課c++的對(duì)比教學(xué),重點(diǎn)講解兩者之間不同的知識(shí)點(diǎn),讓學(xué)生在深刻理解Java的同時(shí),更好地鞏固c++相關(guān)原理。
①基礎(chǔ)語(yǔ)法部分。教師可以重點(diǎn)講解Java與C++處理數(shù)組的不同方式。C++把數(shù)組作為基本變量,在聲明數(shù)組的同時(shí)為其開(kāi)辟內(nèi)存空間,并且數(shù)組的長(zhǎng)度不能改變;而Java將數(shù)組作為一種特殊的類(lèi)處理,使用new運(yùn)算符為其開(kāi)辟內(nèi)存空間,并且數(shù)組的長(zhǎng)度可變,令編程更加靈活。此外,與c++不同,Java中的基本類(lèi)型變量(如int,float,double,char等)都有對(duì)應(yīng)的封裝類(lèi),即Java中的一切都可以當(dāng)做類(lèi)處理,因此Java更符合面向?qū)ο蟮乃枷?,是更純粹的面向?qū)ο缶幊陶Z(yǔ)言。
②面向?qū)ο笤聿糠?。教師可以重點(diǎn)講解lava與C++關(guān)于繼承的不同處理機(jī)制。Java支持單重繼承,即一個(gè)子類(lèi)只能有一個(gè)父類(lèi),其優(yōu)點(diǎn)是程序結(jié)構(gòu)比c++簡(jiǎn)單、代碼的可靠性高,缺點(diǎn)是有些情況下不能像c++的多重繼承那樣將問(wèn)題的復(fù)雜性表達(dá)完整。為了克服單重繼承的不足,Java提出了接口(interface)的概念(其中只包含抽象方法和常量),一個(gè)類(lèi)可以通過(guò)實(shí)現(xiàn)多個(gè)接口模擬多重繼承。教師還可以將Java中的接口與c++中包含虛函數(shù)和常量的類(lèi)進(jìn)行對(duì)比講解,使學(xué)生更容易掌握和理解。
(2)給定任務(wù),鼓勵(lì)學(xué)生從不同的角度思考和實(shí)現(xiàn),并且將實(shí)現(xiàn)的結(jié)果進(jìn)行對(duì)比。例如,對(duì)于正整數(shù)36168,從個(gè)位開(kāi)始,依次輸出每個(gè)數(shù)位上的數(shù)字。
對(duì)于上述問(wèn)題,可以使用普通變量對(duì)10求余的方法實(shí)現(xiàn),如下所示:
intx:
x=reader.nextInt( );//從鍵盤(pán)上輸入一個(gè)正整數(shù)x
do{ //通過(guò)循環(huán)中的求余和除法操作可以按順序輸出個(gè)位、十位……上的數(shù)
System.out.print(x%10+”);
x=x/10:
}while(x>O);
此外,使用字符串類(lèi)(String)也可以實(shí)現(xiàn),如下所示:
inti:
String s=reader.nextLineO;//從鍵盤(pán)上輸入一個(gè)正整數(shù),將其作為字符串處理
char a[ ]=s.toCharArray( );//將字符串s轉(zhuǎn)換為字符數(shù)組a,a[0]存放個(gè)位數(shù),依此類(lèi)推
for(i=O;i System.out.print(a[i]+""); 上述兩種方法都可以輸出“86163”,但是實(shí)現(xiàn)的角度不同,前者使用基礎(chǔ)語(yǔ)法部分中求余的概念,后者使用常用類(lèi)中的String類(lèi)。通過(guò)從多種角度思考問(wèn)題,學(xué)生開(kāi)闊了思路,將所學(xué)知識(shí)融會(huì)貫通,加強(qiáng)了學(xué)習(xí)效果。 1.3 在課程中引入Java的新動(dòng)向和新應(yīng)用 現(xiàn)階段,教師將授課重點(diǎn)放在對(duì)Java語(yǔ)法和程序設(shè)計(jì)原理的講解上,所用案例多數(shù)都是與具體知識(shí)點(diǎn)對(duì)應(yīng)的小例子,與Java的發(fā)展前沿、應(yīng)用領(lǐng)域結(jié)合得不夠緊密,導(dǎo)致學(xué)生對(duì)所學(xué)課程的作用不甚了解。教師在授課時(shí)應(yīng)該將理論聯(lián)系實(shí)際,從后續(xù)課程和就業(yè)市場(chǎng)中提煉需求,將Java的新動(dòng)向、新應(yīng)用、新特性及其與業(yè)界的銜接等轉(zhuǎn)變?yōu)槭谡n重點(diǎn)。例如,教師在講授某個(gè)知識(shí)點(diǎn)時(shí),以一個(gè)實(shí)際的應(yīng)用項(xiàng)目為依托,向?qū)W生介紹對(duì)應(yīng)知識(shí)點(diǎn)在項(xiàng)目中的具體體現(xiàn),讓學(xué)生體會(huì)Java與應(yīng)用的密切關(guān)系,提高學(xué)習(xí)興趣,而且相信自己學(xué)完該課程之后,也能做出可以應(yīng)用于實(shí)際的項(xiàng)目,大大增強(qiáng)自信心和提高學(xué)習(xí)積極性。 2、實(shí)驗(yàn)課程教學(xué)方法的研究與實(shí)踐 2.1 精心設(shè)計(jì)實(shí)驗(yàn)內(nèi)容,提高學(xué)生實(shí)踐能力 Java實(shí)驗(yàn)課程是鍛煉學(xué)生將所學(xué)知識(shí)點(diǎn)進(jìn)行綜合運(yùn)用,提高其動(dòng)手能力和實(shí)踐能力的有效途徑之一,因此,如何針對(duì)學(xué)生特點(diǎn)設(shè)計(jì)合理的實(shí)驗(yàn)內(nèi)容,有效地幫助學(xué)生鞏固所學(xué)知識(shí)非常關(guān)鍵。 (1)實(shí)驗(yàn)課程中存在的一個(gè)顯著問(wèn)題是學(xué)生面臨所給任務(wù)時(shí),不知從哪方面人手,無(wú)法將所學(xué)內(nèi)容自如地應(yīng)用到實(shí)際領(lǐng)域中。針對(duì)這一問(wèn)題,教師可以設(shè)計(jì)閱讀為主型實(shí)驗(yàn)和編程為主型實(shí)驗(yàn),由簡(jiǎn)到難,循序漸進(jìn)地提高學(xué)生的程序設(shè)計(jì)能力。首先,學(xué)生做閱讀為主型實(shí)驗(yàn),給出部分源代碼,學(xué)生填寫(xiě)剩余的源代碼,培養(yǎng)閱讀和理解源程序的能力,從而掌握其中涉及知識(shí)點(diǎn)的含義和用法;然后,學(xué)生做編程為主型實(shí)驗(yàn),只給出任務(wù)描述,學(xué)生獨(dú)立完成實(shí)驗(yàn)的設(shè)計(jì)和實(shí)現(xiàn),加強(qiáng)實(shí)踐能力。 (2)學(xué)生面臨所給任務(wù)時(shí),不愿意主動(dòng)思考問(wèn)題,而是希望從網(wǎng)絡(luò)或者其他途徑找到現(xiàn)成的解決方法。針對(duì)這一問(wèn)題,教師在設(shè)計(jì)實(shí)驗(yàn)時(shí)要注意題目的原創(chuàng)性,令學(xué)生不能從網(wǎng)絡(luò)上直接找到答案,即使能找到代碼也必須作出較大修改,才能完成任務(wù)。例如,猜數(shù)游戲是一個(gè)經(jīng)典實(shí)驗(yàn)案例,筆者在原案例基礎(chǔ)上附加個(gè)性化前臺(tái)界面、隨機(jī)退出游戲機(jī)制、重復(fù)玩游戲機(jī)制。學(xué)生無(wú)法找到完全符合的代碼,必須主動(dòng)思考才能實(shí)現(xiàn)任務(wù)。 (3)設(shè)計(jì)合理的跨章節(jié)綜合實(shí)驗(yàn),或者以項(xiàng)目為依托,將其劃分為不同的功能模塊,讓學(xué)生以分組的形式完成其中一個(gè)模塊的設(shè)計(jì)與實(shí)現(xiàn)。另外,每組不能只考慮自己的模塊,還需要考慮和其他模塊的連接和協(xié)調(diào),這樣才能將各模塊有效地整合在一起。因此,這樣的實(shí)驗(yàn)內(nèi)容可以鍛煉學(xué)生的創(chuàng)新思維和團(tuán)隊(duì)協(xié)作能力。 2.2 加強(qiáng)類(lèi)庫(kù)學(xué)習(xí),培養(yǎng)學(xué)生的自主學(xué)習(xí)能力 Java提供的類(lèi)庫(kù)性能穩(wěn)定、效率高、具有很好的重用性。Java語(yǔ)言的各個(gè)重要知識(shí)點(diǎn),如常用類(lèi)、異常處理、輸入/輸出流、多線程、網(wǎng)絡(luò)編程等在類(lèi)庫(kù)中都有對(duì)應(yīng)的包(package),因此類(lèi)庫(kù)的學(xué)習(xí)和使用非常重要。由于課時(shí)和篇幅的限制,理論課程和教材只能對(duì)類(lèi)庫(kù)中一部分類(lèi)的特性和方法進(jìn)行介紹,其余的要靠學(xué)生自主學(xué)習(xí)。 針對(duì)上述問(wèn)題,教師可以設(shè)計(jì)一些實(shí)驗(yàn),其中的部分代碼需要理論課程或者教材中未講到的類(lèi)實(shí)現(xiàn)。我們鼓勵(lì)學(xué)生通過(guò)這些實(shí)驗(yàn)自主學(xué)習(xí)類(lèi)庫(kù)內(nèi)容,并且結(jié)合Java運(yùn)行平臺(tái)的聯(lián)機(jī)幫助或搜索引擎等資源,將自學(xué)內(nèi)容應(yīng)用到實(shí)際問(wèn)題中。例如,對(duì)于輸入/輸出流中的對(duì)象流,教材中只講解將已知數(shù)量的對(duì)象信息寫(xiě)入文件和從文件讀出的操作。筆者在設(shè)計(jì)這一部分實(shí)驗(yàn)時(shí),要求學(xué)生對(duì)未知數(shù)量的對(duì)象信息進(jìn)行輸入和輸出。學(xué)生通過(guò)自主學(xué)習(xí)完成任務(wù)后,學(xué)習(xí)興趣和自信心大大增強(qiáng)。 3、考試模式的研究與實(shí)踐 我們?cè)诮虒W(xué)過(guò)程中研究適合Java程序設(shè)計(jì)課程的科學(xué)的考試模式,注重過(guò)程考核和學(xué)生能力的評(píng)價(jià),優(yōu)化考試內(nèi)容,以更加有效地檢驗(yàn)學(xué)生的學(xué)習(xí)效果。 (1)選取合理的考試模式。北京林業(yè)大學(xué)對(duì)于Java程序設(shè)計(jì)的考試模式是在2011年之前采用紙質(zhì)試卷考核方式,2011年之后采用機(jī)考方式。兩種考試模式各有優(yōu)勢(shì)和不足,前一種考試模式可以有效、細(xì)致地考查學(xué)生對(duì)所學(xué)理論知識(shí)點(diǎn)的掌握程度,但是無(wú)法合理地考查學(xué)生在規(guī)定時(shí)間內(nèi)的程序設(shè)計(jì)能力;后一種考試模式注重考查學(xué)生在規(guī)定時(shí)間內(nèi)的編程、調(diào)試、糾錯(cuò)、優(yōu)化等能力,但是考查的知識(shí)點(diǎn)不夠全面。因此,教師需要結(jié)合兩種考試模式的優(yōu)點(diǎn),對(duì)學(xué)生的學(xué)習(xí)效果進(jìn)行全面考查。 (2)注重過(guò)程考核。現(xiàn)階段的課程考核方式是考勤+實(shí)驗(yàn)+期末成績(jī)。除了傳統(tǒng)的考核方式,教師還應(yīng)適當(dāng)增大階段化學(xué)習(xí)效果在考試評(píng)價(jià)中所占的比例,注重過(guò)程考核。例如,考查學(xué)生主動(dòng)參與教學(xué)環(huán)節(jié)的程度、利用工具和綜合創(chuàng)造等技能、創(chuàng)新意識(shí)和分工協(xié)作能力、分組成員在團(tuán)隊(duì)中的工作量以及增加階段化在線測(cè)試的次數(shù)等。 (3)優(yōu)化考試內(nèi)容。現(xiàn)有的考試內(nèi)容通常是一道試題反映一個(gè)或者一部分知識(shí)點(diǎn),教師應(yīng)該精心設(shè)計(jì)考試內(nèi)容,使其能夠貫穿多個(gè)知識(shí)點(diǎn),反映出Java語(yǔ)言的精髓。此外,適當(dāng)增加能夠體現(xiàn)Java新特性、與產(chǎn)業(yè)界緊密相關(guān)的試題,考查學(xué)生的綜合應(yīng)用能力。 4、結(jié)語(yǔ) 除了上述考試方法與考試模式的研究與實(shí)踐外,教師還應(yīng)該將教學(xué)與科研相結(jié)合,對(duì)于有興趣和學(xué)有余力的學(xué)生,要引導(dǎo)他們擴(kuò)展知識(shí)量,學(xué)習(xí)課程以外的內(nèi)容。例如,教師可以設(shè)計(jì)附加實(shí)驗(yàn),讓有能力的學(xué)生完成必做實(shí)驗(yàn)之后,再做有一定難度的附加實(shí)驗(yàn);鼓勵(lì)學(xué)生參加有影響力的計(jì)算機(jī)程序設(shè)計(jì)大賽,通過(guò)富有挑戰(zhàn)性的題目,培養(yǎng)學(xué)生的團(tuán)隊(duì)合作精神和創(chuàng)新意識(shí);鼓勵(lì)學(xué)生積極申報(bào)大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目或參與教師的科研項(xiàng)目,將Java作為有效工具真正應(yīng)用到實(shí)際領(lǐng)域中,促進(jìn)學(xué)生實(shí)踐能力和創(chuàng)新性思維的培養(yǎng),提高學(xué)生的應(yīng)用能力,最終在實(shí)際應(yīng)用中檢驗(yàn)教師的教學(xué)效果和學(xué)生的學(xué)習(xí)成果,實(shí)現(xiàn)理論與實(shí)踐的有效結(jié)合。