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