郭劍孫力娟朱立華朱旻如肖甫
(南京郵電大學,江蘇南京210003)
編程水平測試是大多數理工科畢業生求職時必經的環節之一,尤其是對電子類、信息類、通信類和計算機類等專業的學生而言。這些測試一般通過筆試或面試等方式進行。錄用之后,一些企業還會進行編程方面的入職測試,以此作為考察員工水平和開展崗位定編的依據。因此,編程水平的高低已成為眾多企業選擇、衡量人才的重要標準之一。
但是據我們調查,從學校這一方面來看,編程教學卻不盡如人意,與企業的要求尚有一定差距。目前的編程教育,普遍以學生學會語法、掌握軟件或通過計算機等級考試等為主要目標,缺乏應用能力和實踐能力的培養。學生的動手能力不強,面對這些測試題時普遍感到束手無策,成績很不理想。
針對這一情況,我們從四年前開始搜集、整理各種編程相關的筆試題、面試題和入職測試題,并進行了系統的分析與研究。我們的目的是,通過對這些題目的整理與分析,確定企業的人才技能需求,查找編程教育與企業需求的差距,并在此基礎上,對編程教育進行改革和改進,以提高教學的效果,提升學生的能力。
學校的編程教育應當從企業的實際需求出發,培養的人才應當符合企業的需求。但從目前搜集的資料來看,針對測試題展開的研究還比較少,相關的教育類課題和項目并不多,發表的研究成果更是缺乏。僅僅在部分網絡社區有一些關于測試題的內容,但也僅限于語法層面的討論,編程教育涉及不深。我們認為,加強對測試題的研究,具有重要的意義,主要體現在如下幾點:
第一,這些測試題直接代表了企業對人才的編程能力要求,并且這些題目本身也與企業所在的行業以及企業自身的業務技術方向息息相關。因此,我們可以通過這些題目來了解企業的技術方向和編程能力需求。另外,通過對這些題目及其所代表技術背景的解讀,可以指引我們編程能力培養的方向,改進相關課程。
第二,這些題目不同于平時書后的練習題,與計算機等級考試試題也大為不同。此類試題相對短小精致,考察的知識點較多,綜合性相當高,具有很強的代表性。加強對這些題目的研究,可以為相關課程服務,并豐富這些課程的題庫,從而提高此類課程的教學水平。
第三,對這類試題進行研究,具有短期和長期效應。從短期來看,研究成果可以直接為畢業班學生服務,提高他們的應試技巧;從長期來看,可以提高學生的編程能力,使學校的人才培養更有針對性,從而使學校畢業生素質更上一個臺階。
我們搜集的題目主要來自于部分合作企業、參加筆試的畢業班學生和一些編程網站。由于企業必須在很短的時間內較為全面地考察一個學生的編程能力,包括編程語言、數據結構、算法、操作系統、軟件工程、網絡等方面的知識,因此,這些題目一般比較簡短,考察的知識點卻很多。通過歸類和分析,可以發現這些測試題具有很典型的特征,下面逐一進行討論。
(1)行業相關性強
這是由企業的行業所決定的。企業所在的行業決定了它需要哪方面的人才,而從題目中也能看到這種需求。
例1:下面程序的輸出結果是____。(臺灣某芯片企業2007年測試題)


例1考察的知識點是unsigned類型。這種類型在絕大多數學校中忽略不講或是一帶而過。而對于部分硬件企業來講,unsigned類型在編程中大量使用。因此,學生在碰到這類題目出錯的概率很高。類似的知識點還有位運算、某些特殊的指針等。
(2)注重程序風格
在IT界,出于代碼傳承和維護的需要,公司普遍比較重視代碼的可讀性。這也就需要代碼有比較好的編程風格。好的程序風格不僅可讀性強,而且代碼的安全性高,能夠避免一些錯誤。所以不少公司在測試學生的編程水平時,評判標準包含不少編程風格方面的分值,有的甚至直接以此作為測試內容。
例2:下面兩段程序中a是一個變量,請進行比較兩段代碼的優劣。(美國某嵌入式公司2005測試題)

例2中的兩段程序功能相同,但如果程序員在輸入時誤把“==”寫成“=”,則第一種編譯器可以檢查出來,第二種編譯器則無法檢查。因此第一種要好。這種題其背后就是考察的學生的編程風格。跟語法沒有多大關系。與此類似,變量命名規范、空行、縮進、注釋等也是企業所看重的。
(3)注重基本功
熟練掌握常見的語法和算法是對編程人員的基本要求,企業對此也極為看重,并且更注重的是對知識的理解而非識記。
例3下面程序的輸出結果是____。(韓國某電子企業2006年測試題)


for語句是C語言的基本知識點之一。在例3中,for語句的第二子句與第三子句與通常的for語句不同,是顛倒的。但根據“第二子句為真則執行循環體,否則不執行”的原則來判斷,此題還是可以做出來的。如果基本功不夠扎實,很可能認為此題有語法錯誤。
(4)注重知識點的融會貫通
許多企業要求招收的員工有比較全面的知識體系和知識儲備,并了解編程語言的發展、演變和趨勢,因此測試題中這方面的內容也不少。
例4請評價C++語言中多重繼承的優點和缺陷。(國內某運營商2009年測試題)
例5 C++中有了malloc/free,為什么還需要new/delete。(國內某通信設備商2008年測試題)
這兩題要求應試者對C、C++的一些語法機制及其演化過程有比較全面的認識和深刻的理解,而這些內容在授課時通常都會被忽略掉。學生對這些內容接觸不多,不能從根本上掌握這些內容,綜合能力也就得不到提高。
(5)注重多學科的貫通
由于編程能力要素包括編程語言、算法、數據結構、編譯原理等多方面的內容,因此,企業在考察學生編程能力時,并不局限于語法與算法,而是從多方面進行考察。因此,一些題目表面上看起來是編程語言方面的,實則需要其它科目的知識。
例6下面三條語句,效率從高到低依次是____。(德國某軟件公司2008年測試題)

從語法上來說,例6中的三條語句沒有多少差別。然而從匯編語言的角度來看,三條語句的效率還是各有高低。此題看似簡單,實際上要求應試者對匯編語言和編譯原理有較好的理解和掌握。
(6)注重應用能力
綜合應用能力是創新型人才的基本素質之一。不少企業對此類人才需求較高,在測試題方面也有體現。
例7編寫一個程序,使Windows任務管理器中的CPU使用記錄曲線成為正弦曲線。(美國某軟件公司2006年測試題)
該題目需要應試者有較高的編程素養,能夠綜合應用Windows編程、操作系統線程調度等方面的知識。此題目的難度相當大,在測試時甚至允許應試者使用網絡。但即便如此,很多應試者遇到此題時仍然感到沒有思路,無從下手。
許多企業的測試題往往同時包含上述多個特點,而現有編程教育培養出來的學生并不能很好地應對這些題目。這是因為在許多高校中,較為注重的是語言和語法,考核指標單一,綜合程度較低,導致學生的動手編程能力較低,與企業的需求脫節較大。我們認為,可以從以下幾個方面對高校的編程教育進行改革。
(1)加強針對性,多與企業、業界進行交流。多了解用人單位的人才需求,在此基礎上對教學內容和教學方法進行更新與改革。這樣才能使培養出來的學生需求符合社會與行業的需求。
(2)改革編程教學的目標。將教學重點從知識傳授為中心轉變為以能力培養為中心,使得學生不僅僅是占有知識,而是能夠主動地運用知識,以此加強學生動手能力和綜合能力的培養。
(3)改進編程教學的課程體系。將關鍵技能和編程要素的培養貫穿于整個編程教育之中,使得整個課程體系成為一個有機的整體。此外,還需要多開設一些綜合性課程和實踐性課程,幫助學生進行知識點的梳理以及實際技能的鍛煉。
高校的編程教育與企業的人才需求還存在著脫節,在學生的能力培養方面還存在著一些薄弱環節。加強對企業測試題的研究,以此來指導編程教學改革,不僅可以提升教學質量,提高學生編程水平和學校就業率,而且可以促進學校與企業的交流,使得學校培養的人才更好地符合社會需求。因此,開展此類研究具有重要的意義和價值。
[1]李曉明,陳平,張銘,朱敏悅.關于計算機人才需求的調研報告[J].計算機教育,2004,8:11-18.
[2]田孟紅.培養學生編程能力的實踐與思考[J].文山師范高等專科學校學報,2004,17(4):367-369.
[3]李暉,張世彤.如何在計算機教學中培養學生的編程能力[J].遼寧教育行政學院學報,2008,25(12):78-79.
[4]李永軍,怎樣提高學生的編程能力[J].文教資料,2006,4:186-187.
[5]鄭立華,張莉,王奇.在C程序設計教學中注重培養學生的綜合編程能力[J].計算機教育,2005,10:35-37.
[6]梁肇新.編程高手箴言[M].北京:電子工業出版社,2003.