徐力杰,王磊,黃璞
(南京郵電大學(xué)計算機(jī)學(xué)院,南京210023)
Java語言作為移動互聯(lián)網(wǎng)時代最重要的計算機(jī)語言之一,越來越受關(guān)注。近年來在TIOBE編程語言社區(qū)排行榜上Java語言長期穩(wěn)居前列,這反映出Java受全世界軟件開發(fā)者的喜愛程度。Java語言具有面向?qū)ο?、與平臺無關(guān)、安全、穩(wěn)定和多線程的優(yōu)良特性,特別適于網(wǎng)絡(luò)環(huán)境下應(yīng)用程序的開發(fā)。為了適應(yīng)信息社會和知識經(jīng)濟(jì)時代的需要,我校面向全校經(jīng)管類、人文類和少數(shù)理工類非計算機(jī)專業(yè)的本科低年級學(xué)生開設(shè)了《Java語言程序設(shè)計》這一門程序設(shè)計類通識基礎(chǔ)課程,通過全面系統(tǒng)地講解Java的數(shù)據(jù)類型、基本語法、類與對象等重要概念,使學(xué)生逐步建立面向?qū)ο蟪绦蛟O(shè)計概念,通過使用集成開發(fā)環(huán)境和相關(guān)調(diào)試工具,進(jìn)行簡單的應(yīng)用程序開發(fā)。在幾年前,本門課程采用了傳統(tǒng)的統(tǒng)一教學(xué)組織模式,即所有不同的專業(yè)都采用相同的教學(xué)目標(biāo)、教學(xué)內(nèi)容、教學(xué)方法,并采用相同的考核內(nèi)容,我們在教學(xué)實踐過程中發(fā)現(xiàn)這樣的教學(xué)方式會帶來很多的問題,不同專業(yè)的學(xué)生基礎(chǔ)能力和培養(yǎng)目標(biāo)存在一定的差異性,如果講解難度和考核要求稍低一些會降低理工類專業(yè)學(xué)生的培養(yǎng)質(zhì)量,如果講解難度和考核要求稍高一些又會對文科類專業(yè)的學(xué)生學(xué)習(xí)產(chǎn)生困難,從而打擊學(xué)習(xí)的積極性。因此,為了達(dá)到更好的教學(xué)效果,近年來我們對該門課程進(jìn)行了分層次教學(xué)改革,即針對不同專業(yè)學(xué)生的實際情況分成不同的層次,分別制定不同的教學(xué)目標(biāo)、教學(xué)內(nèi)容、教學(xué)方法和考核要求,真正實現(xiàn)了因材施教和因?qū)I(yè)制宜。盡管分層次教學(xué)在實踐過程中取得了一定的成效,但是面向文科專業(yè)的Java課程教學(xué)依然存在很多問題和挑戰(zhàn)。本文主要針對《Java語言程序設(shè)計》課程在面向文科專業(yè)的分層次教學(xué)過程中的教學(xué)方法展開探討,并通過實踐證明了其良好的效果。
相比較于計算機(jī)專業(yè)和其他理工科專業(yè)學(xué)生而言,文科專業(yè)的學(xué)生在計算機(jī)方面的基礎(chǔ)相對較為缺乏,對編程知識的理解接受能力和動手能力也相對較差,并且對計算機(jī)編程的學(xué)習(xí)普遍有一種畏難情緒。在以往的教學(xué)過程中,經(jīng)常會有很多學(xué)生問關(guān)于文科為何要學(xué)習(xí)編程,文科專業(yè)學(xué)習(xí)編程有什么用這樣的問題,甚至一些學(xué)生會將自己沒學(xué)好的原因歸結(jié)為自己是文科生,似乎文科生學(xué)不好編程是理所應(yīng)當(dāng)?shù)氖虑椤_@樣的現(xiàn)象反映了文科學(xué)生對計算機(jī)編程的學(xué)習(xí)是普遍缺乏自信的,如果學(xué)生一開始就有這樣的畏難情緒和自我否定意識,很顯然這門課程是一定很難學(xué)好的。因此,如何盡可能激發(fā)文科專業(yè)學(xué)生對編程語言課程的學(xué)習(xí)興趣,樹立他們的信心,是我們在教學(xué)過程中需要首先解決的問題。
對于計算機(jī)專業(yè)和一部分非計算機(jī)類理工科專業(yè)的學(xué)生來說,Java語言課程并非他們的第一門編程語言課程,在此之前基本都開設(shè)過C語言或C++課程,對編程有了一定的初步了解和基礎(chǔ),而不同的程序設(shè)計語言在數(shù)據(jù)類型、程序流程控制等基礎(chǔ)方面其實是具有相似性和共通性的,因此他們再去學(xué)習(xí)Java語言相對來說入門會快一些。然而,文科專業(yè)的Java語言課程通常都是在本科低年級(通常是大一下學(xué)期)開設(shè)的。對于文科專業(yè)學(xué)生而言,這是他們的第一門編程語言課程,大多數(shù)學(xué)生之前沒有過任何關(guān)于程序設(shè)計學(xué)習(xí)的基礎(chǔ)甚至沒有過任何計算機(jī)方面的基礎(chǔ),并且學(xué)生本身對這門需要較強(qiáng)邏輯性和實踐性的課程的理解接受能力相對較弱。在以往教學(xué)過程中,經(jīng)常有學(xué)生反映跟不上教學(xué)進(jìn)度,因此經(jīng)常會出現(xiàn)教師教學(xué)計劃進(jìn)度較快和學(xué)生理解接受時間較慢之間的矛盾,教學(xué)效果并不是非常理想。
對于Java編程語言的學(xué)習(xí),計算機(jī)專業(yè)的學(xué)生和非計算機(jī)類理工科專業(yè)的學(xué)生明顯要比文科專業(yè)的學(xué)生具有更強(qiáng)的自驅(qū)力,因為Java是與計算機(jī)專業(yè)相關(guān)度較高的專業(yè)課程,也是與未來工作密切相關(guān)的專業(yè)技能,計算機(jī)專業(yè)的學(xué)生通常比較重視,學(xué)習(xí)上會有一定的內(nèi)驅(qū)力和積極性。很多非計算機(jī)類理工科專業(yè)(例如通信、電子、自動化等)從事的工作也經(jīng)常會依賴于程序設(shè)計的基本技能,因此這些專業(yè)的學(xué)生也會有很強(qiáng)的內(nèi)在動力渴望學(xué)好這門課程。然而由于文科專業(yè)與編程語言課程的專業(yè)關(guān)聯(lián)度較小,很多文科專業(yè)的學(xué)生對其重視程度不夠,甚至一度從思想上將這門課看作是和自己專業(yè)無關(guān)的“副科”,因此很多文科學(xué)生對這門課更多的是被動學(xué)習(xí)和灌輸式學(xué)習(xí),僅僅在課堂上花一些時間,缺乏內(nèi)在的動力去主動花更多的時間在課外。而我們知道對于任何編程語言的學(xué)習(xí),只滿足于課堂上的學(xué)習(xí)是遠(yuǎn)遠(yuǎn)不夠的,需要在課外進(jìn)行大量的實踐練習(xí)才能逐步提高編程水平。按照教學(xué)大綱的要求,《Java語言程序設(shè)計》課程總計48學(xué)時,其中40個學(xué)時為理論課時,8個學(xué)時為上機(jī)實驗課時,很顯然,如果學(xué)生僅僅滿足教學(xué)大綱規(guī)定課時是很難學(xué)精這門課的,尤其是上機(jī)實驗課時相對較少,需要學(xué)生在平時花更多的時間在實踐操作上。如何激發(fā)文科學(xué)生對于編程學(xué)習(xí)的自驅(qū)力以及如何為他們在課外提供足夠廣闊的輔導(dǎo)和實踐平臺是教師需要思考的問題。
在以往的教學(xué)過程中,我們發(fā)現(xiàn)很多的文科專業(yè)學(xué)生在課程的開始階段就明顯表現(xiàn)出自信心不足,這樣的畏難情緒和自我否定意識在學(xué)生整個課程的學(xué)習(xí)過程中起著極大的負(fù)面作用。因此,這就需要我們在這門課的開始階段就要給學(xué)生正確積極的引導(dǎo),通過介紹大量身邊實際事例告訴他們,很多非理工類專業(yè)出身的學(xué)生也能將編程學(xué)好,有的甚至能夠進(jìn)入著名IT企業(yè),具有很強(qiáng)的競爭力,以樹立他們的自信心。另外,需要向?qū)W生強(qiáng)調(diào)編程學(xué)習(xí)的重要性和價值,學(xué)習(xí)編程并非只是為了謀求IT相關(guān)的工作崗位,它可以培養(yǎng)我們的邏輯思維能力,可以幫我們解決很多日常工作中的實際問題,編程也越來越像英語一樣成為現(xiàn)代人的基本技能。通過課程初期正確的引導(dǎo),使得學(xué)生樹立學(xué)習(xí)的信心,在實踐中我們發(fā)現(xiàn)這一點(diǎn)會對整個課程的教學(xué)效果起到尤為重要的作用。此外,我們可以盡可能將課程與專業(yè)背景相結(jié)合,將一些原本枯燥的編程題目融入到具體的相關(guān)文科專業(yè)的背景和應(yīng)用中,通過讓學(xué)生利用編程解決自己專業(yè)背景下的具體問題,使得學(xué)生能夠體驗到編程的樂趣和價值,讓他們不再認(rèn)為這是一門和自己專業(yè)毫無關(guān)聯(lián)的課程,從而激發(fā)學(xué)生的學(xué)習(xí)興趣。對于學(xué)生頻繁的詢問問題,尤其是面對一些簡單甚至幼稚的問題時,任課教師要能夠保持足夠的耐心解答,不能過于打擊學(xué)生的學(xué)習(xí)熱情,同時也要進(jìn)一步引導(dǎo)他們培養(yǎng)獨(dú)立思考問題的能力,減少他們學(xué)習(xí)過程中對教師過于依賴的心理,引導(dǎo)他們在遇到問題時應(yīng)該要先多思考,通過查閱書籍、搜索網(wǎng)絡(luò)資源、和周圍同學(xué)討論等方式尋求答案,實在解決不了的問題再來請教教師,避免遇到任何問題時不經(jīng)思考地就去請教教師,從而喪失了獨(dú)立思考的學(xué)習(xí)能力。
《Java語言程序設(shè)計》課程涉及的知識點(diǎn)較多,主要包括兩大部分的內(nèi)容,第一部分包含數(shù)據(jù)類型、運(yùn)算符、表達(dá)式、程序流程控制、數(shù)組和方法等一些Java基本語法知識,這部分內(nèi)容屬于大多數(shù)程序設(shè)計語言所共通的基礎(chǔ);第二部分包含類和對象、繼承和多態(tài)、異常處理、線程、文件處理、GUI圖形用戶界面等在內(nèi)的Java語言特有的相關(guān)知識點(diǎn)。在以往的教學(xué)計劃中,各個知識點(diǎn)上的教學(xué)時間是近乎均衡分配的。大多數(shù)理工科專業(yè)的學(xué)生能夠適應(yīng)這樣的教學(xué)計劃,這是因為理工科專業(yè)學(xué)生對于編程的理解接受和動手能力相對較強(qiáng),并且一些理工科專業(yè)在開設(shè)這門課程之前還開設(shè)過C語言的課程,而不同高級編程語言的基礎(chǔ)語法部分是基本相同或相似的,因此這樣的基礎(chǔ)也能使他們學(xué)習(xí)Java語言更容易入門。然而對于文科專業(yè)的學(xué)生而言,大多數(shù)同學(xué)對于編程的理解接受和動手能力相對較弱,并且這是他們接觸的第一門高級編程語言課程,入門相對較慢。在以往的教學(xué)實踐中,我們發(fā)現(xiàn)對文科專業(yè)的教學(xué)效果并不是很理想,經(jīng)常有很多文科學(xué)生跟不上授課的進(jìn)度,尤其是在前面最重要的基本語法知識部分,很多學(xué)生在課程結(jié)束后對這部分基礎(chǔ)依然掌握的很差,而這部分內(nèi)容沒學(xué)好會直接影響后面部分知識的學(xué)習(xí),造成后面進(jìn)度也跟不上從而喪失學(xué)習(xí)信心和學(xué)習(xí)興趣,而越?jīng)]有信心又會進(jìn)一步拉下更多的進(jìn)度,造成惡性循環(huán)。其中主要的原因在于課程內(nèi)容較多而平臺課的課時較為有限,很多教師為了保證教學(xué)計劃需要趕進(jìn)度,這就造成了與文科學(xué)生理解接受時間較慢之間的矛盾。因此,考慮到文科專業(yè)的特點(diǎn)以及課時的有限性,我們應(yīng)該設(shè)置更加合理的教學(xué)計劃。具體地說,我們應(yīng)該在教學(xué)計劃中添加一些計算機(jī)基礎(chǔ)知識的介紹,并且重點(diǎn)加強(qiáng)Java基礎(chǔ)語法知識教學(xué)的比例,因為這部分內(nèi)容不僅是Java語言的基礎(chǔ),也是所有高級程序設(shè)計語言的共通基礎(chǔ),因此對于初次學(xué)習(xí)編程語言的文科生來說,這部分內(nèi)容是學(xué)習(xí)的重點(diǎn)和關(guān)鍵,只有保證這部分基礎(chǔ)內(nèi)容扎實,后面部分的學(xué)習(xí)以及其他語言的學(xué)習(xí)才會更加容易。同時,我們進(jìn)一步壓縮一些Java特有的知識點(diǎn)在教學(xué)計劃中的比例,去掉一些較難的內(nèi)容,并且將其中一部分內(nèi)容(例如文件處理、GUI圖形用戶界面等)重點(diǎn)放到集中實踐的程序上機(jī)環(huán)節(jié)結(jié)合項目實訓(xùn)去講解。我們對《Java語言程序設(shè)計》課程開設(shè)了對應(yīng)的32學(xué)時的程序上機(jī)集中實踐課,該實踐課要求利用所學(xué)知識設(shè)計一個基于Java語言的中小型桌面應(yīng)用程序,以往的程序上機(jī)教學(xué)只是要求學(xué)生在機(jī)房上機(jī)實踐,教師負(fù)責(zé)答疑但不進(jìn)行講授。通常程序設(shè)計實踐課程會安排在理論課程授課學(xué)期的下一學(xué)期進(jìn)行,很多學(xué)生特別是文科專業(yè)學(xué)生經(jīng)過一個暑假后很多知識點(diǎn)都有所遺忘,因此上機(jī)實踐效果并不是很理想。通過重新調(diào)整教學(xué)計劃,我們可以將GUI圖形用戶界面、文件處理等這部分與桌面應(yīng)用程序設(shè)計密切相關(guān)的內(nèi)容重點(diǎn)放在集中實踐的程序上機(jī)課上進(jìn)行講解,這樣一方面可以在理論課程的教學(xué)計劃上調(diào)出更大的空間重點(diǎn)講解基礎(chǔ)內(nèi)容,另一方面也可以進(jìn)一步提高程序上機(jī)實踐課程的教學(xué)效果,能夠讓學(xué)生立即學(xué)以致用,提高實踐能力。
對于任何一種編程語言的學(xué)習(xí),上機(jī)實踐操作都是非常重要的一個環(huán)節(jié),只有通過實踐操作多多練習(xí)編程才能逐步提高程序設(shè)計的水平。然而,《Java語言程序設(shè)計》課程只有8個學(xué)時(4次)的課內(nèi)實驗上機(jī)的安排,僅僅依靠這8個學(xué)時的上機(jī)進(jìn)行實戰(zhàn)操作顯然是不夠的。不過好在現(xiàn)在絕大多數(shù)學(xué)生都有屬于自己的筆記本電腦,同時學(xué)校機(jī)房和圖書館的計算機(jī)也是隨時向?qū)W生開放使用的,因此學(xué)生的上機(jī)操作并不是只能依賴于這課內(nèi)的8個學(xué)時,課外的時間也可以利用進(jìn)行上機(jī)操作。我們建立了一套健全的課外輔導(dǎo)體系,除了每周任課教師在固定的時間和地點(diǎn)提供面對面的課程答疑外,我們也充分利用了網(wǎng)絡(luò)平臺,通過建立課程公眾號、課程QQ群,在課外時間向?qū)W生在線提供與Java課程相關(guān)的各種電子資源,隨時提供在線答疑和討論。同時,本課程組還開發(fā)了一個基于云端的Java課程作業(yè)管理平臺,該平臺同時支持PC端和手機(jī)端的登錄使用,目前該作業(yè)平臺可以支持的題型包括選擇題、程序填空題、程序改錯題和編程題。任課教師可以在該作業(yè)平臺上通過教師權(quán)限發(fā)布作業(yè),學(xué)生可以登錄平臺在線完成并提交作業(yè),后臺會對提交的作業(yè)自動進(jìn)行批改得出評分。對于編程題,學(xué)生只需要在線寫出程序,點(diǎn)擊測試運(yùn)行后,后臺云端會自動進(jìn)行程序的編譯和運(yùn)行(因此本地設(shè)備無需安裝JDK和配置環(huán)境變量即可使用該平臺),并且判定運(yùn)行結(jié)果的正確性,同時平臺還能夠自動判別學(xué)生所寫程序與其他學(xué)生寫的程序之間的相似性,以識別作業(yè)抄襲。通過定期在作業(yè)平臺上發(fā)布課程作業(yè),尤其是增加編程題作業(yè)的比重,可以使得學(xué)生在課外有更多的機(jī)會進(jìn)行程序設(shè)計的實踐,通過以練代學(xué),逐步培養(yǎng)他們的動手能力和學(xué)習(xí)興趣。同時,我們設(shè)定每次作業(yè)的提交時間范圍并且允許每次作業(yè)在截止時間內(nèi)可以進(jìn)行無限多次提交,即學(xué)生在一次作業(yè)提交后可以對錯誤的地方糾正后再次提交,直到完全正確為止,這樣可以加強(qiáng)學(xué)生的學(xué)習(xí)效果。我們注意到并非所有的文科專業(yè)學(xué)生都是不擅于學(xué)習(xí)編程的,少部分文科學(xué)生也有較強(qiáng)的學(xué)習(xí)能力,能夠及時跟上教師的進(jìn)度,這就要求我們在平時的教學(xué)中能夠擅于發(fā)現(xiàn)這些學(xué)生并且進(jìn)行因材施教。對于基礎(chǔ)較好、學(xué)習(xí)能力較強(qiáng)且求知欲也很強(qiáng)的學(xué)生,在課外輔導(dǎo)時可以進(jìn)行區(qū)別對待。
通過采用上述的教學(xué)方法,我們在2016-2017學(xué)年第2學(xué)期針對2016級公共事業(yè)管理專業(yè)進(jìn)行了實踐,取得了很好的效果。學(xué)生的學(xué)習(xí)熱情明顯提升,課堂的出勤率和聽課專注程度都得到了提高,課后主動參與答疑和討論的人數(shù)比往年增多,形成了較好的學(xué)習(xí)氛圍,答疑過程中所問問題的層次也比往年學(xué)生有所提高,作業(yè)管理平臺參與度較高,大多數(shù)學(xué)生都能夠及時在線提交作業(yè),作業(yè)完成情況較好,最終的期末考試成績也比往年得到大幅度的提升,卷面成績的平均分和2015級同專業(yè)相比提高了12分,同時對應(yīng)的程序上機(jī)實踐課程也取得了較好的教學(xué)效果,無論是從驗收答辯環(huán)節(jié)的學(xué)生表現(xiàn)還是最終提交的實物質(zhì)量來看,都明顯好于往年的同專業(yè)學(xué)生。因此,上述教學(xué)方法能夠在一定程度上提高面向文科專業(yè)的Java課程的教學(xué)質(zhì)量。
本文主要針對面向文科專業(yè)的Java語言課程教學(xué)方法進(jìn)行了研究,首先對Java語言課程在文科專業(yè)教學(xué)中面臨的問題進(jìn)行了深入的分析,然后針對這些問題分別提出了相應(yīng)的教學(xué)方法,并且通過將所提出的方法應(yīng)用于實際的教學(xué)實踐,從而驗證了本文所提方法的有效性。