公務員期刊網 論文中心 正文

計算機工程能力教學思索

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

計算機工程能力教學思索

1現(xiàn)狀分析

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

2什么是計算機工程能力的核心

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

2.1計算機工程能力

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

2.2核心知識架構

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

2.3計算機思維方式

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

3如何打造強大的計算機工程能力

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

3.1“3塊連一線”,4門基礎課程整合打造核心知識架構

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

3.2以構建主義的思路,深度實踐的風格改革課程

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

3.3改革考核評價標準,充分強調動手實踐

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

4結束語

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