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