李素萍
(山西工程技術(shù)學(xué)院信息系,山西 陽(yáng)泉 045000)
數(shù)據(jù)結(jié)構(gòu)是一門非常重要的課程,但是其內(nèi)容較為抽象,學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時(shí)往往會(huì)感到困難,這對(duì)教師的教學(xué)提出了較高的要求。而采用工程的方法,可以幫助學(xué)生更好的理解相關(guān)的理論知識(shí),同時(shí)還可以提高學(xué)生個(gè)人能力、人際團(tuán)隊(duì)能力和工程系統(tǒng)能力[1]。
CDIO工程教育模式是近年來(lái)國(guó)際工程教育改革的最新成果。自2000年起,麻省理工學(xué)院和瑞典皇家工學(xué)院等四所大學(xué)組成的跨國(guó)研究組織,經(jīng)過(guò)四年的探索研究,創(chuàng)立了 CDIO 工程教育理念,并成立了以 CDIO命名的國(guó)際合作組織。CDIO 代表構(gòu)思(Conceive)、設(shè)計(jì)(Design)、實(shí)現(xiàn)(Implement)和運(yùn)作(Operate),它以產(chǎn)品研發(fā)到運(yùn)行的生命周期為載體,讓學(xué)生以主動(dòng)的、實(shí)踐的、課程之間有機(jī)聯(lián)系的方式學(xué)習(xí)工程的理論、技術(shù)與經(jīng)驗(yàn)[2-3]。CDIO培養(yǎng)大綱將畢業(yè)生的能力分為工程基礎(chǔ)知識(shí)、個(gè)人能力、人際團(tuán)隊(duì)能力和工程系統(tǒng)能力四個(gè)層面,使學(xué)生在這四個(gè)層面達(dá)到預(yù)定目標(biāo)[4-5]。
數(shù)據(jù)結(jié)構(gòu)課程教學(xué)現(xiàn)狀:教學(xué)中以教師講授為主,學(xué)生被動(dòng)學(xué)習(xí),主動(dòng)參與性弱;理論與實(shí)際脫節(jié),理論教學(xué)注重算法介紹和描述,學(xué)生難于變成程序代碼,實(shí)踐教學(xué)側(cè)重于算法的簡(jiǎn)單驗(yàn)證(設(shè)計(jì)能力弱,應(yīng)用能力差),與實(shí)際應(yīng)用脫節(jié);考核方式以試卷成績(jī)?yōu)橹鞯鹊取hb于此以簡(jiǎn)單選擇排序?yàn)槔贑DIO設(shè)計(jì)如下教學(xué)模式。
構(gòu)思是一個(gè)呈現(xiàn)著系統(tǒng)性的、有中心及層次的、物化的整體性思維活動(dòng)。任何問(wèn)題的解決都離不開(kāi)構(gòu)思,這是解決問(wèn)題的第一步,也是非常重要(萬(wàn)事開(kāi)頭難)的一步。
這里要解決的問(wèn)題是對(duì)若干個(gè)數(shù)排序。我們可以這樣構(gòu)思:在之前學(xué)過(guò)的計(jì)算機(jī)語(yǔ)言中有兩個(gè)數(shù)排序的例子(從小到大),基本思路為:比較兩個(gè)數(shù)a和b,若第一個(gè)數(shù)a大于第二個(gè)數(shù)b,則a,b交換(a中存放小的數(shù),b中存放大的數(shù))后輸出,否則直接輸出;由此可以推及三個(gè)數(shù)排序的思路:若第一個(gè)數(shù)a大于第二個(gè)數(shù)b,則a和b交換,以確保a是兩個(gè)數(shù)中的小的數(shù),然后再由a和c比較交換,確保a是三個(gè)數(shù)中最小的數(shù),最后b和c比較交換確保b是兩個(gè)數(shù)中小的數(shù),這樣三個(gè)數(shù)就排序完成,以此類推四個(gè)數(shù)、五個(gè)數(shù)排序均可用上述思路,其核心思想就是比較交換。在實(shí)際中,排序的應(yīng)用非常廣泛,因此數(shù)據(jù)結(jié)構(gòu)課程講到很多種排序算法,簡(jiǎn)單選擇排序是其中的一種排序法,由上述排序思路的啟發(fā),當(dāng)有n(假定n=100)個(gè)數(shù)需要排序,顯然要做兩個(gè)突破:數(shù)據(jù)定義(如何定義100個(gè)變量)和排序方法(對(duì)100個(gè)數(shù)排序)的突破,數(shù)據(jù)定義可以用計(jì)算機(jī)語(yǔ)言中的數(shù)組(大量同類型數(shù)據(jù))知識(shí)解決,排序方法可以用計(jì)算機(jī)語(yǔ)言中的循環(huán)結(jié)構(gòu)(大量重復(fù)動(dòng)作)知識(shí)解決,于是,該問(wèn)題實(shí)現(xiàn)思想為:如果有n個(gè)元素需要排序,那么首先從n個(gè)元素中找到最小的那個(gè)元素與第0位置上的元素交換,然后再?gòu)氖O碌膎-1個(gè)元素中找到最小的元素與第1位置上的元素交換,之后再?gòu)氖O碌膎-2個(gè)元素中找到最小的元素與第2位置上的元素交換,……直到所有元素都排序好(共n-1次即可)為止。也即,對(duì)于具有n個(gè)元素的無(wú)序表遍歷n-1次,第i次從無(wú)序表中第i(i>=0)個(gè)元素開(kāi)始,找出所有元素中最小的元素,然后與第i的位置元素交換,這樣,n個(gè)數(shù)據(jù)排序完成。
鑒于本題目的限制(選擇排序?yàn)槔@里構(gòu)思更側(cè)重于實(shí)現(xiàn)(計(jì)算機(jī)),事實(shí)上還應(yīng)從性能(時(shí)間、空間、安全性等)、可靠性可用性等用戶需求方面多方位考慮構(gòu)思。
有了構(gòu)思是否就可以直接寫出代碼供計(jì)算機(jī)運(yùn)行,有計(jì)算機(jī)語(yǔ)言基礎(chǔ)的讀者明白對(duì)于簡(jiǎn)單(順序結(jié)構(gòu)、二分支結(jié)構(gòu))的規(guī)模小的問(wèn)題可以,而對(duì)于復(fù)雜(多分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)及其嵌套)的大規(guī)模的問(wèn)題的話需要經(jīng)過(guò)設(shè)計(jì)階段用模型準(zhǔn)確、清晰地描述解決問(wèn)題的思路。模型是為了更好地理解事物對(duì)事物作出的一種抽象,是對(duì)事物的無(wú)歧義的書(shū)面描述,由一組圖形符號(hào)和規(guī)則構(gòu)成。設(shè)計(jì)階段的主要任務(wù)就是要用模型精確地描述構(gòu)思,以便于實(shí)現(xiàn)階段直接將該描述翻譯成程序由計(jì)算機(jī)執(zhí)行。
由于該例(排序)功能的單一性,故只涉及到詳細(xì)設(shè)計(jì)(大規(guī)模問(wèn)題還需要先經(jīng)歷概要設(shè)計(jì)階段)內(nèi)容。
詳細(xì)設(shè)計(jì)階段可以用圖形(程序流程圖、盒圖等)、表格等工具精確描述構(gòu)思,鑒于該例的需要只涉及到圖形工具,并且為了呈現(xiàn)結(jié)構(gòu)化技術(shù)(自頂向下,逐步求精),采用了盒圖描述上述構(gòu)思.
實(shí)現(xiàn)即編碼,編碼就是將設(shè)計(jì)階段的結(jié)果翻譯成計(jì)算機(jī)語(yǔ)言書(shū)寫的程序,是設(shè)計(jì)階段的具體化,沒(méi)有實(shí)現(xiàn)階段,計(jì)算機(jī)無(wú)法幫人類解決問(wèn)題,再好的構(gòu)思與設(shè)計(jì)也只是紙上談兵,也即程序設(shè)計(jì)語(yǔ)言是人和計(jì)算機(jī)通信的基本工具,是數(shù)據(jù)結(jié)構(gòu)課程的基礎(chǔ),更是實(shí)現(xiàn)階段的保證,數(shù)據(jù)結(jié)構(gòu)理論課偏于構(gòu)思,實(shí)踐課偏于實(shí)現(xiàn),在CDIO理念指導(dǎo)下將數(shù)據(jù)結(jié)構(gòu)理論和實(shí)踐有機(jī)結(jié)合起來(lái)才得以完整地完成該課程任務(wù),也正是工程綜合性(實(shí)踐中的綜合)的體現(xiàn)。
學(xué)過(guò)C語(yǔ)言的讀者根據(jù)上述設(shè)計(jì)結(jié)果自然就能翻譯成如下代碼:

上機(jī)運(yùn)行后排序完成。但從工程角度看,這樣的代碼還不夠好,因?yàn)閺墓こ坍a(chǎn)出的質(zhì)量和效率要求,程序不僅要由計(jì)算機(jī)運(yùn)行,測(cè)試和維護(hù)時(shí)容易閱讀和理解(可讀性)勢(shì)必成為衡量程序好壞的重要標(biāo)準(zhǔn),也即程序的讀者有兩個(gè),既要由計(jì)算機(jī)運(yùn)行還要由人閱讀,軟件測(cè)試是保證軟件質(zhì)量的重要環(huán)節(jié),那么,測(cè)試中發(fā)現(xiàn)錯(cuò)誤必須診斷并改正錯(cuò)誤,這個(gè)過(guò)程稱之為調(diào)試,從工程角度講,寫出程序并不代表軟件開(kāi)發(fā)工作已經(jīng)完成,測(cè)試調(diào)試工作大約還需同樣多工作量完成,也就是說(shuō),實(shí)現(xiàn)階段包含兩個(gè)內(nèi)容:編寫代碼和測(cè)試(鑒于題目的限制,在此對(duì)測(cè)試內(nèi)容不論述),代碼可讀性是調(diào)試工作以及軟件交由用戶使用過(guò)程中出現(xiàn)問(wèn)題需要維護(hù)時(shí)強(qiáng)有力的保證,故此提出了編碼風(fēng)格作為評(píng)價(jià)程序性能的指標(biāo),它對(duì)程序可靠性可讀性可測(cè)試性和可維護(hù)性產(chǎn)生深遠(yuǎn)的影響。其具體規(guī)則為:程序內(nèi)部應(yīng)有好的文檔(恰當(dāng)標(biāo)識(shí)符,適當(dāng)注解,良好的視覺(jué)組織),數(shù)據(jù)說(shuō)明易于理解便于查閱,語(yǔ)句構(gòu)造盡可能簡(jiǎn)單直觀,輸入輸出風(fēng)格遵守人機(jī)界面設(shè)計(jì)原則,數(shù)據(jù)輸入安全方便,信息輸出清晰易懂,效率能滿足用戶需求即可,不要犧牲程序清晰性和可讀性追求不必要的高效率。
經(jīng)過(guò)上述階段,開(kāi)發(fā)工作就完成了,作為數(shù)據(jù)結(jié)構(gòu)課程學(xué)習(xí)者會(huì)認(rèn)為程序調(diào)試成功了,也就至此結(jié)束了,這里提出作業(yè)作品產(chǎn)品概念以論證運(yùn)行維護(hù)階段必要性。做作業(yè)是學(xué)生學(xué)習(xí)生活的常態(tài),如果能把做作業(yè)引向個(gè)性化表達(dá),并逐步用興趣度、審美觀、合理化、用戶需求等來(lái)引領(lǐng),那么學(xué)生很容易創(chuàng)作出有思想、有創(chuàng)意、有成就感的作品產(chǎn)品,學(xué)習(xí)過(guò)程也會(huì)因此而變得更加有趣和更有意義。
總之,將工程理念方法技術(shù)應(yīng)用到數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中,通過(guò)引導(dǎo)學(xué)生走向展賽活動(dòng)(用課題要求替代作業(yè)的練習(xí)要求),使得習(xí)作成為具有創(chuàng)意的綜合性作品,輔以校企合作(面向市場(chǎng)、引領(lǐng)教學(xué)、產(chǎn)教接軌的人才培養(yǎng)平臺(tái))將數(shù)據(jù)結(jié)構(gòu)內(nèi)容和其他基礎(chǔ)知識(shí)、專業(yè)知識(shí)應(yīng)用到實(shí)際工程項(xiàng)目中助推作品成產(chǎn)品,學(xué)生既輕松掌握了知識(shí),還具備了解決實(shí)際問(wèn)題的能力,使學(xué)生愉悅輕松接受社會(huì)迎接社會(huì),充分發(fā)揮主觀能動(dòng)性,為社會(huì)做出貢獻(xiàn)。