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