臧斌宇
摘 要:當(dāng)前互聯(lián)網(wǎng)+、云計(jì)算、大數(shù)據(jù)、機(jī)器學(xué)習(xí)技術(shù)不斷成熟,從基礎(chǔ)設(shè)施、計(jì)算模式、信息資源、信息應(yīng)用等多個(gè)維度的技術(shù)進(jìn)步來看,信息社會(huì)走進(jìn)了一個(gè)全新的時(shí)代。在新的時(shí)代背景下,新的機(jī)遇和挑戰(zhàn)要求我們對(duì)中國的計(jì)算機(jī)類本科專業(yè)課程體系進(jìn)行新的思考、評(píng)估與重構(gòu)。本文旨在以上海交通大學(xué)軟件工程專業(yè)為具體案例,討論并探索當(dāng)前中國計(jì)算機(jī)類本科專業(yè)課程體系改革。本文首先分析了計(jì)算機(jī)類本科專業(yè)知識(shí)體系發(fā)展的三個(gè)階段,然后詳細(xì)介紹了上海交通大學(xué)軟件工程本科專業(yè)的專業(yè)課程體系,最后介紹了該課程體系的三個(gè)特色。
關(guān)鍵詞:軟件工程;課程體系;知識(shí)體系;實(shí)踐體系;系統(tǒng)能力;問題導(dǎo)向
一、計(jì)算機(jī)類本科專業(yè)知識(shí)體系發(fā)展的三個(gè)階段
進(jìn)入21世紀(jì)以來,互聯(lián)網(wǎng)技術(shù)迅速發(fā)展,互聯(lián)網(wǎng)時(shí)代的到來極大地改變了人們的日常工作和生活方式。當(dāng)前支持互聯(lián)網(wǎng)時(shí)代的核心技術(shù)是:云計(jì)算、大數(shù)據(jù)和機(jī)器學(xué)習(xí)。這些技術(shù)的迅速興起和廣泛普及,深刻地影響了計(jì)算機(jī)類本科專業(yè)的知識(shí)體系,將計(jì)算機(jī)類本科專業(yè)的知識(shí)體系帶入互聯(lián)網(wǎng)時(shí)代。回顧過去,計(jì)算機(jī)類本科專業(yè)知識(shí)體系的發(fā)展,總的來說可以分為三個(gè)階段。前兩個(gè)階段均處于20世紀(jì),那是典型的單機(jī)時(shí)代的知識(shí)體系;而第三階段則是興起于21世紀(jì)初的互聯(lián)網(wǎng)時(shí)代的知識(shí)體系,與前兩個(gè)時(shí)代有著明顯的區(qū)別。
具體而言,計(jì)算機(jī)類本科專業(yè)知識(shí)體系的第一階段為20世紀(jì)70年代中期至80年代中期,那個(gè)時(shí)期呈現(xiàn)出百家爭鳴之局面。由于計(jì)算機(jī)學(xué)科的理論和技術(shù)均未成熟,其間教學(xué)內(nèi)容不得不面面俱到,從而呈現(xiàn)出紛繁多樣的“百科全書”式的特點(diǎn)。例如:因?yàn)橛行⌒蜋C(jī),所以有了“計(jì)算機(jī)組成”課程;因?yàn)橛写笮蜋C(jī)和巨型機(jī),所以有了“計(jì)算機(jī)體系結(jié)構(gòu)”課程;因?yàn)橛辛宋⑿蜋C(jī),所以有了“微機(jī)原理”課程。另外,由于沒有主流的系統(tǒng),因而缺乏足夠的、合適的實(shí)驗(yàn)題目讓學(xué)生得到充分訓(xùn)練,從而導(dǎo)致了課程體系呈現(xiàn)偏重理論和概念、缺乏具體實(shí)踐的特點(diǎn)。該階段典型的教材有名為《編譯原理》的“龍書”和名為《操作系統(tǒng)概念》的“恐龍書”。
計(jì)算機(jī)類本科專業(yè)知識(shí)體系的第二階段為20世紀(jì)80年代中期至20世紀(jì)末期。在這一時(shí)期以單機(jī)為主的技術(shù)逐漸成熟,例如:處理器設(shè)計(jì)技術(shù)、操作系統(tǒng)技術(shù)、程序設(shè)計(jì)語言和編譯技術(shù)、關(guān)系型數(shù)據(jù)庫、TCP/IP,等等。因此,計(jì)算機(jī)教學(xué)方面也有了主流的理論和平臺(tái)。該階段的教科書具有以實(shí)際系統(tǒng)為主線的特點(diǎn),代表性教材有被稱為“虎書”的《現(xiàn)代編譯原理》以及《計(jì)算機(jī)組成與設(shè)計(jì)——硬件軟件接口》《計(jì)算機(jī)體系結(jié)構(gòu):量化研究方法》等。該階段的理論教學(xué)更加深入,與此同時(shí)課程實(shí)驗(yàn)的地位顯著提高,主流課程的實(shí)驗(yàn)呈現(xiàn)出難度大、強(qiáng)度高的特點(diǎn)。
我國于改革開放之初引進(jìn)了大量西方的教材和教學(xué)體系,因此國內(nèi)的計(jì)算機(jī)類知識(shí)體系也是脫胎于第一個(gè)階段的。21世紀(jì)初,部分“985工程”高校開始學(xué)習(xí)國外的先進(jìn)經(jīng)驗(yàn),著手改革教學(xué)內(nèi)容,這些學(xué)校的知識(shí)體系進(jìn)入了計(jì)算機(jī)教學(xué)的第二階段。但總的說來,還沒有進(jìn)入21世紀(jì)以互聯(lián)網(wǎng)為代表的新時(shí)期。
計(jì)算機(jī)類本科專業(yè)知識(shí)體系的第三階段為21世紀(jì)初期至今。與科學(xué)研究采用化繁為簡的還原論不同,工程技術(shù)多采用由簡入繁的綜合方法。隨著將過去單個(gè)的計(jì)算機(jī)通過網(wǎng)絡(luò)互聯(lián)構(gòu)成了更大規(guī)模的計(jì)算平臺(tái),計(jì)算機(jī)領(lǐng)域迎來了互聯(lián)網(wǎng)時(shí)代。互聯(lián)網(wǎng)時(shí)代無論是硬件平臺(tái),還是支撐軟件平臺(tái),或者應(yīng)用領(lǐng)域的規(guī)模都比單機(jī)時(shí)代有了顯著增大。因此,在互聯(lián)網(wǎng)時(shí)代,計(jì)算機(jī)類本科專業(yè)的知識(shí)體系總體上呈現(xiàn)出“上浮”的趨勢,所涉及的系統(tǒng)規(guī)模顯著擴(kuò)大,并逐漸轉(zhuǎn)為面向整個(gè)互聯(lián)網(wǎng),特點(diǎn)是更加注重軟件本身。我國由于在21世紀(jì)初設(shè)立了軟件工程本科專業(yè),因此可以很好地適應(yīng)互聯(lián)網(wǎng)時(shí)代計(jì)算機(jī)知識(shí)越來越軟件化的趨勢。軟件構(gòu)造是工程問題,而工程問題都必然遵從綜合論的法則,必然從簡單向復(fù)雜發(fā)展,因此軟件愈加復(fù)雜是必然的趨勢。
軟件系統(tǒng)的復(fù)雜性增加,意味著有更多的知識(shí)需要講授。但是大學(xué)四年的時(shí)間是有限的,原有的計(jì)算機(jī)本科專業(yè)知識(shí)體系已被單機(jī)系統(tǒng)撐滿,要增加新的內(nèi)容就必須舍棄部分舊內(nèi)容,課程重構(gòu)是達(dá)到這一目標(biāo)的有效途徑。進(jìn)入新世紀(jì)以來,卡耐基梅隆大學(xué)、斯坦福大學(xué)、麻省理工學(xué)院等高等學(xué)府開始了課程重構(gòu),課程內(nèi)容濃縮了單機(jī)基礎(chǔ),更加面向互聯(lián)網(wǎng)。課程目標(biāo)更加關(guān)注培養(yǎng)學(xué)生對(duì)于問題、數(shù)據(jù)、系統(tǒng)的抽象能力。其典型課程不再為單一系統(tǒng),轉(zhuǎn)而向更加綜合的方向發(fā)展,典型教材有《C++程序設(shè)計(jì):基礎(chǔ)、編程抽象與算法抽象》《深入理解計(jì)算機(jī)系統(tǒng)》《計(jì)算機(jī)系統(tǒng)設(shè)計(jì)原理》等。該階段仍在不斷演化,以適應(yīng)云計(jì)算、移動(dòng)計(jì)算、大數(shù)據(jù)、機(jī)器學(xué)習(xí)等技術(shù)。
當(dāng)主流的計(jì)算機(jī)教學(xué)日益呈現(xiàn)軟件化的趨勢后,計(jì)算機(jī)硬件類的人才如何培養(yǎng)?這時(shí)電子工程本科專業(yè)開始出現(xiàn)“上浮”現(xiàn)象,它依然是工程技術(shù)遵循綜合論法則的必然結(jié)果。傳統(tǒng)的電子工程領(lǐng)域隨著數(shù)字電路模塊化規(guī)模的提高,開始進(jìn)入傳統(tǒng)的計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域,CPU芯片設(shè)計(jì)既需要電路基礎(chǔ)也需要體系結(jié)構(gòu)的基礎(chǔ),甚至為新的CPU編寫操作系統(tǒng)、編譯器、運(yùn)行環(huán)境都成為芯片設(shè)計(jì)公司自己的責(zé)任。因此新的計(jì)算機(jī)工程專業(yè)由電子工程專業(yè)孕育而生,該專業(yè)必然將主宰傳統(tǒng)的以單CPU為主的教學(xué)領(lǐng)域。
二、上海交通大學(xué)軟件工程本科專業(yè)課程體系
為了適應(yīng)新時(shí)代軟件人才培養(yǎng)需要,上海交通大學(xué)軟件學(xué)院對(duì)軟件工程本科專業(yè)課程體系改革進(jìn)行了積極的探索。本文通過介紹上海交大軟件工程本科專業(yè)課程體系,希望能夠?qū)π鹿た票尘跋掠?jì)算機(jī)類本科專業(yè)課程體系如何進(jìn)行改革起到拋磚引玉的作用。
上海交大軟件工程本科專業(yè)課程體系設(shè)計(jì)的指導(dǎo)思想是:適應(yīng)新時(shí)代的技術(shù)發(fā)展,使學(xué)生在軟件領(lǐng)域的知識(shí)和能力得到很好的培養(yǎng),畢業(yè)后成為優(yōu)秀的軟件工程師。
在課程體系設(shè)計(jì)上,我們首先采用了“核心課+方向課+綜合課(Capstone course)”的模式,這是國際上計(jì)算機(jī)類本科課程體系普遍采用的模式。與我國傳統(tǒng)的計(jì)算機(jī)類本科專業(yè)課程體系相比,該模式首先精簡了必修課程,增加了非常綜合的整合式課程,同時(shí)將大量傳統(tǒng)的必修課改為方向課。其次,增加了大量的實(shí)踐環(huán)節(jié),最后一年只安排畢業(yè)設(shè)計(jì),這樣就保障了學(xué)生有充足的時(shí)間進(jìn)行企業(yè)實(shí)習(xí)。上海交通大學(xué)的學(xué)期為兩長一短,春秋兩個(gè)學(xué)期各18周(含兩周考試周),暑期學(xué)期為4周。我們?cè)诖笠弧⒋蠖膬蓚€(gè)小學(xué)期都安排了實(shí)踐類課程。大三的小學(xué)期和第七學(xué)期的企業(yè)實(shí)習(xí)連在一起。再次,我們?cè)黾恿似髽I(yè)課程,這既可以滿足卓越工程師計(jì)劃的要求,也能更好地滿足工程教育認(rèn)證中對(duì)非技術(shù)能力的培養(yǎng)要求。
核心課程是軟件工程專業(yè)全部學(xué)生都必須完成的專業(yè)基礎(chǔ)課程。理論課部分有四個(gè)模塊:問題求解、系統(tǒng)基礎(chǔ)、應(yīng)用基礎(chǔ)、軟件工程,共有10門課程,計(jì)36學(xué)分(含實(shí)驗(yàn)與習(xí)題課學(xué)分)。問題求解模塊包括:程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)、算法原理、機(jī)器學(xué)習(xí);系統(tǒng)基礎(chǔ)模塊包括:計(jì)算機(jī)系統(tǒng)基礎(chǔ)(上、下)、計(jì)算機(jī)系統(tǒng)工程;應(yīng)用基礎(chǔ)模塊包括:基于平臺(tái)的開發(fā)、數(shù)據(jù)庫設(shè)計(jì);軟件工程模塊包括:軟件工程基礎(chǔ)、軟件測試。幾乎所有的課程均配備了充實(shí)的實(shí)驗(yàn)內(nèi)容供學(xué)生進(jìn)行實(shí)踐。核心課程設(shè)置的特色是:第一,根據(jù)互聯(lián)網(wǎng)大數(shù)據(jù)時(shí)代的特征,結(jié)合學(xué)習(xí)美國計(jì)算機(jī)四大名校的課程體系,重構(gòu)了傳統(tǒng)的多門計(jì)算機(jī)基礎(chǔ)課程,致力于保證學(xué)生計(jì)算機(jī)軟件相關(guān)知識(shí)框架的整體性和先進(jìn)性,強(qiáng)化基本功的訓(xùn)練;第二,新設(shè)了應(yīng)用基礎(chǔ)模塊,強(qiáng)化應(yīng)用能力的培養(yǎng);第三,突出了軟件工程模塊,強(qiáng)調(diào)軟件工程的專業(yè)特色;第四,增加了“機(jī)器學(xué)習(xí)”課程,以適應(yīng)智能化時(shí)代的發(fā)展。
核心課程還包括兩門暑期實(shí)踐課。第一門課要求每個(gè)學(xué)生使用復(fù)雜數(shù)據(jù)結(jié)構(gòu)開發(fā)一個(gè)文件型數(shù)據(jù)庫,其中也包含了初步的軟件開發(fā)流程體驗(yàn);第二門課要求學(xué)生以團(tuán)隊(duì)協(xié)作的方式完成一個(gè)軟件開發(fā)項(xiàng)目,該項(xiàng)目從需求開始到最終的部署運(yùn)維結(jié)束。
必修課程還有部分是企業(yè)課,旨在培養(yǎng)學(xué)生成為合格軟件工程師的非技術(shù)能力,共設(shè)置6門課程(各1學(xué)分)。其具體包括設(shè)置在第二學(xué)期的“軟件工程職業(yè)素養(yǎng)”,第五學(xué)期的“軟件工程經(jīng)濟(jì)學(xué)”“ 企業(yè)軟件過程與管理”和“企業(yè)軟件質(zhì)量保證”,以及第六學(xué)期的“軟件知識(shí)產(chǎn)權(quán)保護(hù)”和“軟件產(chǎn)品設(shè)計(jì)及用戶體驗(yàn)”。這些課程的教學(xué)由軟件行業(yè)的專家進(jìn)行教學(xué),保證課程與行業(yè)實(shí)際的緊密結(jié)合。
方向課程將技術(shù)細(xì)節(jié)進(jìn)行分類,在高年級(jí)按類介紹技術(shù)細(xì)節(jié),強(qiáng)化學(xué)生在某一方面的專門知識(shí)。共設(shè)立三個(gè)方向的課程,每位學(xué)生必須選擇一個(gè)方向并完成該方向的所有課程。三個(gè)方向分別為:系統(tǒng)軟件方向、數(shù)字媒體與應(yīng)用方向、信息系統(tǒng)方向,每個(gè)方向設(shè)有4門方向課,每門課3學(xué)分。其中,系統(tǒng)軟件方向課有“編譯原理與技術(shù)”“數(shù)字部件設(shè)計(jì)”“操作系統(tǒng)”“計(jì)算機(jī)體系結(jié)構(gòu)”。數(shù)字媒體與應(yīng)用方向課有“計(jì)算機(jī)視覺”“計(jì)算機(jī)圖形學(xué)”“操作系統(tǒng)”“人機(jī)界面與交互”“游戲設(shè)計(jì)與開發(fā)”。信息系統(tǒng)方向課有“信息系統(tǒng)工程”“信息系統(tǒng)分析與設(shè)計(jì)”“企業(yè)級(jí)應(yīng)用系統(tǒng)體系架構(gòu)”“數(shù)據(jù)倉庫與數(shù)據(jù)挖掘”。
綜合課程也是按三個(gè)方向開設(shè),每門課3學(xué)分。它們分別是:“分布式系統(tǒng)”“游戲設(shè)計(jì)與開發(fā)”“企業(yè)信息系統(tǒng)綜合設(shè)計(jì)與實(shí)現(xiàn)”。綜合課程有少量的課程講解,課程的主要目標(biāo)是要求學(xué)生團(tuán)隊(duì)協(xié)作,完成一個(gè)復(fù)雜的軟件系統(tǒng)設(shè)計(jì)與開發(fā),包括問題的調(diào)研、分析、建模、開發(fā)、測試。主要強(qiáng)調(diào)培養(yǎng)學(xué)生的分析、評(píng)價(jià)與創(chuàng)造能力。
表1給出了上述各個(gè)專業(yè)主干課的學(xué)期安排情況。
三、上海交通大學(xué)軟件工程本科專業(yè)課程體系三大特色
1.以課程融合的方式實(shí)現(xiàn)互聯(lián)網(wǎng)時(shí)代系統(tǒng)能力的培養(yǎng)
我們注重培養(yǎng)每一位學(xué)生在互聯(lián)網(wǎng)時(shí)代的系統(tǒng)能力。因此我們對(duì)傳統(tǒng)計(jì)算機(jī)系統(tǒng)類課程進(jìn)行重構(gòu)。具體而言,傳統(tǒng)的計(jì)算機(jī)系統(tǒng)類課程包括“匯編”“計(jì)算機(jī)組成”“體系結(jié)構(gòu)”“操作系統(tǒng)”“編譯原理”“計(jì)算機(jī)網(wǎng)絡(luò)”。我們將這些課程融合為三門計(jì)算機(jī)系統(tǒng)類課程。這些課程從兩個(gè)維度設(shè)計(jì)。第一個(gè)維度是程序員的角度,開設(shè)了“計(jì)算機(jī)系統(tǒng)基礎(chǔ)(上)、(下)”兩門課程;第二個(gè)維度是系統(tǒng)設(shè)計(jì)者的角度,開設(shè)了“計(jì)算機(jī)系統(tǒng)工程”。兩個(gè)維度互為補(bǔ)充,相得益彰。課程融合使得傳統(tǒng)教學(xué)內(nèi)容大為凝練,互聯(lián)網(wǎng)時(shí)代下系統(tǒng)能力的新知識(shí)得以增添。融合后的三門課程,更加貼近技術(shù)的新發(fā)展,課程前后融會(huì)貫通一氣呵成,成為計(jì)算機(jī)系統(tǒng)能力培養(yǎng)的通識(shí)教育。
“計(jì)算機(jī)系統(tǒng)基礎(chǔ)”課程采用了卡耐基梅隆大學(xué)的《深入理解操作系統(tǒng)》作為主要教材,威斯康星大學(xué)的《操作系統(tǒng)——三個(gè)輕松的篇章》作為補(bǔ)充教材。該課程深入淺出地介紹了計(jì)算機(jī)系統(tǒng)中的重要知識(shí),涵蓋了傳統(tǒng)多門系統(tǒng)類課程的內(nèi)容。這門課程的教學(xué)內(nèi)容更加關(guān)注現(xiàn)代處理器和操作系統(tǒng)細(xì)節(jié),以及并發(fā)和網(wǎng)絡(luò)程序設(shè)計(jì),主要包括以下四個(gè)方面。
(1)匯編篇:主要介紹二進(jìn)制、匯編以及鏈接的技術(shù);
(2)計(jì)算機(jī)組成篇:主要介紹CPU流水線、超標(biāo)量技術(shù)、存儲(chǔ)層次、程序優(yōu)化相關(guān)知識(shí);
(3)系統(tǒng)與網(wǎng)絡(luò)程序設(shè)計(jì)篇:主要介紹系統(tǒng)調(diào)用(進(jìn)程與I/O相關(guān)系統(tǒng)調(diào)用)、套接字編程、多線程程序設(shè)計(jì)、并發(fā)數(shù)據(jù)結(jié)構(gòu)。
(4)操作系統(tǒng)篇:介紹操作系統(tǒng)中進(jìn)程、虛存、I/O抽象,介紹進(jìn)程調(diào)度、頁面淘汰策略,介紹關(guān)于鎖、條件變量、信號(hào)量的實(shí)現(xiàn)機(jī)制。
“計(jì)算機(jī)系統(tǒng)工程”課程采用的教材是由兩位美國工程院院士、麻省理工學(xué)院的Jerome H. Saltzer教授和Frans Kaashoek合作編寫的《計(jì)算機(jī)系統(tǒng)設(shè)計(jì)原理》。我們面向互聯(lián)網(wǎng)時(shí)代的計(jì)算機(jī)系統(tǒng)能力培養(yǎng)需求,將課程改造為培養(yǎng)學(xué)生“大”系統(tǒng)觀。這門課程培養(yǎng)學(xué)生的復(fù)雜系統(tǒng)控制能力,即如何使用模塊化、層次化、抽象等方法分析、控制以及設(shè)計(jì)復(fù)雜龐大的計(jì)算機(jī)系統(tǒng)。與此同時(shí),該課程也結(jié)合工業(yè)界和學(xué)術(shù)界的實(shí)際系統(tǒng)介紹并分析互聯(lián)網(wǎng)時(shí)代下大系統(tǒng)的固有屬性:互聯(lián)性、容錯(cuò)性、原子性、一致性、安全性。
這門課程以虛擬化技術(shù)和分布式系統(tǒng)等互聯(lián)網(wǎng)時(shí)代的主流技術(shù)為主線,以系統(tǒng)虛擬化,以及分布式系統(tǒng)的計(jì)算模塊、存儲(chǔ)模塊、通信模塊等為案例,展開對(duì)大系統(tǒng)屬性的介紹。例如,該課程會(huì)以“杭州光纖被挖斷,支付寶癱瘓兩小時(shí)而同期的淘寶卻能正常工作”的新聞引出阿里巴巴數(shù)據(jù)中心的“異地雙活”特性,進(jìn)而介紹大系統(tǒng)的容錯(cuò)性、數(shù)據(jù)一致性等內(nèi)容。
通過課程融合培養(yǎng)學(xué)生大系統(tǒng)能力的方式與傳統(tǒng)計(jì)算機(jī)課程體系形成鮮明對(duì)比。傳統(tǒng)的計(jì)算機(jī)課程,僅局限于單機(jī)系統(tǒng)的能力培養(yǎng),流行的思路是:所有學(xué)生都要在FPGA上開發(fā)處理器,在該處理器上開發(fā)操作系統(tǒng),進(jìn)而在學(xué)生自己的處理器和操作系統(tǒng)上完成一個(gè)編譯器的開發(fā)。然而,我們的課程體系將系統(tǒng)能力的培養(yǎng)與具體而深入的系統(tǒng)開發(fā)相分離:所有軟件工程專業(yè)的本科學(xué)生都將接受貼近互聯(lián)網(wǎng)時(shí)代的系統(tǒng)能力訓(xùn)練,而高年級(jí)后只有選擇系統(tǒng)軟件方向的學(xué)生才會(huì)進(jìn)行處理器、操作系統(tǒng)、編譯器等的具體開發(fā)。
2.以新技術(shù)為導(dǎo)向培養(yǎng)學(xué)生解決問題的能力
問題求解能力主要是指學(xué)生能夠?qū)⑽锢硎澜绲膯栴}轉(zhuǎn)化為數(shù)字世界的問題,因此我們?cè)诤诵恼n程中設(shè)計(jì)了問題求解課程模塊。這些課程傳統(tǒng)上包括程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)以及算法設(shè)計(jì)。這些課程內(nèi)容趨于老化,很多學(xué)校的教學(xué)內(nèi)容和三十年前沒有太大的區(qū)別。應(yīng)當(dāng)緊密地圍繞新技術(shù)進(jìn)行設(shè)計(jì)安排,否則學(xué)生學(xué)完之后依舊感覺與現(xiàn)實(shí)脫節(jié),不知道所學(xué)的知識(shí)在現(xiàn)實(shí)中如何應(yīng)用。
在設(shè)計(jì)問題求解模塊時(shí),我們首先還是注重課程融合,例如教授程序設(shè)計(jì)的同時(shí)教授數(shù)據(jù)結(jié)構(gòu)相關(guān)知識(shí);其次我們除了講授傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)與算法外,還強(qiáng)調(diào)了并發(fā)數(shù)據(jù)結(jié)構(gòu)與并行算法;最后,我們突出了數(shù)據(jù)結(jié)構(gòu)與算法的應(yīng)用,在課程中有大量的包括了大數(shù)據(jù)與機(jī)器學(xué)習(xí)的案例,具體案例如下。
一是傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)應(yīng)用。(1)實(shí)現(xiàn)文件型數(shù)據(jù)庫。①采用文件型數(shù)據(jù)持久化保存整個(gè)系統(tǒng)信息;②將B+樹或Hash表等數(shù)據(jù)結(jié)構(gòu)保存到文件中;③實(shí)現(xiàn)數(shù)據(jù)的插入、修改、刪除、查找。這些內(nèi)容可以讓學(xué)生了解復(fù)雜數(shù)據(jù)結(jié)構(gòu)在數(shù)據(jù)庫管理系統(tǒng)中的核心作用。(2)mini-basic解釋器。①采用多叉樹和線性表等數(shù)據(jù)結(jié)構(gòu)進(jìn)行程序的中間表示;②采用自頂向下法則分析語句;③采用逆波蘭解析法將表達(dá)式轉(zhuǎn)化為二叉樹的形式。這些內(nèi)容可以培養(yǎng)學(xué)生開發(fā)簡單程序設(shè)計(jì)語言解釋器的能力,既涵蓋了編譯原理中的部分內(nèi)容,又能夠充分理解數(shù)據(jù)結(jié)構(gòu)在編譯器中的重要性,以及類與子類的巧妙運(yùn)用。
二是大數(shù)據(jù)存儲(chǔ)與分析。(1)鍵值分離存儲(chǔ)。①采用并發(fā)數(shù)據(jù)結(jié)構(gòu)Cuckoo Hash;②實(shí)現(xiàn)該數(shù)據(jù)結(jié)構(gòu)上的并行Get/Put;③針對(duì)不同數(shù)據(jù)集分析算法的性能。(2)復(fù)雜網(wǎng)絡(luò)分析。①采用最小生成樹并行算法,進(jìn)行社區(qū)分析以及消息傳播途徑分析;②采用不同的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)并行算法,如基于矩陣的并行實(shí)現(xiàn)或者基于鄰接鏈表的并行實(shí)現(xiàn)。(3)PageRank算法。①介紹基本算法;②介紹基于矩陣以及基于圖結(jié)構(gòu)的兩種不同的實(shí)現(xiàn)方式;③采用該方法進(jìn)行社交網(wǎng)絡(luò)中的影響力分析以及網(wǎng)頁相關(guān)性搜索。
這些內(nèi)容以大數(shù)據(jù)存儲(chǔ)和分析為案例,突出了數(shù)據(jù)結(jié)構(gòu)在大數(shù)據(jù)中的作用,也讓學(xué)生了解了并行算法如何在實(shí)際問題求解中發(fā)揮作用。
三是人工智能應(yīng)用。(1)路徑導(dǎo)航算法。①Dijkstra算法;②A*算法;③并發(fā)A*算法。(2)車型識(shí)別。①矩陣數(shù)據(jù)結(jié)構(gòu);②最簡單的卷積神經(jīng)網(wǎng)絡(luò);③通過數(shù)據(jù)集訓(xùn)練;④識(shí)別指定汽車的車型。
這些內(nèi)容以人工智能應(yīng)用為案例,突出了數(shù)據(jù)結(jié)構(gòu)在人工智能中的作用,也讓學(xué)生初步了解了一些人工智能算法。
3.結(jié)合工程教育認(rèn)證設(shè)計(jì)新的實(shí)踐體系
工程教育認(rèn)證要求按層次培養(yǎng)學(xué)生的技術(shù)能力。一般技術(shù)能力的層次可以按照BLOOM分類法,將能力由低到高分為:記憶、理解、應(yīng)
用、分析、評(píng)價(jià)、創(chuàng)造六個(gè)層次。然而傳統(tǒng)的教學(xué)多停留在前三個(gè)低層次的能力培養(yǎng)上,鮮有教學(xué)環(huán)節(jié)培養(yǎng)學(xué)生的分析、評(píng)價(jià)和創(chuàng)造能力。
當(dāng)前我們正在致力于建立一套多層次循序漸進(jìn)的面向能力培養(yǎng)的實(shí)踐體系。我們將能力分為基礎(chǔ)、應(yīng)用、分析、綜合這四個(gè)由高到低的層次。表2簡要介紹了這四個(gè)層次的內(nèi)涵:它們從記憶和理解起步,逐漸向應(yīng)用能力、分析能力、評(píng)價(jià)與創(chuàng)新能力發(fā)展。這四個(gè)層次要求學(xué)生學(xué)習(xí)不同規(guī)模的軟件開發(fā),由低到高分別是:功能設(shè)計(jì)、模塊設(shè)計(jì)、系統(tǒng)設(shè)計(jì)和工程設(shè)計(jì)。
下面以系統(tǒng)軟件為例介紹這四個(gè)層次。
第一層為基礎(chǔ)層。基本教學(xué)要求是使學(xué)生掌握系統(tǒng)的安裝和使用,通過工具和仿真感知運(yùn)行機(jī)理,通過功能設(shè)計(jì)和應(yīng)用優(yōu)化系統(tǒng)理解工作原理。在具體實(shí)踐方面,學(xué)生需要能夠自主完成一些功能設(shè)計(jì),諸如小型語言解釋器、小型匯編器、C語言庫函數(shù)、簡單CPU仿真器、進(jìn)程控制臺(tái)、Web代理等。
第二層為應(yīng)用層。基本教學(xué)要求是讓學(xué)生掌握構(gòu)建平臺(tái)的能力。例如:利用多個(gè)docker容器構(gòu)建分布式平臺(tái),該平臺(tái)擁有處理、存儲(chǔ)和一致性容錯(cuò)模塊;讓學(xué)生掌握將實(shí)際問題映射到具體系統(tǒng)的能力,比如能夠應(yīng)用PageRank算法分析社交網(wǎng)絡(luò)(微博)中用戶的影響力。在具體實(shí)踐方面,學(xué)生還需要能夠獨(dú)立完成一些系統(tǒng)中的模塊設(shè)計(jì),比如文件型數(shù)據(jù)庫、鍵值存儲(chǔ)系統(tǒng)、路徑規(guī)劃、RPC模塊和分布式鎖服務(wù)、分布式文件系統(tǒng)、基于一致性協(xié)議的分布式容錯(cuò)服務(wù)等。
第三層為分析層。基本要求是培養(yǎng)學(xué)生分析問題和優(yōu)化系統(tǒng)性能的能力。例如:要求學(xué)生能夠?qū)⒌诙拥膯栴}移植到公有云平臺(tái)上,并且能夠在移植后對(duì)該問題進(jìn)行行為和性能分析,進(jìn)而發(fā)現(xiàn)各模塊內(nèi)和模塊間的性能瓶頸和互操作問題,最后對(duì)基于分析發(fā)現(xiàn)的問題進(jìn)行系統(tǒng)層和應(yīng)用層的優(yōu)化。其中系統(tǒng)層優(yōu)化需要根據(jù)應(yīng)用特征和數(shù)據(jù)特征調(diào)整系統(tǒng)各模塊的參數(shù),應(yīng)用層的優(yōu)化需要根據(jù)各模塊的行為和性能特征調(diào)整和優(yōu)化應(yīng)用程序。在具體實(shí)踐方面,還要求學(xué)生能夠進(jìn)行原型系統(tǒng)設(shè)計(jì),如設(shè)計(jì)小型操作系統(tǒng)、設(shè)計(jì)小型語言編譯器、在FPGA上設(shè)計(jì)小型CPU等。
第四層為綜合層。基本要求是培養(yǎng)學(xué)生具有如下能力:分析具體業(yè)務(wù)問題,在不同的方案中進(jìn)行評(píng)估選擇,并且最終完成整個(gè)工程項(xiàng)目。它要求學(xué)生能夠針對(duì)特定應(yīng)用需求、基于受限系統(tǒng)級(jí)平臺(tái)進(jìn)行模塊選型,并且確立設(shè)計(jì)方案、完成系統(tǒng)實(shí)現(xiàn)。在具體實(shí)踐方面,學(xué)生需要完成例如基于電商用戶購物數(shù)據(jù)的商品推薦,平臺(tái)限制是基于特定配置的公有云。在此過程中,學(xué)生需要能夠獨(dú)立自主地根據(jù)問題特征(問題規(guī)模、應(yīng)用特性、數(shù)據(jù)特征)和系統(tǒng)特征(系統(tǒng)架構(gòu)、公有云環(huán)境約束)進(jìn)行模塊選型,然后對(duì)各個(gè)設(shè)計(jì)方案進(jìn)行分析、對(duì)比、仿真、預(yù)測、優(yōu)化,最終完成系統(tǒng)實(shí)現(xiàn)。
[責(zé)任編輯:余大品]