王穎
樂山職業技術學院 電子信息工程系 四川 樂山 614000
Java是目前市面上應用場景最廣泛的程序設計語言之一,它是一款面向對象的高級程序設計語言,具有學習入門簡單、功能強大、應用面廣,就業需求巨大的特點。在我國各大高校的計算機、物聯網、軟件開發、人工智能等相關專業均開設有該門課程。但長期以來,各高校程序設計語言教學往往都只從語言本身出發,重點教學語法,再進一步教算法,學生在學習Java語言后,即使掌握了Java語言的基本語法,具備一定Java程序開發思想及開發技巧,但在面臨實際軟件項目,特別是與工程項目實踐相結合時,仍存在較為嚴重的理論與實踐脫節的問題。導致我國高校計算機專業學生普遍存在動手能力差的問題,難以滿足用人單位的需求[1]。
目前很多高校相關專業畢業生存在兩大不足:一種是知識停留在紙面能力,學了程序設計語言缺乏動手能力無法編寫軟件,二是理論和實踐結合運用能力差,能夠編寫小的應用,但是沒有工程應用經驗,到崗后無法直接勝任工作,還需要再培訓或較長時間的學習。對于側重培養理論研究型人才的普通高校的學生,這種情況尚可以理解。但高職院校學生培養目標本就側重于學生畢業即可上崗,強調學生擁有一技之長及較強動手能力,而且這本也是高職院校畢業生與普通本科院校畢業生在就業競爭時的主要優勢。因此比普通高校學生具備更強的動手實踐能力,更直接的操作運用技能就顯得尤為重要。在某些時候,高職院校課程體系安排上還可以通過減少理論課程學習占比,提高工程實踐課程的占比,做到一切以實踐出發,與工程應用行業內容緊密結合,最終達到高職院校學生畢業就能上崗,用人單位拿來就能用的教學目的。這都要求學生在校學習期間就必須將工程實踐真正融入平時教學中。
在計算機科學里面的軟件工程就是一門專門研究用工程化方法構建和維護有效的、實用的和高質量的軟件的課程,這門課程強調軟件開發的工程性,通過讓學生了解軟件需求分析、軟件設計、軟件測試、軟件維護和軟件項目管理等內容,達到培養能夠從事軟件開發、測試和軟件項目管理的高級專門人才。將軟件工程課程直接融入Java程序設計課程中,同時融會貫通兩門課程,將極大提高學生的項目綜合工程能力,緊跟社會工程項目方法,畢業以后就能直接上崗,從而達到真正提高學生的就業競爭力,達到提升學生就業率的目的。
當前本院已經開設的程序設計語言課程教學包括了Java、Python、C語言等多種高級語言,均采用項目化教學方法。項目化教學法就是教師將需要解決的問題或需要完成的任務以項目的形式交給學生,在教師的指導下,學生以小組協作的方式共同制訂計劃,共同或分工完成整個項目[2]。采用項目化教學法,可以提高學生的學習興趣和學習積極性[3]。但我們目前的教學方式局限于根據知識點不同,將項目的某模塊的開發引入其中,而沒有讓學生完整經歷一個軟件工程開發的全壽命周期。所謂的項目化,其實質只是讓學生完成了的一個項目工程的某個片段。學生并沒有經歷從需求分析、軟件設計、軟件開發、軟件測試等全工程流程。相當于運用了作坊式的技術來學習了程序設計構建某個小的應用而已,但卻沒有實踐過現代工業化的工程化軟件開發模式,到企業也是不能滿足企業的用人需求。企業反應剛畢業的學生不能立馬轉換為勞動力。現在也有一些其他院校開設了軟件工程課程,但也僅僅是單純將軟件工程課程作為一門獨立課程開設,程序設計語言課程與軟件開發課程各自獨立存在并無交集,學生學習以后反映無法將二者有效結合,沒有真正理解到軟件工程的精髓,實際運用情況并不理想,對軟件工程理解不夠深入,無法學以致用。如何將這兩者有效融合入實踐教學中,將兩個學科融會貫通,是提高學生動手實踐能力的關鍵。
本院物聯網應用技術專業開設的《Java程序設計下》課程,是建立在《Java程序設計上》課程學習之后的應用實踐課程。和其前導課程相比,課程重點不再是理論基礎知識,也不僅僅是代碼編寫,而更強調Java語言在軟件生產開發當中的實際運用。以這門課程作為軟件工程與Java程序設計課程相融合的教學改革研究的試點課程就很恰當,并具有很高的試點意義。當前《Java程序設計下》課程主要還是采用傳統的基于項目化的教學方式,將知識點拆分為若干實際項目讓學生完成,這雖然有利于學生更牢固掌握單個知識點,但在實際的企業軟件開發工程中,不論使用哪種程序設計語言進行開發都不會僅僅只做代碼開發,都會運用軟件工程中的軟件分析、軟件設計、軟件開發、軟件測試,完成全套的開發流程,形成大量的工程文檔,擁有大量的固定的工程應用模式。因此如果學完整個Java程序設計課程,學生水平仍然只停留在對代碼編寫的認知,后續進入公司后,學生仍需花大力氣繼續學習軟件工程相關內容。只有獲得了軟件工程和Java程序設計能力相結合的實踐能力,才能讓我們學生擁有進入軟件公司就能直接勝任軟件開發崗位的工作水平。因此在《Java程序設計下》課程現有的教學項目里融入運用軟件工程進行開發的要求,是對現有項目化教學的進一步提升,是提高我們學生的綜合技術能力、競爭力、快速上崗能力的必要性改革。
我們通過將兩個入學成績水平相近的教學班進行實驗,在《Java程序設計下》課程中進行區別教學,然后進行教學效果的綜合比對評測,用數據論證兩種教學方法誰更能提升學生動手能力。一種是在傳統項目化教學為基礎再結合軟件工程運用的試點教學班我們命名為A班。作為對照,我們將只采用傳統項目化教學的班命名為B班。A班46個人,B班47個,人數接近,學生均為同一年級屬物聯網應用技術專業二年級學生,已有學習知識結構都接近。都在上一學期完成了《Java程序設計上》的課程學習,但都未接觸過軟件工程課程基礎。
在課程教學初期,就向學生說明本門課程教學需要達到的目標,讓學生做到心中有數,并將本學期的項目要求以任務書形式下發給A、B兩個班級學生,由學生自主完成項目的選擇和分工。讓學生對項目有一個總體的建設目標。
2.2.1 給兩個班學生提供相同的9個項目去選擇,也允許學生依據標準自擬符合要求的其他項目。
2.2.2 要求學生每3至5人組成一個項目小組。每個班分為11個項目小組,每個小組設組長一名,項目所有文檔代碼由組長負責收集管理和上報。
2.2.3 小組內人員具體分工由組員協商決定,由項目小組組長上報小組項目選題及組員分工情況。
2.2.4 本門課程一共48學時。
2.2.5 最后每個小組推選一名成員進行項目展示。
2.3.1 A班項目實踐過程。在下發項目任務要求時,穿插軟件工程的內容,并對項目開發提出具體的要求。每個時間節點要求提交不同的工程文檔成果,利用文檔提交時間來嚴格約束軟件項目的工程進度。在第8學時前要求提交軟件需求說明書,在第16學時前要求提交軟件系統設計說明書,在第30學時前進行軟件編碼,在第38學時前提交系統測試說明書,在第46學時前進行最終成果提交并分組展示項目成果。每個階段文檔的形成有效控制了軟件開發的質量和進度。同時在每個階段初期插入講解一定軟件工程的內容,但因課時有限,要求學生課后需自學老師沒有講到的軟件工程課程內容。一方面老師起到了點撥的作用,另一方面學生也提高自學能力。
2.3.2 B班項目實踐過程。沿用舊的教學模式,單純進行項目開發實踐教學,根據課程進度進行開發推進,最終在第46學時進行成果提交并分組展示項目成果。兩個班均可以在課后與老師利用聊天軟件實時溝通開發技術方法和知識。
A班設置11個開發小組,其中有8個開發小組完成全部項目內容:軟件工程文檔(含需求分析和系統設計說明書)與源代碼開發,軟件開發進度與質量均較好,余下3個開發小組僅完成軟件工程文檔的編寫,未實現代碼開發。
B班設置11個開發小組,其中有5個開發小組完成代碼編寫,軟件項目質量一般,均未提供軟件文檔。余下6個開發小組未完成源代碼開發。具體成績考核如表1所示。

表1 成績考核對比表
由考核結果可以看出:采用將軟件工程融合項目教學的A班優秀人數雖比B班少2人,但80-89分階段的學生人數占比很高,占班級總人數的76%,遠超過B班在這一分段的學生人數。A班實際項目開發成果,其設計基本能覆蓋所有需求、軟件可讀性更強、運行效率更高,整體成果質量優于B班,且A班班級平均成績也高出B班2分,可見這種新型教學方式對于全面提升全班軟件開發的綜合水平、提升整體學習效果確有顯著作用。在實踐中還發現,僅僅采用項目化教學的B班存在從網上復制代碼的情況。而A班因為有軟件工程文檔的要求大量精力在撰寫文檔上面,反而未發現復制代碼的狀況。
采用軟件工程融合教學的A班學生反饋,對軟件開發的工程項目應用有了一定的認識,基本摸清軟件開發全流程,對未來自己的發展方向有了較明確的目標,自己也有了自學的方向。單純采用項目化教學的B班學生反映,對工程項目過程還是一頭霧水,拿到一個項目仍猶如無頭蒼蠅,感覺無從下手,今后畢業到單位還需要培訓才能勝任工作。
項目化教學的課程教學手段已經在高職院校施行多年。在軟件開發類課程教學中我們一直以來采用以項目為導向的實踐教學,這一改革曾經一度使我們的學生實踐能力上了一個臺階。但目前,學生在應對工程化的項目開發時因為缺乏軟件工程知識的支撐,導致還存在一定理論實踐脫節的情況出現,學生普遍反映在單獨學習Java程序設計和單獨學習軟件工程課程均缺乏深入的理解或工程實踐能力,學生往往在上崗后還需要較長時間的培訓。由此得知現有的教學模式在這方面是有所缺失,需要進一步的改進提升。
通過上述研究實踐,將程序設計語言的學習與軟件工程能力有效融合的教學新模式除了填補了目前高校在此領域研究的不足,也能有效提高高職院校計算機相關專業學生項目工程開發能力,從而提升他們的整體動手能力,最終達到提高職院校學生就業競爭力的目的。