曹俊杰 王勝法 劉穎 孫壯 李崇君 蘇志勛
摘要:本文以《c++程序設計》、《數據結構與算法》和《計算機圖形學》這三門課程為切入點,分析了數學專業的計算機類課程的教學面臨的問題和機遇,對于這三門課的教學銜接做了有益的探索。
關鍵詞:成果導向教育;計算思維;課程銜接;數學專業
中圖分類號:G642.0 文獻標志碼:A 文章編號:1674-9324(2019)25-0200-02
一、引言
當前,國家實施了“一帶一路”、“中國制造2025”、“互聯網+”等倡議和戰略,以新技術、新業態、新模式、新產業為代表的新經濟蓬勃發展,這對本科生的培養提出了更高要求。從本科畢業生就業情況來看,數學專業和其他工科專業有著顯著的不同。除高校任教和讀研深造之外,絕大多數畢業生會進入教育、金融、信息、互聯網、人工智能等新經濟產業,或者傳統經濟產業的數據分析以及人工智能部門。用人單位普遍認可數學類畢業生的邏輯思維能力,同時都迫切希望畢業生進一步提高通過編程解決實際問題的能力。這點要求在本質上可以分解為計算思維、編程實踐和溝通協作三個部分。可以對應到成果導向教育(Outcome based education,簡稱OBE)對于本科生畢業能力的12項設定:問題分析、設計/開發解決方案、使用現代工具、個人和團隊角色承擔、溝通等。為此,我們將根據新經濟條件下,社會對于數學類本科畢業生的需求,從課程銜接的角度探討一下針對數學專業學生的計算機類課程的教學改進方案,以期更好地實現相關教學目標,為數學類學生的升學和就業服務。
二、存在的問題
《c++程序設計》、《數據結構與算法》和《計算機圖形學》在數學專業作為選修課程授課的時候,由于授課目標、課程體系、學生知識架構和學習方法的差異,其教學還存在以下兩個問題。
1.從學生的基礎知識架構和這些課程本身的標準教學內容來看,《c++程序設計》本身知識點多,有一些涉及計算機基本工作原理等,由于不是計算機專業,受到總體課時的限制,缺少相關配套課程知識體系的相互促進。《數據結構與算法》中應用最頻繁的c++知識在《c++程序設計》講解的角度沒有充分為數據結構服務[1]。其次,學生在從簡單算法和簡單數據類型到復雜數學算法和復雜數據結構的過渡上存在認知和實踐兩方面的不足。這一點在《計算機圖形學》的上機實踐環節表現得更為明顯。圖形學是理論和實踐的緊密結合[2],往往強調實現的效率,需要借助高級數據結構和精心設計的計算方法。而授課時,學生往往已經遺忘了很多在《c++程序設計》和《數據結構與算法》中學過的知識,導致學生以完成任務的心態,使用低級的數據結構構建簡陋低效的算法實現。
2.從學生的學習習慣和態度來看,數學專業學生習慣的“實戰”操作,是在紙上推演,整段代碼書寫完畢,才開始上機調試。這種反編程實踐的操作,只會帶來無數的編譯錯誤,增加了學生上機的挫敗感,使得他們轉而為考試而學習,造成所學知識在考試后部分被遺忘,進而難以應對《數據結構與算法》的學習和《計算機圖形學》的上機實踐。
三、教學改革思路和措施
通過以上的分析可知,數學專業的計算機類課程授課存在兩個基本矛盾:(1)計算機類的課程是選修課,不可能占用更多的課時,不能期望學生用學習本專業課程的心態和精力完成此類課程。(2)計算機類課程恰是最能培養計算思維,訓練OBE所倡導的本科生能力訓練的,對于本科生的就業有著實質性的幫助。為此,我們希望從課程銜接的角度入手,綜合協調《c++程序設計》、《數據結構與算法》和《計算機圖形學》的教學,精簡對于數學專業學生而言不必要和不重要的內容,強調上述課程中會反復遇到的知識點,完成新舊知識之間的雙向重構[3]。通過緊密的銜接,降低遺忘曲線和挫折感對于教學效果的不良影響,減少學生負擔的同時提升他們的興趣,以期解決上述矛盾,切實提高數學類學生的計算思維和編程實踐能力。針對上述問題,通過近年來的教學實踐,我們擬介紹以下三個方面的思路和措施。
1.在《c++程序設計》教學中引入《數據結構與算法》和《計算機圖形學》。我們嘗試從數學專業的《c++程序設計》教學存在的問題出發,引入《數據結構與算法》和《計算機圖形學》分別解決這些問題。首先,《c++程序設計》的授課相對其他數學課程略顯平鋪直敘,缺少邏輯思考和推理求證過程,學生往往將其當作文科類課程死記硬背,難以激發學習熱情。因此,在授課時,介紹必要的排序算法,簡單分析算法的復雜度,讓學生了解算法設計和應用適當的數據結構可以大幅度降低算法的復雜度,增加思考和推理的樂趣。其次,與標準c++教材和課程配套的實例一般都是面向計算機專業的,諸如數據庫和網站等方面的應用,對于數學專業的學生而言,這基本屬于陌生且日后不再會接觸的領域,對后續課程沒有幫助。為此,可以引入《數據結構與算法》和《計算機圖形學》中的問題作為上機作業,在為后續課程服務的同時,增加授課和上機實踐的趣味性。如設計一個系列的動態數組實現作業,包括從過程式編程的定長數組實現,面向對象編程的定長數組實現,簡單動態數組的實現,經過算法復雜度分析之后的動態數組實現,和對應的模板類實現。從這一系列的相關性極強的逐步改進式的實踐,理解為什么要用指針、為什么要封裝,為什么要泛型,為什么要用算法和數據結構。在《計算機圖形學》方向,可以引入簡單的圖像處理、樣條曲線編輯、三維點云數據的PCA分析和顯示等直觀可視的案例,增加學生對于編程的實用性的切身感受。
2.《數據結構與算法》與《c++程序設計》和《計算機圖形學》的銜接。在《數據結構與算法》教學方面,首先,采用c++作為實現語言,保證與之前學過的《c++程序設計》的銜接。其次,在授課時強調數據結構知識和《c++程序設計》的對比,從而促進舊知識和新知識之間的雙向重構。如《c++程序設計》考慮的是數值型問題,簡單算法,單個文件的簡單程序;《數據結構與算法》則以非數值問題為主,復雜算法,需要實現多個文件的復雜程序等。此外,在介紹復雜的數據結構和算法的時候,既要深化拓展c++教學中已經簡介過的結構和算法,又要不斷地回顧其用到的c++的編程思想。如棧、樹、全排列等都圍繞遞歸這一角度展開;強調面向對象和泛型編程對于實現復雜數據結構的幫助。最后,加強《計算機圖形學》中常用數據結構和算法的授課和上機訓練。如深度講解空間八叉樹,適當介紹圖形學中的隱式曲面表示、空間距離場插值和經典曲面重建方面的內容。講解圖上的一些算法,如最短路、最小生成樹等,可介紹圖形學中曲面的測地線、調和場和法向的一致定向問題。在講解計算幾何算法的時候,可以介紹圖形學中的曲面消隱和碰撞檢測等。
3.《計算機圖形學》與之前學過的課程的銜接。《計算機圖形學》涉及多學科交叉,知識點繁多且更新速度極快。其教學既要滿足核心內容的穩定性,又要兼顧國際上的最新發展趨勢。各所學校,尤其是海外高校的《計算機圖形學》的授課內容往往相差極大。為此,在核心經典的約束下,我們考慮從與之前學過的課程銜接的角度精選一些必講內容和上機問題,如三維圖形顯示的面向對象實現,基于計算幾何和數據結構優化的光照模型實現,各種三維表示和其背后的數據結構等。通過這些內容的介紹,完成之前學過的課程和《計算機圖形學》之間知識結構的雙向重構。此外,《計算機圖形學》已經是計算機應用領域的一個巨大產業,理論與實踐結合緊密。其上機實踐任務相對復雜,可以以OBE為指導,切分為多個子任務,由多組同學協同完成。強化數學專業學生在提高問題分析、設計/開發解決方案、使用現代工具、個人和團隊角色承擔、溝通這五方面的能力。
四、結論
數學專業的計算機類課程的教學,除了要根據本專業的特色和畢業生就業需求做好內容上的調整、銜接之外,如何能將降低不同授課學習方式和上機實踐的挫折感,如何進一步提高學生的興趣和投入,如何提高教師對于這一類課程知識的通盤掌握,如何建立循序漸進的上機題目體系和易于配套的上級環境,如何展開能促進學生積極性的高效的考核考查方式,如何更加順暢地完成計算思維的培養和OBE導向也都是亟待配套解決的問題。值得我們在今后的教學實踐中不斷地探索。
參考文獻:
[1]郭艷燕,童向榮,孫雪姣,賀利堅.程序設計基礎與數據結構兩門課程的教學銜接[J].計算機教育,2014,(10):47-50.
[2]徐崗,許金蘭,陳臨強,王毅剛,胡維華.數學建模驅動的“計算機圖形學”課堂教學模式改革[J].中國信息技術教育,2016,(06):89-91.
[3]趙榆琴,楊健,張曉玲,蘇鵬.程序設計與數據結構“雙向重構”教學銜接法探討[J].計算機教育,2018,(08):151-155.