公務(wù)員期刊網(wǎng) 論文中心 正文

計(jì)算機(jī)工程能力教學(xué)思索

前言:想要寫出一篇引人入勝的文章?我們特意為您整理了計(jì)算機(jī)工程能力教學(xué)思索范文,希望能給你帶來靈感和參考,敬請(qǐng)閱讀。

計(jì)算機(jī)工程能力教學(xué)思索

1現(xiàn)狀分析

培養(yǎng)高質(zhì)量的軟件開發(fā)人才一直是社會(huì)和行業(yè)關(guān)注的焦點(diǎn)。早在11年前,對(duì)于工程教育的迫切性就被人提出來[1]。工程教育本身也作為一個(gè)系統(tǒng)問題被討論[2]。現(xiàn)在從國家層面在戰(zhàn)略上建立了軟件學(xué)院進(jìn)行專門培養(yǎng),各個(gè)高校也不斷推出新的課程、新的措施方案。在這一領(lǐng)域雖然比過去似乎已經(jīng)有了翻天覆地的變化,但來自企業(yè)的呼吁似乎一直反映出諸多不盡如人意。更多的思路希望將企業(yè)的力量直接引入到教學(xué),比如實(shí)訓(xùn)基地等[3];而國家層面也非常關(guān)注實(shí)訓(xùn)[4]。但實(shí)際效果可能變得流于表面,因?yàn)槠髽I(yè)往往難以將核心的工作拿給學(xué)生做,而其訓(xùn)練的項(xiàng)目也并未從更全面系統(tǒng)的角度去設(shè)計(jì),其鍛煉效果就有限了。在軟件開發(fā)這一領(lǐng)域,由于其具有變化迅速,新技術(shù)不斷涌現(xiàn)的特點(diǎn),導(dǎo)致不少在教育內(nèi)容上選擇了追逐新技術(shù)、新語言、新平臺(tái),以能用會(huì)用這些流行主流技術(shù)為目標(biāo)。典型的代表就是北大青鳥,有些二本的學(xué)生在畢業(yè)前專門花錢去青鳥學(xué)習(xí),似乎可以看到這種教育的優(yōu)勢(shì)。但另一個(gè)矛盾的情況是,往往那些關(guān)注員工后勁的公司卻不愿意招聘青鳥的學(xué)生。如果將目光投向國外的頂級(jí)大學(xué),例如斯坦福,其教學(xué)上并沒有去“依賴”校企合作,以及很熱門的“實(shí)訓(xùn)”。其核心課程依然是過去的傳統(tǒng)經(jīng)典課程。以一個(gè)研究生為例,一學(xué)期能修2門課是正常,3門就很優(yōu)秀。它并沒有追逐所謂的新技術(shù)。但無人質(zhì)疑其學(xué)生的工程能力、科研能力和創(chuàng)造能力。

2什么是計(jì)算機(jī)工程能力的核心

什么才是我們軟件開發(fā)教育的核心知識(shí)架構(gòu),怎樣才能培養(yǎng)學(xué)生可持續(xù)發(fā)展的核心競(jìng)爭(zhēng)力?我們調(diào)查過一些非常高水準(zhǔn)的軟件開發(fā)者,發(fā)現(xiàn)他們往往在底層軟件上持之以恒地進(jìn)行長時(shí)間深刻的鍛煉,然后在未接觸的新領(lǐng)域才能非常迅速地掌握核心。例如,一個(gè)非計(jì)算機(jī)專業(yè)的系統(tǒng)分析員曾經(jīng)“只”在DOS這種原始的操作系統(tǒng)下玩了10年,甚至自己寫過一個(gè)漢化的DOS。他只有書本上的一點(diǎn)點(diǎn)網(wǎng)絡(luò)知識(shí)時(shí),就用一兩天時(shí)間解決了一個(gè)學(xué)通信的研究生1個(gè)月都不能解決的網(wǎng)絡(luò)故障。這是一個(gè)典型的例子,他并沒有“實(shí)際的”網(wǎng)絡(luò)經(jīng)驗(yàn),什么使得他如此輕松地進(jìn)入了新的領(lǐng)域呢?而另一個(gè)曾就職于vmware、google等頂級(jí)公司的程序員,在Unix下只用C語言做了10年系統(tǒng)級(jí)編程。當(dāng)用Java,C++甚至是javascript時(shí),其學(xué)習(xí)時(shí)間只是1天,很快就比做了幾年專門java編程的程序員還精通。如何才是軟件開發(fā)人員的本質(zhì)力量?什么才能讓他們?cè)谧兓f千的新技術(shù)面前屹立不倒,乘風(fēng)破浪?

2.1計(jì)算機(jī)工程能力

我們認(rèn)為計(jì)算機(jī)工程能力包含兩方面的內(nèi)容:(1)核心知識(shí)架構(gòu);(2)計(jì)算機(jī)的思維方式。什么是核心知識(shí)架構(gòu)呢?是反應(yīng)該領(lǐng)域最基本規(guī)律和支撐技術(shù)的知識(shí)。簡(jiǎn)單地說就是傳統(tǒng)的操作系統(tǒng)、編譯、數(shù)據(jù)庫。操作系統(tǒng)將硬件、軟件、高級(jí)語言和匯編融匯在一起,它幾乎包括了軟件工程中所有重要的因素。舉一個(gè)簡(jiǎn)單的例子,似乎只有面向?qū)ο筮@種“高級(jí)東西”才有的虛函數(shù)運(yùn)用,其實(shí)在Linux中就有相應(yīng)的虛文件系統(tǒng)。操作系統(tǒng)是最為復(fù)雜的計(jì)算機(jī)工程之一。編譯融匯了大量的算法,而且能讓大家真正看“穿”語言的外表,深入到其內(nèi)里,體現(xiàn)了最根本的計(jì)算機(jī)技術(shù)。其優(yōu)化技術(shù),也深刻地和硬件交融在一起,很好體現(xiàn)了底層風(fēng)范。數(shù)據(jù)庫,不僅是運(yùn)用算法最多的地方,甚至是超越操作系統(tǒng)的一個(gè)復(fù)雜的系統(tǒng),從緩存技術(shù)到i/o優(yōu)化,到索引,再到事務(wù)處理,無一不是反映計(jì)算機(jī)最深刻規(guī)律。大家可以發(fā)現(xiàn),所謂核心知識(shí)架構(gòu),都具有兩個(gè)特點(diǎn),反映本質(zhì)規(guī)律,體現(xiàn)軟硬融匯交織。也只有這樣,才能建立下面談到的“計(jì)算機(jī)思維方式”。

2.2核心知識(shí)架構(gòu)

為什么我們沒包括一些新興的語言和技術(shù)呢?似乎它們很“實(shí)用”。而且已經(jīng)出現(xiàn)的問題是,按照傳統(tǒng)科目和方式學(xué)習(xí)后,學(xué)生在企業(yè)什么都不會(huì)。這也正是大家關(guān)注工程教育的初衷。為什么不強(qiáng)調(diào)這些新興實(shí)用技術(shù)的教育還在強(qiáng)調(diào)“古老”的“基礎(chǔ)”。計(jì)算機(jī)領(lǐng)域一個(gè)顯著的特點(diǎn)是,表面上知識(shí)更新非常快,新技術(shù)、語言層出不窮。這很容易導(dǎo)致當(dāng)我們發(fā)現(xiàn)學(xué)生能力欠缺時(shí),將問題歸罪于新技術(shù)的學(xué)習(xí)不得力,知識(shí)結(jié)構(gòu)老化。但其實(shí)目前的問題可以從另外一個(gè)角度考慮,是否是基礎(chǔ)教育不得力?分析國外著名大學(xué),如斯坦福、伯克利的課程,我們發(fā)現(xiàn)兩個(gè)特點(diǎn):(1)關(guān)鍵的基礎(chǔ)課程,如操作系統(tǒng)、編譯原理、數(shù)據(jù)庫,始終是其最重要的課程,并沒有過分追逐各種“新潮”技術(shù)。(2)學(xué)生一學(xué)期能修的課程非常有限,一般為3門課。而國內(nèi)卻呈現(xiàn)相反的狀況,比如編譯原理被降到了選修課的角色,新潮課程層出不窮,一個(gè)學(xué)生二年級(jí)一學(xué)期要修13門課。在這種走馬觀花的狀況下,計(jì)算機(jī)這種具有強(qiáng)烈“手藝”色彩和工程實(shí)踐的學(xué)科,被完全紙上談兵化。而一些可憐的實(shí)驗(yàn)內(nèi)容,還被學(xué)生的復(fù)制拷貝所湮沒。我們認(rèn)為,恰恰是這種情況,使得基礎(chǔ)核心知識(shí)教育沒有工程化,沒有充分動(dòng)手,導(dǎo)致了基礎(chǔ)知識(shí)教育某種程度上的巨大失敗。從以下鮮明的對(duì)比可以窺見問題的端倪:國內(nèi)學(xué)生反映操作系統(tǒng)課程是文科課程(只需要背條款考試即可);而相對(duì)地,國外著名高校操作系統(tǒng)課程要求學(xué)生實(shí)現(xiàn)“小”操作系統(tǒng)。國內(nèi)數(shù)據(jù)庫只講其應(yīng)用(如大量講解sql等運(yùn)用,sql即使非計(jì)算機(jī)專業(yè)人士也很容易學(xué)習(xí),這也是它被發(fā)明的初衷)。斯坦福的數(shù)據(jù)庫課程中有一門需要實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫系統(tǒng)。在筆者走訪的計(jì)算機(jī)工程上優(yōu)秀的人才,發(fā)現(xiàn)其共同的特點(diǎn)就是在諸如操作系統(tǒng)或數(shù)據(jù)庫上都有很深入的學(xué)習(xí)經(jīng)歷,比如前面提及的自己構(gòu)建過漢化DOS系統(tǒng),或者在Unix下,做內(nèi)核以及驅(qū)動(dòng)很多年等。而當(dāng)他們接觸新技術(shù)時(shí),之前深刻的經(jīng)驗(yàn)和淬煉的思維就讓他們?nèi)缁⑻硪?,快人一等。更有甚者,國外真正的最頂?jí)專家,都是在這些領(lǐng)域有無與倫比水平的專家,從delphi的締造者,轉(zhuǎn)戰(zhàn)到微軟并入主.net平臺(tái)的開發(fā),也可看到雄厚的底層知識(shí)和能力的巨大作用。所以“老”知識(shí)并不是障礙,而是通向天堂的階梯。究其原因,就涉及到工程能力的第2個(gè)方面,計(jì)算機(jī)思維方式。

2.3計(jì)算機(jī)思維方式

對(duì)非專業(yè)人士它是很抽象的概念,而對(duì)真正專業(yè)人士,這又是一個(gè)非常鮮活的概念。這里限于篇幅,我們只舉一個(gè)簡(jiǎn)單的例子。面對(duì)在C++中外部代碼如何直接修改私有變量的問題,計(jì)算機(jī)的思維方式就是:對(duì)象也是放在內(nèi)存中,只要能拿到對(duì)象的地址,并知道對(duì)象的布局,那么就可修改。而沒有建立這種思維的人,就完全被高級(jí)語言的語法所左右,無從下手。一句話,無法看到本質(zhì),沒有從下而上的底層思維。核心知識(shí)課程的有效深入教學(xué)和計(jì)算機(jī)思維方式建立有何直接關(guān)系呢?我們認(rèn)為核心知識(shí)因?yàn)槠浞磻?yīng)了計(jì)算機(jī)本質(zhì)規(guī)律,而且從底層建立起來,所以對(duì)其深入掌握運(yùn)用后,它從開始的逼迫到最后的陶冶,最終潛移默化地讓受眾建立起“計(jì)算機(jī)思維方式”。而這正是計(jì)算機(jī)工程師安身立命之本,就如同音樂家有其獨(dú)特的音樂思維方式一樣。為什么諸如java之類的課程于建立計(jì)算機(jī)基本思維不太合適呢?因?yàn)樗邔樱瑹o法讓學(xué)生看到最下面。而唯有徹底、深刻和系統(tǒng)的底層淬煉,才能真正建立起“計(jì)算機(jī)思維方式”。

3如何打造強(qiáng)大的計(jì)算機(jī)工程能力

大家一方面指責(zé)基礎(chǔ)課程的“空洞”、“無用”、“陳舊”;另一方面在不斷開設(shè)的海量新課和技術(shù)中壓得學(xué)生更加遠(yuǎn)離編程,遠(yuǎn)離實(shí)踐。即使能培養(yǎng)出熟悉某種語言的學(xué)生,也無法看到他們和培訓(xùn)學(xué)校有何不同。實(shí)訓(xùn)也似乎沒有根本解決問題,我們?cè)趯?shí)踐中發(fā)現(xiàn),往往是那些自己醉心于編程的學(xué)生最后有著卓越的表現(xiàn)。讓基礎(chǔ)知識(shí)能支撐和指導(dǎo)實(shí)踐,而非僅僅“符號(hào)”,并引導(dǎo)學(xué)生進(jìn)行高效的實(shí)踐。

3.1“3塊連一線”,4門基礎(chǔ)課程整合打造核心知識(shí)架構(gòu)

我們將4門基本課程進(jìn)行貫通式整合,著力塑造學(xué)生的“計(jì)算機(jī)思維”。下層的是3門基礎(chǔ)課(在上一小節(jié)探討了其在工程能力訓(xùn)練上不可替代的重要地位),對(duì)軟件開發(fā)環(huán)境產(chǎn)生支撐。而軟件開發(fā)環(huán)境又通過精心的設(shè)計(jì)和工程實(shí)踐,從應(yīng)用角度將3門課程所學(xué)的知識(shí)串聯(lián)起來。從而將基礎(chǔ)知識(shí)和工程開發(fā)更有機(jī)整合在一起。首先,闡述為什么將以上課程整合在一起的理由。要回答這個(gè)問題,必須先回答什么東西支撐了優(yōu)秀程序員。在我們的調(diào)查人員中,無一例外地都具有很深厚的底層軟件開發(fā)背景。有長期從DOS的Hack入手的;有長期從事Unix內(nèi)核編程的;有從Windows的driver起步的;有以反匯編逆向?yàn)楦?。長期在最底層的經(jīng)歷,使他們建立了最真實(shí)和能觸摸的系統(tǒng)觀,能以計(jì)算機(jī)的方式思考。所以面臨新技術(shù)時(shí),他們能透過新形式很快把握其精髓,深刻地把握其實(shí)質(zhì)?!疤栂旅鏇]有真正的新事物”,例如號(hào)稱21世紀(jì)最新的重要的軟件技術(shù)AOP(AspectOrientedProgramming,AOP),其實(shí)在20世紀(jì)60年代就出現(xiàn)在了匯編一級(jí)的軟件技術(shù)中,它本質(zhì)就是鉤子技術(shù)的系統(tǒng)化。在底層的軟件世界,我們不僅能夠用到那些所謂的最新的技術(shù),而且能看到其本質(zhì)(我們可能就是用機(jī)器碼自己構(gòu)建出來的,而不被新技術(shù)的華麗外衣障目)。這些使得具有底層經(jīng)驗(yàn)的開發(fā)者,更有創(chuàng)造力,更能創(chuàng)造,也更能洞察迷亂后的本質(zhì),庖丁解牛,解決那些異常復(fù)雜的工程問題。舉一個(gè)筆者遇到的真實(shí)例子,一個(gè)具有深刻底層經(jīng)驗(yàn)的程序員(一直只有C語言和操作系統(tǒng)編程經(jīng)驗(yàn))和一個(gè)只有深刻Java經(jīng)驗(yàn)的程序員,在同時(shí)學(xué)習(xí)Javascript的閉包概念時(shí),后者一個(gè)禮拜都還有些似是而非。前者很快就能自如運(yùn)用,且最后指點(diǎn)了后者1個(gè)小時(shí),后者頓時(shí)豁然開朗。這是典型的“新”與“老”,上層和底層經(jīng)驗(yàn)在面對(duì)新事物時(shí)的對(duì)比。既然底層軟件賦予我們?nèi)绱藦?qiáng)大的能力,那么哪些是底層軟件呢?大家公認(rèn),操作系統(tǒng)、編譯和數(shù)據(jù)庫由來就是計(jì)算機(jī)工程自身的根基。所以,我們必須將這3門課涉及的知識(shí)好好淬煉。而如何將3門課的知識(shí)和我們?nèi)粘5能浖_發(fā)聯(lián)系起來呢?如何用它們指導(dǎo)平時(shí)程序的開發(fā)呢(我們大多數(shù)是開發(fā)用戶級(jí)軟件,不會(huì)開發(fā)內(nèi)核軟件,因此許多人認(rèn)為幾乎整個(gè)在內(nèi)核中的操作系統(tǒng)對(duì)用戶級(jí)軟件開發(fā)無從指導(dǎo))?另一門課,《軟件開發(fā)環(huán)境》解決了這一問題。它有一條主線,通過反匯編將C語言和匯編串聯(lián)起來,讓系統(tǒng)級(jí)的知識(shí)從高級(jí)語言的面紗下展現(xiàn)出來。同時(shí)用逆向工程這把庖丁之刃,將編譯、鏈接、面向?qū)ο蟮溶浖_發(fā)中的重要知識(shí)塊剖剔,讓底層與上層貫通一氣。而逆向的技術(shù)技巧,本身也是非常高級(jí)的軟件開發(fā)技術(shù)。因此,我們用“3塊連一線”來總結(jié)4門課的關(guān)系是最好不過了。為什么不納入語言課程,比如C/C++語言?從我們的工程經(jīng)驗(yàn)來看,語言只是計(jì)算機(jī)原理和思想的載體,是表述方式而已。為了表述形式而專門花大力氣是不值得的。比如,國外的著名大學(xué)很多都不開設(shè)語言課,在其他課程作業(yè)中必須用C語言編程,學(xué)生們就在那里鍛煉了。真正的語言的力量并非來自語言本身,而是底層知識(shí)為支撐的項(xiàng)目鍛煉。我們的思路是以構(gòu)建式完成大量的完整系統(tǒng)的編寫,這樣就很好鍛煉了軟件開發(fā)和工程能力。同時(shí),“軟件開發(fā)環(huán)境”本身從逆向?qū)用嬉矊?duì)語言有了深刻的剖析,這是純粹的語言課難以完成的。另外,從大綱安排上,我們?cè)诖笠痪蜁?huì)讓學(xué)生用C語言來初步接觸程序編寫,這時(shí)并不適合放入太高級(jí)主題。而在教學(xué)中,語言的力量已經(jīng)滲透到一個(gè)個(gè)工程構(gòu)建中,隨風(fēng)潛入夜了。為什么不納入算法課程?從某種程度上,“程序就是算法與數(shù)據(jù)結(jié)構(gòu)嗎”?我們認(rèn)為在系統(tǒng)中運(yùn)用算法,算法才具有生命力。而編譯、操作系統(tǒng)、數(shù)據(jù)庫以及我們專門設(shè)立的一些課程設(shè)計(jì)將全面運(yùn)用各種算法和數(shù)據(jù)結(jié)構(gòu)。在實(shí)戰(zhàn)中運(yùn)用并學(xué)習(xí)提升才是王道。這也正是構(gòu)建式學(xué)習(xí)的精髓所在,這也正是探索式學(xué)習(xí)培養(yǎng)學(xué)生的創(chuàng)造能力的精髓所在。算法課已經(jīng)為我們準(zhǔn)備了元件,就看你怎么去組裝甚至改造。

3.2以構(gòu)建主義的思路,深度實(shí)踐的風(fēng)格改革課程

前面我們論述了底層知識(shí)架構(gòu)的重要性,那么怎么來將它們實(shí)際地建立在學(xué)生的工程實(shí)踐中呢?簡(jiǎn)單地說就是“構(gòu)建一個(gè)具體而微的系統(tǒng)”。講操作系統(tǒng)就構(gòu)建一個(gè)小操作系統(tǒng),講編譯原理就構(gòu)建一個(gè)小編譯器。同時(shí),設(shè)計(jì)一些跨度較大的課程設(shè)計(jì)覆蓋這些課程的一些重點(diǎn)內(nèi)容。構(gòu)建完整系統(tǒng)本身就可真實(shí)淬煉工程能力,而這些內(nèi)容的復(fù)雜性、難度以及運(yùn)用知識(shí)點(diǎn)的廣度,本身就超越了簡(jiǎn)單的企業(yè)實(shí)訓(xùn)項(xiàng)目,在培養(yǎng)人才方面具有系統(tǒng)性、完整性、挑戰(zhàn)性獨(dú)特優(yōu)點(diǎn)。我們需要的是運(yùn)用團(tuán)隊(duì)的思路和現(xiàn)代軟件工程的手段,將其開發(fā)過程管理發(fā)起來,從而熟悉企業(yè)級(jí)開發(fā)的工具鏈,將軟件工程學(xué)到的知識(shí)貫通到實(shí)作中。這也回答了“和以前相似的強(qiáng)調(diào)基礎(chǔ)課程教育,什么特點(diǎn)使得我們的做法能獲得強(qiáng)大的工程能力?”這一問題。以前更多注重理論知識(shí)的學(xué)習(xí),而現(xiàn)在的做法是回歸計(jì)算機(jī)工程的自身科學(xué)規(guī)律———實(shí)踐為王。

3.3改革考核評(píng)價(jià)標(biāo)準(zhǔn),充分強(qiáng)調(diào)動(dòng)手實(shí)踐

以前我們一直是卷面考試,實(shí)驗(yàn)分?jǐn)?shù)只是象征性的點(diǎn)綴。這本身違反了計(jì)算機(jī)工程的特點(diǎn)。只有改變?cè)u(píng)價(jià)考核標(biāo)準(zhǔn),才能真正驅(qū)動(dòng)學(xué)生充分鍛煉工程。在課程軟件開發(fā)環(huán)境中,我們采取了平時(shí)的考試結(jié)合期末考試的方式,而兩者均為軟件編寫。期末考試在實(shí)驗(yàn)室上機(jī)編撰指定題目。不強(qiáng)調(diào)對(duì)一些函數(shù)名等死知識(shí)點(diǎn)的記憶,可以用在線幫助。這本身也符合軟件開發(fā)的規(guī)律。

4結(jié)束語

我們?cè)谟?jì)算機(jī)工程教育上試圖做一些回歸本質(zhì)的工作,也取得了一些效果。比如在軟件開發(fā)環(huán)境中,學(xué)生普遍認(rèn)為:“似乎將3年學(xué)的程序課全學(xué)習(xí)了,收獲很大”。更有同學(xué),在外企公司的面試中,直接運(yùn)用了課堂上的知識(shí),這在傳統(tǒng)的教學(xué)環(huán)節(jié)中是難以獲取的。但整個(gè)工作尚在起步階段,所以仍有很多工作需要做,許多環(huán)節(jié)需要優(yōu)化。我們希望在以后的工作中更深入探索工程教育的規(guī)律和本質(zhì)。