程序员成熟的标志《程序员成长路线图:从入门到优秀》
對好書進(jìn)行整理,把好內(nèi)容共享。
我見證過許多的程序員的成長,他們很多人在進(jìn)入成熟期之后,技術(shù)上相對較高,一般項目開發(fā)起來比較自信,沒有什么太大的困難,有的職位上也有所提升,成了項目經(jīng)理、設(shè)計師,有的甚至是到了管理者的位置。又經(jīng)過很長時間,這些程序員卻在也沒有什么變化和發(fā)展,工作穩(wěn)定、情緒穩(wěn)定,好像一切都在按部就班地進(jìn)行著。有的程序員滿足于現(xiàn)在的收入和職位,安于現(xiàn)狀;有的程序員卻在安于現(xiàn)狀的同時,苦苦思索,卻找不到自己的上升空間。
我想說的是,滿足于現(xiàn)狀的程序員并不能成為優(yōu)秀的程序員,永遠(yuǎn)也不會實現(xiàn)程序員最初那個夢想。而對于那些思索于未來的程序員來說,探索自己的上升空間是一個非常重要的事,有上進(jìn)心的人始終是這個社會追捧的對象。那么這個階段程序員的上升空間在哪里呢?這個問題是仁者見仁,智者見智的問題,同時也是和程序員個體情況相關(guān)的問題。因此,我們可以用嘗試的心態(tài),提出自己的看法和建議:
1、 技術(shù)上的反思和提高
無論程序員個體之間差異有多大,我認(rèn)為程序員上升空間在于技術(shù)上的反思和提高。程序員到了成熟階段,往往有一種狂奔到終點后的那種感覺,身體疲乏無力,特別需要休整再戰(zhàn)。要知道程序員在“奔跑”的時候,一般是在使用自己的體力,很少用到跑步的技術(shù)和技巧。尤其是到最后,更是依靠體力來支撐。從技術(shù)提高的曲線來看,新手的技術(shù)提高速度最快,無論從時間還是急迫性兩個方面對新手的壓力挺大的。而到了成熟階段,其編程時間也大大縮短了和學(xué)習(xí)技術(shù)的迫切性也降低了,所以技術(shù)提高速度就慢下來許多。在現(xiàn)實中,我們真的看到有些年輕的程序員還看不起那些程序員的技術(shù)水平呢,就是這個道理。
因此,成熟的程序員在安頓之后,一定要坐下來反思自己,看看自己的技術(shù)發(fā)展之路,哪些走的比較踏實,哪些走的比較急促;哪些是自己的技術(shù)特長,哪些是自己的技術(shù)薄弱環(huán)節(jié)。反思后一定要抽出時間抓緊學(xué)習(xí),把自己的技術(shù)上明顯不足的地方給補上,這樣程序員的技術(shù)水平加上豐富經(jīng)驗和工作能力會使得自己更加具有實力,可以應(yīng)付各種挑戰(zhàn),為今后的發(fā)展鋪平道路。
而那些順其自然的思想,使得程序員缺少技術(shù)提高的主動性,程序員有明顯的技術(shù)上的問題,也不主動去解決,而是拖之再拖,從而使得程序員的成熟度大打了折扣。
2、 走向軟件設(shè)計師
其實很多程序員走到這個階段已經(jīng)在做軟件設(shè)計師工作了。這是絕大多數(shù)程序員發(fā)展的必經(jīng)之路。因為,程序員在編程序的時候,一方面會實現(xiàn)設(shè)計的功能,另一方面也在對設(shè)計有一個理解、認(rèn)識、熟知的過程。進(jìn)而慢慢地從學(xué)習(xí)別人設(shè)計,轉(zhuǎn)向到自己參與或獨立設(shè)計。如果這個程序員真的非常非常喜歡程序員這個職業(yè),則可以轉(zhuǎn)向軟件設(shè)計師。這個轉(zhuǎn)變很大程度是程序員意識的轉(zhuǎn)變,就是說要把編程的時間,逐步分?jǐn)偟杰浖O(shè)計上,要把重點從編程實現(xiàn)轉(zhuǎn)變到項目的功能設(shè)計上。我這里強調(diào)的是“逐步”的一個過程,程序員要逐步減少編程的時間,增加設(shè)計的時間,要克服編程的強大吸引力,要主動地攀上設(shè)計這個臺階。很難有一個設(shè)計師是完全不編程的,而且我認(rèn)為,會編程的設(shè)計師才是真正的設(shè)計師。一般這種轉(zhuǎn)變需要花上一到兩年時間。
3、 走向項目經(jīng)理
也有一些程序員工作機遇比較好,不但負(fù)責(zé)了項目的設(shè)計工作,而且負(fù)責(zé)了項目管理工作。對項目經(jīng)理這個工作有了一定的嘗試。因此,這類程序員可以審視一下自己,是否合適這項工作。如果自己對這種工作比較滿意,而且具備項目經(jīng)理的要求,則可以向項目經(jīng)理這個方向發(fā)展。項目經(jīng)理承擔(dān)著項目管理的職責(zé),對項目負(fù)主要責(zé)任。它和程序員的作用也不相同,項目經(jīng)理的重點已經(jīng)從編程轉(zhuǎn)移到對人、對技術(shù)、對進(jìn)度、對項目的管理。由于軟件的項目經(jīng)理與軟件項目的相關(guān)性太大,因此,他必須要了解軟件開發(fā)的各個環(huán)節(jié)、了解開發(fā)的各種技術(shù)和運用、了解開發(fā)隊伍人員的水平和特點。所以他依舊和程序員脫不了干系。從程序員到項目經(jīng)理可以使得項目經(jīng)理更好地理解程序員在項目中的地位和作用,了解軟件開發(fā)的各種規(guī)律性的東西。從而保證項目的正常完成。而且,項目經(jīng)理的收入在公司中的地位也是比較高的。因此,我認(rèn)為走向項目經(jīng)理是程序員的另一個發(fā)展空間。我想提醒一下,程序員在擔(dān)任項目經(jīng)理之前最好要把軟件設(shè)計工作做好,這樣在做項目經(jīng)理的時候,就會有很好的基礎(chǔ)。
4、 走向管理者
很多程序員希望自己能成為公司中的主管、經(jīng)理、老總、老板,這樣無論是收入和在公司的地位都相對比較高一些。另外,一方面程序員可能厭倦了年復(fù)一年的編程工作,對工作產(chǎn)生了抵觸情緒,希望能擺脫這種步步緊逼的工作狀態(tài)。走向管理者其實要求程序員要比一般人做更多的準(zhǔn)備,要做更多的轉(zhuǎn)型工作,并不是想當(dāng)管理者就能成為管理者的。但是,如果程序員有這個志向和愛好,有積累了這方面的工作經(jīng)驗,自己也感覺在這個方面能夠發(fā)展,更重要的是有這樣的機會,走向管理者也是可能的。由于軟件公司的管理者畢竟不同于一般公司的管理者,專業(yè)能力越強,管理起來就越得心應(yīng)手的,沒有專業(yè)能力的管理,遇到的問題很多,也很難解決。因此,我的建議程序員最好要把編程、項目設(shè)計、項目管理等基礎(chǔ)打打好。這樣轉(zhuǎn)型到管理者成功率就會高一些。
5、 走向軟件營銷
我一直說,程序員最大的缺點之一,就是眼光只盯在技術(shù)上。程序員在入門階段和成長階段,這種情況還是屬于正常的。但是,到了成熟階段這種缺點將嚴(yán)重影響了程序員的發(fā)展。程序員在工作中不免會接觸到用戶,不免會了解到用戶的需求。從而了解到軟件實際發(fā)揮的作用,進(jìn)而了解了自身的工作價值所在。有的程序員則固步自封,不愿意和外界打交道,從內(nèi)心里堅守技術(shù)底線。有的程序員則喜歡和外人交流,喜歡把自己的軟件推薦給用戶,而且用戶也樂意接受這種專業(yè)的介紹,用戶的接受是程序員價值的直接實現(xiàn),程序員因此獲得了工作成就感。這類的程序員可以將自己的專業(yè)知識和產(chǎn)品營銷結(jié)合在一起,推動軟件的銷售和服務(wù),轉(zhuǎn)向軟件營銷職業(yè)。這個職業(yè)將是一個比程序員更有發(fā)展的職業(yè),它可以直接反應(yīng)程序員的工作能力和工作成果,程序員的收入和銷售會直接掛鉤。因此,可以讓有才華的程序員獲得更高的收入,接觸到更大的軟件市場,看到更廣的個人發(fā)展空間。
6、 原地發(fā)展
當(dāng)然也有一些程序員惰性比較大,滿足于現(xiàn)狀,享受著眼前的勝利果實,也無可非議。對待這些程序員,我們不要強求他們改變自己的想法,我建議是原地發(fā)展,把本職工作做得更好,把自己的技術(shù)水平往上再提高一步。在這個過程中他們的能力和自信心都會得到提高,他們的想法不會一直一成不變的。磨刀不誤砍柴功,刀快了自然會去砍柴的。
7、 跳槽走人
還有一種情況,程序員工作很努力,技術(shù)水平也有很大的提高,工作成績也很突出,但是,公司的工作環(huán)境讓他感覺不好,例如,收入和付出差距很大,而且短期內(nèi)看不到加薪的可能;自己的技術(shù)水平已經(jīng)超出公司開發(fā)所需,英雄無用武之地;公司的經(jīng)營狀況比較差、看不到公司未來;公司的人際關(guān)系緊張,小人當(dāng)?shù)?#xff0c;自己得不到重用等。他可以選擇跳槽走人。要說明的是,這個時候跳槽走人你是有本錢的,這個本錢就是你積累的工作業(yè)績、技術(shù)水平和工作能力。
程序員在成熟期面臨著上升空間的選擇,是上還是不上往往決定了程序員今后的發(fā)展。水往低處流,人往高處走,只要程序員有向上的意識,不滿足于現(xiàn)狀,根據(jù)自身的特點和資源選擇發(fā)展方向,我想程序員一定會有很好的發(fā)展前途。
打工的是指被發(fā)工資的人,“老板”是指發(fā)工資的人。很多人有這樣一個邏輯:老板是有錢人,當(dāng)了老板就有錢了。于是乎當(dāng)“老板”就成了許多人“脫貧致富”的一種理想、一種追求。
程序員經(jīng)過了一個成長期發(fā)展之后,慢慢地成熟起來,原來那種單純地把技術(shù)學(xué)學(xué)好,把工作做做好的想法也有了一些變化。尤其是那些發(fā)展較好的程序員(最好是一個人能獨立開發(fā)軟件的程序員),他們一方面從編程技術(shù)上提高很快,另一方面在項目設(shè)計、項目管理上也開始了嘗試。最重要的是他們看到了軟件銷售的金額和軟件銷售的市場。他們發(fā)現(xiàn)只要能把軟件開發(fā)出來,然后把軟件賣了出去,自己也能開公司當(dāng)老板。尤其是當(dāng)自己的報酬和自己創(chuàng)造出的價值相差巨大的時候,這種當(dāng)老板的念頭更加強烈。
我記得“不想當(dāng)將軍的士兵不是好士兵”這句名言,對于程序員去當(dāng)老板,我舉雙手贊成。在中國就是缺少那些有理想,有闖勁的創(chuàng)業(yè)精神。看看全國那么多人熱衷于報考公務(wù)員,我們就可以想象這個國家人們在追求的是怎么樣的生活了。從這個角度上來說,程序員無論是在心中想當(dāng)老板的,還是真正邁出當(dāng)老板一步的,都是值得那些不想當(dāng)老板的程序員尊敬的。畢竟,我們更崇尚那些有理想、有勇氣的人。
很多人認(rèn)為這個人當(dāng)老板是不會成功的,但這個人卻成功了;很多人認(rèn)為這個人當(dāng)老板一定會成功,但這個人卻失敗了。這些例子比比皆是。這說明當(dāng)老板并沒有一定的要求,每個人去當(dāng)老板都可能有其當(dāng)老板的理由;不是局中之人是沒法體會的。所以,對自己不了解東西,不要輕易地給出自己的判斷。市場之中,一切皆有可能。
在我身邊的程序員也有去當(dāng)老板的,有成功的,也有失敗的。在這么多年IT歲月里,我也特別留心各種程序員當(dāng)老板的各種報道,總想從中悟出什么道理出來。很多人就是從軟件單價*銷售個數(shù)得出的巨大金額而動心去當(dāng)老板的。例如,程序員預(yù)計這個軟件單價為2萬元,可能的用戶有100個,2*100=200萬。程序員就會為這200萬而下定決心去當(dāng)老板了。
我認(rèn)為程序員當(dāng)老板應(yīng)該注意以下幾個問題:
1、 要有堅定的信念
要想當(dāng)老板,不能只想不做,或者今天想做,明天又不想做了,反反復(fù)復(fù),猶猶豫豫,當(dāng)老板的機會就會喪失了。要做,那就要堅定信心,精心準(zhǔn)備。準(zhǔn)備越充分,信心就會越充足。
2、 要有獨立開發(fā)能力
當(dāng)軟件公司的老板,并不需要太多的資金。開始的時候,一般只有一個人,或是幾個人就能開張了。正是因為如此,當(dāng)老板的一定要具有獨立的開發(fā)能力,有了開發(fā)能力,才能保證開發(fā)周期,才能保證按時向客戶提供軟件。否則,依靠創(chuàng)業(yè)伙伴或招收新員工都有很大可能在規(guī)定的時間內(nèi)完成不開發(fā)任務(wù)的,或保證不了軟件質(zhì)量的。這樣會造成創(chuàng)業(yè)的失敗。
3、 要有強烈的市場意識
當(dāng)老板首要的條件就是要具備市場意識,具備市場意識,意味著程序員要把工作重心轉(zhuǎn)移到軟件用戶在那里?軟件能賣多少錢?軟件能否銷售出去?成本是多少?利潤是多少?是賺是虧?諸多方面。如果這種意識不強烈,腦子里還是考慮到程序怎么編?程序要采用什么新技術(shù)?,程序要有什么技術(shù)含量?這些技術(shù)問題上,那這種程序員真的不能當(dāng)老板。因為當(dāng)老板應(yīng)該把絕大多數(shù)時間放在市場上,這樣市場上才有可能給你回報。就如同程序員把大部分時間放在程序上,程序員的編程技術(shù)才會提高。
4、 要有客戶資源
很多創(chuàng)業(yè)者一般都會有一兩個客戶的,他們會理所當(dāng)然地認(rèn)為,同類的客戶都可能是自己的用戶。其實這是一個很大誤區(qū)。潛在的客戶并不是很容易地成為自己的用戶的。不少創(chuàng)業(yè)者做了一兩單子后,就是缺少持續(xù)的用戶而堅持不下去了。所以,當(dāng)老板一定要首先考慮你的客戶在那里,要營銷多少客戶公司才能維持下來,怎么樣才能營銷出這么多的客戶。
5、 要有克服困難的準(zhǔn)備
從現(xiàn)實的角度上來問題,開公司當(dāng)老板并非易事,我和軟件公司的老板們有過交談,他們的苦衷、苦水、苦頭。
6、 要有凝聚力
凝聚力是非常重要的,在創(chuàng)業(yè)初期,除了要明確合作伙伴與公司之間的承諾、開發(fā)人員與公司之間的用工協(xié)議之外,還要把他們凝聚在一起,使大家為了一個目標(biāo)而共同奮斗。這種凝聚力取決于領(lǐng)頭者要具有那種素質(zhì),那種能力,給與同伴以信心,給以同伴以信任,給以同伴以支持,給以同伴以榜樣。
7、 要有管理能力
當(dāng)老板要有管理意識和管理能力,開始的時候,程序員的角色還沒有轉(zhuǎn)變。以前是別人要自己干什么,自己處于一種被動和等待狀態(tài);現(xiàn)在則是要求別人干什么,自己處于一個主動和積極的狀態(tài)。管理意識則要在創(chuàng)業(yè)前就要有所準(zhǔn)備,管理能力是逐步提高的。隨著企業(yè)的發(fā)展,管理越來越重要,不重視管理、不具備管理能力,企業(yè)就會很快垮掉的。
8、 要有溝通能力
這里的溝通能力,主要是創(chuàng)業(yè)者的外部溝通能力。程序員由于長年和計算機打交道,客觀上和主觀上與外部人員接觸比較少,因此,其溝通能力是比較弱的。但是,當(dāng)老板必須要有溝通能力,才能了解到市場信息、才能把自己的產(chǎn)品介紹給客戶,才能進(jìn)行商務(wù)談判定下合同。
總的來說,程序員在成熟之后,未嘗不可去當(dāng)老板。但是,在此之前,要做些當(dāng)老板的準(zhǔn)備。準(zhǔn)備越充分越好。即使失敗了,也可以重新去找工作,也可以再一次等待當(dāng)老板的機會。
程序員在經(jīng)歷了若干年編程工作之后,很想知道自己水平到底如何?自己是否已經(jīng)成為成熟的程序員?雖然程序員會對自己有一個自我評價,但是,自己的評價和社會的評價、專業(yè)的評價會有差異,所以程序員自己并不能肯定這個評價。現(xiàn)實中,除了各種證書之外,很少有人會專門給出一個程序員的成熟度的評價。人們往往是偶發(fā)性地就事論事地對程序員的工作作出好與不好,行與不行的評論。因此,程序員對此感到很茫然,不知道要從那些方面去評價自己的能力。
一個程序員到底成熟不成熟,我想從以下幾個方面談?wù)勛约旱目捶ā?/p>
1、技術(shù)標(biāo)志
如果程序員不會編程序那決不是程序員,程序員至少要掌握一門程序設(shè)計語言,要能夠用這種語言去編寫程序去解決他想解決的問題。但是,成熟的程序員往往掌握不止一種程序語言,三到四種語言的掌握是必須的,一種二種語言的精通也是必須的。
除了從掌握程序設(shè)計語言個數(shù)之外,我們還可以從其他幾個方面去看看程序員在技術(shù)上水平。例如,函數(shù)編寫能力(命名、格式、大小、分類、參數(shù)、復(fù)用等),面向過程的能力,面向?qū)ο蟮哪芰?#xff0c;數(shù)據(jù)庫技術(shù)能力,效率處理能力,安全處理能力,網(wǎng)絡(luò)處理能力,軟件構(gòu)架能力,人機交互能力,通用軟件能力,軟件文檔能力等等。尤其是面向?qū)ο蠹夹g(shù)的掌握和運用,以及面向服務(wù)的技術(shù)都是成熟程序員所必需掌握的。
2、時間標(biāo)志
雖然程序員的天資、素質(zhì)、基礎(chǔ)知識各不相同,所經(jīng)歷的工作內(nèi)容以及環(huán)境也不相同,但是,時間也是程序員成熟程度的標(biāo)志之一。一般程序員需要經(jīng)過三到五年的時間才能日趨成熟。其中入門需要一年,成長需要兩年。這是我經(jīng)過長期觀察得到平均數(shù)據(jù)。我并不認(rèn)為成熟時間越短程序員就越聰明,就越了不起。享受每個階段充分的時間,會讓自己成長更加充實、更加成熟。當(dāng)然,也有超期而不成熟的情況,這也是很正常的。
3、項目標(biāo)志
程序員的社會性是程序員成熟的標(biāo)志之一。沒有參加過項目的程序員,程序編得再好,只能是純程序類的程序員,是一個孤獨的高手,是一種個人型的程序員,遠(yuǎn)沒有成熟。項目作為社會性活動,體現(xiàn)了項目的社會價值。所以項目能力也是程序員成熟的重要標(biāo)志之一:項目能力包括參加項目的個數(shù)、項目的大小、在項目中承擔(dān)的角色等等。就項目承擔(dān)的角色而言,主持開發(fā)(項目經(jīng)理)3個以上項目是必須的,這是一個必要條件。一個程序員如果沒有主持過開發(fā),無論參加過多少項目的開發(fā),無論是在程序編寫或項目設(shè)計上發(fā)揮了多大的作用,是很難被稱之為成熟的,因為項目的組織、協(xié)調(diào)和管理是反映一個程序員成熟程度的又一個標(biāo)志。就如同一個程序員能參與過10個以上大大小小的項目或能參加或能主持兩個以上大型項目的開發(fā),其成熟程度是可以信賴的。若低于此數(shù),則說明程序員離成熟還有相當(dāng)?shù)目臻g。“我們在項目中成長”可見項目對于程序員的意義是多么的巨大。
另外,一般程序員只是為一個企業(yè)客戶進(jìn)行開發(fā)一個或多個項目,或同行業(yè)的企開發(fā)項目,如果程序員能夠如果程序員能夠開發(fā)過多個行業(yè)的項目,其成熟度要比一般人要高一些。
4、思維標(biāo)志
幼稚和成熟在思維方式上還是有很明顯的區(qū)別的。就程序員而言,不成熟的程序員邏輯性不強,程序編得沒有條理,即使程序員自己進(jìn)行了解釋也沒人能看懂。而成熟的程序員應(yīng)該具有很強的邏輯性,程序編得井井有條,不用解釋別人也能看得懂。這種邏輯性還體現(xiàn)在軟件的構(gòu)架設(shè)計、數(shù)據(jù)庫設(shè)計、算法設(shè)計等多個方面。程序員通過全集子集概念、時間概念、順序概念、重點非重點概念等對各種事物進(jìn)行邏輯分析。例如,以順序概念為例,不成熟的程序員往往會采用自底向上的思維方式來開發(fā)程序。他們先考慮程序的具體實現(xiàn),然后再考慮功能設(shè)計、最后考慮構(gòu)架設(shè)計。而成熟的程序員則采用自頂向下思維方式,先考慮構(gòu)架設(shè)計、再考慮功能設(shè)計、最后才考慮編程的具體實現(xiàn)。前者思維方式主要是出于工作慣性,只適合入門階段,而后者思維方式反映了后者的進(jìn)步,適用于各種項目開發(fā)或大型項目的開發(fā)。
除了在思維內(nèi)容上的邏輯性之外,程序員還應(yīng)該處理好動腦和動手的關(guān)系。重視思維本身就是一種成熟的標(biāo)志。成熟的程序員的思考時間要大于動手編程時間,想好之后只要一次就編程成功,而不成熟的程序員往往動手編程時間要遠(yuǎn)大于思考時間,而且是邊做邊想,通過反復(fù)來逼近最終目標(biāo)。
另外,在思維范圍上,成熟的程序員要比普通的程序員有更開放視野。他們更容易去接受新的東西,更容易不受各種約束去考慮問題,更勇于去挑戰(zhàn)自己和高手。
5、與人交往
很多人認(rèn)為程序員是和計算機打交道的行業(yè)。這只是這個職業(yè)的特點。但是,只要是工作必然就是一種社會勞動。而社會勞動則必須和人進(jìn)行交流和溝通。盡管程序員的勞動工具是計算機,但并不意味著程序員只想著這個工具。從這個工具的下游來看,程序員還是要考慮用這個勞動工具生產(chǎn)出來的軟件產(chǎn)品是否有人購買,是否有人使用,是否運行正常,從這個工具的上游來看,是誰讓程序員了解設(shè)計方案的,是誰讓程序員編程序的,是誰讓程序員程序通過驗收的等等。因此程序員在軟件制作各個環(huán)節(jié)都會與其他人打交道。只有和人進(jìn)行有效的交流和溝通我們的工作才能進(jìn)行下去才能做的更好。
如果一個程序員還沉浸在個人勞動的意境之中,對外界持有冷漠、無奈、恐懼的心理,內(nèi)心里不愿意和外界打交道,無論自己感覺自己的技術(shù)水平有多高,還是一個不成熟的程序員。而成熟的程序員一定是特別重視與人的交往,無論是上級領(lǐng)導(dǎo)、外部客戶、項目經(jīng)理、團隊同伴這些與自身工作密切相關(guān)的人還是那些非同單位同行朋友、網(wǎng)友等他們都會認(rèn)真去聽取別人的闡述、要求、意見、建議、反饋等。從中得到更多的工作上的、技術(shù)上的、生活上的好的想法,以便自己參考和吸收。與此同時,與人交往也反映你有好的想法和好的技術(shù)水平交流出去,而這些想法和技術(shù)水平也是你成熟度一種反映。那些沒有想法和技術(shù)水平的程序員的確是怕和別人交流的。
與人交流的有兩個基本能力,一個是理解能力,一個是表達(dá)能力。兩者缺一不可。例如,有的程序員理解能力差,不能理解項目經(jīng)理提出的要求,有的程序員表達(dá)能力差,無邏輯,無重點,啰里啰唆,讓別人不知所云。這都是不成熟的表現(xiàn)。
6、別人評價
別人的評價尤其是單位同事以及對自己工作情況比較了解的人對自己的評價是有參考價值的。一般而言,評價差的,一定是不行的,是不成熟的。評價好的要看情況而定,單位同事對人的評價會從兩個方面來考慮,一個是這個人的為人情況,一個是這個人的工作能力。如果兩者都不錯,我們有理由認(rèn)為這個程序員是成熟的。反之,無論是工作能力強,但為人不好,為人很好,工作能力不強,我看都不能算一個成熟的程序員。
所以,程序員要注重別人對自己的評價,在提高自己技術(shù)水平的同時,學(xué)會做人,做好人,學(xué)會與他人分享,這樣別人才會給自己更好的評價。
無視別人評價其實,也是一種不成熟的表現(xiàn)。只有自己感覺好,大家感覺好,那才是真的好。
其實,別人的評價如果僅限于自己單位的話,恐怕這種評價的價值會打折扣,如果這個單位技術(shù)人員的人數(shù)很少,水平普遍很低,即使你鶴立雞群,大家對你的評價很好,但是,你和其他公司和單位的程序員來比,你真的不一定的成熟。所以,我說別人的評價僅僅是一個參考。
7、收入標(biāo)志
收入也是成熟程序員一個參考標(biāo)志。收入的大小往往是對程序員社會價值的認(rèn)可度,表明程序員的勞動值這個價錢。一般而言,成熟的程序員能夠掙得軟件業(yè)平均收入的中上水平,或者在一個單位或部門中能夠掙得比80%左右員工要高的收入。而剛參加工作不久的程序員收入應(yīng)該與其相差很大的。另外,單位的項目獎金發(fā)放也可以看出程序員在項目中的地位和作用。
現(xiàn)實中,我們知道程序員的收入和其付出是不是正比的,而且,越是能力強的、貢獻(xiàn)大的程序員,可能不一定比那些不如其它能力不如他的程序員高出許多。這不是軟件行業(yè)的通病,幾乎所有行業(yè)都存在這種情況。通過分析我們認(rèn)為程序員成熟度應(yīng)該是和其收入高低掛鉤的。如果,我們知道我們能力和貢獻(xiàn)大大超出我們的收入,我們就有理由向上級領(lǐng)導(dǎo)提出自己的收入要求。
8、心理素質(zhì)
程序員常常面對各種各樣的成功和失敗,尤其是失敗更是多于成功,這也是程序員這個職業(yè)特點之一。以編程為例,幾乎沒有一個人一次就能把程序給編好的,它總是要遇到各種語法錯誤,總要遇到各種遺漏,一個程序要反復(fù)多次修改調(diào)試才能完好。有的程序員因找不出來程序的bug,束手無措,哀聲嘆氣,心里極其不爽。以工作為例,有的程序員因工作進(jìn)度和程序出錯常常受到別人的批評和指責(zé),心里極其不滿,認(rèn)為批評人不了解造成這個結(jié)果的客觀原因,批評錯了人。從而對人產(chǎn)生意見,甚至對工作造成了影響。面對失敗和挫折,成熟的程序員會坦然面對:編程時出現(xiàn)問題不可怕,有什么問題就解決問題,解決不了的問題可以想其他方法進(jìn)行解決,不在一棵樹上吊死。面對別人的批評和指責(zé),首先從自身查問題,是自己的問題,那就要主動承擔(dān)責(zé)任,并盡快改正。不是自己的問題,應(yīng)該換位思考,理解批評人的焦急心態(tài),并找機會給予說明。良好的心理素質(zhì)在面對困難和挫折的時候,就會很坦然,很堅強,很自信。
程序員也會面對成功的。有些程序員因開發(fā)了某個項目,因編寫了某個程序而感覺良好,在不自覺中表現(xiàn)出我最牛,我最好的樣子,面對他人夸夸其談,而對其他人不屑一顧。而更有甚者并其無成果,表現(xiàn)平平,卻依然會擺出一個高手的樣子,有的僅僅參與了某個項目,而且不是項目主要開發(fā)者,卻會貪天之功,歸其所有,好像這個項目是他主持開發(fā)的。這些其實也是心理素質(zhì)不成熟的另一種表現(xiàn)。成熟的程序員面對成功并不會感覺到高人一等,該是自己的功勞就是自己的功勞,該是別人的功勞就是別人的功勞,即使自己比別人水平高出許多,他還是在想還有更高的技術(shù)頂峰等待攀登,不可自傲,看到別人取得的成績首先感到去祝賀,然后去學(xué)習(xí),而不是心懷嫉妒,從中挑刺,盡量貶低。
良好的心理素質(zhì)使得程序員更加理性地處理好各種成功和失敗帶來的各種問題,更有利于程序員超越自我,以平常之心去迎接更大的挑戰(zhàn)。
當(dāng)然一個程序員是否成熟是一個仁者見仁,智者見智的話題。有的人強調(diào)程序員的個人能力方面,有的人強調(diào)是程序員的社會能力方面。我認(rèn)為從以上8個方面綜合地去評判一個程序員是否成熟應(yīng)該能說明些問題了。我們標(biāo)志成熟,一個目的是對程序員前面成長過程給與一個肯定和鼓勵,讓程序員認(rèn)清自己的所處的階段,讓自信找出依據(jù)。另外一個目的是對程序員未來成長提出更高的要求。走向優(yōu)秀是程序員面臨的更大的挑戰(zhàn)。
很多程序員到了成熟階段后,就會處于一個停滯狀態(tài)。技術(shù)上已經(jīng)駕輕就熟,工作上已經(jīng)按部就班,心里雖然感覺有些不甘,但是何去何從他們顯得很茫然很無助。我認(rèn)為程序員到了成熟階段后,如果還想要向優(yōu)秀階段發(fā)展,一定會遇到這個瓶頸的,穿過這個瓶頸就會走進(jìn)另一片開闊的前景,穿不過則會停留在原地止步不前。
1、技術(shù)瓶頸
技術(shù)上的瓶頸是很明顯的,主要表現(xiàn)在,對學(xué)習(xí)缺乏熱情,對技術(shù)缺乏鉆研,對新技術(shù)發(fā)展缺乏了解等三個主要方面。其中原因主要是:第一,成熟的程序員編程技術(shù)已經(jīng)能夠滿足開發(fā)軟件的要求,很多人認(rèn)為只要能編出來就行了,至于編得更好,那就要看興趣了,看時間允許了。第二,由于成熟程序員承擔(dān)著比一般程序員更多的工作,比如軟件設(shè)計和項目管理,比如和用戶打交道、和領(lǐng)導(dǎo)打交道,很多時間精力無法放在編程上面。第三,由于軟件開發(fā)任務(wù)一般都比較緊,工作起來必須加班加點才能完成,因此,沒有時間再做技術(shù)上的深入。第四,很多程序員處于一個自發(fā)的發(fā)展?fàn)顟B(tài),自己的成長完全取決于自己工作內(nèi)容,工作內(nèi)容強度和復(fù)雜程度決定了其技術(shù)水平的高低,因此,他自己根本不知道自己技術(shù)發(fā)展的方向是什么,技術(shù)上的差距是什么,也就無從談起自己的努力的方向。
因此,成熟的程序員應(yīng)該有更上一層樓的意識,千萬不要固步自封,夜郎自大。首先要對自己在技術(shù)上有一個客觀的分析,看看自己的長項在什么地方,弱項在什么地方。對自己的弱項就要想辦法進(jìn)行克服,千萬不要留在那里,日后必然會影響自己的進(jìn)步。比如,很多人弱項在面向?qū)ο蟮脑O(shè)計方法,人機界面交互,大數(shù)據(jù)量處理,處理效率等,如果有這些方面的問題就要想盡辦法去解決。其二,要注重編程基礎(chǔ)技能的深入掌握,很多時候程序員只是拿來主義,知其然不知所以然,把基礎(chǔ)缺失的那個部分再補回來,為今后向更高的技術(shù)境界打下基礎(chǔ),比如像操作系統(tǒng),網(wǎng)絡(luò)知識、程序設(shè)計語言、數(shù)據(jù)庫、系統(tǒng)構(gòu)架、軟件工程等基礎(chǔ)知識,要重新審視,把其中有用的知識掌握好,并且要學(xué)會把各種基礎(chǔ)知識給串聯(lián)起來,加深對基礎(chǔ)知識的認(rèn)識。其三,要逐步把編程技術(shù)從功能實現(xiàn)方面轉(zhuǎn)向參數(shù)化設(shè)計、軟件構(gòu)架等高級階段方面的研究,在共享、通用、標(biāo)準(zhǔn)化方面有所建樹。
2、工作上瓶頸
程序員在工作上也存在向上的瓶頸。就一般而言,很多程序員在這個階段工作上比較穩(wěn)定:領(lǐng)導(dǎo)對自己相對比較了解和信任,同事對自己的工作能力和技術(shù)水平也比較認(rèn)可,軟件用戶對自己的服務(wù)也相對比較滿意。因此,在充滿工作上的滿足感的同時,工作上日復(fù)一日,沒有什么新意,疲倦感油然而生,而以往那種激情很少有地方釋放了。所以,程序員有時也會思考自己在工作上究竟要在什么地方進(jìn)行突破,究竟怎么才能更上一層樓。
程序員在工作上的現(xiàn)狀,還是來自于軟件公司或部門上級的安排所致,盡管自己在具體工作上付出很多,編程上有很大的自主權(quán),但是從總體上來看,程序員只是企業(yè)經(jīng)營過程中的執(zhí)行人員,是一個被動的角色。因此,程序員要改變工作上的現(xiàn)狀,程序員必須要有主動意識,盡可能主動地規(guī)劃好自己的發(fā)展方向,主動地向上級反映自己的想法和打算爭取上級的理解和支持,在工作條件許可的情況下,把自己的時間和精力以及主點放在自己關(guān)心的方面。例如,程序員感覺自己編程方面已經(jīng)滿足工作要求了,但是自己與客戶打交道的能力,市場資源的積累很差。他就可以向主動上級提出自己想做售前工作,如果領(lǐng)導(dǎo)同意,則可以在這個崗位上,提高自己這方面的能力。在崗位不調(diào)整的情況下,可以根據(jù)自己的工作范圍,盡可能多多和客戶打交道,了解客戶的需求,從而為自己開發(fā)的項目做好基礎(chǔ),同時通過與客戶打交道和客戶交朋友,為自己的市場資源做些積累。其實在工作層面上可以有很多值得改進(jìn)的地方的。
3、收入上瓶頸
說到底程序員最大得瓶頸在于收入上的瓶頸,雖然經(jīng)過多年的努力奮斗,收入也有了一定得提高,有的甚至達(dá)到了社會平均收入的中上水平。但是,面對中國的生活現(xiàn)實,買一套房需要花光幾十年得收入(即使按揭還是要每月償付本息的),而且工作很難穩(wěn)定到幾十年不變(除非是公務(wù)員)。因此,絕大部分程序員的收入是很難滿足那種程序員向往的生活,尤其是過上中等生活的要求和過上穩(wěn)定生活的要求。當(dāng)然,例外總是有的,極少的程序員收入也是相當(dāng)高的,生活過的很滋潤。就普遍情況來看,我們付出的和得到的是不成比例的,這不能不說是社會的一種悲哀。回到某個程序員具體情況來看,程序員的收入一般比較穩(wěn)定,有的一年動一次,有的幾年動一次,這要看所在各公司情況和所在單位部門情況而定。程序員和其他職業(yè)的員工一樣很少在工資收入方面有自己的話語權(quán)。
程序員經(jīng)歷了成長過程的風(fēng)風(fēng)雨雨之后到了成熟階段,收入應(yīng)該比過去高了許多。但是程序員的預(yù)期和實際收入的反差是程序員內(nèi)心最大的煩惱,因此,增加收入或大幅度增加收入是程序員無法突破得瓶頸。
面對收入瓶頸,程序員應(yīng)該調(diào)整心態(tài),光靠埋怨是絕對無用的。要解決這個問題,程序員可以從以下幾個方面來考慮。第一,程序員可以本公司部門進(jìn)行收入增加的挖潛,可以主動提出調(diào)整到收入高的崗位,可以參加高獎金的項目開發(fā),凡是能夠增加收入的各種工作都可以考慮去做。第二,在這個基礎(chǔ)上,如果程序員感到自己的收入還是無法達(dá)到自己的預(yù)期,不妨可以考慮離開這個公司或部門,通過應(yīng)聘高薪工作的方式來提高自己的收入,當(dāng)然這種選擇還是要慎重的,要考慮多方面的影響,很多情況下收入不是唯一的因素,未來收入和現(xiàn)有收入很小的差距更是忽略不計的因素。第三,程序員在條件和精力的許可的情況下,可以從事一些第二職業(yè),由于程序員這種職業(yè)特性,程序員可以獨立完成某個編程任務(wù),也可以和其他人共同完成編程任務(wù)的,通過從事第二職業(yè),程序員可以增強市場意識,可以比本公司、本部門知道更多的軟件的價值,結(jié)識更多的軟件同行,學(xué)習(xí)更多編程技術(shù),并且獲得相應(yīng)的勞動報酬。更重要的是在此期間可能會遇到自己發(fā)展的機遇。
滿足現(xiàn)狀的程序員就不可能遇到這些瓶頸,他們會在一個自己的世界中得到滿足,他們會在這種滿足下持續(xù)自己的工作,求得一份平靜的生活。而那些不滿足現(xiàn)狀的成熟程序員,那些追求優(yōu)秀的程序員,因追求而困惑,因瓶頸而求突破。程序員只要不甘于現(xiàn)狀,只要認(rèn)定一切要靠自己,只要準(zhǔn)備付出比過去能多精力,只要準(zhǔn)備克服比過去跟多的困難,只要求新求變,最終都會破繭成蝶的。那絢麗的天空下,那自由飄飛的彩蝶正是他們未來的身影。
從技術(shù)層面上來看,優(yōu)秀程序員和一般的程序員相比,其中一個重要區(qū)別就是重心從程序制作轉(zhuǎn)變到構(gòu)架制作。絕大部分程序員關(guān)心的是如何將各種各樣的需求通過計算機語言進(jìn)行編程實現(xiàn)。因此他們有三個方面的重點:需求、編程、需求到編程那個過程。所以他們的主要精力在用于需求是什么?需求怎么變成功能設(shè)計?如何實現(xiàn)功能的程序編寫?他們的出發(fā)點是需求,終點是程序。
隨著我們編寫程序的數(shù)量增多,我們慢慢地會發(fā)現(xiàn)有兩條主線同時在運動,一條是用戶需求,一條是程序編寫。就用戶需求而言,我們就會發(fā)現(xiàn)不同用戶的項目之間的需求比較類似,做的越多我們看到相同的需求或類似的需求就越多。在程序編寫方面,我們面對相同需求或類似需求的時候,就會自然用原來的程序或用原來的程序進(jìn)行修改來完成了。同理,程序編寫的越多,我們用到的原來的程序的次數(shù)就越高。這種現(xiàn)象是和需求趨同的規(guī)律是一致的。在項目開發(fā)過程中,我們就會自然而然地將相同的需求用相同的程序來完成。于是,我們就會產(chǎn)生了需求和程序之間的對應(yīng)關(guān)系。例如,我們想要在A項目中檢查一下用戶的權(quán)限,我們自然就會想起以前在B項目編寫過的check_usr_right這個函數(shù)。于是我們就會把這個函數(shù)拷貝過來用在A項目之中。雖然,拷過來的函數(shù)并不能完全滿足項目A檢查用戶的權(quán)限要求,我們可以對check_usr_right函數(shù)進(jìn)行改造,這樣就成了新的check_usr_right函數(shù)了。如此一來,我們就會積累出很多相同的程序,這些相同的程序表現(xiàn)為公用函數(shù)、控件、類庫等。這種編程方法和最初一心實現(xiàn)需求、采用原始的連續(xù)性編程方式相比,開始考慮了軟件構(gòu)架問題了。
那么什么是軟件構(gòu)架?軟件構(gòu)架就是站在軟件自身角度上(而不是站在需求角度上)編制軟件的技術(shù)方法。通俗地說是軟件之上的軟件。如果我們一個窗戶看作一個項目,那么窗框就可以看作成構(gòu)架,而窗框里的小框和玻璃以及玻璃上的貼花和貼膜,則可以看作小構(gòu)架和構(gòu)架下的各種功能。我們可以看到,窗戶的形狀(方形,長方形、半圓形、異形等)是由窗框決定的,而窗框中的小框和玻璃等是在窗框范圍之內(nèi)的。因此,我們可以這樣認(rèn)為,軟件構(gòu)架決定了這個軟件的大范圍和構(gòu)架,而其中的功能軟件則是在這個構(gòu)架之下的功能實現(xiàn)。
既然我們知道軟件構(gòu)架是軟件之上的軟件,那么軟件構(gòu)架和我們一般程序有什么不同呢?我認(rèn)為其不同之處在以下幾個方面。
1、 抽象和具體之間的差別
一般程序主要是解決具體的需求,形成一個具體的功能。比如,要計算1+2等于幾,非常之具體,程序員容易理解。而軟件構(gòu)架并不針對一個具體的需求,比如,要進(jìn)行算術(shù)表達(dá)式處理。當(dāng)然這個算術(shù)表達(dá)式的處理,也可以處理1+2等于幾的需求,但是,這個算術(shù)表達(dá)式是抽象的,并沒有具體的需求,但是能處理具體需求。
2、 大和小之間的差別
一般程序主要是解決具體的需求,程序很小,功能點也比較直接,并不復(fù)雜。而軟件構(gòu)架則是軟件之上的軟件,考慮問題比較多。例如,它要考慮軟件的整體的一個構(gòu)架,構(gòu)架中的各種模塊的功能,構(gòu)架中的模塊之間的關(guān)系和接口,構(gòu)架怎么與具體程序相聯(lián)系等各種問題。因此,構(gòu)架程序量是很大的,功能也相對復(fù)雜。
3、 高和低之間的差別
一般程序在解決需求時并不會去給軟件分層,最多是按B/S,C/S,或者是按表示層、邏輯層、數(shù)據(jù)層三層構(gòu)架來進(jìn)行程序分層。另外,一般程序只要能滿足具體需求就OK了,其技術(shù)上的并沒有硬性的要求。但是,軟件構(gòu)架就不同了,它是將軟件進(jìn)行了分層處理,最上面是構(gòu)架,最下面才是具體功能。因此,軟件構(gòu)架對技術(shù)要求相對是比較高的,比如程序的結(jié)構(gòu),程序的效率,程序的通用性和擴展性,程序的并發(fā)處理、程序的例外處理等等。這樣有了軟件構(gòu)架概念之后,軟件就分為構(gòu)架軟件和具體軟件兩個部分了。構(gòu)架軟件處于上層,可以應(yīng)用于各個項目,而具體軟件或稱具體程序則處于下層,這個具體程序和我們現(xiàn)在所說的一般程序很接近,這兩者結(jié)合形成了具體的項目或系統(tǒng)。
4、 全面和局部之間的差別
一般程序主要是解決一個項目的某個具體需求,因此,它體現(xiàn)出程序的局部性,所以一個項目可以給不同的程序員去完成。軟件構(gòu)架在設(shè)計時或者在制作時,則是站在全局的高度來審視整個抽象的項目,一方面要考慮構(gòu)架本身的功能,另一方面要考慮到如何向具體程序提供合適的接口。這兩個方面都需要對項目或軟件有一個整體認(rèn)知,而不僅僅限于某個局部。
當(dāng)然以上的差別是非常宏觀的,并不很具體。但是,有一點是可以肯定的,那就是軟件構(gòu)架制作是和一般程序編寫不同的。這一點需要程序員去細(xì)心地體會的。如果一個程序員沒有軟件構(gòu)架的意識,只是滿足于停留在一般程序編寫的優(yōu)劣之中,那是很難進(jìn)入優(yōu)秀程序員行列之中的。那么什么是軟件構(gòu)架的主要內(nèi)容呢,程序員應(yīng)該關(guān)注那些問題呢?
1、 構(gòu)架意識
意識,我仍然在強調(diào)意識的重要性。沒有對某個事物重要性的意識,就不會關(guān)注和研究這個事物,就不會去主動掌握這個事物,就不會利用這個事物去創(chuàng)造更大的價值。同理,如果我們的程序員沒有構(gòu)架意識,就會在普通程序員中求得那種優(yōu)越感,時間一長就感到自己在軟件中沒有可以發(fā)展地方。而有了構(gòu)架意識,我們的程序員就可以在原有的編程基礎(chǔ)上,向更高層面發(fā)展,那里有更大的空間需要我們?nèi)W(xué)習(xí)和展示自己的才華,可以說構(gòu)架領(lǐng)域中的學(xué)識和技術(shù)是沒有止境的。
2、構(gòu)架制作
光有構(gòu)架意識還不夠,還要讓構(gòu)架從設(shè)計走向程序,這就需要進(jìn)行構(gòu)架制作,也就是說我們要編制構(gòu)架程序。而編制構(gòu)架程序,就涉及到具體的程序設(shè)計語言,涉及到具體程序語言的特性、涉及到具體程序設(shè)計語言的編程技術(shù)和技巧。這些編程需要程序員要有很扎實的編程基本功,很高的程序設(shè)計的技巧,以及程序編制的豐富經(jīng)驗。構(gòu)架制作絕大部分都是面向?qū)ο蟆⒚嫦虺橄蠊δ堋⒚嫦蛲ㄓ谩⒚嫦騾?shù)化的編程。
3、 構(gòu)架應(yīng)用
我們不能為構(gòu)架而構(gòu)架,我們編制構(gòu)架的其中目的,就是可以更快、更好、更節(jié)約地開發(fā)出我們的應(yīng)用系統(tǒng)。如果我們編制的構(gòu)架不能運用到具體項目開發(fā)中,或者編制的構(gòu)架反而比普通的編程效率更差,質(zhì)量更差,達(dá)不到我們預(yù)期的目標(biāo),那么我們的構(gòu)架只能是失敗的構(gòu)架,失敗的構(gòu)架比沒有構(gòu)架更加糟糕。因此,我們要編制那些有用的構(gòu)架,并且通過具體項目的開發(fā)來驗證構(gòu)架的正確性和有效性。可以這樣說,開發(fā)的項目越多,構(gòu)架的積累也就越多。只有這樣我們才能讓我們的構(gòu)架更加具有實用性和實用價值,在開發(fā)和運用中發(fā)揮越來越大的作用。
4、 構(gòu)架研究
構(gòu)架一方面是一個實用的程序,另一方面也是一門學(xué)問,它需要理論和實踐的不斷地結(jié)合和完善來體現(xiàn)其價值。例如,我們?nèi)绾蝿澐謽?gòu)架程序與具體程序之間的界限;我們面對各種應(yīng)用系統(tǒng)是采用統(tǒng)一構(gòu)架方式,還是采用多構(gòu)架方式來完成項目的開發(fā);我們在應(yīng)用構(gòu)架時如何設(shè)計和應(yīng)用參數(shù),并使得參數(shù)運用更加簡便合理;我們在采用不同程序語言在制作構(gòu)架時應(yīng)該注意什么問題;我們?nèi)绾翁幚順?gòu)架與具體需求之間的關(guān)系;我們怎么利用具體程序與構(gòu)架之間的接口實現(xiàn)動態(tài)程序的掛接等等話題都是我們可能要面對和解決的。因此,我們要靜下心來,要學(xué)習(xí)構(gòu)架各種知識,要大量積累項目開發(fā)經(jīng)驗,區(qū)分那些是屬于構(gòu)架方面的功能,那些是屬于具體程序方面的功能,研究采用什么樣的編程技術(shù)才能達(dá)到構(gòu)架的最佳效果。理論和實踐的結(jié)合才會讓我們長成騰飛的翅膀。
采用構(gòu)架的方法開發(fā)程序可以讓你的程序技術(shù)上個檔次,讓你的項目結(jié)構(gòu)更加清晰,讓你的項目開發(fā)更快更好,讓你的項目更具有可維護性和具備可擴展性。
沒有構(gòu)架的約束,我們可能更加自由,但是,有了構(gòu)架的約束,我們可以讓自由更加有價值。追求價值才是我們最終的目標(biāo)。
總結(jié)
以上是生活随笔為你收集整理的程序员成熟的标志《程序员成长路线图:从入门到优秀》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++如何调用父类的方法?
- 下一篇: 非静态成员函数的非法调用错误