专访刘伟:软件开发人员的内功修炼之道
導(dǎo)語:他雖然是一名大學(xué)老師,但卻有著十多年軟件開發(fā)和項(xiàng)目管理經(jīng)驗(yàn),他曾任職于湖南移動、創(chuàng)智軟件園、NIIT(印度國家信息技術(shù)學(xué)院)和長沙創(chuàng)智新程教育技術(shù)有限公司等機(jī)構(gòu),也曾為多所高校、軟件培訓(xùn)機(jī)構(gòu)擔(dān)任講師和多家公司提供企業(yè)內(nèi)訓(xùn)服務(wù)。另外他還主持和參與了30多個軟件項(xiàng)目的開發(fā)工作,涉及教育、電子商務(wù)(政務(wù))、企業(yè)EAI、移動通信等領(lǐng)域,此外他還致力于科研研究。正是這種復(fù)雜的多重經(jīng)歷,讓他對軟件開發(fā)有著獨(dú)到的見解和心得,為此CSDN記者對這位學(xué)者兼技術(shù)人進(jìn)行了專訪,希望大家看完后能夠?qū)浖_發(fā)之路有全新的認(rèn)識,尤其是對軟件開發(fā)人員至關(guān)重要的設(shè)計(jì)模式、數(shù)學(xué)修養(yǎng)、軟件架構(gòu)和重構(gòu)方面(文章內(nèi)容有點(diǎn)長,請耐心看下去,會對你有所啟發(fā))。
劉偉,中南大學(xué)軟件學(xué)院副教授,博士。中國計(jì)算機(jī)學(xué)會會員,美國計(jì)算機(jī)學(xué)會(ACM)會員,希賽教育集團(tuán)企業(yè)內(nèi)訓(xùn)講師,新程教育集團(tuán)顧問兼高級講師,CSAI顧問團(tuán)專業(yè)顧問及內(nèi)訓(xùn)講師。具有十多年軟件開發(fā)、項(xiàng)目管理及IT教育培訓(xùn)經(jīng)驗(yàn),曾擔(dān)任項(xiàng)目經(jīng)理、系統(tǒng)架構(gòu)師、軟件工程師、IT培訓(xùn)講師和高級講師等職位。研究方向?yàn)檐浖こ膛c數(shù)據(jù)挖掘,目前正從事相關(guān)算法的研究與CASE工具的開發(fā)工作。著有:《設(shè)計(jì)模式》、《設(shè)計(jì)模式實(shí)訓(xùn)教程》、《設(shè)計(jì)模式的藝術(shù)——軟件開發(fā)人員內(nèi)功修煉之道》等書。同時也在編著新書《UML實(shí)用教程》和《C#設(shè)計(jì)模式》。
我與計(jì)算機(jī)的故事
CSDN:請和大家介紹下你及所從事的工作
劉偉:我現(xiàn)在主要從事軟件工程和數(shù)據(jù)挖掘等領(lǐng)域的科研、教學(xué)和研發(fā)工作。具體工作包括:
- 軟件工程專業(yè)課程的教學(xué)工作:主要講授《軟件工程》、《設(shè)計(jì)模式》、《軟件體系結(jié)構(gòu)》和《電子商務(wù)與數(shù)據(jù)挖掘》等課程。
- 軟件工程和數(shù)據(jù)挖掘等領(lǐng)域的科研工作:注重理論研究與實(shí)際應(yīng)用的結(jié)合,目前主要研究課題包括源代碼自動重構(gòu)、CASE工具研發(fā)、源代碼中設(shè)計(jì)模式挖掘、軟件度量等,目前承擔(dān)的幾項(xiàng)科研項(xiàng)目的研究工作,已得到包括華為在內(nèi)的多家企業(yè)的關(guān)注并愿意參與其中。
- 企業(yè)培訓(xùn)與支持工作:在周末和寒暑假,我會給一些企業(yè)提供需求分析、UML、設(shè)計(jì)模式和重構(gòu)等技術(shù)培訓(xùn),密切與企業(yè)聯(lián)系,為企業(yè)項(xiàng)目開發(fā)提供一些指導(dǎo),同時也為高校教學(xué)工作添加更多真實(shí)的企業(yè)案例,已經(jīng)給多家公司提供過企業(yè)內(nèi)訓(xùn),反響都還不錯。
- 軟件研發(fā)工作:時間允許的話我會承擔(dān)一些軟件項(xiàng)目的研發(fā)工作,目前正在從事一些CASE工具的研發(fā)工作。
CSDN:你并非計(jì)算機(jī)出身,是什么緣故促使你自學(xué)計(jì)算機(jī)課程?在學(xué)習(xí)上有什么心得可分享?
劉偉:嚴(yán)格來講大學(xué)期間我并不是一名好學(xué)生,因?yàn)槲覜]把時間和精力放在專業(yè)學(xué)習(xí)上,現(xiàn)在從事的工作也與大學(xué)所學(xué)專業(yè)沒有關(guān)系,但我并不后悔,反而覺得大學(xué)四年讓我更加清楚地知道自己想要什么,樹立了更長遠(yuǎn)的目標(biāo),那幾年也過得很充實(shí),為之后的學(xué)習(xí)和工作奠定了很好的基礎(chǔ)。
我大學(xué)本科學(xué)的是化學(xué)專業(yè),不過從大一(1999年)開始就對計(jì)算機(jī)產(chǎn)生了極大興趣,然后自學(xué)了所有計(jì)算機(jī)課程,大二開始在一些校辦網(wǎng)站和軟件公司兼職。在本科和研究生學(xué)習(xí)期間,我利用課余時間在多家軟件公司兼職,也組織過團(tuán)隊(duì)在外面接一些項(xiàng)目。軟件開發(fā)是極富挑戰(zhàn)的創(chuàng)造性工作,我很享受那個集體力和腦力勞動于一體的過程,我想最根本的原因應(yīng)該還是興趣所在吧。
在大學(xué)期間,我對軟件教育和技術(shù)推廣也具有極大熱情,2001年(19歲)開始在一些IT培訓(xùn)機(jī)構(gòu)擔(dān)任網(wǎng)頁制作、SQL Server數(shù)據(jù)庫等課程的兼職講師,同時考取了高級程序員等證書,還獲得了微軟認(rèn)證系統(tǒng)工程師和微軟認(rèn)證數(shù)據(jù)庫管理員。
對于軟件知識和技術(shù)的學(xué)習(xí),我有以下幾點(diǎn)建議,供參考:
- 最重要的是興趣:興趣是可以慢慢培養(yǎng),作為一名軟件專業(yè)老師,我也有意識發(fā)掘并培養(yǎng)學(xué)生的興趣,讓學(xué)生喜歡上這個專業(yè),然后再努力去學(xué)習(xí)研究,進(jìn)而全面學(xué)習(xí)和掌握相關(guān)專業(yè)知識;
- 其次是學(xué)習(xí)能力:IT知識更新速度非???#xff0c;一定要培養(yǎng)自學(xué)能力,我經(jīng)常跟學(xué)生說:真正成功的大學(xué)教育并不在于教會學(xué)生多少東西,而是教會學(xué)習(xí)的能力,這種能力讓大家終身受用。俗話說:授人魚,不如授人以漁!只有不斷學(xué)習(xí),才能真正成為行業(yè)領(lǐng)袖和專家。在學(xué)習(xí)過程中,要善于利用互聯(lián)網(wǎng)資源,不要把電腦和網(wǎng)絡(luò)當(dāng)做娛樂工具,而應(yīng)該作為學(xué)習(xí)工具,經(jīng)常訪問一些IT網(wǎng)站,看一些行業(yè)新聞、博客和論壇等,多交流、多討論和多虛心學(xué)習(xí)。
- 多思考,多實(shí)踐:軟件工程是工程應(yīng)用類專業(yè),一定要多實(shí)踐,有條件可以參與一些老師牽頭的橫向項(xiàng)目(企業(yè)項(xiàng)目),或者在不影響學(xué)習(xí)的情況下接點(diǎn)企業(yè)小項(xiàng)目做做(例如小網(wǎng)站或者小型的MIS系統(tǒng)之類),這樣能力提升會更快,而且能夠?qū)W到很多在課堂上學(xué)不到的知識和經(jīng)驗(yàn)。
2010年我在CSDN博客上發(fā)表了一篇文章,《寫給明天的軟件工程師——感悟篇》,大家如果感興趣的話可以看看。
CSDN:你微博中用“軟件興邦,教育利民!致力于中國軟件教育“作為座右銘,想傳達(dá)什么?
劉偉:這包含了我的人生理想,我現(xiàn)在的目標(biāo)是成為一名一流的IT教育工作者,這里的IT教育是廣義的,除了高校教育、企業(yè)培訓(xùn)外,還包括職業(yè)教育等,我覺得一個行業(yè)要能得到更好的發(fā)展,應(yīng)該有一套成熟、科學(xué)、合理的人才培養(yǎng)體系?,F(xiàn)在軟件行業(yè)的地位和重要性毋庸置疑,前段時間我在博客中轉(zhuǎn)載了一篇文章《軟件應(yīng)用無所不在 正吞噬整個世界》,現(xiàn)在軟件已滲入到各行各業(yè),而且很多傳統(tǒng)行業(yè)已經(jīng)離不開軟件的支持,例如:零售、交通、出版、醫(yī)療、招聘、娛樂、電信、教育等等,還有很多行業(yè)本身就是依托于軟件的,例如電子商務(wù)、在線游戲等。網(wǎng)景公司創(chuàng)始人、硅谷著名投資人馬克·安德森的這篇文章中,他列舉我們所面臨的三大挑戰(zhàn)第二條就是人才問題,軟件行業(yè)缺乏大量能夠勝任的軟件工程師、經(jīng)理、營銷人員和銷售人員,他指出只有教育才能解決這個問題。正因?yàn)槿绱?#xff0c;我覺得自己的選擇是非常正確的,我也希望自己能夠通過努力,成為一名優(yōu)秀的軟件教育工作者?!败浖d邦,教育利民!致力于中國軟件教育”這句話也是用來勉勵自己,希望自己能夠不斷研究和探索軟件人才培養(yǎng)的規(guī)律和模式,以便更好地從事軟件教育工作。
數(shù)學(xué)之美:程序員應(yīng)有的數(shù)學(xué)修養(yǎng)
CSDN:一名優(yōu)秀的程序員和他的數(shù)學(xué)修養(yǎng)有沒有什么聯(lián)系?它給程序員帶來的最大幫助是什么?
劉偉:我個人覺得是有聯(lián)系,而且關(guān)系很密切。數(shù)學(xué)作為自然科學(xué)之母,更多的是培養(yǎng)人的邏輯思維能力,是思維的體操。
我們要區(qū)別一下合格程序員和優(yōu)秀程序員,合格程序員可以完成一些常規(guī)的代碼編寫工作,例如CRUD,這里確實(shí)用不到太多的數(shù)學(xué)知識,但是如果希望能寫出高質(zhì)量的代碼(例如具有良好的時間復(fù)雜度和空間復(fù)雜度),或者參與一些技術(shù)難度較大的軟件開發(fā)工作(例如涉及到構(gòu)建數(shù)學(xué)模型的軟件,如交通調(diào)度系統(tǒng)、與電子商務(wù)有關(guān)的數(shù)據(jù)挖掘系統(tǒng)、計(jì)算機(jī)模擬藥物設(shè)計(jì)軟件等),良好的邏輯思維能力是必須的,而數(shù)學(xué)正可以培養(yǎng)這種能力。
良好的數(shù)學(xué)修養(yǎng)將讓程序員在設(shè)計(jì)和實(shí)現(xiàn)軟件時思維更嚴(yán)謹(jǐn)、思路更開闊、考慮也會更縝密,有助于寫出高質(zhì)量的軟件,還有利于參與一些技術(shù)復(fù)雜度較高的軟件,這對于個人綜合素質(zhì)的提高和職業(yè)發(fā)展都很有幫助。我建議大家有時間看看數(shù)學(xué)書,做做數(shù)學(xué)題,你能夠從中找到快樂!
CSDN:那程序員如何培養(yǎng)自己的數(shù)學(xué)修養(yǎng)?應(yīng)該培養(yǎng)哪些數(shù)學(xué)修養(yǎng)?
劉偉:2012年有三本書賣得很火,它們是:騰訊副總裁吳軍先生的《數(shù)學(xué)之美》、日本資深技術(shù)作家結(jié)城浩的《程序員的數(shù)學(xué)》和北大高材生顧森的《思考的樂趣:Matrix67數(shù)學(xué)筆記》。而購買者絕大部分都是IT相關(guān)人士,當(dāng)然最多的還是程序員。由此可見,很多一線程序員都意識到有時間應(yīng)該學(xué)學(xué)數(shù)學(xué),看看數(shù)學(xué)書,培養(yǎng)自己的數(shù)學(xué)修養(yǎng)。這是好事,說明大家都在努力求進(jìn)步,都在努力提升自己的綜合水平。我也讀完這三本書,收益頗豐。
2006年我在CSDN博客上發(fā)表了一篇題為《淺談程序員的數(shù)學(xué)修養(yǎng)》文章,很多人發(fā)表了一些不同的看法和意見,當(dāng)然我在這篇文章中所寫的很多都是個人觀點(diǎn),難免會存在一些考慮欠周全的地方,但對于一名優(yōu)秀程序員是否應(yīng)該具備一定的數(shù)學(xué)修養(yǎng)這個觀點(diǎn)我還是堅(jiān)持自己意見,我認(rèn)為是肯定的。那么如何培養(yǎng)自己的數(shù)學(xué)修養(yǎng),我在《淺談程序員的數(shù)學(xué)修養(yǎng)》一文中有提到,大家感興趣的話可以看看這篇文章,另外我還轉(zhuǎn)載了幾篇與之相關(guān)的文章:《數(shù)學(xué)是成就卓越開發(fā)人員的必備技能》和《編程需要知道多少數(shù)學(xué)知識》,有一些不同的聲音,大家都可以看看。
需要指出的是這里所說的數(shù)學(xué)修養(yǎng)并不是指數(shù)學(xué)知識,不是指你各種解題能力,這里所指的數(shù)學(xué)修養(yǎng)更多的是平時對數(shù)學(xué)知識的積累。比如適當(dāng)做數(shù)學(xué)題來訓(xùn)練自己的思維、看有關(guān)數(shù)學(xué)書來豐富自己的知識體系,當(dāng)你需要在工作中具體用到一些數(shù)學(xué)知識時,你可以很快地學(xué)習(xí)。數(shù)學(xué)修養(yǎng)的培養(yǎng)更多的是培養(yǎng)自己的邏輯思維能力,這對于一個優(yōu)秀程序員是非常重要的能力,數(shù)學(xué)修養(yǎng)不等于數(shù)學(xué)知識,并不是看幾本高深的數(shù)學(xué)書就能有好的數(shù)學(xué)修養(yǎng),真正的數(shù)學(xué)修養(yǎng)的培養(yǎng)并不需要我們一定要掌握多少高深的數(shù)學(xué)知識,而是在平常的學(xué)習(xí)和工作中能夠?qū)?shù)學(xué)知識和正在解決的問題聯(lián)系起來。例如當(dāng)你在設(shè)計(jì)一個電子商務(wù)系統(tǒng)時,除了傳統(tǒng)的CRUD,你還應(yīng)該考慮一下顧客行為分析、商品推薦、網(wǎng)站鏈接結(jié)構(gòu)優(yōu)化、廣告投入策略、信息檢索模型構(gòu)建等,這里面也許就需要用到貝葉斯網(wǎng)絡(luò)、粒子群優(yōu)化、圖論、 聚類和分類等與數(shù)學(xué)相關(guān)的知識,如果你具備很好的數(shù)學(xué)修養(yǎng),平時也注意數(shù)學(xué)知識的積累,那么即使從頭開始學(xué)這里的某些知識也不是難事。由此可見,對于一名優(yōu)秀程序員而言,數(shù)學(xué)修養(yǎng)是必備的。
具體來說,數(shù)學(xué)修養(yǎng)的培養(yǎng)可以從算法分析和設(shè)計(jì)開始,深入理解一些經(jīng)典算法的設(shè)計(jì)原理和實(shí)現(xiàn)機(jī)制,我認(rèn)為算法是數(shù)學(xué)的一部分,是數(shù)學(xué)在計(jì)算機(jī)領(lǐng)域的應(yīng)用,就像數(shù)學(xué)應(yīng)用在材料、力學(xué)、經(jīng)濟(jì)學(xué)一樣。另外,有空的話可以多做數(shù)學(xué)題和邏輯題,把這些習(xí)題當(dāng)做一種邏輯思維練習(xí),讓自己思維更加活躍一點(diǎn),Bob大叔(Robert C. Martin)稱這種練習(xí)為卡塔(Kata),我建議大家有時間每天也做一兩個卡塔,有些數(shù)學(xué)題可以不在紙上寫,直接用程序?qū)崿F(xiàn)也可以。另外,前面提到的那三本書也挺不錯,建議大家有時間可以看看,權(quán)當(dāng)一個入門,總之一定要認(rèn)識到數(shù)學(xué)修養(yǎng)的重要性。對于那些正在或有志于數(shù)據(jù)挖掘、信號處理、圖像處理和搜索引擎等工作的朋友,那數(shù)學(xué)的重要性就不多言了,大家都懂的。
IT人才培養(yǎng)
CSDN:在大學(xué)計(jì)算機(jī)專業(yè)課中哪些課程最難?你又是通過什么方式簡單地講解難點(diǎn)?
劉偉:大學(xué)計(jì)算機(jī)專業(yè)課中比較難的課包括離散數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、編譯原理、算法分析與設(shè)計(jì)等(來自同學(xué)反映),當(dāng)然有的學(xué)校還開設(shè)了信息論與編碼、數(shù)字圖像處理、計(jì)算機(jī)圖形學(xué)、計(jì)算機(jī)密碼學(xué)、數(shù)據(jù)挖掘等,這些課跟數(shù)學(xué)以及邏輯思維能力或多或少有點(diǎn)關(guān)系,當(dāng)然也因人而異。上述這些課程對于有些同學(xué)而言也并不難,但是跟軟件工程、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、計(jì)算機(jī)組成原理等課程相比,很多同學(xué)在學(xué)習(xí)這些課程時相對更加吃力。
這些課有些我也沒有教過,在以前講授數(shù)據(jù)結(jié)構(gòu)、算法分析與設(shè)計(jì)等課時,如果遇到比較難的地方,我會首先利用一些圖形和動畫來分析其原理,先形成一個感性的認(rèn)識,然后引入一些比較容易理解和通俗的實(shí)例來講解,通過對具體問題的分析來逐步深入。特別是算法,不能為講算法而講算法,最好能夠結(jié)合一些具體問題來分析,對于算法的本質(zhì)需要講透徹一點(diǎn),但通常數(shù)學(xué)基礎(chǔ)較好的學(xué)生可以快速消化這些知識,而數(shù)學(xué)基礎(chǔ)相對較差的在學(xué)習(xí)過程中遇到的困難更大。因此,我有時候也會要求學(xué)生在課后做邏輯思維題,例如數(shù)字找規(guī)律、圖形找規(guī)律、邏輯推理、簡單的數(shù)學(xué)證明題等來訓(xùn)練一下思維能力,這其實(shí)也是在無形中培養(yǎng)自己的數(shù)學(xué)修養(yǎng),通過一段時間的訓(xùn)練,有些同學(xué)確實(shí)有所進(jìn)步,在思考問題時思路更開闊、更嚴(yán)謹(jǐn),對算法的理解也更深入。
CSDN:你曾做過幾年開發(fā),后來為什么從技術(shù)人轉(zhuǎn)為IT教育工作者?之前的工作對你現(xiàn)在有何幫助?在給高校學(xué)生上課之外,你還喜歡與企業(yè)交流,為什么?
劉偉:我個人對教育事業(yè)可以說是情有獨(dú)鐘,我出生于一個教師家庭,祖父、父親、母親都是教師,祖父和父親是一所中學(xué)教師(祖父是老校長,父親是現(xiàn)任校長),母親是小學(xué)教師。從小就在學(xué)校長大,一直很喜歡把自己學(xué)到的東西傳授給別人,這很快樂。在大三(19歲)時我就在IT培訓(xùn)機(jī)構(gòu)擔(dān)任網(wǎng)頁制作、SQL Server數(shù)據(jù)庫等課程的講師,那時學(xué)生基本上比我大,但學(xué)習(xí)完之后,大家反應(yīng)都還挺好,說我講課思路清晰、內(nèi)容很豐富、信息量大,能夠?qū)W到很多東西,我想這方面還有點(diǎn)遺傳基因吧。研究生階段也在職業(yè)培訓(xùn)機(jī)構(gòu)擔(dān)任兼職講師,碩士畢業(yè)(2006年)后在湖南移動、創(chuàng)智軟件園上班,主要從事軟件研發(fā)工作,還在NIIT(印度國家信息技術(shù)學(xué)院)、創(chuàng)智新程教育技術(shù)有限公司(原創(chuàng)智集團(tuán)教育事業(yè)部)擔(dān)任高級講師,同時也擔(dān)任幾所高校的企業(yè)兼職教師,之后讀博并在中南大學(xué)軟件學(xué)院任教。從2001年開始都從事與IT教育相關(guān)的工作,之前是兼職,現(xiàn)在是全職。對于軟件研發(fā)、軟件職業(yè)教育、軟件高校教育我都有涉足,正是這種特殊的工作經(jīng)歷,讓我對IT人才的培養(yǎng)有更深刻的理解和認(rèn)識。
在有過幾年一線開發(fā)經(jīng)驗(yàn)后,我發(fā)現(xiàn)自己最大的長處還是在于將一些知識用較為通俗的語言和實(shí)例傳遞給他人,這也是一名好教師,特別是IT相關(guān)教師應(yīng)該具備的能力,因此,我陸續(xù)拒絕了很多國內(nèi)外知名企業(yè)的Offer和多家獵頭公司的邀約,在經(jīng)過慎重思考后我已逐步將工作重心轉(zhuǎn)移到軟件教育上。另外我覺得中國的軟件教育需要一批有過企業(yè)背景,也具有較好表達(dá)能力和感染力的老師,我自認(rèn)為還是具備這些條件的??吹轿业膶W(xué)生們能夠進(jìn)入一些一流的軟件公司、做出一些優(yōu)秀的軟件,所帶給我的成就和愉悅感,遠(yuǎn)比自己收獲這些要大。
企業(yè)工作背景對我的教學(xué)工作非常有幫助,在教學(xué)過程中,我會結(jié)合一些企業(yè)真實(shí)項(xiàng)目實(shí)例來進(jìn)行知識講解,會結(jié)合我之前的一些工作經(jīng)歷講授一些書本之外的知識,例如在講解軟件需求工程時,我會告訴學(xué)生我曾參與開發(fā)的一些項(xiàng)目是如何來獲取需求的、對于不同的需求源我們做了哪些分析和考慮、采用了哪些需求獲取手段、如何記錄需求以及如何確認(rèn)需求,跟學(xué)生講我們當(dāng)時遇到了哪些問題以及最后怎么解決的,還會穿插一些真實(shí)的小故事,讓大家的學(xué)習(xí)過程不那么枯燥無味,而是充滿好奇感和趣味性。正因?yàn)橹皡⑴c過那么多實(shí)際的項(xiàng)目,親身經(jīng)歷過很多軟件的成功與失敗,也充分體會到過程的快樂與艱辛,才讓我現(xiàn)在能夠自信滿滿地站在講臺上,與學(xué)生們分享我的知識與經(jīng)驗(yàn)。
為了不脫離企業(yè),我現(xiàn)在仍然會經(jīng)常與企業(yè)進(jìn)行交流,我一直認(rèn)為,一旦脫離企業(yè)實(shí)際需求,IT教育不可能培養(yǎng)出真正優(yōu)秀實(shí)用的人才。一方面,我會在工作之余參與一些企業(yè)項(xiàng)目的開發(fā)工作,主要以顧問的形式參與需求分析、系統(tǒng)架構(gòu)設(shè)計(jì)、技術(shù)評審等,盡自己的能力給一些企業(yè)提供指導(dǎo),例如教企業(yè)如何實(shí)施Scrum、如何使用UML構(gòu)建軟件模型、如何對源代碼進(jìn)行優(yōu)化和重構(gòu)等。在提供指導(dǎo)的同時,我又可以將這些知識和經(jīng)驗(yàn)傳遞給在校學(xué)生,讓學(xué)生知道現(xiàn)在企業(yè)正在做什么、他們是怎么做的、遇到了什么困難、應(yīng)該具備哪些知識才能勝任這些工作,我覺得這是一個良性循環(huán),學(xué)生們學(xué)習(xí)了這些知識和技能之后在實(shí)際開發(fā)中就能夠用上,而且學(xué)習(xí)過程本身也很好地切合了企業(yè)的需求,在一定程度上解決高校人才培養(yǎng)和企業(yè)實(shí)際需求脫節(jié)的問題。當(dāng)然,我現(xiàn)在所做的還是一個探索性的工作,也希望這項(xiàng)工作對于我國高校軟件人才的培養(yǎng)有一定的參考價值。另一方面,我也在分析企業(yè)的一些需求,例如,有些企業(yè)員工因?yàn)楣ぷ鲏毫Υ?、?xiàng)目進(jìn)度緊等原因,無法靜下心來學(xué)習(xí)一些新知識,于是我會將這些知識整理好,用較短的時間和較為通俗生動的方式傳授給他們,我覺得這也是IT教育很重要的一個組成部分,教育是貫穿一生的,活到老,學(xué)到老。
與企業(yè)交流讓我了解到企業(yè)對人才的需求,能夠?yàn)槲业慕虒W(xué)工作提供更多真實(shí)案例,同時我也能夠?yàn)槠髽I(yè)開發(fā)人員提供一些指導(dǎo)和培訓(xùn),此外,我個人的知識和經(jīng)驗(yàn)也在不斷累積,有助于我更好地從事軟件教育工作。
CSDN:現(xiàn)行的軟件人才培養(yǎng)體制有哪些缺陷?你認(rèn)為該如何改進(jìn)?
劉偉:關(guān)于現(xiàn)行軟件人才培養(yǎng)體制,我個人也有一些自己的意見和建議,下面我談幾點(diǎn)自己的看法吧。
- 培養(yǎng)目標(biāo)問題。做科學(xué)家好還是工程師好?研究型大學(xué)是不是不應(yīng)該培養(yǎng)工程師?研究型大學(xué)如何培養(yǎng)工程師?現(xiàn)在很多985和211高校的口號都是建設(shè)國內(nèi)一流的研究型大學(xué),老師們都全力去做科研,而工程類專業(yè),特別是軟件工程又是以培養(yǎng)工程應(yīng)用型人才為主,如果老師們都將精力用于做科研了,誰來培養(yǎng)工程師?怎么培養(yǎng)工程師?而且沒有實(shí)際的項(xiàng)目開發(fā)經(jīng)驗(yàn),只是照本宣科,停留在純理論的教學(xué)中,如何能夠培養(yǎng)出合格的工程師?我個人覺得工科大學(xué)本科教育(工程類專業(yè))應(yīng)該還是以面向應(yīng)用工程型為主,如果希望當(dāng)科學(xué)家,應(yīng)該是在碩士,特別是博士教育中。隨著工程碩士規(guī)模的擴(kuò)大,很多人碩士畢業(yè)之后還是當(dāng)工程師。如果有志于當(dāng)科學(xué)家的同學(xué),應(yīng)該從本科就做好準(zhǔn)備,打下良好研究基礎(chǔ),學(xué)好數(shù)學(xué)、英語和一些基礎(chǔ)理論課程,最好能夠把算法、計(jì)算理論、編譯原理、形式化方法、數(shù)據(jù)挖掘、計(jì)算機(jī)圖形學(xué)等知識學(xué)好,為做科學(xué)研究打下基礎(chǔ),如果有機(jī)會的話,可以提前和老師們一起參與一下科研項(xiàng)目的研究,了解一下科研的流程,說不定還能夠做出點(diǎn)啥科研成果。而對于大部分想做工程師的同學(xué)而言,軟件開發(fā)類課程就非常重要了,無論是編程、分析設(shè)計(jì)、架構(gòu)還是測試,以及數(shù)據(jù)庫、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)等基礎(chǔ)課都是成為一名優(yōu)秀工程師的基礎(chǔ),如果有機(jī)會,做做實(shí)際的應(yīng)用型項(xiàng)目(不是停留在課程設(shè)計(jì)或者項(xiàng)目實(shí)訓(xùn)等模擬項(xiàng)目上),那幫助就更大了。在大學(xué)階段有一個比較明確的職業(yè)規(guī)劃,對于同學(xué)們的成長確實(shí)有很有幫助,雖然這個做起來有點(diǎn)難度。
- 課程體系的建設(shè)問題。這也是軟件工程教育的一個核心問題,它對應(yīng)于一個怎么做的問題,軟件工程專業(yè)的課程體系要兼顧多方面,因此一套完善合理的課程體系需要不斷調(diào)整和優(yōu)化,這樣難免會有一些同學(xué)會成小白鼠,但是這是人才培養(yǎng)道路上必經(jīng)的一個過程,還望做過小白鼠、正在做小白鼠和即將成為小白鼠的同學(xué)們理解。一套科學(xué)合理的軟件工程課程體系,我認(rèn)為至少要考慮如下兩個方面:用人企業(yè)的需求(分析用人企業(yè)所需的技能和技術(shù),結(jié)合企業(yè)的招聘啟事,請企業(yè)專家參與評審課程體系,包括課程的培養(yǎng)目標(biāo)、先后順序、教學(xué)大綱和實(shí)驗(yàn)安排等)、人才的長遠(yuǎn)發(fā)展(我們不能只是培養(yǎng)碼農(nóng),需要培養(yǎng)出能夠具有更好發(fā)展前景的軟件人才,因此除了編碼類課程,還需要開設(shè)需求、分析、設(shè)計(jì)、架構(gòu)、測試和項(xiàng)目管理等課程)。對于教育工作者,人才是產(chǎn)品,用人單位是客戶。我們都希望能夠培養(yǎng)出高質(zhì)量的產(chǎn)品,滿足客戶的需求,做到三方共贏!
- ?教學(xué)與實(shí)踐課時分配的問題。軟件工程是一個重實(shí)踐的專業(yè),必須要多實(shí)踐,重點(diǎn)培養(yǎng)實(shí)踐能力,許多高校都在壓縮教學(xué)課時,大量增加實(shí)踐課時。但是現(xiàn)在有一個很重要的問題是很多學(xué)校的教學(xué)資源不足,不可能所有的課都在機(jī)房上。大家經(jīng)常會提到一個“做中學(xué)”的問題,對于軟件人才的培養(yǎng),確實(shí)需要增加實(shí)踐課時,我個人覺得如果網(wǎng)速足夠快并提供合適的在線項(xiàng)目開發(fā)和管理平臺,有些練習(xí)和項(xiàng)目完全可以在宿舍完成。教學(xué)課時沒有必要開設(shè)那么多,我始終還是堅(jiān)信那句話:大學(xué)教育更多是培養(yǎng)大家學(xué)習(xí)能力,而不是學(xué)習(xí)知識本身。
- 師資問題。作為軟件工程專業(yè)的教師,必須不斷更新自己的知識體系,需要至少在某一個或幾個領(lǐng)域與最新技術(shù)接軌,每年應(yīng)該也要實(shí)時充電,讓學(xué)生們能夠在學(xué)校就學(xué)到一些前沿知識。對于有些知識的學(xué)習(xí),老師的理解能力和消化能力還是要強(qiáng)于學(xué)生,畢竟對行業(yè)和專業(yè)的了解更為全面和系統(tǒng)。我個人的觀點(diǎn)是,作為從事軟件工程一線教學(xué)的教師,應(yīng)該有目的地提升自己的實(shí)際項(xiàng)目開發(fā)能力,不斷學(xué)習(xí)新知識,“一門課上到退休”對我們來說并不適用,也不應(yīng)該是這樣。作為一名軟件教育從業(yè)者,我要求學(xué)生要努力學(xué)習(xí),學(xué)會自學(xué)新知識與技能,同時我也需要不斷學(xué)習(xí),只有這樣,我自己也才能實(shí)現(xiàn)成為一流IT教育工作者的夢想。
- 高校與企業(yè)聯(lián)合辦學(xué)的問題。與企業(yè)聯(lián)合辦學(xué)是目前很多高校在培養(yǎng)軟件人才時采用的一個重要的手段,這樣一方面可以讓學(xué)生學(xué)到一些企業(yè)實(shí)用技術(shù),另一方面可以緩解師資不足的問題。學(xué)生也特別希望能夠有一些企業(yè)老師來講課,學(xué)習(xí)到更多實(shí)用的技術(shù)和經(jīng)驗(yàn)。我想我的課之所有學(xué)生們喜歡,跟我之前有過幾年項(xiàng)目開發(fā)經(jīng)驗(yàn)有很大關(guān)系。但是在校企聯(lián)合辦學(xué)過程中,地域因素也不得不考慮,例如在北京,如果要找一流的測試專家給某個高校上軟件測試的一些課程,可以找中國軟件評測中心或國家信息中心軟件評測中心,但是有很多二線、三線城市的高校就沒有這么便利的企業(yè)教學(xué)資源,應(yīng)該建立一個校企合作的平臺。我覺得校企合作是一個對三方有利的方式,對于學(xué)生和學(xué)校的好處不用多說,對于企業(yè)而言,可以從中選拔優(yōu)秀的潛在員工,還可以宣傳自己的企業(yè)和產(chǎn)品,同時帶來新的贏利點(diǎn)。很多國內(nèi)外知名軟件公司就成立了專門的校企合作部門,已經(jīng)嵌入到師資培訓(xùn)、學(xué)生培養(yǎng)、實(shí)習(xí)生安排和社團(tuán)活動等多個環(huán)節(jié),并取得了不錯的效果。
當(dāng)然,還包括不同層次的學(xué)校人才培養(yǎng)的差異性問題、軟件工程碩士培養(yǎng)問題、不同方向(開發(fā)、測試、互聯(lián)網(wǎng)營銷等)的軟件人才培養(yǎng)問題等。每一個問題都可以作為一個專題討論,恕本人才疏學(xué)淺,也不妄加評論了,以后有機(jī)會再跟大家進(jìn)一步交流。以上很多觀點(diǎn)都來自我2012年12月份寫的一篇博文《如何培養(yǎng)軟件工程人才——參加“第一屆高等學(xué)校軟件工程人才培養(yǎng)高峰論壇”有感》,歡迎大家一起交流和討論。
總結(jié)
以上是生活随笔為你收集整理的专访刘伟:软件开发人员的内功修炼之道的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android—RxJava库知识
- 下一篇: Phython—实训day5—爬虫相关知