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