文章編號:1672-5913(2008)10-0072-02
摘要:本文就筆者在“算法設計與分析”課程中的教學改革實踐對理論與技術的平衡問題提出了一些看法,并結合近期在學生中所作的調查統計提出了一些觀點。
關鍵詞:算法設計;算法分析;實踐環節
中圖分類號:G642
文獻標識碼:B
“算法設計與分析”近年來在很多院校的本科階段開設,體現計算學科以算法為主要研究內容的學科目標。算法研究的是解決計算問題的操作序列,早在計算機技術發明之前,人們就對算法作了大量的研究。在本科階段開設“算法設計與分析”,就是要使學生通過本課程的學習認識算法的設計與分析對程序設計與程序性能改善的理論指導作用,為今后在職業生涯中開發出具有創新性的應用程序打下良好基礎。
基于這一指導思想,在計算機專業本科階段“算法設計與分析”課程的教學改革就要求我們把握好理論與技術的平衡。如何把握本門課程中理論與技術的平衡,筆者認為需要從如下幾個方面加以考慮。
1教學內容
算法課是理論課,它指導的是程序設計的思想和行為。因此,本課程的教學內容以理論為主應是合理的。問題在于對本科階段的理論深度與廣度的把握。首先,從我國普通高校本科階段數理基礎課的教學實際出發,學生掌握的數學知識限于微積分、線性代數、數理統計初步以及不多的離散數學(包括集合論、近世代數、數理邏輯和圖論的基本概念)基礎知識,遠不能達到在理論論證中靈活運用的程度。在算法課程中,無論是算法的設計還是算法的分析,都不能超越這一基礎。盲目追求理論嚴密將會嚴重挫傷學生的學習積極性。其次,本課程往往開設于高年級階段,課時少也限制了教學容量。但是,通過有限的理論教學要使學生明白如下幾點:
●程序設計不能沒有理論指導
●理論指導下設計的程序更優秀
●實際的應用需求將會推動理論的發展
因此,筆者在本課程的教學中在內容上注重以下三個方面:
●經典算法設計方法
●常用的算法分析方法
●算法性能改善對理論研究的要求
2教學模式
很多重點院校,特別是偏重于理論研究的院校開設算法課通常不包含實驗環節。但計算學科發展至今,更多的學生走進計算機系學習計算機技術,把算法課作為一門純理論課來開設,對大多數學生是不利的。以前算法課不含有實踐環節的一個可能的原因是技術遠落后于理論(數學理論已有近千年的歷史,而計算機技術卻僅有短短幾十年的發展歷程),很多精巧的理論很難用當時的描述工具和運行平臺加以實現。今天,我們不但能夠用高度抽象的程序設計語言描述復雜的算法,在微型計算機上實現大多數流式算法,很多院校還配置了中小型計算機,讓學生可以做并行算法的實驗。所以,現在我們已經有了驗證理論的物質條件,就應當把算法課的課堂擴展到實驗室去。
應當認識到,為算法課增添適當課時的實驗環節不但是可行的也是必要的。這首先要從教學目標出發,我們培養的是今后從事計算機軟硬件開發制造和計算機技術應用的工程技術人才,學習算法就是要培養他們能用正確的理論指導創新開發的實踐。其次,通過實驗,讓學生知道現有技術可能還不足以實現理論上已有的成果,引導學生思考明天可能的技術改進或理論創新。筆者所在學校將算法課的教學模式設置為3:1的理論與實踐教學學時比。課堂教學以理論闡述論證為主,實驗課實現算法并驗證算法的效率。筆者最近在學生中作了一個問卷調查,調查了如下問題:
對你而言“算法設計與分析”課程對提高程序設計技術的水平________________。
回答“沒有什么幫助”占3%,回答“有一點幫助”占23%,回答“有較大幫助”占47%,回答“有很大幫助”28%。
對你而言學習“算法設計與分析”課程的最大好處在于_______________。
回答“深入學習程序設計語言”的占20%,回答“深入學習數據結構”的占23%,回答“提高程序設計能力”的占56%。
這說明大多數學生認為算法課確實能提高他們的程序設計能力。
3實驗課的設計
筆者認為,在實驗課中將課堂討論的理論加以驗證,加深對理論的理解僅僅是實驗課最基本的任務。絕大多數學生必須保質保量地完成這一任務。但是,我們從調查問卷中對如下問題的統計數據中卻看到一個很讓人擔心的情況:
你認為學習“算法設計與分析”課程的最大困難在于___________________。
回答“聽課理解”的占5%,回答“閱讀理解”的占26%,回答“習題練習”的占17%,回答“算法實現”的占53%。
也就是說,半數以上的學生認為用他們在一、二年級所學的程序設計技能來實現已有的算法有困難。認真想來這也符合規律:一、二年級學習的是程序設計語言和基本的數據結構,學生沒有充分體驗到用語言和數據來設計解決問題的算法進而開發出能實際運行的程序的問題。所以,算法課的實踐環節對工科學生來說,不僅是必要的,還是必須的。算法課增添實驗環節既能讓學生驗證理論,還能在低年級所學的程序設計基礎上提高程序設計開發的能力。
然而筆者認為,僅僅停留在算法的驗證上還是不夠的。當今的程序設計技術日新月異,利用當前的新技術實現并應用經典算法,使學生能夠跟上技術發展的步伐,增強就業競爭力應當是我們在“算法設計與分析”課程中加入實驗環節的另一個重要著眼點。利用諸如模板、仿函數、迭代子、對象合成等程序設計模式將實現的算法拓展成通用的函數庫或類庫,以此方式在實驗中讓學生自己掌握在高級程序設計語言課程中由于學時限制未曾深入研習的程序設計技術,從而切實地提高程序設計能力。
普通工科院校計算機專業的學生學習算法的設計與分析的最重要的目標,應當是其在程序開發中的應用。實驗內容應該包含應用。筆者認為ACM/ICPC(國際大學生程序設計競賽)歷年來的題目很好地反映了算法設計與分析技巧在程序設計中的應用意義。筆者嘗試著在本課程的實驗中讓有能力的學生研習一些這方面的題目,效果在一部分學生中是顯著的。
總之,計算機教育工作者都在思考計算學科教育的本質以及如何提高本學科的教學質量。理論與技術的平衡是這場思考中的一個重要主題。廈門大學的趙致琢教授曾經指出“理論與實踐相結合,理論與實踐的統一是計算科學發展中最重要的特點之一。”因此,在教學中如何凸顯本學科的這一特點,是每一門課程的教師應當認真思考并努力實踐的。
參考文獻
[1] 中國計算機科學與技術學科教程2002研究組. 中國計算機科學與技術學科教程2002[M]. 北京:清華大學出版社,2002.
[2] 錢能. C++程序設計教程(第二版)[M]. 北京:清華大學出版社,2005.
[3] 趙致琢. 計算科學導論(第三版)[M]. 北京:科學出版社,2004.
[4] 徐子珊. 算法設計與分析課程中的工程教育[J]. 計算機科學,2005,32(8).