李 哲,房 勝,黃 玲
(山東科技大學 計算機科學與工程學院,山東 青島 266590)
作為最具影響力的開源操作系統,Linux已從最初的服務器領域迅速擴展到云計算/大數據、嵌入式系統、桌面系統等多個領域。盡管在桌面系統領域,Linux的市場占有率雖然與Windows系列還有一定差距,但是2018年的統計數據顯示[1],在服務器、云計算、移動計算領域,Linux的市場占有率遙遙領先于其他平臺。
為了適應 Linux技術人才的迫切需求,提高學生的創新能力[2]和在 Linux平臺上的實踐能力,許多高校紛紛開設了與 Linux相關的課程。山東科技大學計算機類專業也相繼開設了 Linux應用開發相關的課程,其中物聯網工程專業提出以“一個平臺,一個環境,一個系統”的專業建設思路,即在Linux平臺上,針對一個特定的網絡環境,設計實現一個滿足特定用戶需求的系統。Linux應用開發是一門實踐性很強的課程,然而傳統的課堂教學形式比較單一,互動性不強,很難激發學生們的學習興趣。如何讓學生能夠帶著問題,由淺入深的、主動的學習基于 Linux操作系統的應用與開發,達到學以致用的目的,是Linux應用開發教學中急需破解的難題。
從多年的教學實踐和相關文獻[3,4]的分析來看,多數同學在接觸 Linux系統之前已經習慣了Windows系統的操作和應用模式,他們對Linux操作系統有著天然的抗拒心理,很難從已經習慣的鼠標操作轉入繁瑣的命令操作。相應地,大多數同學在 Linux課程的學習上并沒有投入足夠的精力,只是單純地為了通過課程考核拿到學分而學習,所以教學效果并不理想。Linux應用開發的教學過程中主要存在以下問題。
(1)Linux系統知識點繁雜,工具命令繁多,參數復雜。傳統的課堂和實驗教學中難度較大,很難講清楚每個命令的用法,也很難獲知學生是否真正掌握學習的命令。
(2)學生眼看耳聽多,動手操作實踐少。傳統的課堂教學中通常采用 PPT講授和操作演示相結合,實驗課時很少,真正實踐的機會較少,學生很難將Linux知識學以致用。
(3)考核方式粗放,評價模糊。前期Linux應用開發課程的考核通常采用大作業的方式進行,主觀性較高,考核標準模糊,不易量化,同時抄襲現象時有發生,很難獲知學生的真實情況。
相對于傳統的工科人才,教育部新工科建設要求面向新經濟、國家戰略、產業轉型升級需求培養實踐能力強、創新能力強、具備國際競爭力的高素質復合型新工科人才[5]。在這一要求下,結合Linux應用開發課程的特點,在項目化教學[6,7]和任務驅動式教學法[8,9]基礎上,本文提出了以“任務+項目”為驅動和以實踐為導向的課程建設思路,以提高學生的 Linux系統應用和開發實踐能力為目標,對課程的教學內容、教學方法、評價考核方法進行改革,教學改革框架如圖1所示。
根據新產業對學生的需求和授課對象的專業基礎不同,對 Linux應用開發課程的教學內容進行了優化。根據知識點的特點,教學內容從整體上劃分為兩個模塊:Linux命令模塊、程序開發模塊。Linux命令模塊主要包括Linux的基本設置與管理、Linux命令和Shell程序設計;程序開發模塊主要包括Linux環境、開發工具、多進程程序設計、QT編程等。

圖1 Linux應用開發課程的教學改革框架Fig.1 Teaching reform framework of linux application development course
由于本課程的授課對象既包括只有程序設計基礎能力的低年級學生,也包括已學習過操作系統原理的高年級學生,所以根據授課對象的專業基礎不同,程序開發模塊的多進程程序設計和 QT編程在授課內容上區別設置。對于低年級學生,授課內容以多進程程序設計的基本內容和 QT編程為主,Linux提供的進程間通信工具涉及較少;高年級學生恰恰相反,主要講授進程間通信工具的使用方法,與操作系統原理呼應。教學內容學時按照48學時設計,具體內容如表1所示。
傳統的 Linux教學基本都是在普通的多媒體教室采用講授的方式進行,即使可以采用實例操作演示的方式給學生展示 Linux命令的作用和參數的使用情況[3],但是學生依然無法在這一過程中實踐操作,只能有一個感性認識,很難激發學生的深入思考教學效果不是很理想。為此,我們將 Linux應用開發課程的教學由普通的多媒體教室轉移到實驗室,給學生提供一個實踐的環境,為實現以實踐為導向的教學改革提供基礎。
在教學方法上,采用以任務驅動教學和項目驅動教學方法為主,講授和演示教學為輔的教學體系,根據教學內容的特點選擇與之相適應的教學方法。任務驅動教學方法和項目驅動教學方法有很多相同的地方,兩者都是以實踐為導向,以教師為指導或引導,突出學生的學習主體地位,使學生能夠真正掌握相關知識。在培養學生能力和具體施教方面,兩者又有所不同,其中任務驅動教學方法以基本知識點為依托設置任務,以任務為導向引導學生學習相關知識點;項目驅動教學方法更加注重學生綜合能力的培養,根據學生掌握的知識體系設置難度合理的完整項目,在完成項目過程中培養學生綜合運用所學知識解決問題的能力。因此,任務驅動教學中的任務相對簡單,與知識點結合緊密;項目驅動教學方法中的項目相對復雜,貼近于實戰,需要綜合靈活運用所學知識。

表1 Linux應用開發教學內容設計Tab.1 Linux application development teaching content design
在 Linux應用開發課程的教學過程中,對于知識點分散、側重應用實踐的Linux命令和Shell程序設計,采用任務驅動為主的教學方法,講授和演示任務涉及的主要命令和程序。對于側重開發實踐的程序設計,采用項目驅動為主的教學方法,講授和演示項目開發涉及的主要技術和工具。
下面以Linux的基本命令為例分享一個任務驅動的教學案例。Linux命令繁多,參數復雜,教學時并沒有涉及到所有命令,而是以任務為主線,老師講授并演示涉及到的主要命令,學生以講授的命令為基礎,自主學習相關命令,完成指定的任務。這里以學院的高性能計算集群為對象,設計了七個任務,學習 Linux中的系統狀態、目錄管理、文件管理、文件處理、文件比較、文件系統、網絡管理等命令。其中任務一為了解系統狀態,具體內容描述為:“學院的高性能計算集群突然變得異常慢,集群管理員小嵙同學想到了中醫的‘望聞問切’,應當先看一下系統狀態找到系統異常的原因,然后對癥下藥解決問題。于是小嵙同學打開 Terminal,噼里啪啦輸入了幾條命令,了解了當前系統的訪問用戶、系統啟動時間、進程狀態列表、系統負載和內存使用情況,經過分析之后找到了原因。若要了解以上信息,小嵙同學需要輸入哪些命令呢?請與小嵙同學一起實踐吧”。這里涉及到who、uptime、top、ps、free、vmstat等命令,學生通過上述任務的實踐能夠學習上述命令的同時,也能夠了解如何應用所學知識解決實際問題,使學生真正學會相關的 Linux命令,提高了實踐能力。
在程序開發模塊的教學中設計了一個完整的項目,以項目為主線,老師引導學生分析完成項目需要解決的若干問題,然后引導學生利用網絡資源學習相關技術來解決問題,最終搭建起一個完整的系統,對提高學生的綜合實踐能力起到了重要作用。
隨著考核目標的轉變,勢必要建立與之相匹配的考核評價體系[11]。傳統的考核通常采用考試的方式,然而對于實踐性強的 Linux課程,考試方式很難考核學生是否真正掌握和靈活運用所學知識。有些教學案例中也提出以大作業的方式進行考核,然而主觀性較高,考核標準模糊,不易量化,同時抄襲現象時有發生,很難獲知學生的真實情況。為了突出考查學生的實踐和綜合素質,根據多年的實踐提出了一種多階段綜合考核方法,以全面考核學生的Linux系統應用能力和程序開發能力。
根據教學內容的特點不同,Linux應用開發課程的考核劃分為三階段。第一階段考核 Linux命令的應用能力,占最終成績的20%;第二階段考核Shell程序設計能力,占最終成績的20%;第三階段考核Linux系統的程序開發能力,占最終成績的 60%。前兩個階段的考核分別安排在相應內容學習之后接著進行,考核中根據學生數量設計若干個難度相當的任務,每個學生從中隨機抽取一個任務,若能完成任務則為滿分,若不能完成則根據完成率計算成績。第三階段的考核與課程設計的程序開發項目相結合,每 2-3位學生組成一個小組,以組為單位完成項目,根據項目完成率和答辯情況計算成績。
Linux應用開發課程的教學已經按照優化后的內容進行實施,有效提升了教學內容的完整性和先進性。以任務和項目為主線,以老師為引導或指導,突出學生的主體地位,激發了學生對 Linux系統的學習興趣,學習態度得到明顯改善,在日常學習和程序開發過程中主動使用 Linux系統的學生明顯增加,教學效果得到了顯著提升。
同時,Linux應用開發課程也得到了其他相關專業的認可。開設本課程的專業從起初的物聯網工程和網絡工程專業,推廣到軟件工程、信息安全、信息與計算科學、統計學等專業,逐步替代了原有的 Linux程序設計課程。這也從另一方面說明了Linux應用開發課程的改革成效。
綜上所述,在新工科背景下,Linux應用開發課程的教學從實際應用需求和問題出發,提出了以“任務+項目”為驅動和以實踐為導向的課程建設思路,根據學生基礎和應用需求優化教學內容,并以多階段綜合考核方法配合。通過具體的教學實踐,學生由被動學習變為主動學習,學生的 Linux系統的應用和開發實踐能力得到顯著提高。