金 豪肖夢瓊譚云松
(1武漢工程大學計算機科學與工程學院 武漢湖北 430205;2中國地質(zhì)大學教務(wù)處 武漢湖北 430070)
面向工程教育的Linux系統(tǒng)編程教學研究
金 豪1肖夢瓊2譚云松1
(1武漢工程大學計算機科學與工程學院 武漢湖北 430205;2中國地質(zhì)大學教務(wù)處 武漢湖北 430070)
本文主要探討在Linux系統(tǒng)編程課的教學過程中以CDIO教育理念為指導,通過分析傳統(tǒng)教學方法在培養(yǎng)學生工程思維和能力方面的不足,探討了以項目和任務(wù)驅(qū)動為核心的一系列教學改革措施,使學生能通過一系列項目實踐和訓練更好地培養(yǎng)自己面向工程的綜合編程能力。
CDIO Linux系統(tǒng) 系統(tǒng)編程 工程教育 項目導向
CDIO (Conceive, Design, Implement, Operate)工程教育模式是由麻省理工學院和瑞典皇家工學院等大學通過多年研究、探索與教學實踐建立起的一種基于工程教育的先進教學模式[1],是一項關(guān)于工程教育改革的新型教育模式與成果。其目的是有機結(jié)合課程教學,讓學生盡可能接受較實際的項目訓練,并通過工程實踐去促進基礎(chǔ)知識的掌握。2010年以來我國相繼頒布了《國家中長期教育改革和發(fā)展規(guī)劃綱要(2010-2020年)》及“卓越工程師教育培養(yǎng)計劃”[2],[3],拉開了新一輪的工程教育改革。
本文在筆者多年的教學實踐和分析本專業(yè)《Linux系統(tǒng)編程》課程的教學現(xiàn)狀的基礎(chǔ)上,結(jié)合CDIO教學理念和工程教育標準,以培養(yǎng)學生的系統(tǒng)編程能力和工程開發(fā)思維為目標,探討了一種可行的教改方案。
1.對編程能力的再思考
計算機專業(yè)知識的學習可粗略分為兩類問題:①一類是基于理論知識的:算法和數(shù)據(jù)結(jié)構(gòu),計算復雜性理論,機器學習和人工智能,信息安全理論等;②一類是基于系統(tǒng)構(gòu)建的:操作系統(tǒng),網(wǎng)絡(luò)系統(tǒng),分布式系統(tǒng),云存儲和云計算,大數(shù)據(jù)分析,物聯(lián)網(wǎng)等。理論學習的側(cè)重面在算法的效率和優(yōu)化,在限定的計算能力約束下如何把一個問題處理得更有效率。系統(tǒng)構(gòu)建側(cè)重于知識和經(jīng)驗的廣度,及如何眾多可用的技術(shù)中挑選出最多快好省的組合來為某個現(xiàn)實需求提供較完美的解決方案。
如果以一個相對較高的標準來考量IT軟件人才的話,以上兩方面的能力同等重要。以往計算機學科幾十年的發(fā)展主要側(cè)重理論知識的掌握和深化,在系統(tǒng)方面比較弱化。這帶來的一個嚴重問題就是計算機專業(yè)的畢業(yè)生在實際工程能力方面不足以達到各IT公司的要求,往往要經(jīng)過短期甚至長期的企業(yè)培訓才能從事實際的項目開發(fā)。
筆者認為,從系統(tǒng)開發(fā)的角度來看編程能力,其核心主要包含兩個層面:
1.1 從問題分析到代碼實現(xiàn)和系統(tǒng)構(gòu)建的能力。它反映了一個人從無到有來解決一個問題的能力,包括自頂向下細化和分析問題的能力,編碼能力,良好的代碼風格,錯誤調(diào)試的能力等。
1.2 對已有代碼進行重建和優(yōu)化的能力。簡單說來,就是給你一份別人寫的代碼,這份代碼從功能和結(jié)構(gòu)上不一定符合你的預期目標,你對他進行修改和重建來達到你預期目標。比如說:一份開源代碼從一個平臺移植到另一個平臺;一個開源的第三方庫,在某些功能上不足以滿足你的應(yīng)用需求,如何完善它以滿足需求?
以上兩個層面,第一層面能力是高校開設(shè)的程序設(shè)計相關(guān)課程歷來所著重的,而第二層面的能力是傳統(tǒng)程序設(shè)計教學中所嚴重缺乏的。
2.教學現(xiàn)狀
編程綜合能力的培養(yǎng)需要經(jīng)過大量的編程和項目開發(fā)實踐,是一個需要長期投入時間和精力的過程。目前一般高校的培養(yǎng)計劃中對于低年級本科生編程能力的培養(yǎng)主要是通過開設(shè)一兩門相關(guān)課程,如《C語言程序設(shè)計》和《C++程序設(shè)計》。這些典型課程的開設(shè)對于引導學生進入程序設(shè)計這種領(lǐng)域和培養(yǎng)基本的編程技能是必要的,但由于課程的后續(xù)延續(xù)性教育得不到保障,學生往往在整個本科培養(yǎng)期間的綜合編程能力得不到很好的鍛煉。
綜合上述情況,可以知道傳統(tǒng)的課堂教學對于學生程序設(shè)計綜合能力的培養(yǎng)是有所欠缺的。這其中最主要的原因是學生在“分析問題→構(gòu)思→設(shè)計→編碼實現(xiàn)”這整個環(huán)節(jié)上的訓練不夠,也就是編程方面的工程訓練不夠充分。
對于工科學生而言,實踐是鞏固、深化和創(chuàng)造性地應(yīng)用專業(yè)知識的過程,也是綜合能力形成的過程,而本科4年是參與工程實踐、形成工程思維、獲得寶貴工程經(jīng)驗的極重要的時機[4],[5]。
《Linux系統(tǒng)編程》是一門從內(nèi)容上涵蓋《C程序設(shè)計》、《操作系統(tǒng)》、《計算機網(wǎng)絡(luò)》、《Linux系統(tǒng)管理》等課程的專業(yè)課。在廣度上,要求學生融匯貫通先行專業(yè)課程的許多知識點,比如《操作系統(tǒng)》中文件系統(tǒng)、進程管理等方面的設(shè)計原理,《計算機網(wǎng)絡(luò)》中TCP/IP協(xié)議和UDP協(xié)議的內(nèi)容;在深度上,要求能比較深入地理解Linux操作系統(tǒng)本身的設(shè)計思想和實現(xiàn)原理。
傳統(tǒng)的課堂教學目標主要以驗證理論相關(guān)知識、掌握實訓技能為主,在實際的工程和項目能力方面比較弱化。對此,我們以CDIO“做中學”和“基于項目的學習”的核心理念為指導原則,在課程的設(shè)計中強調(diào)以項目驅(qū)動教學的方式,進行了一系列教學改革。
1.課程整體教學目標與實踐
由于《Linux系統(tǒng)編程》涵蓋內(nèi)容廣泛,知識點較為繁雜。因此,我們同一些理論性較強的課程區(qū)分開來,不以知識講授為主。教師的講授內(nèi)容主要以Linux操作系統(tǒng)中各個模塊的設(shè)計理念為主,并輔助以一系列小型的軟件項目作為案例進行分析講解,在其中來講解和梳理相關(guān)的知識點。
在課程實踐方面,我們設(shè)計了一系列同教學案例配套的實驗項目,這些項目以課堂教學教師分析的案例為中心,在功能上進行一定的擴展和變化,要求學生在深入理解課堂案例的基礎(chǔ)上來實現(xiàn)。
通過這種在課堂教學和實踐教學中以項目為導向的教學方式,使得整個教學過程中,學生通過項目開發(fā)將各項瑣碎的知識點串聯(lián)起來,深化對于Linux系統(tǒng)編程的理解和應(yīng)用。而從課堂教學的項目案例分析到實踐訓練中的項目開發(fā)則強化了學生“分析→構(gòu)思→設(shè)計→編碼”這個多環(huán)節(jié)過程中的工程思維培養(yǎng),也為后續(xù)的工程能力進一步加強打下了基礎(chǔ)。
2.面向編程能力培養(yǎng)的多維考核方式
在成績評定上,采用多維的考核方式:
(1)傳統(tǒng)的筆試成績僅占據(jù)40%。這部分主要考核學生對于Linux系統(tǒng)各部分設(shè)計原理的理解和掌握情況。
(2)實驗方面采用項目考核的方式,占40%。主要以小組答辯的形式對整個課程期間學生完成的一系列項目進行考核。教師會綜合以下幾方面來進行評判給分:①設(shè)計可行性;②代碼風格;③運行結(jié)果;④代碼健壯性;⑤算法效率。
(3)平時成績占20%,主要由兩部分組成:①平時的作業(yè)情況;②學生對案例項目的分析講解。教師以分組形式組織學生討論并發(fā)言。
3.教學效果的延續(xù)性
以往的教學計劃編排,課與課之間獨立性較強,導致很多同學學完課程后就再不接觸相關(guān)內(nèi)容。這帶來的問題是課堂教學效果再好,課程后續(xù)的鞏固和深入仍不夠,使得整體培養(yǎng)效果較差。
因此,將相關(guān)性較強的多門課程組成相互關(guān)聯(lián)的課程群,配套以相關(guān)性較強的綜合設(shè)計,以此來保證教學效果的延續(xù)性。例如,本專業(yè)學生在該課程后設(shè)置有《嵌入式Linux》課程以及“網(wǎng)絡(luò)應(yīng)用軟件”綜合設(shè)計。其中,《嵌入式Linux》課程側(cè)重于Linux編程在嵌入式系統(tǒng)和硬件方面的開發(fā)和應(yīng)用;“網(wǎng)絡(luò)應(yīng)用軟件”綜合設(shè)計相比課程教學,在內(nèi)容的深度和廣度上加以一定的擴展,要求學生在教師簡單講解所設(shè)計知識的基礎(chǔ)上,自行查閱相關(guān)的技術(shù)資料,從零開始進行整個項目的分析、設(shè)計和實現(xiàn),從而對之前課程中所學內(nèi)容進行鞏固和擴展,進一步培養(yǎng)其面向工程項目的綜合編程能力。
[1]顧佩華,沈民奮,陸小華,譯.重新認識工程教育—國際CDIO 培養(yǎng)模式與方法[M].北京:高等教育出版社,2009.
[2]劉少雪.工程教育改革的趨向探析[J].清華大學教育研究,2012(4): 73-79.
[3]李培根,許曉東,陳國松.我國本科工程教育實踐教學問題與原因探析[J].高等工程教育研究,2012(3):1-6.
[4]王春鳳,劉世峰.以編程能力培養(yǎng)為核心的教學設(shè)計與實踐[J].計算機教育,2009,10:133-135.
[5]陳國松,許曉東.本科工程教育人才培養(yǎng)標準探析[J].高等工程教育研究, 2012(2):37-42.