李勝華,李 念
(湖北大學(xué) 數(shù)學(xué)與統(tǒng)計學(xué)學(xué)院,湖北 武漢 430062)
信息與科學(xué)計算專業(yè)培養(yǎng)具有扎實的數(shù)學(xué)基礎(chǔ)、較高數(shù)學(xué)素養(yǎng)和創(chuàng)造才能,具有較強的算法設(shè)計分析編程能力,能用所學(xué)的理論知識、方法和技能解決信息技術(shù)或科學(xué)工程計算中的實際問題[1],從事數(shù)學(xué)應(yīng)用研究、信息技術(shù)、程序設(shè)計和軟件開發(fā)的創(chuàng)新研究型、應(yīng)用型、復(fù)合型優(yōu)秀人才。在這種“厚基礎(chǔ)、寬口徑”的人才培養(yǎng)理念及當(dāng)今IT 行業(yè)高素質(zhì)人才持續(xù)緊缺的情況下,計算機程序設(shè)計素養(yǎng)、算法設(shè)計能力、計算機應(yīng)用能力的培養(yǎng)尤為重要。
信息與科學(xué)計算專業(yè)的高級語言程序設(shè)計課程在大一年級開設(shè),但由于在低年級開設(shè)了大量的數(shù)學(xué)專業(yè)基礎(chǔ)知識,后續(xù)也沒有開設(shè)直接應(yīng)用程序設(shè)計的計算機類課程,導(dǎo)致學(xué)生課程學(xué)習(xí)時間投入不足,實際訓(xùn)練不足,相當(dāng)一部分學(xué)生只是應(yīng)付課程學(xué)分,計算機程序設(shè)計能力較弱。另一方面,信息與科學(xué)計算專業(yè)的學(xué)生由于對數(shù)學(xué)基礎(chǔ)知識的重要性認(rèn)識不夠,導(dǎo)致學(xué)習(xí)興趣不大,數(shù)學(xué)與計算機有效融合比較困難。近些年許多高校為提高程序設(shè)計能力對計算機程序設(shè)計類課程及數(shù)學(xué)課實踐課的教學(xué)改革進行了廣泛的研究。文獻(xiàn)[2—3]針對計算機專業(yè)類提出教學(xué)改革:文獻(xiàn)[2]構(gòu)建計算機軟件設(shè)計類課程群(14 門課),文獻(xiàn)[3]提出程序設(shè)計基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)、算法設(shè)計與分析和組合數(shù)學(xué)等4 門課程整體優(yōu)化的教學(xué)改革。文獻(xiàn)[4—7]分別研究抽象代數(shù)、運籌學(xué)、密碼學(xué)和離散數(shù)學(xué)的教學(xué)實踐。
根據(jù)計算機能力的培養(yǎng)目標(biāo),計算機程序設(shè)計類課程在大學(xué)各專業(yè)的開設(shè)情況按計算機相關(guān)專業(yè)、信息類專業(yè)和其他專業(yè)可分3 類。表1 列出了湖北大學(xué)4 個專業(yè)開設(shè)程序設(shè)計類課程的情況,可以看出計算機類專業(yè)的程序設(shè)計類課程多且直接應(yīng)用于較多的其他專業(yè)課程;信息類專業(yè)的計算機程序設(shè)計類課程除高級語言程序設(shè)計外,還有幾門核心課程:離散數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計與分析等;其他專業(yè)一般只開設(shè)一門高級語言程序設(shè)計課。
對比計算機類專業(yè),信息與計算科學(xué)專業(yè)的數(shù)學(xué)基礎(chǔ)課設(shè)置較多,表2 列出了湖北大學(xué)信息與計算科學(xué)和計算機科學(xué)與技術(shù)兩個專業(yè)數(shù)學(xué)類課的設(shè)置情況。
信息與計算科學(xué)專業(yè)的計算機算法、程序設(shè)計能力的要求與計算機類專業(yè)類似,但高級語言程序設(shè)計入門課沒有很多直接應(yīng)用程序設(shè)計實踐的相關(guān)課程,且低年級數(shù)學(xué)基礎(chǔ)課程較重,課外沒有過多時間參加項目實施,導(dǎo)致相當(dāng)一部分同學(xué)存在計算機程序設(shè)計知識不系統(tǒng),用計算機程序解決實際問題的能力訓(xùn)練不足等問題。另一方面,數(shù)學(xué)課的實踐課目前主要是使用Excel、R語言、Lindo、Lingo、Matlab、Mathematica 等專用數(shù)學(xué)軟件,直接用C 語言程序設(shè)計的很少,且課程間的實踐方法聯(lián)系少。
信息與計算科學(xué)專業(yè)基于程序設(shè)計能力、專用軟件應(yīng)用能力及軟件開發(fā)能力,分別開設(shè)3 門對應(yīng)的入門課——高級語言程序設(shè)計、數(shù)學(xué)軟件與應(yīng)用和面向?qū)ο蟪绦蛟O(shè)計,并和后續(xù)相關(guān)課程組建了對應(yīng)的課程群。程序設(shè)計類課程群包括高級語言程序設(shè)計(C 語言)、初等數(shù)論、知識實習(xí)、離散數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、抽象代數(shù)、算法設(shè)計與分析、課程設(shè)計、運籌學(xué)、計算機密碼學(xué)等10 門課程。這10 門課程的設(shè)定考慮了知識的邏輯性、功能性及時間的連續(xù)性,它們按培養(yǎng)目標(biāo)分為三大類:①與程序設(shè)計直接相關(guān)的課程,旨在循序漸進培養(yǎng)專業(yè)的計算機程序設(shè)計能力;②在課內(nèi)可以進行程序設(shè)計實驗的理論課程,旨在訓(xùn)練程序設(shè)計應(yīng)用專業(yè)知識能力,增強對理論知識的理解;③在課外進行實踐的課程,旨在培養(yǎng)綜合專業(yè)應(yīng)用能力。表3 列出了各學(xué)期開設(shè)的相關(guān)課程及對應(yīng)目標(biāo)類別。
表1 三類四專業(yè)計算機程序設(shè)計類課程開設(shè)情況
表2 兩專業(yè)前4 學(xué)期數(shù)學(xué)基礎(chǔ)類課程開設(shè)情況
表3 信息與計算科學(xué)專業(yè)程序設(shè)計類課程群
程序設(shè)計能力的培養(yǎng)分入門、簡單應(yīng)用、提高和高級應(yīng)用4 個階段。程序設(shè)計語法及應(yīng)用的教學(xué)內(nèi)容循序漸進地分布在課程群中,詳細(xì)內(nèi)容見表4。
在高級語言程序設(shè)計這門課,一方面要把前學(xué)期計算機基礎(chǔ)課提到與程序設(shè)計相關(guān)的基本知識落實,另一方面要掌握C 程序設(shè)計的基本語法、程序設(shè)計思維及初步的算法設(shè)計。
表4 程序設(shè)計語法及應(yīng)用教學(xué)內(nèi)容分布
相關(guān)的計算機基本知識包括:計算機語言、數(shù)據(jù)內(nèi)部表示及整數(shù)的進制轉(zhuǎn)換等。
C 程序設(shè)計基礎(chǔ)知識包括:C 語言程序的基本框架、基本數(shù)據(jù)類型、三大控制結(jié)構(gòu)、數(shù)組、函數(shù)、用戶自定義型等內(nèi)容。
一些簡單基本問題的算法設(shè)計:進制轉(zhuǎn)換、順序查找、折半查找、選擇排序、冒泡排序、最大公因子等。
為了鍛煉程序設(shè)計能力及后續(xù)課程的需要,高級語言程序設(shè)計課程之后開設(shè)了初等數(shù)論、知識實習(xí)兩門課程。該兩門課程中的實踐和實習(xí)中要求學(xué)生能用C 語言解決已學(xué)數(shù)學(xué)理論中的基本問題,如:矩陣類、行列式類、整數(shù)類等的實現(xiàn)。矩陣類的相關(guān)操作有輸入、輸出、加運算、減運算、乘運算、是否對稱、求鞍點等;行列式類的相關(guān)操作有輸入、輸出、求值等;整數(shù)類的相關(guān)算法有判斷素數(shù)、質(zhì)因數(shù)分解、不定方程及同余方程求解等。
對上述問題的實現(xiàn)一方面重點學(xué)習(xí)、理解、應(yīng)用高級語言程序設(shè)計課程中提到的二維數(shù)組、二重指針、函數(shù)、多文件等語法內(nèi)容;另一方面對后續(xù)課程數(shù)據(jù)結(jié)構(gòu)的入門及計算機密碼學(xué)的實踐有很大的幫助。
離散數(shù)學(xué)研究離散變量的結(jié)構(gòu)及相互間關(guān)系的數(shù)學(xué)學(xué)科,在計算機學(xué)科與技術(shù)有著廣泛的應(yīng)用,是提高程序設(shè)計質(zhì)量的必備學(xué)習(xí)基礎(chǔ)。教學(xué)內(nèi)容主要有集合論、數(shù)理邏輯、圖論、代數(shù)結(jié)構(gòu)等部分。在集合論、數(shù)理邏輯可設(shè)計一些程序設(shè)計應(yīng)用實驗來提高學(xué)生的學(xué)習(xí)興趣;圖論和代數(shù)結(jié)構(gòu)部分注重理論教學(xué),提高學(xué)生抽象思維和嚴(yán)格的邏輯推理能力,為后續(xù)設(shè)計、開發(fā)工作打下堅實的基礎(chǔ)。
數(shù)據(jù)結(jié)構(gòu)是研究非數(shù)值問題中數(shù)據(jù)對象、關(guān)系及其操作的專業(yè)核心課程。它的教學(xué)內(nèi)容是常見數(shù)據(jù)結(jié)構(gòu)(線性、樹、圖)的抽象、實現(xiàn),以及兩類常用操作(查找、排序)的算法及分析。通過該課程的學(xué)習(xí),學(xué)生可熟練掌握C 中函數(shù)、指針及結(jié)構(gòu)類型的應(yīng)用,還可使用C++的一些簡單語句及標(biāo)準(zhǔn)類文件。對于非線性結(jié)構(gòu)“圖”“樹”章節(jié),有了離散數(shù)學(xué)課程的理論準(zhǔn)備,重點應(yīng)放在數(shù)據(jù)類型的表示及算法實現(xiàn)和分析上。
算法設(shè)計與分析主要介紹常用算法設(shè)計技術(shù)及算法分析方法?;驹O(shè)計方法有遞歸與分治、動態(tài)規(guī)劃、貪心法、回溯法、分支限界法等5 種;算法分析主要掌握時間復(fù)雜度、空間復(fù)雜度的理論分析方法及算法分析的實驗方法等。算法實例一部分來源于經(jīng)典基本問題,另一部分針對現(xiàn)實生活熱點問題。有了前面數(shù)據(jù)結(jié)構(gòu)中C++簡單語法的滲透,此門課中的算法用C++實現(xiàn),應(yīng)用C++中的STL 及Algorithm 庫。
抽象代數(shù)主要研究群、環(huán)、域等代數(shù)系統(tǒng)的結(jié)構(gòu)。有了數(shù)據(jù)結(jié)構(gòu)及程序設(shè)計語言的基礎(chǔ),對每種代數(shù)系統(tǒng)都可選擇特例設(shè)計實現(xiàn)作業(yè)。例如,n元對稱群Sn、模n剩余類環(huán)Zn、有限域Fq(q=pn,p為素數(shù))等。設(shè)置這些作業(yè)極大提高了學(xué)生學(xué)習(xí)理論的興趣,更重要的是鍛煉程序設(shè)計應(yīng)用能力,并且為后續(xù)的密碼學(xué)實踐搭建了平臺。
運籌學(xué)是運用數(shù)學(xué)方法,對需要進行管理的問題統(tǒng)籌規(guī)劃,做出決策的一門應(yīng)用科學(xué)。它的教學(xué)內(nèi)容中的動態(tài)規(guī)劃、圖論、搜索論等在前期課程離散數(shù)學(xué)、算法設(shè)計與分析中涉及,在此門課中這些內(nèi)容一方面理論方法性更嚴(yán)密,另一方面應(yīng)用性也更具體。本專業(yè)學(xué)生有了前面學(xué)習(xí)的基礎(chǔ),這些算法掌握相對容易,重點可放在實踐性上,對實際問題的解決提供決策性的意見。
計算機密碼學(xué)課程的理論性和實踐性都很強。可設(shè)計古典加密算法、RSA 加密算法、AES加密算法等實驗來鍛煉學(xué)生程序設(shè)計中數(shù)據(jù)位的處理能力及接觸初步的高性能編程。
上述3 門課的實踐,信息與計算科學(xué)的學(xué)生可先用C 語言完成來幫助理解算法,然后自學(xué)專用軟件快速應(yīng)用算法解決實際問題。
課程設(shè)計是一門單獨綜合性實踐課程,主要培養(yǎng)學(xué)生綜合掌握并運用專業(yè)知識的能力,突出學(xué)生的探索性、創(chuàng)新性和完整性。學(xué)生分組指派導(dǎo)師指導(dǎo),各自完成設(shè)計作業(yè)的定題、實現(xiàn)、總結(jié)分析及報告成文。
互聯(lián)網(wǎng)+時代,混合式 (“線上”+“線下”)教學(xué)成為必然。清華學(xué)堂在線、中國大學(xué)慕課優(yōu)質(zhì)在線課程、網(wǎng)易公開課等平臺重點高校優(yōu)秀專業(yè)團隊制作的相關(guān)精品課程都是很好的教學(xué)參考。成熟的在線評測系統(tǒng)是學(xué)生提高程序設(shè)計能力的訓(xùn)練場,例如:北京大學(xué)在線測試系統(tǒng)(POJ)、浙江大學(xué)的程序設(shè)計類實驗輔助教學(xué)平臺PTA 和在線測試系統(tǒng)(ZOJ)、杭州電子科技大學(xué)在線評測系統(tǒng)(HDOJ)等。課堂學(xué)時有限,老師在課余時間通過網(wǎng)絡(luò)通信工具加強與學(xué)生溝通交流,及時答疑解惑。引入了網(wǎng)絡(luò)資源,極大地拓展了學(xué)生的學(xué)習(xí)和交流空間,激勵了學(xué)生的自主學(xué)習(xí)能力。
課程群的課程有聯(lián)系,更有區(qū)別。在課程入門時需選擇合適的案例用對比方法讓學(xué)生快速了解該區(qū)別。由于是入門課,案例要通俗易懂,用類比和對比引導(dǎo)學(xué)生分析問題,最后概括總結(jié)。
算法和數(shù)據(jù)結(jié)構(gòu)是程序設(shè)計兩大重要方面,為了讓學(xué)生快速清晰體會兩者的區(qū)別及算法設(shè)計方法的重要性,設(shè)計“求Fibonacci 數(shù)列1,1,2,3,5,8,……中的第n項f(n)”案例。利用f(n)滿足下面遞歸關(guān)系可設(shè)計下列3 種函數(shù)。
這3 個函數(shù)在C 程序設(shè)計中陸續(xù)都提到過,但當(dāng)時強調(diào)的是對應(yīng)語法知識點:fib1 主要體會循環(huán)體中的工作部分和修改部分,fib2 主要理解數(shù)組的使用,fib3 主要學(xué)會遞歸函數(shù)的使用。此次課集中這3 種函數(shù)重點是分析對比數(shù)據(jù)結(jié)構(gòu)和算法:fib1 用3 個整型變量,算法技術(shù)屬模擬法;fib2 用1 個整型數(shù)組(n 個整型變量),算法設(shè)計技術(shù)屬動態(tài)規(guī)劃法;fib3 不需要中間數(shù)據(jù),算法設(shè)計技術(shù)屬遞歸法。fib2 對比fib1,由于數(shù)組的利用,使得算法表達(dá)更清晰;fib2 對比fib3,本質(zhì)上是算法設(shè)計的區(qū)別。為了對比算法效率,在main 函數(shù)中分別調(diào)用這3 個函數(shù),并用clock()函數(shù)統(tǒng)計各自運行時間,看到的現(xiàn)象是fib2 與fib1 用時差別不大,fib3 用時較多;且隨著n 的增大,這個差別越明顯??梢缘贸鼋Y(jié)論,算法fib2 求解Fibonacci 問題較好。
通過這個簡單例子,用對比方法既讓學(xué)生快速了解該課程和前課程的區(qū)別與聯(lián)系,又見識動態(tài)規(guī)劃、遞歸法算法,體會算法選擇的重要性。
相互作用教學(xué)法[8]充分利用學(xué)生之間、學(xué)生與教師之間及教師之間的信息交流。整個的學(xué)習(xí)過程是學(xué)生積極參與的,相互促進協(xié)同學(xué)習(xí)的。課堂上老師根據(jù)知識模塊引導(dǎo)學(xué)生探究,對不同層次的學(xué)生設(shè)置對應(yīng)參與環(huán)節(jié),充分調(diào)動學(xué)生學(xué)習(xí)積極性,相互學(xué)習(xí)相互進步。對于高級應(yīng)用作業(yè),難度較大,學(xué)生精力時間有限,相互作用的教學(xué)方法會做到事半功倍。老師先公布選題系列,學(xué)生分小組定題,然后在老師指導(dǎo)下分工協(xié)作完成,最后小組匯報總結(jié),學(xué)生參與評價分析。這樣,每個組看似只做了一兩個作業(yè),但通過組間交流,課堂上10 個作業(yè)都掌握了,并且由于是公開報告演示成果,自己組的作業(yè)也會盡力做好,團隊協(xié)調(diào)合作能力也得到了鍛煉。老師間的交流有助于知識銜接處理且充分了解學(xué)生學(xué)習(xí)基礎(chǔ),以便后續(xù)教學(xué)。
課程成績考核一般分為平時、期中和期末3 部分,平時有課堂表現(xiàn)、作業(yè)、考勤等方面組成。原來偏數(shù)學(xué)的課程考試形式就是筆試,實驗只是為了提高興趣,能驗證完成即可,對成績幾乎不影響;偏計算機的課程實驗成績主要為實驗報告+題庫抽題測試,記平時成績。建立課程群后,我們加大了實踐的考核:原來偏數(shù)學(xué)的課程的實踐要作實驗報告并記入平時成績;計算機類課程的實驗單獨開課,成績由實驗報告、項目演示和在線測試幾部分構(gòu)成。
實踐的考核方式?jīng)Q定學(xué)生的學(xué)習(xí)方法,實踐作業(yè)大多是開放性的,容易讓學(xué)生應(yīng)付,從而造成老師評價比較困難;過于依賴在線測試平臺會造成學(xué)生大量重復(fù)刷題應(yīng)付考試,但程序設(shè)計能力并沒有提高,也扼殺了創(chuàng)新性。單獨開課后,實驗報告更規(guī)范并有選擇地進行口頭報告及演示,給學(xué)生更多展示機會并可以相互評價;平時練習(xí)借助在線測試平臺,系統(tǒng)統(tǒng)計學(xué)生的行為作平時成績依據(jù);考試也是利用在線測試平臺,但要增加知識點要求,評判方式是機器實時評判與老師評斷相結(jié)合。機器實時評判是時間和結(jié)果上控制,老師評斷主要看代碼的質(zhì)量及知識點的要求是否達(dá)到。這種測試方法比較準(zhǔn)確反映學(xué)生的真實水平,便于改進教學(xué)。
老師應(yīng)在實踐課的考核方式上探索多元化,挖掘?qū)W生潛能,發(fā)揮學(xué)生能動性。高年級的實踐作業(yè)大多是綜合性的,為了鼓勵學(xué)生合作、創(chuàng)新,我們設(shè)置多種考核方式,充分發(fā)揮學(xué)生的積極性。除了基本考核要求外,特色加分項有以下幾類:項目大作業(yè)、在線競賽、實驗分析報告等。這些項目的設(shè)置讓不同特點的學(xué)生充分發(fā)揮了自己的特長,真正做到學(xué)有所用。
組建程序設(shè)計類課程群,課程間的銜接教學(xué)研討實施了近3 年,信息與計算科學(xué)專業(yè)學(xué)生在程序設(shè)計素養(yǎng)及能力有了顯著提高,學(xué)生學(xué)習(xí)興趣大增,發(fā)揮專業(yè)優(yōu)勢較明顯。近兩年本專業(yè)參加數(shù)學(xué)建模大賽人數(shù)都超過本班人數(shù)1/3,在全國大學(xué)生數(shù)學(xué)建模競賽、美國大學(xué)生數(shù)學(xué)建模競賽與交叉學(xué)科數(shù)學(xué)建模競賽中有多名學(xué)生獲獎;在校企實習(xí)基地本專業(yè)動手能力明顯優(yōu)于應(yīng)用數(shù)學(xué)專業(yè),學(xué)習(xí)新知識的能力很強;信息與計算科學(xué)專業(yè)的本科畢業(yè)生2017 至2019 三屆就業(yè)率都達(dá)到了95%以上,且專業(yè)相關(guān)度較高。通過組建課程群,老師們打破了傳統(tǒng)的系、教研室的束縛,圍繞學(xué)生的綜合能力培養(yǎng)進行相互學(xué)習(xí)合作,提高了人才培養(yǎng)質(zhì)量。下一步,我們的主要任務(wù)將是探討學(xué)生的專業(yè)、應(yīng)用能力的科學(xué)評價。