天天看點

從程式員到技術總監,分享10年開發經驗

 在中國有很多人都認為IT行為是吃青春飯的,如果過了30歲就很難有機會再發展下去!其實作實并不是這樣子的,在下從事.NET及JAVA方面的開發的也有10年的時間了,在這裡在下想憑借自己的親身經曆,與大家一起探讨一下。

  明确入行的目的

  很多人幹IT這一行都沖着“收入高”這一點的,因為隻要學會一點HTML, DIV+CSS,要做一個頁面開發人員并不是一件難事,而且做一個頁面開發人員更容易找到工作,收入比普通的工作還要高一些,是以成為了很多高校畢業生的選擇。如果您隻是抱着這樣一個心态來入行的話,那閣下可真的要小心了。因為幹IT這一行競争本來就比較激烈,特别是頁面設計這方面,能夠開發的人很多,是以為了節省成本,大部分公司都會在需要的時候才招聘這類人員;在沒有訂單的時候,一些小公司還可能找各類的借口或者以降薪的手段去開除這類員工。而在招聘資訊上常常會看到“招聘頁面設計師,條件:30歲以下……歡迎應屆畢業生前來應聘”這樣一條,因為這一類工員對技術上的要求并不高,找應屆生可以節約成本。是以在下覺得“IT行業是吃青春飯的”這句話隻是對着以上這類人所說的,如果閣下缺乏“進取之心”,而隻抱着“收入高,容易找工作”這樣的态度而入行,那“IT行業是吃青春飯”将會應驗了。 

  選擇合适的工具

  JAVA、C#、PHP、C++、VB……10多種熱門的開發語言,哪一種最有發展潛力呢?其實開發語言隻不過是一個工具,“與其分散進攻,不如全力一擊”,無論是哪一種開發語言,隻要您全力地去學習,到有了一定的熟悉程度的時候,要學習另一種的語言也是輕而易舉的事情。開發語言主要分為三大類:

  1. 網絡開發 

  現在網絡已經成為世界通訊的一座橋梁,好像Javascript、PHP、Ruby這幾類開發語言大部分是用作網絡開發方面。

  2. 企業軟體開發

  JAVA、C#、VB這幾類開發語言都實作了面向對象開發的目标,更多時候用于企業系統的開發。

  3. 系統軟體

  C語言、C++、Objective-C這些軟體更多是用在系統軟體開發,嵌入式開發的方面。

  當然,這分類不是絕對,像JAVA、C#、VB很多時候也用于動态網站的開發。在很開發項目都會使用內建開發的方式,同一個項目裡面使用多種開發語言,各展所長,同步開發。但是以在剛入門的時候,建議您先為自己選擇一種合适的開發工具,“專注地投入學習,全力一擊”。

  明确發展方向

  當您對某種開發語言已經有了一定的了解,開始覺得自己如同“行屍走肉”,成為一個開發工具的時候,那您就應該要明确一下自己的發展方向了。

  平常在公司,您可以看到做UI層的開發人員大多數都有20多歲,他們充滿幹勁,而且沒有家庭負擔,在兩年前ASP.NET MVC 、Silverlight等剛出現的時候,他們可以在晚上回家的時候買幾本書或者直接上網看看,研究三五個星期以後,對需要用到的技術就已經有一定的了解了。而年過30的人多數是已經成家了,他們每天9:00點上班唯一的希望就是快些到6:00點,能回家吃飯。吃完飯隻想陪孩子玩一下,看看孩子的功課,對新增的技術缺乏了學習的欲望。是以很多接近30歲的程式員都有着一種逼迫感(包括30歲時候的我自己),再過幾年應該怎麼辦?這時候,您就更應該明确一下目标,努力向自己的發展方向前進了。歸納一下,可從下面幾項裡選擇适合自己的一條道路:

  1. 從技術向業務過渡

  在國外,很多發達國家都很重視人才,一個進階的程式員與一個Project Manager收入相差一般不超過15%。但中國是世界上人口最多的國家,國内人才衆多,是以人才濫用的情況經常可以看到。一個小公司的開發部裡面經常會見到新面孔,但PM卻不會常換。因為做老闆的對技術是一竅不通,依他們看來隻到拉住PM的心,那技術方面方面就能搞得定,至于技術部要換人,他們根本不需要費力氣去管。是以從一個技術員過渡到一個PM是向前發展的一個選擇,但開發人員也需要知道,要成為一個PM不單單是使用技術,而更重要的是對管理方面的認識。一個PM主要的工作是組織團隊,控制成本,管理業務,控制項目進度,與客戶進行溝通,協調工作,定期進行工作報告等。是以要成為一個成功的PM更要重視組織能力,PM必須能提高團隊的積極性,發揮團隊所長,在有限的開發資源前提下為公司得到最大程度上的利潤。成為一個PM後,通常不需要直接接觸技術開發,而着重管理的是業務發展,但PM對技術也需要有一定的了解(在下曾經為PM對技術了解的必要性寫過一篇文章,得到很多支援但也惹來不少的争議)。在這裡我還是要強調自己的觀點:要成為一個成功的PM最重視的是管理能力,但對技術也應該有足夠的了解,因為這是與團隊成員溝通的橋梁,隻有這樣才能與整個團隊的成員有着緊密的結合,讓團隊成員感覺到他們自己存在的意義,進而調動團隊的積極性,而不是漠視技術人員的存在。技術并非成為一個成功PM的充分條件但卻是必要條件!

  2. 從程式員向技術管理發展

  其實一個Team Leader的職責與Project Manager相像,但Team Leader更着重于技術開發方面,通常一個大型項目都會有一兩個開發團隊由Team Leader帶領,負責開發核心部分,而其它部分分派給不同開發小組或者分派給外包公司。在網上常看到幾句話,貼切地形容了PM與TL的差別:“技術人員樂于被上司;但他們不喜歡被管理,不喜歡像牛一樣被驅趕或指揮。管理者強迫人們服從他們的指令,而上司者則會帶領他們一起工作。管理是客觀的,沒有個人感情因素,它假定被管理者沒有思想和感受,被告知要做什麼和該如何做。上司是引領、引導,它激勵人們達成目标。上司力是帶有強烈個人感情色彩的,它不是你能指令的,也不是你能測量評估和測試的。”

  無論是PM與TL,對業務與技術都要有深入的了解,隻是PM更側重于業務的管理,盈利的多少,風險的大小等等,而TL則側重于項目的成本,開發的難度,軟體的架構等技術方面的問題。在某些人眼中,技術與管理就像魚與熊掌,不可兼得,但依在下看來,兩者卻是秤不離砣,密不可分。隻要及時提升自己對技術與管理的認識,不斷地向深一層發展,要從程式員提升到技術管理人員隻是時間的問題。打個比方,一個普通的.NET程式員,開始可能限制于ASP.NET的頁面開發,但一旦他有了發展之心,他自然會對ASP.NET MVC、Silverlight、WinForm、WPF這些UI的開發手法感到興趣,學習不需要多少時間,他可能就會認識這些UI開發隻不過是一些工具,其實在開發原理上沒什麼差別。接着他就會向深一層的通訊模式進行了解,認識TCP/IP、Web Service、WCF、Remoting這些常用到的通訊方式,這時候他可能已經感覺到自己對開發技術有了進一步的了解。進而向工作流、設計模式、面向對象設計、領域驅動設計、面向服務開發等高層次進發,最後成為技術的上司者。上面隻是一個比喻,但要注意的是,在學習的時期必須注意的是與同僚之間溝通,很多的開發人員喜歡獨來獨往,開發的項目總想一個人搞定,不受外界的幹擾。但要明白,就算你有天大的本事,一項大型的項目也不可能由你一個人全扛着。是以團隊的合作性與同僚間的溝通是必要的,這也是成功一個TL的必要條件。

  3. 單方面向技術發展

  能成功進行技術開發的尖端人才,這是在下最向往的工作,卻也沒本事登上這個位置。很多從事開發的人都會認為,業務總會帶着“金錢的味道”,老闆從來不管開發是否合符開發原則,是否經過必要測試,他們隻會在客戶面前無盡地吹噓,項目到期能成功交貨,隻要不出什麼大問題那這個項目就算成功了。其實我們也要明白:開發項目最終目标是為了賺錢,在開發過程中對項目成本的限制和效率的控制這也是必須,是以這才需要管理人員對項目進行管理。但開發人員也很想避開這“金錢的塵嚣”,全心投入到技術的世界當中。是以對技術有着濃厚興趣的人,往往會深入地研究某一項技術,成為技術上的精英。但在這裡說一句令人心淡的話:中國已經屬于是世界上第二大經濟體同盟國,但國民生產毛額主要來源于第三方加工産業方面。中國可以說是人才濟濟,但卻在高新産業上卻比發達國家落後。這幾年的确看到我們國家在高新科技上有着質的飛躍,但跟歐美發達國家還有着一段距離。是以想在中國成為尖端技術的人才,無可否定比在國外要難。依在下看來,要想成為尖端的開發者,必須對C、C++、彙編語言、嵌入式開發、Windows API、Linux API這些底層技術有着深入的了解。要知道解JAVA、.NET……等這些之是以稱為進階開發語言,并不是指它們比C、C++、彙編語言更進階,而是指它們封裝了C、C++等等的功能,更适合用于企業軟體的開發,使開發變得簡單。但如果要開發一些底層的軟體,大型的系統的時候,就必須用到C、C++、彙編等開發語言,這是成功尖端人才的一個條件。

  确定未來的目标

  人是從曆練中成長的,古人雲:三十而立,形容的不是一個人的社會地位,經濟來源,而是形容一個人對未來的目标,對人生的意向。要成為一個成功人,就應該早日為自己定下長期的發展目标,作為一個開發者也當如此。随着人的性格,取向各有不同,大家為自己所選擇的路也有不同:

  1. 自立門戶,勇敢創業

  快30歲了,很多人會認為要想真正賺得了錢,就應該自立門戶,為自己創業建立一個基礎。像北京、上海、廣州這些一級城市,要買房子,一手樓基本要在2萬~4萬元/平方米左右,而在一家普通的IT公司當上一個項目經理,基本收入一般都在1.5萬~3萬之間(除非在大型的跨國企業内工作,那另當别論),要買一間100平方米左右的房子,就算不吃不喝也幾乎要10年的年薪,是以選擇自主創業,是很多IT開發人員的一個未來目标,想要達到這個目标,就應該更多地把業務作為重點。不可否認的一件事,在中國社會裡很多時候講的是“關系”,即使這30年的改革開放使中國的經濟蓬勃地發展起來,但幾千年來留下的歪風還是不能完全的磨滅。是以想要創業的人事建議你要多跟客戶打好關系,與合作夥伴保持互利互動的模式,這将有利于日後事業的發展。

  2. 急流勇退,退居二線

  這也是不少人的選擇。很多人在有了家庭以後,感覺到壓力太大,人的一生并非隻有事業,他們想把更多時間用于對親人的照顧,對孩子的關心上。是以很多人會選擇一份像系統分析、系統維護、高校教師、專業學院講師這一類的工作。收入穩定,而且往往沒有一線開發人員那麼大的壓力。

  3. 不懈努力,更進一步

  無論你是一個Project Manager或者是Team Leader,如果你想繼續晉升一級,那還是會兩極分化的。從一個PM到一間公司的管理層,那所面對的事件會有很多變化。一個公司的總經理,要管理的不再是一到兩個項目的成本,而是整個部門的運作,整間公司的業務流程,是以要肩負的任務會更重。在下曾經有一位上司彭博士,他是企業的最高上司人,年薪超過三百萬,而且在報紙雜志上也曾經亮過相。平常隻會在某些會議上輕輕地亮下相,說兩句講詞,平常的公司運作與業務管理都不需要他直接執行。這并不是說一個作為管理層很清閑,因為他們要面對的是更多的社會關系,與公司合作企業的聯系上。這跟一個PM的工作有很大的差別,是以要從一個PM晉升到管理層,那可是要付出更多的努力與汗水。

  如果要從Team Leader上升為一個技術總監,那工作的方向也有所改變。像之前所說:一個TL可能更重視的是技術層面,講求與團隊之間的互動合作性,更注重的是開發的完善。而一個技術總監就無需要直接參加某個項目的開發,而注意的是開發的效率與成果,如何合理使用有限的開發資源,控制開發的風險和可能帶來的效果。

  發展感受

  經曆了8年多時間,在下從一個程式員到一個項目經理,之間經過很多的曲折,但因為每一個人的際遇都有所不同,所走的路也有不同,正所謂條條大路通羅馬,成功的路不止一條,在下也不想令各位誤解,而隻想為大家說一下我的發展方向。如果您是一位開發人員,“程式員->架構師->Team Leader(Project Manager)->技術總監”是一條不錯路,這也是在下選擇的路。在我國,想要進一步提升自己,無論你想是以技術為重點還是以業務為重點,都離不開管理二字。在一些大型的企業,一個團隊往往會配備一個PM與一個架構師,盡管兩個人負責的任務各有不同,但你會看到一個架構師的收入往往不如一個PM,PM往往是這個團隊的核心上司者,是關鍵人物。因為公司能否賺錢,PM有着重要的作用。PM與TL并沒有絕對的差別,而且在一些中小型企業,一個開發團隊隻有3~5人,一個TL往往會兼備業務處理、成本控件、架構設計、開發管理等多項任務。是以在下會把Team Leader與Project Manager定于同一層次,一個公司的老闆往往不會知道團隊的架構師、程式員是何人,而隻會向PM詢問項目的進度,是以隻有晉升到這個層次,才有機會進一步提升管理能力,讓自己有上升的空間。至于要成為一個技術總監,那要求就不再單單是對單個項目的管理,而應該更則重于新興技術的引用,開發資源的合理利用,對開發項目靈活性的處理等等,對此在下也在試探當中,未敢多言。

與程式設計牽手 和代碼共眠 從程式員到技術總監

從業IT十年,從程式員成為技術總監,現在回頭看一看,這條路也伴随國内的IT一起風雨兼程10年,對IT技術由其是IT的純軟體開發這一塊,向即将要從事軟體技術研發的朋友談一談我的看法:

    

    一.認清目前IT形勢,選擇合适的技術方向和技術起點

    

    估計大家都多多少少知道,這個IT行業知識的更新很快,競争很急烈.

    

    如果你對自己以後發展的方向在從業前有一個清析的計劃或認識,相信你會比别人走得更好,走得更遠,賺的錢也更多...呵呵

    

    IT軟體從業的方向,一般都會有這些機會:産品售前(市場,業務),産品開發(編碼,設計,測試),産品售後(支援,實施),産品管理(項目管理等)

    

    A.産品售前(市場,業務)

    

    要從事這一塊的工作,主要是在軟體開發的前期(無産品),或者合同簽訂前期(有産品).

    一般要求對相關的業務和技術都要求很高,這可不僅僅是要求人際關系,交際能力.

    要想别人買你的産品,你得以專業的産品品質為背景,以專業的談吐,專業的技術和專業的業務了解能力來取勝.

    

    從業者要求:

    要求從業者要有一定的社會經驗,技術經驗或業務經曆,或一定的社會圈子和交際能力.

    

    建議:

    剛剛從學校畢業的朋友或不符合上面條件的朋友最好要考慮清楚了.當然這世上沒有什麼絕對的東西,就看你自己了.

    

    現實情況:

    據我所了解的,作這一塊的都會是公司一些高層(有關系,有經驗)和業務專家或特殊背景的人員等.

    

    B.産品開發(編碼,設計,測試)

    

    這一塊的工作,當然是IT從業大軍的主力了,但也得要考慮清楚.

    如果你要作設計師,或測試,最好先作一段時間的編碼,

    一個好的設計師是不可能不精通相關技術平台的!

    國外好的測試人員也幾乎是從開發人員中選出來的,基至是軟體開發高手.

    

    a.代碼編寫

    在這一個職業選擇範圍内最好是從代碼編寫開始.當然你也可以先作測試,看看人家是怎麼寫代碼的是如何來作這個軟體的,

    借用人家的測試經驗也可以,以後有機會再來編一段時間的代碼也行.

    有時自己去寫一個軟體也可以,是以作編碼和測試都是一個雙向互動的.而不是編碼在前測試在後的.

    

    作代碼的編寫最好自己先看看别人的軟體,或由一些高手帶着指導一下,現在技術的學習都不成問題,關健是要連成一條線來學習和思考就會有一定的局限了.

    是以要熟悉整個的項目流程或業務流程不是靠個人編碼或在教育訓練班學一下就能解決的,個人的技術學習和教育訓練班大部分隻能解決技術的學習問題,但作軟體不僅是要技術呀

    三分技術七分業務說得不為過,業務的學習也是一個開發人員所要必備的,如果你在不熟悉業務細節之前建議你不要急着去寫代碼,那樣肯定會是對以後軟體的影響很大.先要熟悉一下業務.

    

    是以軟體開發人員掌握一門技術平台和語言是必備條件但同時也必須要有一定的業務知識,這樣才是一個合格的軟體開發人員.當然精通軟體編碼,懂設計,熟悉業務,熟悉軟體項目開發流程的軟體開發人員是優秀的,那是進階研發人員的必備條件.

    

    如果你才入門或轉行或剛畢業,建議從基礎的代碼編寫開始,跟着高手或找一些成熟的項目多學習,

    

    b.軟體設計

    當然這個職業要求行業的經驗,技術經驗都要有一定的基礎,薪水一般也會高很多,是以也是一些開發人員熱烈追逐的目标.但一個好的設計師不是一二年所能練就的,精通編碼,熟練設計模式和公司所采用的技術平台,熟練一些設計理論并實際多運用,熟練公司業務,其實這個層面的壓力也最大,一個好的軟體在設計上的比重幾乎要占到七成.

    

    建議剛畢業的朋友或軟體初學者不要在這一塊來湊熱鬧,即使你作成了設計師,但在我眼中看來你也不是一個合格的設計師...當然你有這個能力來作設計師就要恭喜你了.

    

    

    

    c.軟體測試

    

    熟練軟體測試的各種理論或實際運用,也要熟悉編碼技術及相關的技術平台,熟練掌握業務.

    軟體測試中一般都會有:

    單元測試,要求你熟練開發技術進行跟蹤調試,也就是白盒測試了

    內建測試,對整個項目流程的測試,要求掌握業務知識,對設計的軟體能作功能上的測試或壓力測試等 ,屬黑盒測試

    确認測試,對業務要很熟悉,測試軟體是否完全滿足了客戶的業務需求.

    

    總體建議:

    1.熟練一種技術平台,熟悉一種業務

    剛入門的朋友很容易犯的一個毛病是,熟練:VB,VC,.NET,JAVA,C++,C,Dephi,PB,幾乎市場上要用的他全部會,唉,如果我看到他的履歷上有這麼一句話,這個人肯定不會在我考慮的範圍了.

    現在全球用得最廣最多的技術平台體系也就三大體系:

    

    sun的J2EE技術體系(JAVA):在高安全性,高性能上更勝一步,中高端市場上用得多

    

    微軟體的技術體系(C++,.NET,c#,VB):在中,低端市場占絕對優勢,也是全球個人電腦操作平台使用者最多的.

    

    CORBA技術體系統(一種分布式技術體系和标準),

    全稱:Common Object Request Broker Architecture:公共對象請求代理結構,可以用不同的程式設計語言寫成,運作在不同的作業系統上,存在于不同的機器上。

    一般介于底層和上層管理軟體之間,

    

    

    其他的還會包括底層開發:C,彙編,屬純底層的開發,當然要求技術的起點和業務背景更強,最好是學的專業:電子電氣,嵌入式行業,機械制造,資料采集等...

    

    

    看中你想要從事的技術體系,選好一門語言工具,好好上路吧...:)

    永遠要記住:你什麼都想學,你什麼都學不精

    

    

    2.從基礎入手,不要好高鹜遠,眼高手低,要與實際結合

    

    

    B.産品售後(支援,實施)

    這一塊對于開發技術的要求來講不是那麼明顯,主要工作會在軟體開發後的工作,跟客戶打交道多,但更多要求展現在對業務的把握和客戶的交際上.

    有些軟體産品業務比較成熟,如果參與這一階段的工作,可以快速學習很多的業務知識,積累客戶交往的經驗

    

    建議:剛入門或剛畢業的朋友,可以在這個工作上多選擇,等待時機成熟,立馬殺入軟體的開發或設計階段,當然,這一塊的工作作得好也不容易,如果适合你作,

    工作環境或工資都不錯你就大可不必多想了...

    

    

    

    C.産品管理(項目管理等)

    

    這一塊的工作主要展現在管理上,當然适合有一定經驗或管理能力的人員來擔當,

最後的技術從業方向總結:

    

    技術型:先選擇好一種技術平台,熟練一種開發語言和資料庫...專業專注的搞幾年再說

    

    技術+管理型:如果你有一定的技術經驗了,并且人際交往,管理能力不錯,你就可以向這個方向發展

    

    技術+業務型:精通一種技術平台,精通一種業務,好好搞,這種人才最受歡迎...

    

    管理型: 如果你有一定的社會經驗,從業經驗,如果人際交往,管理能力還可以,老闆也喜歡,就搞這個

    

    業務型(市場):如果你對業務很感興趣,跟客戶的交往等也不錯,你可以選擇了,有适合的專業技術就更能錦上添花了

    

    技術+市場+管理:老大的位置....:)

繼續閱讀