于波+郭紅+李鵬
摘 ? ?要:數(shù)據(jù)結(jié)構(gòu)與算法是計算機、軟件工程等專業(yè)核心的專業(yè)課程。文章針對數(shù)據(jù)結(jié)構(gòu)與算法課程教學(xué)中存在的問題,基于CDIO工程教育模式以及軟件工程師“構(gòu)思—設(shè)計—實施—運行”系統(tǒng)所必需的能力模塊,提出了數(shù)據(jù)結(jié)構(gòu)與算法課程教學(xué)改革的措施。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu)與算法;CDIO;工程教育
中圖分類號:G642.0 ? ? ? ? ?文獻標(biāo)識碼:A ? ? ? ? ?文章編號:1002-4107(2014)12-0027-02
一、數(shù)據(jù)結(jié)構(gòu)與算法教學(xué)存在的問題
倪光南院士指出,中國如果能發(fā)揮人才優(yōu)勢,不久就可成為僅次于美國的世界第二軟件服務(wù)大國[1]。高素質(zhì)的軟件人才是我們成為軟件大國的必要條件。目前國內(nèi)軟件設(shè)計相關(guān)專業(yè)畢業(yè)的工科生多數(shù)僅僅熟悉了一兩項軟件技術(shù),存在專業(yè)基礎(chǔ)不扎實、分析和解決問題的能力薄弱、動手能力不強等問題,導(dǎo)致了軟件行業(yè)存在需求大于合格應(yīng)聘者的尷尬現(xiàn)象。這一現(xiàn)象的根本原因在于學(xué)生在校期間沒有夯實好專業(yè)“內(nèi)功”,像數(shù)據(jù)結(jié)構(gòu)與算法這樣的專業(yè)基礎(chǔ)課程沒有取得良好學(xué)習(xí)效果。國內(nèi)外相關(guān)專業(yè)在進行本課程教學(xué)中存在的主要問題如下。
(一)教學(xué)內(nèi)容過于抽象
本課程涉及的知識面比較廣,各章節(jié)的知識點有相互關(guān)聯(lián)的邏輯關(guān)系,教學(xué)計劃的制定多以理論知識點的講解為主,選取的教材多數(shù)抽象難懂,缺少具體的實踐案例的講解,學(xué)生只能停留在理解層面,無法學(xué)以致用。
(二)教學(xué)模式僵化
老師課堂講授側(cè)重概念、理論,導(dǎo)致學(xué)生只能從理論上掌握基本的數(shù)據(jù)結(jié)構(gòu)及其相關(guān)算法,但難以通過計算機編程語言(如:C/C++)實踐相關(guān)理論,更不會用所學(xué)知識解決具體問題。很多學(xué)生在學(xué)習(xí)該課程的時候不知道在實際中如何應(yīng)用各種數(shù)據(jù)結(jié)構(gòu)和算法,僅僅學(xué)會一些“死”的理論來應(yīng)對考試。
(三)實驗教學(xué)環(huán)節(jié)薄弱
學(xué)生在實驗的過程中,只停留在書本上,模仿書上的代碼,存在理論脫離實際、實踐環(huán)節(jié)薄弱問題,學(xué)生往往產(chǎn)生“學(xué)而無用”的思想。
(四)教學(xué)效果不佳
由于上述幾個問題,學(xué)生只會機械地實踐,沒有領(lǐng)悟?qū)I(yè)知識背后的思想,導(dǎo)致學(xué)生不清楚學(xué)習(xí)本課程的價值何在,分析問題、解決問題以及編程能力都沒有從根本上得到培養(yǎng),從而導(dǎo)致專業(yè)素質(zhì)未得到提升。同時,學(xué)生的團隊合作意識、良好的編碼習(xí)慣等工程化思想未得到培養(yǎng)。
二、CDIO工程教育模式的特點
2000年10月,MIT聯(lián)合瑞典的三所大學(xué)成立了以Edward Carwley教授為首的跨國高等工程教育改革研究組,創(chuàng)立了工程教育模型——CDIO(Conceive構(gòu)思、Design設(shè)計、Implement實現(xiàn)、Operate運行),是“做中學(xué)”和“基于項目教育和學(xué)習(xí)”的集中體現(xiàn)[2]。
針對工程師的培養(yǎng),CDIO提出的根本出發(fā)點就是為了設(shè)計造福于人類的軟件產(chǎn)品,所以學(xué)生必須能發(fā)揮一個工程師的作用。表1顯示了在企業(yè)/社會環(huán)境下,工程師“構(gòu)思—設(shè)計—實施—運行”系統(tǒng)所必需的知識、技術(shù)及態(tài)度的組成模塊。對于技術(shù)工作感興趣的成熟的個體應(yīng)具備個人和專業(yè)的技能,這是培養(yǎng)實踐能力的核心。為了開發(fā)復(fù)雜的增值工程系統(tǒng),學(xué)生應(yīng)掌握最基本的技術(shù)知識和推理能力。為了在當(dāng)今團隊環(huán)境下工作,學(xué)生一定要發(fā)展團隊合作和溝通的人際交往能力。最后,為了能夠在企業(yè)/社會背景下創(chuàng)造和運行產(chǎn)品,一個工科生必須理解“構(gòu)思—設(shè)計—實施—運行”系統(tǒng)的相關(guān)內(nèi)容。
表1 ?工程師“構(gòu)思—設(shè)計—實施—運行”系統(tǒng)所必需的能力模塊
三、數(shù)據(jù)結(jié)構(gòu)與算法課程教學(xué)改革的措施
教師培養(yǎng)學(xué)生實施軟件項目都是圍繞“構(gòu)思—設(shè)計—實施—運行”這一背景進行的。表2顯示了軟件工程師參與工程設(shè)計的過程與CDIO之間是有對應(yīng)關(guān)系的,可以看出,CDIO的理念是滲透在軟件工程過程的每一個階段。因此,基于CDIO的教育模式以及軟件工程師進行“構(gòu)思—設(shè)計—實施—運行”系統(tǒng)所必需的能力模塊,提出了數(shù)據(jù)結(jié)構(gòu)與算法教學(xué)改革的具體實施措施。
表2 ?軟件工程師工程設(shè)計過程與CDIO之間的關(guān)系
(一)“構(gòu)思”
教師授課時要明確培養(yǎng)“軟件卓越工程師”的目標(biāo),而不是“軟件外包程序員”,所以要強調(diào)數(shù)據(jù)結(jié)構(gòu)與算法作為專業(yè)基礎(chǔ)的重要性,可以讓學(xué)生修煉以不變應(yīng)對不斷更新的軟件技術(shù)的“內(nèi)功”。在學(xué)習(xí)每個抽象的知識點前,一定要提出為什么要學(xué)習(xí)它,能解決什么問題。培養(yǎng)學(xué)生在軟件工程設(shè)計過程中,能發(fā)現(xiàn)、分析和澄清一個問題的能力。
(二)“設(shè)計”
主要培養(yǎng)學(xué)生在工程設(shè)計過程中“提出—選擇—實證”方案的能力,是軟件工程師最重要的技能。課堂上多采用啟發(fā)式教育方式,讓學(xué)生自己提出解決問題的方案,如:擬采用的數(shù)據(jù)結(jié)構(gòu)模型以及相對應(yīng)的算法。然后通過算法的時間復(fù)雜度和空間復(fù)雜度進行事前比較分析,選擇最優(yōu)方案。最后,將要解決的問題通過“分而治之”的思想劃分為子模塊,并應(yīng)用決定使用的方案,進行實證分析,看是否可以解決原問題。這個階段也是培養(yǎng)學(xué)生邏輯推理和解決問題能力的階段。
(三)“編碼”
主要培養(yǎng)學(xué)生將分析設(shè)計的方案及相關(guān)抽象的理論知識用具體編程語言實現(xiàn)的能力。根據(jù)CDIO提出的“做中學(xué)”的工程教育理念,將授課中每一個抽象的理論知識滲透到具有實際意義的案例中,升華技術(shù)知識的運用。從而,使學(xué)生的學(xué)習(xí)更有效,能夠?qū)W以致用,培養(yǎng)其實際運用的能力。除了專業(yè)知識和個人技能的培養(yǎng),教師在案例教學(xué)和實踐教學(xué)過程中,更要注重培養(yǎng)學(xué)生養(yǎng)成良好的編程習(xí)慣,形成良好的、符合軟件設(shè)計規(guī)范的編程風(fēng)格,從而使學(xué)生設(shè)計的數(shù)據(jù)結(jié)構(gòu)與算法容易理解,具有較強的可讀性,這也是一名優(yōu)秀的軟件工程師與人交流的“代碼語言”,也是其人際交往能力的組成部分。
為了使學(xué)生通過本課程的學(xué)習(xí),能夠設(shè)計出時間上更高效、空間上更經(jīng)濟的程序,通過競賽為載體進行教學(xué),鼓勵學(xué)生參加學(xué)院、學(xué)校組織的編程競賽、ACM-ICPC省級大學(xué)生程序設(shè)計競賽以及全國軟件專業(yè)人才設(shè)計與開發(fā)大賽、軟件大賽等。這些程序設(shè)計比賽解決問題的方式是“構(gòu)思—設(shè)計—實施—運行”的模式,也需要學(xué)生具備工程師所必需的能力模塊。通過這些競賽平臺,豐富了實踐教學(xué)的形式,讓學(xué)生擁有“學(xué)以致用”的平臺,使學(xué)生的學(xué)習(xí)更有針對性,提高學(xué)生學(xué)習(xí)的主動性和參與性。通過“做中學(xué)”的方式有效地夯實專業(yè)基礎(chǔ)的同時,提升其分析和解決問題的能力,實踐動手能力也得到極大加強。
(四)“測試與維護”
培養(yǎng)學(xué)生在軟件工程實踐活動中創(chuàng)造、運行軟件產(chǎn)品的能力。在教學(xué)中,將學(xué)生組成項目小組,并且根據(jù)學(xué)生的特點分配不同角色,各自經(jīng)過“CDI”三個階段,一起通過團隊協(xié)作完成一個軟件系統(tǒng)的開發(fā)。培養(yǎng)學(xué)生在設(shè)計、編寫相關(guān)數(shù)據(jù)結(jié)構(gòu)和算法的時候,本著“高內(nèi)聚,低耦合”的思想,設(shè)計合理的接口,便于最終系統(tǒng)整合。同時,強調(diào)學(xué)生設(shè)計的程序要有通用性和靈活性,便于后期的修改和維護。
四、教學(xué)改革效果
哈爾濱理工大學(xué)軟件學(xué)院將CDIO的工程教育理念應(yīng)用到數(shù)據(jù)結(jié)構(gòu)與算法的教學(xué)中,在教學(xué)的各個環(huán)節(jié)實施相應(yīng)措施,培養(yǎng)學(xué)生“構(gòu)思—設(shè)計—實施—運行”系統(tǒng)所必需的能力。圖1顯示了在數(shù)據(jù)結(jié)構(gòu)與算法課程中實施CDIO教育模式兩個年級學(xué)生期末考試成績的對比。其中,平滑折線代表11級采用傳統(tǒng)教學(xué)模式的數(shù)據(jù)結(jié)構(gòu)與算法課程的成績(67人,平均值=53.4),點劃線代表12級實施CDIO教育模式后的數(shù)據(jù)結(jié)構(gòu)與算法課程的成績(65人,平均值=66.6)??梢钥闯霾捎肅DIO模式后,學(xué)生整體成績有明顯幅度的提高。
由此,可以證明在數(shù)據(jù)結(jié)構(gòu)與算法教學(xué)中實施CDIO工程教育模式是非常有效的。下一步將繼續(xù)研究通過該模式的指導(dǎo)有效提高學(xué)生的工程實踐能力,培養(yǎng)符合企業(yè)需求的軟件人才。
圖1 ?實施CDIO教育模式前后學(xué)生數(shù)據(jù)結(jié)構(gòu)與算法課程成績的對比
參考文獻:
[1]靳曉燕.中國有望不久成第二軟件大國[N].深圳特區(qū)
報,2013-11-17.
[2]Crawley,E.F.The CDIO Syllabus:A Statement of
Goals for Undergraduate Engineering Education
[R].MIT CDIO Report #1,2001.