胡 然,徐健鋒
(南昌大學 軟件學院,江西 南昌 330047)
中國程序設計人才緊缺,而且缺口還在快速遞增。一方面,企業對程序設計人才需求量旺盛;另一方面,在大量的畢業生中又難以找到令用人單位滿意的程序設計人才。造成這種尷尬情況的主要原因是學生缺乏工程實踐能力、職業素質和解決實際問題能力的訓練,達不到企業的用人標準,恰說明以往的校企合作或工學結合的培養模式有資源不足[1]、認識不到位、深度和廣度不夠[2]等問題,難以得到真正實施或取得較好的成效。
程序設計系列課程是軟件工程專業的專業課程,要從一年級學生的程序設計課程就開始融入校企協同創新實踐能力,讓更多的學生成為企業需要的程序設計人才,這種教學上的改革直接促進高校工程教育中校企共同體的構建[3]。校企協同創新和程序設計課程群的關系如圖1所示,在厘清這些關系的基礎之上進行低年級產學研實踐模式的思考和建構,設計中要考慮到如下幾方面的問題。

圖1 校企協同創新下的程序設計課程群
(1)以學生發展為中心的教學理念。重視和體現學生的主體作用,同時又不忽視雙師(教師和工程師)的主導作用,在校企合作過程中采用團隊協作式、個別化、小組討論等組合的教學形式進行實踐教學。把大學生放在學習的中心位置,發揮學生的特長和創造性,增加學習的選擇性,加強管理的彈性,滿足學生學習的愿望,實現學生的學習自由。
(2)新工科軟件人才的實踐性要求。相對于傳統的軟件人才,未來新興產業和新經濟需要的人才不僅應在某一學科專業上學業精深,而且還應具有“學科交叉融合”的特征;不僅能運用所掌握的知識去解決現有的問題,還要有能力學習新知識、新技術去解決未來發展出現的問題,對未來技術和產業起到引領作用;不僅在技術上優秀,同時懂得經濟、社會和管理,兼具良好的人文素養[4]。
(3)軟件工程專業課程內容更新快的要求。企業與市場利益攸關,企業具備應對市場變化的較高敏感度和反應度,只有企業深入參與軟件人才培養過程中,并將這種不斷變化中的新發展和新需求應用在軟件工程專業課堂教學體系中,才能使軟件工程專業由老工科轉變為新工科,才能培養出工程實踐能力強、具備國際競爭力的高素質復合型新工科人才。
(4)學習是一個由淺入深、由易到難的循序漸進的過程。通過教學項目和現實項目的設置,學生的思維有一個遞進和加深的過程。應用教學項目中學習的本領和知識來解決現實項目中出現的新問題,通過了現實項目洗禮的學生才能成長為合格的項目經理和開發工程師。
軟件學院與中興軟件技術公司合作的項目有基于ARM9 S3C 2440芯片的智能手持設備(PDA)的設計、音樂播放器、博客閱讀器、手機軟硬件信息查看助手、GPS Google地圖實時更新、坦克大戰、消防報警聯動監控系統等,與江西微軟技術中心合作的項目有婚戀交友網、移動營業廳管理系統、基于LPD協議的打印監控服務器系統、基于HAMA技術的呼叫中心服務系統等,與文思創新軟件技術有限公司合作的項目有基于Linux的智能視頻監控系統、電信寬帶運營支撐系統等。根據該實踐模式的思考和設想,將這些企業的實際項目引入程序設計課程教學中,實現產學研在課堂教學上的統整,通過圖2所示的實踐模式來說明低年級程序設計課程的項目引入過程。

圖2 校企協同育人實踐模式的實現過程
(1)遵循由易而難的學習過程,圖2中用交叉的雙圈表明相同項目基礎架構開發的教學項目和現實項目。要從合作企業的實際項目中,精選出有代表性的能揭示所學理論和知識體系的案例用于程序設計課程教學,通過授課內容貼近企業實際情況以達到程序設計理論聯系實踐的效果。學生在學習階段就接觸軟件企業的真實項目,有利于盡快把課堂知識轉化為實際能力。
(2)以學生成長為企業所需的軟件人才為主線,圖2中用3條箭頭表示了學生成為應用型軟件人才的過程。學生分組進行軟件項目開發訓練,然后通過教學項目學習基礎技術架構,再根據項目任務分工學習相應的案例模塊,這些教學案例模塊可根據真實項目需求進行調整,可選擇課程內容和進度,最終讓學生參與企業項目的部分環節中。這樣,學生通過從教學項目到現實項目的實訓,成為面向應用、面向實踐和面向企業的新工科軟件人才。
(3)學校教師和企業工程師對項目的架構和流程管理是校企協同育人的依托,圖中用長方形表示雙師在人才培養過程中所承擔的工作和責任,可以通過與現實項目有相同框架的教學項目,并建立企業真實軟件開發全流程信息化管理與高校實訓教學管理相融合的信息化教學項目平臺來實現。
(4)有工程師資質的學院教師,按照企業真實項目制作相同技術構架的教學項目,建立教學項目案例庫。考慮到課堂教學時間有限,雙師將精選的教學項目編寫成教學試題庫,可以讓有學習熱情的學生在課余時間能夠大量地涉獵豐富的優秀真實案例,幫助他們鞏固理論知識的同時又開闊眼界。
課題組與企業合作的實驗模式初步完成了項目基礎技術架構的開發以及教學案例庫的建設,已在一年級、二年級和三年級的部分班級進行使用,并在實際教學改革中驗證了教改設想,且持續改進教學方式和手段。我校軟件工程專業2016級、2017級和2018級的部分本科生在程序設計專業課程時,就開始加入到完成企業項目任務中。
教學項目的設計有綜合應用性,且現實項目選擇的可行性由老師把控,教師應根據教學需求調整教學項目的不同內容和難度。
(1)本實踐模式下,小型軟件項目工程實訓的注意要點有:不適合高年級學生進行訓練;一年級學生在學習了C語言、C++后才可以開始跟進;低年級適合單人編程訓練,偏重編程風格和良好編程習慣訓練。
(2)本實踐模式下,中大型綜合軟件項目工程實訓的注意要點有:不適合低年級學生進行訓練;在掌握了至少2種編程語言以及基本的數據結構、數據庫等知識之后,學生可以進行小組團隊訓練,學生組長職責類似于企業中的項目經理;側重團隊協作和項目設計、開發和管理,學生組長要相對固定。
從2016年9月開始至今,校企協同育人的實踐模式在各個年級的程序設計課程中順利實施。在該實踐模式下,學生的發展是中心,具有工程資質的教師和校企深度協作是必要條件。從低年級專業課程開始該實踐模式,學生的創新能力、自我學習能力、團隊合作能力和職業素養能得到充分的培養和鍛煉,并逐步凸顯出良好的教學效果。
1)通過動手實踐,學生能更好地掌握原本不容易理解的程序設計概念。
例如,面向對象的三大基本特征是封裝、繼承、多態,其中,封裝是學生首先需要掌握的重點知識,也是難點,對于剛剛從面向過程編程轉到學習面向對象編程的學生來說,封裝、抽象等概念比較模糊、抽象、難懂。例如,類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏,以及如何在實際項目中識別、設計類等。在實踐學習的某個銀行系統中,可以根據定義后的系統需求來識別系統中所存在的對象,可以通過尋找系統域描述和需求描述中的名詞進行系統對象的識別。根據系統需求分析出的名詞有銀行Bank、賬戶Account、客戶Customer、資金Funds等對象圖中的候選對象。判斷是否應該為這些候選對象創建類的方法基于與該對象相關的身份和行為,如果答案是肯定的,那么候選對象應該是一個存在于模型中的對象,就應該為之創建類。此外,還要對賬戶進行存錢、取錢、轉賬操作保留業務記錄,因此,在系統中還應有代表這些業務記錄的對象存在,可以為這些對象建立如下3個類:存款業務記錄Deposit、取款業務記錄Withdraw、轉賬業務記錄Transfer,由于這3個類都屬一種業務記錄,可以抽象出父類Transaction。
2)通過真實項目的引入,學生能盡可能地經歷完整的項目生命周期,深入學習可行性分析、需求分析、調試、測試等以往課堂教學缺失而在企業項目中是很重要的開發環節。
以往的教學往往側重于軟件開發階段的內容,即設計、編碼和測試,而現代軟件行業的高速發展對開發者的綜合素質要求越來越高,不僅是編程知識點,其他維度的知識點也會影響到軟件的最終交付質量。由此可見,問題定義、可行性分析、項目計劃、項目成本評估等也應該是學生必須掌握的重要知識,這樣才能應對數據意外丟失和需求變更可能帶來的軟件上的架構缺陷或性能風險、工程結構混亂導致后續維護艱難、沒有鑒權的漏洞代碼易被黑客攻擊等在實際項目中經常能碰到的種種問題。
針對以往教學中缺失、薄弱的環節,我們在校企實際案例二手貨交易平臺項目中,添加了項目成本估計這項內容。在項目成本評估中,對項目完成過程中耗費的人力、物力、財力資源進行了分析,將成本估計按照類別進行估算,如直接人工、直接費用、間接成本、制造費用、管理費用、不可預見費用等。再例如,項目學習過程中,由企業方進行案例的風險分析,并且形成案例文字材料供學生學習,項目實施過程中可能遇到的風險有哪些,需求變更、技術水平無法完成設計、數據意外丟失等造成的重大風險事件如何預防及處理等。
3)通過團隊攻關,學生在相互探討和分工設計中培養了合作、寬容、理解等程序設計人才必備的心理素質。
在完成項目的過程中,每位小組成員都要完成相應的項目模塊,組內必須協調好有直接聯系的各個模塊進程。程序設計語言和軟件架構需要一種普遍認可的統一規范和標準,以提升協作效率,降低溝通成本[5]。在教學項目中,由雙師型講師組織提煉這方面的素材和學習資料,增進學生的協作。例如,我們在校企實際案例二手貨交易平臺項目中,和學生一起制訂命名規范,數據庫表和字段全部以英文字母或下劃線命名,長度不能過長;表名中含有的單詞采用單數形式,單詞首字母大寫;字段名中含有的單詞全部為小寫,單詞之間以下劃線分隔;私有變量以“_”開頭的小寫英文字母命名,其他變量用小寫英文字母開頭;所用函數用小寫英文字母開頭的駝峰式命名;所有類用大寫英文字母開頭的駝峰式命名。
1)培養目標為軟件開發工程師,學生動手能力和專業素質得到提升。
所有學生都要學習C/C++、Java、Web開發、Android、iOS等多個技術主流方向,重點鍛煉學生項目開發能力及綜合素養,積累軟件項目開發經驗,并在訓練中注意各種主流開發語言代碼的規范性和編碼質量。
2)培養目標為軟件開發項目經理,有助于拔尖軟件人才的培養。
在初期的團隊合作中,成績中等及偏上的每位學生定時輪換履行項目組長職責,經過一段時間實踐后,學生團隊和學生組長較為固定。學有余力的學生組長還要在團隊管理、項目組織、應對項目需求變化、保障項目質量、降低項目開發周期和費用等方面進行學習。
在國內外各大項目和比賽中,軟件工程專業學生連續取得優秀的成績。2016年以來獲得國家級大學生創新創業項目7項;2017年,3位學生獲得美國大學生數模競賽一等獎,12位學生獲二等獎,5位學生獲三等獎;4位學生獲得“中國軟件杯”雙創大賽一等獎;多位學生獲得2項第八屆藍橋杯全國軟件專業人才設計與創業大賽一等獎,2項“華夢2017”全國大學生開源軟件技術創意大賽一等獎;此外,2位學生獲得全國高校互聯網應用創新大賽二等獎,并有第四屆“發現杯”全國大學生互聯網軟件大獎賽國賽二等獎一項,首屆中國“互聯網+”大學生創新創業大賽三等獎一項,還有1位學生獲得中國軟件杯大學生軟件設計大賽三等獎,6位學生獲得全國移動互聯創新大賽三等獎。2018年伊始就有3位學生獲得中國大學生計算機設計大賽二等獎,5位學生獲得全國大學生人工智能創新大賽銅獎等。
合作企業提供的項目周期一般很長,而且項目的進程和課程的時間總是不能同步,因此教師要熟悉該項目并能持續跟進,才能根據現實項目及時更新教學項目,這對于教師本身有較高的要求,在后續的推廣中如果不注意,很可能出現教學案例庫更新不及時的問題。
要把握好學生個人學習和團隊學習之間的度。合作學習固然對促進學生全面發展具有深遠意義,但是過早實行團隊學習的方式反而不利于學生個體在專業上的進步。
我們通過當前校企合作育人問題的實踐來檢驗和發展“以學生為中心”的教育理論,運用更加靈活的混合教學方法和智慧教學手段,從新生開始的程序設計系列課程入手,增強學生的動手實踐能力和創新能力,不僅從理論上建立或檢驗校企協同育人框架和假設的課程經驗研究,更重要的是,在今后還將根據更多的學生反饋和教學效果進一步完善該模式,為培養出工程實踐能力強、具備國際競爭力的高素質復合型新工科人才提供經驗素材和實現路徑。