文章編號:1672-5913(2008)10-0153-02
摘要:本文針對軟件工程碩士計算機專業基礎差的實際狀況,討論打破專業限制,開展算法與算法復雜性課程教學的探索和實踐體會。
關鍵詞:算法;算法復雜性;軟件工程碩士
中圖分類號:G642
文獻標識碼:B
我校2002年成立軟件學院,制定軟件工程碩士培養方案,將《算法與算法復雜性分析》納入課程體系。下面的表1和表2是部分在讀指揮類工程碩士的統計情況。他們全部從參加全國工程碩士資格考試(GCT)的考生中招收。由于對參加GCT考試考生的本科專業沒有什么限制,并且GCT成績的高低也很難反映考生的專業水平,因此,很難根據GCT成績來衡量一個考生的專業基礎。另外,參加GCT考試所錄取的學員的工作年限大多在3~9年之間(表格4)。表格3很明顯地反映了指揮類工程碩士考生專業十分分散的現象。這種分散給課程設置和開課造成了極大的困難。

算法是具有一定難度的課程,計算機專業學生都常常發怵。面對這樣的教學對象,如何開展算法教學是一個新的課題。為此我們進行了一些探索實踐。我們探索的基本出發點是:第一,不能假定學生必須具備什么前提才能開始算法學習??鐚I培養是形勢發展的必然要求,況且,嚴格地說,碩士為期一年的課程,在體系上也不可能建立“縱深”,預設過強的前提條件只能使得課程不可能開設。第二,所有學生已經具備接受了一輪完整的高等教育的基礎。這應該成為施教的前提。
我們的探索主要包括以下5個方面:
1明確教學目的
設置算法課程基于兩點考慮:第一,算法本身是計算學科的核心內容,軟件工程碩士的知識與能力體系中應該體現良好的算法養成。第二,對于從非計算機專業學生進入軟件工程領域,并且未來將軟件當作職業的人,應該補上算法的課。
基于這種認識,我們在內容選取上,還是以算法的設計與算法的分析作為教學的重點。注重教給學生算法設計和分析的一些技術、方法,同時教給學生一些常用的算法。對于一些理論性相對較強的內容,如NP完全理論等,著重于思想方法和結論的介紹。我們認為,這樣處理內容,與工學碩士以及博士生的復雜性理論和算法高級專題等課程的內容區別開來,同時體現了軟件工程碩士以“用”算法為主的需要。
2充分注意學生計算機方面基礎薄弱的現實
注意到學生計算機基礎缺乏的實際,我們一開始總是強調,算法就是求解問題的步驟,算法這門課程研究的內容就是針對給定問題,設計求解的步驟,證明設計的正確性,分析執行這些步驟花費的時間,并設法簡化之。執行算法的裝置可以是計算機,要讓計算機執行一個算法,必須用一種計算機可以理解的語言精確描述算法,這就是程序設計。執行算法的裝置也可以是人,要讓人執行一個算法,必須給執行動作的人將問題交代清楚。
一些項目管理中例子,不同的策略導致執行周期長短的不同,會經常被拿來比較,甚至一個最簡單的問題經常提出:一到八層樓住著8個不同年級學生,現在需要各個年級學生按照樓層居住,問如何調整?在計算機里面這是排序問題,在現實中是典型的管理問題。
有了這些講述以后,學生理解“算法是一個有窮規則的有序集合。這些規則確定了解決某一類問題的一個運算序列,對于該類問題的任何初始輸入,它能機械地一步一步地計算,并在有限步后終止計算,產生輸出”這樣的定義就容易了,更重要的是,在開始學習的時候,將學生不熟悉的內容進行了抽象和剝離,學生駕馭知識的自信心一下得到增強。
3注入激情,將快樂引入教學
快樂教學就是有效激發教學熱情的一種理念。在實踐中,我們嘗試著把老師的激情傳遞給學生。對于一些難于理解的知識,盡量采用通俗易懂的語言和直觀的形式,通過形象生動的比喻和舉例,把大的說小,把難的說易,從而消除學員的畏難情緒。比如:NP完全理論是學術界公認的大難題,我們實際講授時堅持由易到難,由淺入深,循序漸進,先講直觀的整體思想,再講嚴格的形式證明,不知不覺中把學員帶到了頂峰。教學過程中我們還不時地提出一些懸而未決的挑戰性問題讓學員們思考,引起學員的注意,激發他們加倍努力。
激發學生激情的另一種努力是讓學生在學習中有創造、有成就感。所以,我們有時在提出一個問題后,故意不講解決方法,而讓學員獨立思考一段時間,這樣學員在聽講時可以比較自己的想法與我們的解法,促使學員積極主動地思考;有時我們又故意留下漏洞,留出問題讓學員自己去思考,進而得出結論,使學員體驗成功,以學習為樂事,從而使學員樂于學習,效果良好。
4改革方法,加強互動
首先,以問題為主線開展教學。授課前,我們堅持精心設計課堂提問,并使提問符合學員的實際且有一定的趣味性,通過雙向提問,活躍氣氛,引導學員思考;同時注意保護學員提問的積極性,啟發學員即使面對陌生的領域也要敢于提問、善于提問,從而不斷拓寬自己的知識面。特別要注意從學員“錯誤”的回答中找到閃光點,并予以肯定,從而使學員勇于回答問題,形成積極提問題、踴躍答問題的良好課堂氛圍。第二,把內容講精、講深、講透。授課時注意安排教學內容的先后順序,把握各知識點的來龍去脈與內在的邏輯體系,按系統的觀點,使學員看到整體、看到主線、看到聯系。對重點反復講,對難點深入淺出地講。并注意歸納總結,抓住關鍵,講出精華,入木三分。第三,綜合運用多種教學手段。充分發揮各種教學手段的長處,使教學手段既賞心悅目,又符合教學過程,提高單位時間的信息量。
互動的結果是學生積極的思考。總是有學生不斷提出新觀點、新算法,我鼓勵他們寫成文章。有些影響甚至遠遠超出我的預期。例如,從算法單個動作的時間耗費累積構成算法時間復雜性得到啟示,有學生研究掏槍、臥倒、射擊——一個典型的單兵組合動作,發現使動作可以更加快速完成的組合優化方案。
5加強實踐
為了加強學生對于算法的理解,我們在教學中注意加強實踐環節。工程碩士的實踐動手能力一開始的時候,大部分很差,很多人的程序設計幾乎是空白。我們的做法是,首先,提出明確的目標和要求。既要求學員有扎實的基礎、創新的理念,又必須通過工程實踐進行鍛煉。其次,給條件創環境。為此,我給學生建立上機實踐的必須的環境。第三,對實習題進行分類,按照難易程度建立漸進階梯。第四,精心作好指導,特別是開始的時候,精心指導。第五,鼓勵學生挑戰極限,互相之間比試技藝。
以上是我們在教學一門課程中的一些嘗試。課程是整個培養方案的基石,真正上好一門課,使學生各有收獲,是一件不容易的事情,需要不斷的探索和實踐。
參考文獻
[1] 王志英,寧洪,姜新文. 綜合型人才創新能力與素質培養[J]. 高等教育研究,2005,(1).
[2] 寧洪,姜新文等. 關于軟件工程碩士培養的初步思考[C]. 研究生教育論壇,中南大學出版社,2002.