6職業(yè)程序員培養(yǎng)之道
編輯日期 2017-01-18 閱讀次數(shù):1002 次
粘新育 任甲林
軟件開發(fā)是以人為核心的過程,對(duì)人的依賴性遠(yuǎn)高于傳統(tǒng)的硬件生產(chǎn)企業(yè),為了保持開發(fā)能力的穩(wěn)定性,一方面需要定義軟件過程,以過程為樞紐將人、技術(shù)、工具銜接起來,另一方面也要加強(qiáng)人才的培養(yǎng),使人的工作能力能夠穩(wěn)定、提高人員的自治性。隨著社會(huì)需求的膨脹,對(duì)程序員的需求量、對(duì)熟練的程序員的需求量在劇增,然而對(duì)程序員的培養(yǎng)問題卻成了一個(gè)盲點(diǎn),學(xué)生在學(xué)校里學(xué)習(xí)的是關(guān)于軟件開發(fā)的基礎(chǔ)知識(shí),軟件企業(yè)需要的是熟練的能夠快速開發(fā)出產(chǎn)品的程序員,需要程序員具有很強(qiáng)的實(shí)用知識(shí),因而出現(xiàn)了明顯的學(xué)校教育與實(shí)際需求脫節(jié)的問題。企業(yè)反映新畢業(yè)的學(xué)生知識(shí)老化、動(dòng)手能力太差、缺乏實(shí)用理論知識(shí)、缺少工程管理知識(shí)等問題。盡管社會(huì)上有各種各樣的專業(yè)程序員培訓(xùn)班,但是距離企業(yè)的實(shí)際需求仍然有較大的差距。在企業(yè)中培養(yǎng)一名合格的程序員一般需要3個(gè)月到半年時(shí)間,對(duì)企業(yè)來講,這個(gè)周期就顯得太長了,所以一般的企業(yè)不愿要新畢業(yè)的學(xué)生,企業(yè)希望程序員能夠“來則戰(zhàn)之,戰(zhàn)則勝之”。無論如何,對(duì)程序員來講總是要面臨一個(gè)成長的過程,希望學(xué)校或者培訓(xùn)班來解決這個(gè)問題很難,因?yàn)槌绦騿T不是標(biāo)準(zhǔn)件,程序員不是教育出來的,是在實(shí)踐中干出來的,還是要在實(shí)踐中來培養(yǎng)程序員,這是任何軟件企業(yè)必須承受的,因此,對(duì)軟件企業(yè)來講需要有一套機(jī)制,一套辦法來培養(yǎng)程序員。
那么,我們需要從哪些方面來培養(yǎng)程序員呢?大體來講,包括以下幾個(gè)方面:精神、能力、理論基礎(chǔ)、工作方法、工作習(xí)慣。
1、精神
軟件開發(fā)是一項(xiàng)智力勞動(dòng),需要開發(fā)人員很投入的工作,因而需要開發(fā)人員能夠熱愛軟件開發(fā),有工作熱情,有投入的精神。如果一個(gè)程序員缺少一種投入的精神,他不可能在最需要他投入精力的時(shí)候來工作。有的人很聰明,但是他對(duì)軟件開發(fā)沒有興趣,或者他工作很不專心,雜事很多,工作效率很低,別人1天能干完的,他需要3天甚至5天才能干完,而且還漏洞百出,這樣的程序員需要盡早識(shí)別出來,盡早轉(zhuǎn)換工作。
現(xiàn)在的工作環(huán)境對(duì)程序員的誘惑很多,比如游戲、QQ、各種新聞等等,這些誘惑使不能很好處理這些關(guān)系的程序員瀏覽忘返,浪費(fèi)了大量的時(shí)間,降低了工作效率。程序員的業(yè)績很大程度上不是取決于其智商,而是取決于其情商。
2、能力
程序員最主要的能力可以概括為3點(diǎn):良好的邏輯思維能力、良好的溝通能力與良好的學(xué)習(xí)能力。
? 良好的邏輯思維能力
軟件的開發(fā)過程是解決復(fù)雜業(yè)務(wù)邏輯的過程,是簡化復(fù)雜邏輯的過程,是用精確來實(shí)現(xiàn)模糊的過程,開發(fā)人員需要具有良好的邏輯思維能力才能勝任?,F(xiàn)實(shí)空間是模糊的,數(shù)字空間是精確的,在現(xiàn)實(shí)世界中很簡單的問題,在數(shù)字空間中來模擬時(shí),就變成了一個(gè)復(fù)雜的問題。它要求程序員能夠全面、準(zhǔn)確、簡潔地把握問題、分析問題、解決問題。
在筆者接觸過的很多程序員新手中,很少有程序員能將下列的題目解答的完全正確:
畫出解答下面問題的程序流程圖:輸入三個(gè)整數(shù),作為三角形的三個(gè)邊,判斷是否構(gòu)成:等邊、等腰、直角、銳角、鈍角三角形。
這個(gè)題目的邏輯很簡單,需要的處理的邏輯包括:
1 輸入的合法性判斷:輸入的是否是正整數(shù)
2 是否構(gòu)成三角形:任意2邊之和大于第三邊
3 是否構(gòu)成等腰或等邊三角形
4 是否構(gòu)成鈍角、直角、銳角三角形
答題者常見的錯(cuò)誤有:
序號(hào)常見的錯(cuò)誤
1 沒有判斷輸入的合法性
2 沒有判斷是否構(gòu)成三角形
3 判斷為其中一種結(jié)論時(shí)就結(jié)束了,沒有考慮到:等邊三角形也是銳角三角形,等腰三角形可以是鈍角也可以是直角或銳角
4 程序內(nèi)部邏輯復(fù)雜
上邊的題目是一個(gè)很簡單的程序,但是類似的邏輯問題在實(shí)際的軟件開發(fā)中是經(jīng)常用到的,需要程序員能夠?qū)Ω鞣N情況進(jìn)行仔細(xì)的分析、歸納、總結(jié),如果在這樣的問題上出錯(cuò)是很難成為出色的程序員的。
? 溝通能力
現(xiàn)在的軟件越來越龐大,根本不是單兵作戰(zhàn)能解決的,需要多人來協(xié)同工作,比如一套簡單的進(jìn)銷存系統(tǒng)可能就要產(chǎn)生30萬行代碼,按每人天生產(chǎn)100行代碼來估算,也需要3人年,再加上分析、測(cè)試等的時(shí)間,需要6人年才能完成,因此就需要開發(fā)人員具有很好的溝通能力。作為程序員要善于溝通,習(xí)慣溝通。程序員在交流問題時(shí),往往在描述問題是什么時(shí)要花費(fèi)大量的時(shí)間。這種現(xiàn)象在項(xiàng)目組中是經(jīng)常出現(xiàn)的:在給一個(gè)程序員布置任務(wù)時(shí),講清楚任務(wù)比他完成這項(xiàng)任務(wù)花費(fèi)的時(shí)間還要多,而有的程序員自己心里明白,但是說不清楚,或者干脆就不說,這些情況都會(huì)降低整個(gè)團(tuán)隊(duì)的工作效率。
? 學(xué)習(xí)能力
軟件的新技術(shù)發(fā)展很快,開發(fā)人員必須能夠不斷的跟蹤、學(xué)習(xí)新技術(shù),要有很好的學(xué)習(xí)能力。只有善于學(xué)習(xí)的人,才能夠不斷進(jìn)步,在實(shí)踐中快速成長。真正優(yōu)秀的程序員一定是掌握了很好的學(xué)習(xí)方法的程序員,否則現(xiàn)在是優(yōu)秀的程序員,2年后可能就被淘汰了。
3、理論基礎(chǔ)
如果基于.net做多層結(jié)構(gòu)的軟件開發(fā),以下的知識(shí)是必須的:操作系統(tǒng)原理、實(shí)體關(guān)系理論、SQL語句、OO基本理論、數(shù)據(jù)結(jié)構(gòu)、VC++/JAVA、COM/DCOM、ASP/HTML、PSP/TSP/ISO 9000/CMM® 、專業(yè)英語、程序設(shè)計(jì)風(fēng)格等??梢钥闯鋈绻麤]有學(xué)過數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)方法、數(shù)據(jù)庫概論、以及軟件工程的基本知識(shí),要想在現(xiàn)在的環(huán)境下成為一名合格的程序員顯然是很困難的,而且一名熟練的程序員需要的知識(shí)可能還遠(yuǎn)不止這些。掌握了基礎(chǔ)的計(jì)算機(jī)科學(xué)理論,再擁有一定的學(xué)習(xí)能力,才能不斷的進(jìn)步。
4、工作方法
有很多程序員不會(huì)高效率的編寫程序,也不知道如何高效的調(diào)試自己的程序,這不僅僅是對(duì)于工具掌握不熟練的問題,而是沒有掌握一些基本的方法。做為程序員來講需要掌握幾種最基本的方法如:程序的設(shè)計(jì)方法、程序的調(diào)試方法、新工具的學(xué)習(xí)方法等。
在很多程序設(shè)計(jì)的課程中都講解了程序的設(shè)計(jì)方法和調(diào)試方法,但大都是從理論的角度來講解的,而不是從工程的角度來論述的。比如說對(duì)于事件驅(qū)動(dòng)的編程,在程序設(shè)計(jì)時(shí)首先要做的應(yīng)該是窮舉事件,然后再設(shè)計(jì)事件之間的信息共享的機(jī)制,設(shè)計(jì)事件的內(nèi)部處理邏輯等,這些基本的方法往往是程序員迷惑的地方。再如調(diào)試程序時(shí)采用常規(guī)錯(cuò)誤檢查單、單步執(zhí)行、內(nèi)存變量查看等方法。
在實(shí)踐中經(jīng)??吹胶芏喑绦騿T在學(xué)習(xí)一種新的開發(fā)工具時(shí),不知道從何下手,對(duì)老師的依賴性很強(qiáng),總是希望有師傅手把手地來教他,這一方面是個(gè)人的認(rèn)知能力問題,另一方面也說明他沒有掌握基本的學(xué)習(xí)方法,如:
? 在學(xué)習(xí)一種新語言時(shí),先通讀有關(guān)的類、標(biāo)準(zhǔn)函數(shù),過程等,從整體上有個(gè)印象,當(dāng)需要時(shí)可憑記憶查詢資料。
? 類比。 與以前熟悉的語言進(jìn)行類比。
? 詢問他人,互通有無。
? 閱讀示范程序。
? 網(wǎng)上檢索相關(guān)的資料等。
5、工作習(xí)慣
良好的工作習(xí)慣是程序員個(gè)人開發(fā)過程成熟的體現(xiàn),是效率的保證。程序員的培養(yǎng)很大程度上是習(xí)慣的培養(yǎng)。有的程序員總是沒有寫注釋的習(xí)慣,結(jié)果一個(gè)月后他要花費(fèi)很長的時(shí)間才能讀懂自己寫的程序;有的程序員經(jīng)過簡單考慮后就急于去寫程序,往往是把簡單的問題搞復(fù)雜了,復(fù)雜的問題搞亂了,效率很低。對(duì)于一個(gè)好的程序員必須養(yǎng)成一些好的工作習(xí)慣:
? 按照明確的編碼過程工作
職業(yè)的程序員設(shè)計(jì)的時(shí)間長于編碼的時(shí)間,業(yè)余程序員編碼的時(shí)間長于設(shè)計(jì)的時(shí)間;職業(yè)的程序員是設(shè)計(jì)程序,業(yè)余程序員是調(diào)試程序;職業(yè)的程序員是預(yù)防BUG,業(yè)余程序員是修改BUG。為什么會(huì)出現(xiàn)這種情況呢?因?yàn)槁殬I(yè)的程序員一定是按照一個(gè)規(guī)范的編碼過程來工作,編碼的前期工作量超過了其實(shí)際的編碼工作量。在進(jìn)行任何一項(xiàng)編碼工作時(shí),需要按一個(gè)規(guī)范的過程來進(jìn)行。首先要定義清楚做什么,包括功能范圍、接口,任務(wù)要明確,不能似是而非;其次要想清楚如何作,包括數(shù)據(jù)結(jié)構(gòu)、算法;第三,要定義清楚驗(yàn)收標(biāo)準(zhǔn),如何檢驗(yàn)自己做對(duì)了;第四,動(dòng)手編程序、調(diào)程序;最后,測(cè)試程序。按照規(guī)范的過程來編碼,才能真正提高工作效率。
? 編碼之前寫文檔
軟件設(shè)計(jì)文檔是軟件實(shí)現(xiàn)思想的載體,是開發(fā)人員之間、開發(fā)人員與管理之間交流的工具,是設(shè)計(jì)人員與編碼之間、設(shè)計(jì)人員與需求人員之間的一種約定,是組織的軟件設(shè)計(jì)經(jīng)驗(yàn)的積累,是組織軟件財(cái)富的記錄,是軟件復(fù)用的基礎(chǔ)。只有真正認(rèn)識(shí)到了設(shè)計(jì)文檔的重要性,才能積極主動(dòng)的來寫文檔。對(duì)程序員而言,在動(dòng)手編程之前通過寫文檔可以把實(shí)現(xiàn)的方法想清楚、表達(dá)清楚、討論清楚,這是已經(jīng)通過無數(shù)的實(shí)踐來證明了的好經(jīng)驗(yàn)。
初級(jí)的程序員往往在寫程序的過程中發(fā)現(xiàn)越寫越覺的復(fù)雜,程序越改越亂,等真正把工作做完了,再反思一下,卻發(fā)現(xiàn)原來是很簡單的事情,為什么會(huì)有這種感覺呢?問題就在于事先沒有真正想清楚,弄明白,一旦進(jìn)入問題的解決細(xì)節(jié)中,就很容易出錯(cuò)了,所以職業(yè)的程序員應(yīng)該是培養(yǎng)起寫文檔的好習(xí)慣。
? 遵循設(shè)計(jì)進(jìn)行編碼
程序員不能隨意自己決策,不按設(shè)計(jì)人員的設(shè)計(jì)去施工。同一個(gè)問題,可能有多種解決方案,在考慮解決方案時(shí),程序員想的是局部,設(shè)計(jì)人員想的是全局,因而在進(jìn)行決策時(shí),設(shè)計(jì)人員是從全局的角度的考慮問題。在這種情況下,程序員要嚴(yán)格按照設(shè)計(jì)去實(shí)現(xiàn),不能在如何實(shí)現(xiàn)上偏離設(shè)計(jì),造成隱患。對(duì)于設(shè)計(jì)中有疑問的問題,可以討論,但是不可以隨意變更。
? 按照良好程序設(shè)計(jì)風(fēng)格編碼
有人講程序設(shè)計(jì)是一門個(gè)人藝術(shù),他飽含了程序員個(gè)人的創(chuàng)造性,正是這樣,才使得很多程序構(gòu)思精巧,耐人尋味。但是同時(shí)它卻使得程序的可讀性較差,尤其是在多個(gè)人合作開發(fā)一個(gè)軟件時(shí),風(fēng)格迥異的程序使得軟件的可靠性與可維護(hù)性大大降低。程序設(shè)計(jì)語言一方面是人與計(jì)算機(jī)之間進(jìn)行交流的工具,它還是人與人之間進(jìn)行交流的工具。單純的作為人機(jī)交流的工具,只要程序能夠正確地忠實(shí)地表達(dá)設(shè)計(jì)者的思想,也就發(fā)揮了其作用,但是人與人之間的交流沒有一種固定的統(tǒng)一的模式,因此作為人與人之間的交流工具,還要表達(dá)的清晰易懂,能夠?yàn)槠渌绦騿T所理解,這也正式要求程序員講究程序設(shè)計(jì)風(fēng)格的主要原因。
? 維護(hù)好自己的開發(fā)環(huán)境
俗話講:磨刀不誤砍柴工。程序員的工具主要就是計(jì)算機(jī),程序員必須維護(hù)好自己的開發(fā)環(huán)境,常用工具要裝齊,無用的軟件不要裝,要定期殺毒、定期備份,減少非正常停機(jī),確保環(huán)境能夠正常進(jìn)行,保證環(huán)境的干凈,否則就會(huì)因?yàn)榄h(huán)境的問題降低工作效率。
總之,培養(yǎng)程序員是一個(gè)長期的艱苦的過程,程序員是可以培養(yǎng)出來的,卓越的程序員是在職業(yè)的程序員中選出來的。
- 上一篇:如何進(jìn)行需求管理
- 下一篇:如何使用檢查單?