李勇
(解放軍信息工程大學(xué),河南 鄭州)
計算機和互聯(lián)網(wǎng)的快速發(fā)展和不斷普及,尤其是大數(shù)據(jù)時代的來臨,人們的工作和生活已經(jīng)發(fā)生了巨大的改變,由此也促進(jìn)了高校計算機技術(shù)教育的不斷發(fā)展,學(xué)科的不斷融合與發(fā)展,誕生了諸如大數(shù)據(jù)等新型專業(yè)和方向。
大數(shù)據(jù)專業(yè)是一個涵蓋計算機、數(shù)學(xué)和統(tǒng)計學(xué)的交叉學(xué)科,要求具有扎實的計算機、數(shù)學(xué)和語言學(xué)基礎(chǔ)和較寬的學(xué)術(shù)視野;具備信息檢索、數(shù)據(jù)挖掘和語料管理等實際操作的能力,并且具備較好的信息處理軟件開發(fā)和工程實踐能力、較好的專業(yè)素養(yǎng)和較強的創(chuàng)新意識。由于該專業(yè)的復(fù)合性和當(dāng)前信息處理工作實際,需要講授的編程課程包括《C語言》《Java語言》《Python語言》等,需要講授以編程為基礎(chǔ)的課程有《數(shù)據(jù)結(jié)構(gòu)》《數(shù)據(jù)庫技術(shù)》《數(shù)據(jù)挖掘》和《自然語言處理技術(shù)》等課程。因此,編程語言的掌握對于完成該專業(yè)的學(xué)習(xí)是尤其重要的,也是系統(tǒng)的掌握計算機、數(shù)學(xué)等基礎(chǔ)理論和研究方法的前提。大數(shù)據(jù)主要是對自然語言的信息處理,其中包括文本信息、語音信息、視頻信息等各個層次的處理。根據(jù)當(dāng)前技術(shù)發(fā)展的現(xiàn)狀和教學(xué)實際,文本信息的處理是重點,所以在編程課程的教學(xué)中,涉及到字符串、列表和集合等信息處理的知識對于該專業(yè)學(xué)習(xí)的重點。
編程課程作為計算機相關(guān)專業(yè)的基礎(chǔ)必修課程,主要目的是通過學(xué)習(xí)計算機語言以及程序設(shè)計方法,逐漸培養(yǎng)學(xué)生的編程能力、用計算機解決實際問題的能力。對于理工科的學(xué)生來講,循序漸進(jìn)的更需要學(xué)習(xí)多門計算機語言課程。學(xué)習(xí)計算機語言并用來編寫程序解決實際問題,體現(xiàn)了科學(xué)就是生產(chǎn)力,也是理論聯(lián)系實際的一個重要體現(xiàn)。
由于語言信息處理專業(yè)不是純粹的計算機專業(yè),而是相關(guān)領(lǐng)域的交叉學(xué)科。該專業(yè)融合了計算機、數(shù)學(xué)、外語等不同學(xué)科的知識,自身的課業(yè)負(fù)擔(dān)很重。但是當(dāng)前編程課程的教學(xué)內(nèi)容,教材的選擇并沒有考慮這些因素,而是使用通用的編程教材,采用一般的課程教學(xué)模式。同時,當(dāng)前大數(shù)據(jù)時代造就了信息處理技術(shù)日新月異,新知識新手段在教材中很難體現(xiàn),在編程課程中無法完成,導(dǎo)致教學(xué)過程中學(xué)生學(xué)習(xí)興趣不高、感覺學(xué)到的編程知識沒有用武之地。
計算機編程的相關(guān)課程概念和思想較為抽象和復(fù)雜,邏輯性非常強。如果單純采用傳統(tǒng)的教學(xué)方式,對于初學(xué)者來說必然會造成一定的難度[1]。雖然教學(xué)過程中都強調(diào)理論與實踐相結(jié)合,但是在具體操作上是以理論講授為主,實踐練習(xí)為輔,還是邊講理論邊實踐,亦或是實踐為主,理論為輔,都沒有形成固定的模式。導(dǎo)致在注重知識體系的完整性方面和學(xué)生自學(xué)學(xué)習(xí)、創(chuàng)新能力的培養(yǎng)上沒有很好的契合,同時學(xué)生編程的思維能力和團隊精神的培養(yǎng)上也是此類課程需要解決的問題。
編程的最終目的要解決實際問題,計算機軟件工程包括需求分析、架構(gòu)設(shè)計、算法設(shè)計、編程實現(xiàn)和擴展維護(hù)等過程。因此既需要語言溝通討論需求、數(shù)學(xué)思維設(shè)計算法、計算機思維來設(shè)計數(shù)據(jù)結(jié)構(gòu),同時還需要編寫代碼來完成程序。學(xué)生常常眼高手低,教師在課堂上講授學(xué)生能夠聽懂,但是在課下同樣的問題讓學(xué)生自己解決時,又會感覺無從下手。因此,如何培養(yǎng)學(xué)生的計算機抽象思維方式以及獨立解決問題的能力是課程的關(guān)鍵。
當(dāng)前編程課程考核同多數(shù)考試一樣,經(jīng)常采用一張試卷來判定學(xué)生的學(xué)習(xí)效果,導(dǎo)致學(xué)生經(jīng)常上課不認(rèn)真聽講,考試臨時抱佛腳突擊復(fù)習(xí),有時雖然能考出好的成績,但是考試一過知識很快就會忘記,由于沒有學(xué)以致用,所以不利于培養(yǎng)學(xué)生解決實際問題的能力,尤其不利于對編程課程的學(xué)習(xí)。同時由于缺乏對學(xué)生整個學(xué)習(xí)過程的監(jiān)督和管理,教師對學(xué)生的真實情況掌握不清楚,更不能針對考試提出改善教學(xué)效果的措施。
根據(jù)大數(shù)據(jù)專業(yè)的特點分析,該專業(yè)主要使用計算機的理論和方法,對數(shù)學(xué)上的一些算法和語言學(xué)上的規(guī)則,采用編程語言進(jìn)行實現(xiàn)。所以編程課程的教學(xué)內(nèi)容一定要恰當(dāng)合適,有些編程課程要按部就班的打好基礎(chǔ),有些則可以有所取舍,只講授與該專業(yè)相關(guān)的內(nèi)容。教學(xué)內(nèi)容的選擇通常取決于教材的選擇,本科生的教學(xué)一般以教材的內(nèi)容為主,所以需要根據(jù)大數(shù)據(jù)專業(yè)選擇合適的教材,必要的時候可以考慮自編教材,這樣更容易對該專業(yè)的教學(xué)更有針對性。
對于《C語言》課程,可以采用通用的教材,對于所有內(nèi)容從數(shù)據(jù)類型、程序結(jié)構(gòu)、函數(shù)和數(shù)組、指針和結(jié)構(gòu)體都需要講授,因為它是所有編程語言的基礎(chǔ)。C語言作為結(jié)構(gòu)化程序設(shè)計語言,簡潔緊湊,執(zhí)行效率高,數(shù)據(jù)類型豐富,兼具高級語言和低級語言的特點,非常適合做教學(xué)編程語言,同時C語言的基礎(chǔ)內(nèi)容在其他的語言中都有所體現(xiàn);對于《C++面向?qū)ο蟪绦蛟O(shè)計》,采用C++語言講授,該課程對于語言本身的掌握并不是重點,重要需要掌握面向?qū)ο蟪绦蛟O(shè)計的思想進(jìn)行編程;對于《C#語言》重要的是掌握使用C#語言來進(jìn)行桌面應(yīng)用程序的設(shè)計,以及字符串、集合和列表、數(shù)據(jù)庫等與文本信息處理相關(guān)的內(nèi)容;對于《Python語言》,通過Python語言講授其進(jìn)行文本處理的便利性,通過JavaScript等網(wǎng)頁腳本語言講授其進(jìn)行網(wǎng)頁清洗、文本抽取等工作的優(yōu)勢。對于《Java語言》,重點是掌握J(rèn)ava語言編寫的程序能夠?qū)崿F(xiàn)跨平臺,以及可利用大量的自然語言處理的開源程序和類庫(大多采用Java語言編寫)。因此,根據(jù)大數(shù)據(jù)的專業(yè)定位和培養(yǎng)目標(biāo),不同的編程語言有不同的講授重點。在教學(xué)內(nèi)容的選擇上,切勿所有編程語言重點不分,讓學(xué)生感到無所適從。
1. 授課方式采用小班授課,提高理論和實踐授課質(zhì)量。
編程語言課采用小班方式授課,教師可以兼顧每個學(xué)生,對學(xué)生做全面的了解,對學(xué)生的理論問題和程序設(shè)計問題能夠快速地發(fā)現(xiàn)并解決,有利于學(xué)生對課堂內(nèi)容的掌握。教師講授過程中,首先講解教材的理論內(nèi)容,包括基本的編程思想、編程方法、具體的概念和原理,并講解相關(guān)的例題進(jìn)行[2]。然后通過信息處理方面的程序?qū)嵗?,例如從分詞、語言的形態(tài)分析、信息檢索等抽取相應(yīng)的知識點供學(xué)生上機實踐,提高學(xué)生的動手編程能力,產(chǎn)生了比較好的教學(xué)效果。
2. 課堂教學(xué)手段形式多樣話,充分調(diào)動學(xué)生學(xué)習(xí)積極性。
編程課程理論性強,其中的概念和算法通常比較枯燥,如果沒有適合的教學(xué)方法來調(diào)動學(xué)生學(xué)習(xí)的興趣,很難產(chǎn)生良好的教學(xué)效果。例如漢諾塔問題可以制作Flash動畫,讓學(xué)生清楚程序的執(zhí)行過程,調(diào)動學(xué)生的學(xué)習(xí)積極性[3]。在學(xué)習(xí)編程語言的字符串和集合知識的時候,可讓學(xué)生進(jìn)行簡單的文本分詞、詞頻統(tǒng)計的練習(xí)、既讓學(xué)生練習(xí)了所學(xué)內(nèi)容,又讓學(xué)生對大數(shù)據(jù)專業(yè)有進(jìn)一步的了解。通過混合式教學(xué)和慕課等多種教學(xué)手段,能夠很好的促進(jìn)編程課程的學(xué)習(xí)。
3. 豐富多彩的授課方式,培養(yǎng)學(xué)生自主學(xué)習(xí)能力。
大數(shù)據(jù)融合了多學(xué)科的課程體系,教師需要對不同類型編程課程的特點有大致的了解,才能夠選取適合的教學(xué)模式。該專業(yè)常用的教學(xué)模式有問題討論式教學(xué)、項目驅(qū)動式教學(xué)和啟發(fā)式教學(xué)等。對于編程課程理論性比較強的內(nèi)容,可以采用問題討論式教學(xué)。例如面向?qū)ο缶幊趟枷?,由教師提出面向?qū)ο缶幊掏嫦蜻^程相比,其優(yōu)缺點、使用領(lǐng)域等問題。下面學(xué)生之間進(jìn)行討論,并且總結(jié)出最后的結(jié)果,教師基本不參與討論,僅在最后給予輔導(dǎo)和評價。從而培養(yǎng)學(xué)生獨立思考、主動學(xué)習(xí)和探索未知問題的能力。對于操作性比較強的內(nèi)容,可以采用項目驅(qū)動式教學(xué)。例如,在C語言的教學(xué)過程中,可以進(jìn)行通訊錄程序的練習(xí),根據(jù)學(xué)習(xí)內(nèi)容的深入,先后不斷的加入存儲、排序和查找等內(nèi)容。對于項目驅(qū)動式教學(xué),教師注意要隨著課程的不斷深入來進(jìn)行程序的擴充,由于新知識在舊知識基礎(chǔ)上逐步導(dǎo)入,逐層推進(jìn),學(xué)生更容易掌握,但此過程同時要引導(dǎo)學(xué)生獨立思考。學(xué)生的課后作業(yè)也可以根據(jù)自身情況,參加教師的項目和課題,提高學(xué)生分析、解決問題以及自身的編程能力?;蛘邔τ诔橄蟮闹R可以采取啟發(fā)式教學(xué),結(jié)合實際問題、直觀形象的具體實例來引起學(xué)生聯(lián)想,啟發(fā)學(xué)生的抽象思維,同時培養(yǎng)學(xué)生舉一反三、獨立創(chuàng)造性的邏輯思維能力[4]。
科學(xué)合理的考核方式是教育評價的重要手段之一,因此必須建立恰當(dāng)?shù)目己朔绞剑⑶易⒅剡^程監(jiān)督和綜合素質(zhì)的培養(yǎng)。編程課程的最終目的是能夠使用計算機編寫程序來解決實際問題,因此上機考試應(yīng)該是編程課程考核的最終形式。但是如果所有編程課程均采用上機考試也存在一些問題。例如,在上機考試中,教師列出幾道編程題目,如果學(xué)生答同樣的題目,使得考題覆蓋面不廣;如果讓系統(tǒng)隨機抽出一些題目,又很難保證難度相同以及評判客觀。
因此,根據(jù)編程課程類型的不同,可以分批采用不同的考核模式。對于《C語言》《C#語言》等課程,該課程也是國家計算機等級考試二級的科目之一,完全采用上機考試時可行的,所以可以通過引進(jìn)或者開發(fā)考試系統(tǒng)來實現(xiàn)。對于《C++面向?qū)ο蟪绦蛟O(shè)計》等課程,完全上機考核不能完全反應(yīng)學(xué)生水平,所以可以采用筆試考核和上機考核相結(jié)合的方式。筆試可在期末考試實施,全面考察學(xué)生對所學(xué)課程基礎(chǔ)知識和基本理論的掌握情況;上機考核可在平時、期中考試和課程設(shè)計中實施,主要通過考查學(xué)生對小程序、中等程序和較大規(guī)模程序的設(shè)計和編寫能力,考核學(xué)生解決實際問題的能力和運用知識的綜合能力[4-6]。
隨著大數(shù)據(jù)時代的計算機技術(shù)發(fā)展越來越快,通過大數(shù)據(jù)編程能夠解決的問題也越來越多,對于我們在教學(xué)過程中提出的挑戰(zhàn)也越來越大。更多的院校成立的大數(shù)據(jù)專業(yè)或方向,它是一個多學(xué)科交叉融合的新興學(xué)科,編程課程所占的比重比較大,既要注重基礎(chǔ)理論,又要緊跟技術(shù)發(fā)展的步伐,教師如何較好、學(xué)生如何學(xué)好、考試如何考好都是一些需要解決的問題。因此,要根據(jù)該專業(yè)和編程課程發(fā)展的實際,與時俱進(jìn),做好教學(xué)改革,才能培養(yǎng)合格的大數(shù)據(jù)專業(yè)人才。