錢宇虹
(武漢職業(yè)技術(shù)學院 計算機技術(shù)與軟件工程學院 ,湖北 武漢 430074)
在職業(yè)院校教師們按照軟件工程的理論組織軟件開發(fā)實訓項目的教學。凡此種種無不體現(xiàn)軟件工程在業(yè)界和教育界的話語權(quán)??墒?,軟件項目依然失敗率很高,軟件不能按期交付,軟件質(zhì)量差強人意,軟件功能不能滿足客戶的需要。為什么人們遵守軟件工程依然完不成軟件項目呢?人們已經(jīng)認識到軟件工程的不足,并且由此產(chǎn)生對軟件工藝的思考。軟件工藝學認為,編程是一門工藝技巧,軟件開發(fā)不僅僅是一項技術(shù)工作,也是一項人文工作。只有當技藝高超的開發(fā)者編寫出高質(zhì)量的滿足客戶需要的代碼時,整個軟件開發(fā)才是真正有價值的。[1]那么如何將軟件工藝師的優(yōu)秀品質(zhì)融入到軟件教學當中,如何培養(yǎng)技藝高超的開發(fā)者是現(xiàn)代職業(yè)教育需要改進的方向。
認識軟件工程的不足是我們教育工作者轉(zhuǎn)變觀念和轉(zhuǎn)變開發(fā)方式的起點。超大型的軟件項目(超過1 000人/年)都有一個共同點,就是在項目前期軟件開發(fā)者等待硬件的開發(fā),在項目后期硬件開發(fā)者等待軟件的開發(fā)。所以在項目前期硬件還沒有完成的時候,由于運行代碼的硬件環(huán)境根本還不存在,所以不可能編寫代碼,軟件開發(fā)團隊有充足的時間做需求分析,編寫詳細的軟件需求規(guī)格說明書。需求文檔完成之后就交給設(shè)計團隊去設(shè)計。當硬件完成可以投入使用時,軟件開發(fā)者立即著手將設(shè)計轉(zhuǎn)換為代碼,此時整個項目都在等待軟件的編寫和測試,所以這個階段需要投入大量的人手才能加快交付的速度。同時還需要對代碼進行復(fù)審,確保與設(shè)計文檔相符合,才能保證下游的集成階段不出問題。所以軟件工程需要大量文檔,也需要專業(yè)化分工,分析師負責獲取并記錄用戶的需求;設(shè)計師負責從需求文檔制造出設(shè)計文檔;程序員負責根據(jù)設(shè)計文檔進行編碼。這種文檔驅(qū)動的開發(fā)方式使得任何一份文檔的修改都要付出高昂的代價,因此任何修改都要受到嚴格控制。根據(jù)IEEE的定義,軟件工程是指采用一種有組織、有紀律、可計量的方式來開發(fā)、使用及維護軟件,也就是在軟件領(lǐng)域中采用工程學。[2]
軟件工程的不足首先體現(xiàn)在軟件工程并不適合所有軟件項目。軟件工程是為了解決大型項目遇到的問題,這些項目需要龐大的團隊歷經(jīng)多年。但是現(xiàn)在絕大多數(shù)軟件項目都是由相對較小的團隊完成的。
軟件工程的不足還體現(xiàn)在忽略了一個重要的因素,那就是“人”的因素。軟件工程對團隊中的個人應(yīng)該如何鍛煉自己的技藝這個問題幾乎沒有論述。[1]相反軟件工程給我們一個暗示:只要能定義一個有組織、有紀律、可計量的開發(fā)過程,任何人都可以完成軟件開發(fā),因此我們不需要技藝超群的高手。而事實上,優(yōu)秀的程序員和設(shè)計師所犯的錯誤比別人要少得多,并且發(fā)現(xiàn)錯誤也更迅速,所以程序員的知識、技能、經(jīng)驗和職業(yè)素養(yǎng)對項目成敗起著至關(guān)重要的作用。
軟件工藝的理念和實踐是我們教育工作者改進軟件教育的理論基礎(chǔ)。工藝學針對的是個人能力,軟件工藝把極具專業(yè)精神的開發(fā)者稱為軟件工藝師或者軟件工匠,它蘊含著專業(yè)、務(wù)實、自豪的態(tài)度[3];軟件工藝認識到軟件和其他傳統(tǒng)工藝的的差異,并注意確保軟件工程所取得的成就不會遺失,還需要利用工程學給我們帶來的新工具提高工作效率,讓科學知識和實踐知識互相補充;更為重要的是,軟件工藝將職業(yè)榮譽感重新帶回軟件開發(fā)行業(yè),工藝學認為那些出類拔萃的程序員對軟件項目的成敗極其重要,鼓勵開發(fā)者編寫優(yōu)秀的軟件,同時關(guān)注如何讓開發(fā)者成為優(yōu)秀的開發(fā)者;軟件工藝拋棄了軟件工程大量使用平庸程序員的做法,用少量優(yōu)秀的開發(fā)者來替換他們,因此管理變得更容易,層級式的企業(yè)結(jié)構(gòu)不再適用,取而代之的是扁平化管理,因為知識、技術(shù)和能力都掌握在員工手里,軟件工匠不需要“命令-控制”型管理者,而是需要善于處理開發(fā)者、使用者、和客戶之間的關(guān)系的管理者,軟件工藝學認為一個真正優(yōu)秀的開發(fā)者比管理他的人有價值得多。
會編程不等于會開發(fā)軟件。當前程序設(shè)計課程最大的問題在于:教師是脫離實踐的環(huán)境在孤立地講解編程語言。這種教學方法相對枯燥,難以培養(yǎng)學生的學習興趣和學習積極性。更一步說,程序設(shè)計課程與實踐的脫節(jié)妨礙了學生能力的發(fā)展。例如:老師在課堂上只講解如何編寫循環(huán)語句,卻不告訴學生如何正確地使用循環(huán),循環(huán)在實際工作中是如何解決問題的。為了讓學生能夠知道大型應(yīng)用程序是如何使用循環(huán)語句的,我們改進了教學方法,在學生了解基本的語法和小型案例之后,教師帶領(lǐng)學生一起剖析研究一個一萬行左右規(guī)模的帶有注釋的程序,用這種方式告訴學生如何編寫真正有用的程序,教給他們正確的、合乎習慣的語言用法。
軟件工藝的理念包含兩個部分:熱情和務(wù)實[3]。熱情就是熱衷技術(shù),務(wù)實就是認真工作,這實際上是軟件工藝所倡導(dǎo)的生活方式和做事態(tài)度。那些對技術(shù)熱衷、對工作負責的軟件開發(fā)者總是會得到企業(yè)的青睞。
對技術(shù)熱衷,對學生就意味著要主動學習。要告訴學生如果他想成為優(yōu)秀的軟件開發(fā)者,他必須首先表現(xiàn)得像個專業(yè)人士,這意味著自己要花時間去提升知識水平和磨練技術(shù),應(yīng)該自己掌控自己的職業(yè)生涯,主動安排學習內(nèi)容和學習時間。要引導(dǎo)學生不能只拘泥于教材,還要多看其他專業(yè)人士撰寫的書籍。不僅要看講述具體技術(shù)的書籍,也要讀講述新概念、新范式、新做法的書籍,因為從概念書籍里學到的基礎(chǔ)知識,可以幫助開發(fā)者更快地掌握具體技術(shù)。軟件行業(yè)的變化速度比其他行業(yè)都要快,語言、框架、實踐、流程都在持續(xù)進化,軟件開發(fā)者要想獲得成功,就必須緊跟時代步伐,并不斷完善自我。
認真工作和精益求精,對學生就意味著要反復(fù)練習。要想寫出高質(zhì)量的代碼,就必須練習提高代碼質(zhì)量,除此之外別無他法。練習的重點是目前所學習的技術(shù),練習得越多就越適應(yīng),到后來就慢慢感到自然提高了。練習的時候要盡力編寫質(zhì)量高的代碼,就算花很長時間給變量、方法、或類起名字也沒有關(guān)系,關(guān)鍵是盡力找到最恰當?shù)拿Q。做練習的時候不僅要完成任務(wù),而是要竭力做得最好。要告訴學生什么是做工精良的代碼,所謂做工精良,就是說,無論應(yīng)用程序有多舊,開發(fā)者都能輕易理解其原理;程序的副作用都在明確掌控之中;程序的設(shè)計清晰而簡潔,業(yè)務(wù)邏輯也都很好地表述在代碼之中;測試用例的覆蓋度很高,測試代碼也寫得比較可靠;添加新功能或修改現(xiàn)有功能,所花的時間不會太長[3]。
由于軟件工藝指導(dǎo)下的軟件公司變得更加精簡,組織結(jié)構(gòu)變得更加扁平,它要求軟件開發(fā)者不能像過去那樣只精通一項技能,而是要成為公司所需的通才。為了適應(yīng)這種工作方式,軟件開發(fā)者必須提升自身技能,寫好代碼只是對軟件開發(fā)人員的最低要求?,F(xiàn)在的軟件開發(fā)者還需要具備測試能力,分析能力,對業(yè)務(wù)的理解能力,良好的溝通能力,以及更為外向的個性。軟件項目要成功,必須有優(yōu)秀的軟件開發(fā)者參與協(xié)作,他們不只善于寫好代碼,還能幫助業(yè)務(wù)人員達成他們的目標,提供建議和反饋。
教師在專業(yè)教學中特別把技術(shù)文檔編寫、PPT制作、技術(shù)主題演講納入訓練的常態(tài)和考核的范疇,由學生自己擔當評委進行互評打分。這樣的內(nèi)部研討學習環(huán)境,使學生更有動力深入研究所學習的技術(shù),因為沒有誰愿意在知之不深的情況下走上講臺或者擔當評委。通過這樣的反復(fù)訓練,不僅使學生養(yǎng)成深入思考的習慣,而且在職業(yè)技能和職業(yè)自信心上都得到了大幅提升。
在傳統(tǒng)工藝學中,學徒期是一個相當長的時期,軟件工藝也繼承了這個傳統(tǒng),原因在于現(xiàn)在學校里的教學模式無法有效地將技藝傳授給學生。要學習一項技藝不僅需要認真觀察師傅的操作,而且還需要在師傅的監(jiān)督和指導(dǎo)下親手實踐。
軟件專業(yè)自2016年以來全面開展“英才計劃”,按照“全體合格+部分精英”“全面合格+專項特長”的人才培養(yǎng)思路,分別建立了軟件精英俱樂部,大數(shù)據(jù)工作室,云計算工作室,得到學院從場地到經(jīng)費的大力支持。來到工作室的學生得到良師的指導(dǎo),經(jīng)過一年或兩年的時間,已經(jīng)脫穎而出,取得了顯著的成績,在全國各種軟件大賽、大數(shù)據(jù)技術(shù)和應(yīng)用大賽中取得了很好的成績。
高校的課程很少有為真實的項目開發(fā)而設(shè)置,因為高校不是軟件公司,大學教育模式的問題在于它無法為學生提供足夠的實踐指導(dǎo),軟件工藝所倡導(dǎo)的協(xié)作開發(fā)和成果復(fù)用在學校反倒認為是在作弊,而且學校課程側(cè)重強調(diào)軟件開發(fā)中的技術(shù)而忽略了重要的“軟技能”,“軟技能”同樣是成為優(yōu)秀的軟件開發(fā)者所必須的。筆者在校企合作與技能型人才培養(yǎng)模式上經(jīng)歷了多年的研究和嘗試,最終確定引企入校是適合軟件人才培養(yǎng)的校企合作最好方式。
引企入校是引進軟件企業(yè)實體進駐教學大樓,由學校提供相對便宜的辦公場所和實習生,由企業(yè)提供商業(yè)項目和企業(yè)講師。學生在第三學年暑期開始以實習生的身份參與企業(yè)的真實項目開發(fā)。企業(yè)講師由經(jīng)驗豐富的軟件開發(fā)者擔當,他們負責安排和指導(dǎo)實習生的工作,并為學校開設(shè)培訓課程和編寫培訓教材。從工藝學的角度來說,開發(fā)者最了解軟件開發(fā)中的問題,他們在擔任講師的同時也在實際項目中工作,因此他們能編寫出有用的教材,他們講授的課也最貼近實際情況,最終是所有人都受益:學生在校期間就知道了商業(yè)應(yīng)用軟件開發(fā)是如何進行的,獲得了寶貴的實際項目經(jīng)驗,為他們成為優(yōu)秀的軟件開發(fā)者縮短了進程; 企業(yè)不僅降低了生產(chǎn)成本,而且還可以從學校獲得源源不斷的人力資源,許多優(yōu)秀實習生畢業(yè)后直接成為企業(yè)的正式員工,實現(xiàn)了從學校到企業(yè)的無縫銜接;學校從校企合作中提升了服務(wù)社會、服務(wù)企業(yè)的能力,提升了學校辦學知名度和辦學能力; 校、企、學生才能真正實現(xiàn)了三方共贏。