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