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