首先你要明確入行的目的,你是深深的熱愛著編程還是只是因為程序員是個高薪的職業呢?如果是后者,那么不好意思,你需要慎重的選擇。
在中國,程序員并不是一個很好地稱呼。程序員似乎象征著邋遢,宅,甚至是IT民工。記得有一期非誠勿擾上面,上去一個男嘉賓,開場說他是搞JAVA的,臺上女嘉賓的燈全滅了。是不是很可笑,很可悲?而且只有你真正的進入這個行業你才清楚,這個看上去還不錯的薪水,你卻付出了超過薪水價值的代價。創業型與游戲型公司里面的項目小組一般是5~10個人,因為他們需要快速的開發以應對多變的市場波動,所以程序猿的每天工作時長都在12小時以上,身體和精神收到摧殘不說。作為程序猿的你很少有時間去陪陪自己的家人、自己的女友。
如果作為前者,你是因為深深的熱愛著編程,那么恭喜你,你有著一顆hacker的心,屬于那些愿意做一些有挑戰性的事情的人。就如WhyTheLuckyStiff所說:“當你不創造東西時,你只會根據自己的感覺而不是能力去看待問題。”
當你開始編程,開始創造的時候,開始享受的時候,一切外界的評論,都擋不住你對技術對創造的熱愛。但是,我不得已要潑你一盆冷水,來提醒你一下。你是否準備好了忍受寂寞,也許你面對的是十年寒窗無人問,若你沒有熬住,也許就等不到一朝成名天下知的時刻。技術是永無止境的,好的程序員必須保持對于新的技術敏感度,保持學習的熱情。Stay hungry ,Stay Foolish。
明確了目的,那么你應該規劃下自己的職業生涯。
宏觀的講,個人認為我們需要經歷三個階段:深度、廣度、高度。
高度:這個層面往往體現在規劃能力,能夠看到未來業務的發展,設計出相對合理的架構滿足未來業務的快速擴展。這個階段應該是少參與到具體的編碼中去,應該是一個公司的CTO或者首席架構師角色。這個方面的能力比較虛,相對來說也是最難煉成的。
廣度:就是知識領域的廣度。反映在IT技能上,就是所掌握的領域,比如.net,java,數據庫,web,前端等等。不一定每個領域都能夠精通,但是至少都能了解,能夠在面對問題的時候能夠拿出一個切實可行的解決方案。對于跨領域方面,可能是你的溝通能力,管理能力等。
深度:在某一領域有很深入的了解,旺旺是一門具體的技術。比如js代碼寫的很精通,數據庫知識非常豐富,精通linux操作系統底層。
深度->廣度->高度,越往上,要求的抽象能力越高,越往下,要求細節知識越具體。一個人往往具備了以上三樣,就是一個成功的大牛。
微觀的講,.已經工作兩年以上的程序員可以有幾種基本的職業規劃:技術專家、軟件架構師、實施顧問或銷售。對大多數人來說,首先是要專,在技術上做的比較深入,然后進行工作調整,把自己轉變為某個領域的專家,第三步,根據自己的情況,來選擇技術還是管理。
有了自己的規劃,最重要的是執行。我認為很多漂亮的計劃都會因為執行力不夠而夭折。一個一流的計劃經過二流的執行,甚至不如三流。而一個三流的計劃,經過一流的執行,也許就能達到二流。所以從計劃本身來說,執行往往更重要些。
如果你要走技術路線,那么就深入某一領域,培養程序員以下幾個基本素質。
1.團隊精神和協作能力;
2.良好的文檔習慣;
3.規范化、標準化的代碼編寫習慣;
4.需求理解能力;
5.復用性、模塊化的思維能力;
6.測試習慣;
7.學習和總結能力。
如果你要走管理路線,那么你首先需要向一個PM的目標前進,然后成為總監乃至CTO。我這里講講要成為一個PM需要哪些能力。
先看看下面的招聘啟事吧,這只不過是一家幾十人公司的一個招聘廣告:
招聘職位1:軟件項目經理
職位描述:
1、帶領實施團隊完成某軟件項目;
2、制定項目計劃和實施部署;項目進度、質量及范圍管理與控制。
3、負責軟件實施過程中與各方的溝通、關系協調與維護;以及實施人員的安排與管理
4、負責了解客戶對軟件的業務需求及意見,及時反饋、跟蹤開發人員解決問題。
5、及時、有效協調資料解決項目實施過程中出現的疑難問題;
職位要求:
1、具備優秀的團隊協作精神,良好的溝通能力,有較強的口頭/書面表達能力;
2、熟悉企業信息化業務,百萬企業信息化項目經驗;
3、精通數據庫系統和項目管理工具;
4、熟悉XYZ行業相關業務知識;有財務背景知識,快速理解和學習能力;
5、良好的客戶服務意識,負責、敬業、細心。
6、有軟件大項目管理經驗或N年以上項目管理經歷優先;
那么,讓我們看一下這個招聘啟事對軟件項目經理能力的描述吧:
團隊協作精神 ——高
溝通能力 ——高
口頭表達能力 ——高
書面表達能力 ——高
IT技術 ——高
XYZ行業知識 ——高
理解和學習能力 ——高
服務意識 ——高
項目經驗 ——高
我們概括一下,是不是差不多就5類:溝通(口頭表達能力,書面表達能力,溝通能力,服務意識)、管理(團隊協作精神)、技術(IT技術)、成本控制、行業(XYZ行業知識)。理解和學習能力是很綜合的,無論是在學習過程還是生活中都能體現。最后一點,項目經驗,這東西是學不來的,只有踏踏實實跟著團隊做幾個項目才能積累起來的。
如果你想成為一個項目經理,那么首先就要把自己定位成一個項目經理,拿項目經理的水準來嚴格要求自己。比如溝通,平時應該多鍛煉和他的的溝通能力,不一定非要在項目中和客戶溝通。還有如果沒有技術,那么誰都不會信服你的。
從技術和非技術的角度來向項目經理看齊。
技術
1.有著一定的技術廣度。首先你需要對現在有的技術有一定的了解。我認為,好的PM不一定是團隊中技術最強的,但是一定能知道這些技術能拿來干什么。如果你不懂JAVA,你一定不知道你手下有沒有偷懶,明明一個禮拜就可以完成的事情,他兩個禮拜都沒有搞定,導致你的計劃全亂掉了。
其次你需要對新興的技術有所了解 。IT行業每時每刻都會涌現出很多新興的技術,誰也不知道某一項技術的出現會不會能改變IT發展的趨勢。就如java語言剛出現的時候,誰也不會知道它會那么流行。
2.有著一定的技術深度。深入了解一門技術。這門技術是你的敲門磚,是你打開PM大門必須的鑰匙。在網上那些當上項目經理,在IT行業走的很遠的人都會對我們說,作為一個PM,技術不是最重要的,重要的是那些非技術的東西?勺鳛橐粋科班出生的程序員,我真的無法透過那層霧來看他們描述的PM的世界。直到后來,我和一個當過項目經理的老師談話才明白。技術,其實是個敲門磚,當敲開這扇們之前,他還是挺重要的?墒钱斍瞄_后,那些非技術的東西才是PM的精髓。
3.了解技術發展的歷史。個人認為技術發展有一種趨勢,當我們能通過過去和現在之間的聯系,推算未來技術發展的潮流。
非技術
作為一個PM,你的最終目的是:替老板賺錢。別說我庸俗,也許以后你成為首席技術總監以后你有資格談技術本身,不然老板是你的衣食父母,你必須替他想。圍繞著這個目的我們通過技術知道,達到技術設計最優化;通過管理團隊,達到團隊產出最大化;通過成本控制,達到經濟效益最大化;通過和用戶溝通交流,達到用戶滿意最大化。這一切一切概括的說就是你領導一個團隊,使用一些掌握的技術,作出一個項目,使得客戶滿意,然后老板開心。老板一開心,也許你就升職加薪,那么你就開心了。
所以,PM要學習的非技術的東西很多,大致分為以下幾個方面:
1.產品市場
2.產品設計
3.團隊管理
其中里面又有很多相關的內容,比如擁有好的人脈也是很重要的。比如學習如何培養自己的創新思維等等。你需要學習營銷和推廣,需要了解消費心理學、行為心理學等等。
我無法告訴你具體該怎么學習,因為我自己也沒有達到那個高度。以上這些內容也是借鑒一些行業的前輩的指導,以及自己的一些獨特體會,所以難免見解有些狹隘。但是如果文中的某一點能給你一些啟發,那么也不枉我寫了那么多了。