郭艷燕 童向榮 孫雪姣 賀利堅
摘要:針對程序設計基礎和數(shù)據(jù)結構課程在實際教學過程中存在的教學銜接問題,闡述問題存在的原因,提出兩門課程在教學內容、教學方法以及教學實踐等方面進行銜接的新方法和思路。
關鍵詞:程序設計基礎;數(shù)據(jù)結構;計算思維;教學銜接
0、引言
程序設計基礎與數(shù)據(jù)結構是計算機類專業(yè)的兩門專業(yè)基礎課,在計算機類專業(yè)教學中具有舉足輕重的作用,都旨在培養(yǎng)學生的編程能力和計算思維能力,并為后續(xù)課程打下堅實的專業(yè)基礎,但在這兩門課程的教學過程中,存在一系列問題,嚴重影響課程的教學效果。筆者分析和研究產生這些實際問題的原因,對這兩門課程的知識融合、內容銜接以及教學實踐等進行探討,提出切實可行的解決方案,更好地實現(xiàn)兩門課程的教學目標。
1、課程教學內容和教學目標
程序設計基礎課程是學生接觸的第一門專業(yè)基礎課,也是進行計算機編程的入門課程。課程的教學目標是使學生掌握程序設計的基本方法,培養(yǎng)其擁有良好的程序設計風格、較強的軟件開發(fā)能力以及一定的計算思維能力,為后續(xù)課程打下良好的基礎。
數(shù)據(jù)結構是繼程序設計基礎課程之后的一門綜合專業(yè)基礎課,是計算機類專業(yè)的核心課程之一,具有舉足輕重的作用。它是程序設計基礎課程所講知識的自然延伸和具體應用。對數(shù)據(jù)結構的理解、掌握和應用拓展,將對學生解決具體實際問題時的數(shù)據(jù)分析、數(shù)據(jù)組織、數(shù)據(jù)處理和編程能力有著深遠的影響。課程的教學目標是培養(yǎng)學生縝密的邏輯思維和數(shù)據(jù)抽象能力以及學生在軟件設計領域中科學的計算思維能力,幫助學生將數(shù)據(jù)結構和算法與具體的編程實現(xiàn)相結合并靈活地應用到實踐和工程實際中。
2、兩門課程間的關系
從程序與數(shù)據(jù)結構本身的關系來說,一個好的程序離不開合適的數(shù)據(jù)結構,而數(shù)據(jù)結構中算法的實現(xiàn)離不開具體的程序設計。在計算機類專業(yè)的課程體系中,數(shù)據(jù)結構和程序設計基礎課程雖然獨立開設,但是它們之間的聯(lián)系是緊密的。在課程設置上,程序設計基礎是數(shù)據(jù)結構的前導課程,兩門課程一脈相承,不可分割。
學生對程序設計基礎課程的掌握程度、具備的計算思維和編程能力,直接關系到以程序設計語言實現(xiàn)算法的數(shù)據(jù)結構課程的教學效果。數(shù)據(jù)結構課程通過創(chuàng)造性思維的訓練,重點突出數(shù)據(jù)抽象與程序抽象能力的培養(yǎng),從而進一步提升學生的計算思維能力和編程能力,但兩門課程在實際教學中存在一些問題,主要原因是課程設置、教學內容、教學方法和教學實踐方式等多方面存在缺陷。經(jīng)分析,對程序設計基礎和數(shù)據(jù)結構課程進行知識整合和內容銜接,采用適當?shù)慕虒W方式,改進教學實踐是探討和研究的主要內容。
3、兩門課程在實際教學中存在的銜接問題
3.1 兩門課程教學內容的脫離
目前,在實際教學中,程序設計基礎和數(shù)據(jù)結構課程雖然關系緊密,但是一直被設定為兩門完全獨立的課程,而且教師在制訂教學大綱和教學目標時容易忽視兩門課程問的聯(lián)系,在教學過程中出現(xiàn)一些盲區(qū),要么兩門課程在教學內容上出現(xiàn)不同程度的交叉,要么出現(xiàn)知識銜接的斷層,令學生對兩門課程的內在聯(lián)系沒有整體概念和認識,從而導致不能深入系統(tǒng)地學習相關知識。尤其是先行課程序設計基礎的教學內容和課程案例完全脫離了數(shù)據(jù)結構課程,使數(shù)據(jù)結構中最頻繁使用的知識和內容在程序設計基礎課程中甚少提及,不能為數(shù)據(jù)結構課程的講解打下扎實的程序設計基礎。
3.2 程序設計編程語言與數(shù)據(jù)結構實現(xiàn)語言不一致
程序設計基礎課程所教授的編程語言與數(shù)據(jù)結構教材或實驗所使用的實現(xiàn)語言不一致,如將C++語言作為程序設計基礎的教授語言,而在數(shù)據(jù)結構的實現(xiàn)上選擇c語言或Java語言,以至于數(shù)據(jù)結構的理論教學與具體上機編程實現(xiàn)脫節(jié),嚴重影響了上機實驗和課程設計環(huán)節(jié)。
3.3 程序設計方法與數(shù)據(jù)結構實現(xiàn)方法不一致
程序設計基礎課程中或注重面向過程的程序設計方法,或注重面向對象的程序設計方法,但在數(shù)據(jù)結構課程中卻很難利用前導課程中學到的程序設計方法實現(xiàn)相關的數(shù)據(jù)結構和算法,從而影響了學生對數(shù)據(jù)結構課程知識的應用與實現(xiàn)。另一方面,學生在學習過程中沒有充分理解數(shù)據(jù)結構課程的作用和實際意義,以至于在實際項目和問題中不知使用什么方法(面向過程或面向對象)分析解決問題,不知如何運用數(shù)據(jù)結構知識解決實際問題。
3.4 前導課程對后續(xù)課程實踐環(huán)節(jié)的影響
數(shù)據(jù)結構實驗環(huán)節(jié)相對課堂理論環(huán)節(jié)較薄弱。此問題的存在多半是因為數(shù)據(jù)結構具體實現(xiàn)的關鍵技術在程序設計基礎課中未被講解或強調,在進行數(shù)據(jù)結構算法從理論到偽代碼、再由偽代碼到真代碼轉換的過程中難以真正編程實現(xiàn),使學生對數(shù)據(jù)結構的理解和掌握僅停留在抽象層、概念層、理論層,難以上升到實現(xiàn)層,從而影響學生的學習興趣和積極性。同時,課程中的實踐項目過于單一且相對獨立,使實踐環(huán)節(jié)與實際項目的聯(lián)系過于松散,學生運用所學知識解決實際問題的能力和實際工程能力很難得以鍛煉。
3.5 缺少計算思維能力的培養(yǎng),缺乏理論知識與實際應用的聯(lián)系
提高學生計算思維能力是程序設計基礎和數(shù)據(jù)結構課程共同的目標。計算思維是抽象的多個層次上的思維,而抽象是表達實際的方法。然而,現(xiàn)行教學方法過多關注程序設計和數(shù)據(jù)結構知識點的講解,缺乏對學生思維能力的培養(yǎng)。
如果缺乏理論聯(lián)系實際,那么將影響學生計算思維的培養(yǎng)。數(shù)據(jù)結構中的知識又太抽象,如果缺乏相應的實際案例對抽象知識加以應用,那么就會導致學生不知道怎樣將所學的知識應用到實際中,缺乏具體問題具體分析和解決的能力。
3.6 教師本身知識結構欠缺,上機實踐指導教師數(shù)量不足
授課教師知識結構的缺乏將導致一些現(xiàn)實問題:如果程序設計基礎的教師不懂數(shù)據(jù)結構,那么其自然不會將相關知識引入課堂,同時也缺乏用所教授的語言具體實現(xiàn)數(shù)據(jù)結構中結構和算法的能力;如果數(shù)據(jù)結構的教師缺乏相關編程語言知識,那么就會給上機輔導帶來困難。同時,兩門課程具有很強的實踐性,若上機實踐輔導教師不足,將不利于學生編程能力的提升以及相關軟件大賽學生的培養(yǎng)和輔導。endprint
針對以上實際教學中存在的問題,可知為提高程序設計基礎與數(shù)據(jù)結構課程的教學效果,根據(jù)計算機類專業(yè)這兩門課程教學內容和目標,對兩門課程進行知識整合和內容銜接的必要性,對課程銜接的方法和思路等進行探討勢在必行。同時,課程教學不僅要關注知識的傳授,還要培養(yǎng)學生主動獲取知識并綜合已有知識創(chuàng)造新知識的能力。
4、程序設計基礎和數(shù)據(jù)結構課程銜接的新方法和思路
4.1 做好兩門課程教學內容的融合和銜接
教師需緊密結合計算機類專業(yè)的培養(yǎng)目標,精心設計程序設計基礎和數(shù)據(jù)結構課程的教學內容,既要滿足課程的專業(yè)基礎性,又要滿足后續(xù)課程學習的需要,嚴密制訂教學大綱,做好程序設計基礎與數(shù)據(jù)結構教學內容的銜接以及相關教材的選定。
在程序設計基礎課程教學中,教師需要關注學生計算思維能力的培養(yǎng),將重點放在講解思路上,教學生如何對問題進行抽象,還要介紹一些簡單的基礎算法和數(shù)據(jù)結構。程序設計與數(shù)據(jù)結構的聯(lián)系過程必須做到循序漸進,若引入的數(shù)據(jù)結構相關知識過難,會打擊學生的學習積極性。例如,教師講數(shù)組時可引入幾種數(shù)據(jù)結構中簡單的排序算法冒泡排序、選擇排序等;講完指針和結構體后可引入最基本的數(shù)據(jù)結構——鏈表;講完嵌套函數(shù)調用后可引入“遞歸”,它是數(shù)據(jù)結構中解決問題的常見思想和算法,可以通過簡單的遞歸函數(shù)幫助學生理解遞歸思想和遞歸調用過程,這些是理解數(shù)據(jù)結構中復雜遞歸函數(shù)的基礎。在程序設計基礎教學中,只講遞歸函數(shù)的簡單應用,而在數(shù)據(jù)結構教學中,需要介紹遞歸函數(shù)的復雜應用:棧、樹、八皇后問題、N個數(shù)的全排列等。圍繞“遞歸”這一重要知識點,從易到難并結合課程本身特點進行理論分析,將有益于整合課程教學內容,引導學生循序漸進地學習和思考。
針對在程序設計基礎課程中不重要但在數(shù)據(jù)結構及算法中被廣泛使用的知識點,教師需要在講解程序設計課程時將其點出并告訴學生此知識在后續(xù)數(shù)據(jù)結構課中的重要性,引起學生對該知識點的興趣和重視,如指針的靈活使用、結構體類型的復雜應用、類型重命名、類的拷貝構造函數(shù)(深拷貝)、函數(shù)模板、類模版等。
同時,教師要對程序設計基礎課程內容進行適當補充和擴充,如增加c++函數(shù)模板、類模板的相關知識,為將泛型程序設計、c++的STL引人數(shù)據(jù)結構課程奠定知識基礎,縮小教學知識與實際運用的距離,提高學生的動手編程能力和知識運用能力。
4.2 保證程序設計編程語言與數(shù)據(jù)結構實現(xiàn)語言的一致
程序設計基礎課程所教授的編程語言要與數(shù)據(jù)結構教材或實驗所使用的編程語言一致,這樣不僅能大大提高學生的編程能力,還有利于數(shù)據(jù)結構課程的上機實現(xiàn)。
4.3 將面向對象思想引入程序設計與數(shù)據(jù)結構中
隨著程序設計方法從傳統(tǒng)的結構化程序設計演化到面向對象程序設計,數(shù)據(jù)結構在面向對象程序設計中也將成為面向對象的數(shù)據(jù)結構,且將隨著程序設計理論和技術的發(fā)展而不斷變化發(fā)展。在程序設計基礎課程中講授面向對象的編程語言如c++語言,既可以實現(xiàn)面向過程的數(shù)據(jù)結構,又能實現(xiàn)面向對象的數(shù)據(jù)結構。數(shù)據(jù)結構課程采用面向對象的觀點講授并以C++語言作為算法的描述工具,從而強化數(shù)據(jù)結構基本知識和面向對象高級程序設計基本能力的雙基訓練以及實際動手能力培養(yǎng)。在設計數(shù)據(jù)結構實踐項目時,將面向對象的程序設計思想、面向對象的程序設計語言和數(shù)據(jù)結構課程教學內容恰當?shù)厝诤?,有效整合兩門課程中的重疊部分,突出各自的側重點,符合當前軟件設計思想和軟件開發(fā)趨勢。
4.4 加強課程中計算思維能力的培養(yǎng)
在程序設計和數(shù)據(jù)結構的教學方法上,將面向語法為中心的教學逐漸轉變?yōu)槊嫦騿栴}求解的教學,從問題出發(fā)采用適當?shù)臄?shù)據(jù)結構,將其抽象成解決問題的算法描述,用程序設計語言實現(xiàn)問題求解,使課程從過去的僅講授孤立的知識點,轉變?yōu)橹v授計算思維和問題求解的過程,從而達到突出思維方法訓練的目的。在程序設計基礎和數(shù)據(jù)結構授課時盡量將理論聯(lián)系實際,將知識點解釋和應用為身邊容易理解的真實案例。例如,講“圖”時,可以把現(xiàn)在流行的復雜網(wǎng)絡、社交網(wǎng)絡引入其中;講解“隊列”時,可將春節(jié)買票引入其中,讓學生從身邊的例子理解理論知識的具體應用。對有些案例可以提倡“一題多解”,不局限于一種數(shù)據(jù)結構、解題思路和實現(xiàn)方法,通過一題多問、一題多解帶動學生探索、比較、尋求更好的解決途徑,達到學生分析解決問題能力的提高和計算思維能力的培養(yǎng)。
4.5 提升教師能力,配備充足的上機輔導教師
學校要加強程序設計基礎與數(shù)據(jù)結構課程相關授課教師整體能力的提升。教師不僅要掌握自己所教授課程的知識,還要對該課程的前續(xù)及后續(xù)課程內容有所了解,便于維護教學的整體秩序和融合學生的知識體系。同時,教師要積極參與各種軟件大賽和企業(yè)培訓,將教授的理論知識和實際項目相結合,達到應用知識解決復雜問題的目的。此外,兩門課程的上機實踐環(huán)節(jié)要配備足量的輔導教師,不讓學生輸在編程入門的起跑線上。
4.6 依托程序設計競賽,提高學生的編程能力
依托全國軟件大賽、ACM大賽等程序設計競賽,將競賽題目引入程序設計基礎和數(shù)據(jù)結構課堂中。此類題目強調考查學生對各種算法的應用能力,綜合性較強,非常適合輔助學生學習和體會數(shù)據(jù)結構的妙用,提升學生分析和解決實際問題的能力,引導學生將所學知識準確而靈活地運用到實際生活中,大大提高學生的實踐動手和程序設計能力,促進其知識的融會貫通。另外,通過競賽等多種活動可以為學生提供展現(xiàn)程序設計能力的舞臺,激發(fā)學生學習的主動性,培養(yǎng)其計算思維能力。
例如,在教授程序設計基礎時,講完邏輯表達式和多重循環(huán)結構后,可以將大賽中的邏輯推理題目引入教學中并引出常見的解題方法和思路一枚舉法,從而加深對枚舉法的認識。通過采用數(shù)據(jù)結構中的雙向鏈表和線性數(shù)組兩種方式實現(xiàn)大賽中常見的約瑟夫環(huán)問題。
4.7 引入OJ平臺。加強課程實踐環(huán)節(jié)
引人在線判題(Online Judge,oJ)系統(tǒng),提高學生的實踐能力。能力需要以豐富的知識作為支撐,而實踐是能力賴以生長的土壤。在OJ系統(tǒng)中,學生可以在線提交程序源代碼,系統(tǒng)對源代碼進行編譯和執(zhí)行并通過預先設計的測試數(shù)據(jù)檢驗程序源代碼的正確性。引入0J系統(tǒng)不僅可以輔助教師批改作業(yè),減輕教師工作壓力,還可以促使學生加強平時上機編程練習,通過編程排名方式提高學生的學習興趣。OJ系統(tǒng)中擁有大量題庫,可以讓學生進行上機實踐,培養(yǎng)自身的計算思維能力,提高編程能力。0J系統(tǒng)不僅可以作為程序設計基礎課程的實踐平臺,還可作為數(shù)據(jù)結構課程的實踐平臺。
5、結語
程序設計基礎與數(shù)據(jù)結構課程在教學內容、教學方法、教學實踐等方面進行銜接后,不僅提高了各自的教學效果和教學質量,還培養(yǎng)了學生的實踐能力和編程能力。然而,在教學探索過程中仍然存在一些問題,我們還需要在今后的教學實踐中不斷修正和完善。endprint