英文原文:Career Path of a Programmer
許多編程的職位都會到達最高峯,並開始衰落——這是很多程序員不想面對的,但卻是一個不爭的事實。這之後再找一份程序員的工作會變得越來越難,很多人發現這個事實時束手無策。本文會提供一些重要的職業信息,值得思考一下,以便有所準備。
TechCrunch 發佈了一篇文章「硅谷黑幕:技術人員年齡歧視」,文中引用的研究發現:對一個程序員來說,能從事高效的開發的年齡段是有限的。這個問題確實存在,而且非常嚴峻。
程序員的未來是什麼樣的?
程序員的職業之路是什麼樣的?
對於這些路應有什麼樣的選擇和期望?
人人都知道程序員可以向經理或團隊領導發展。但很多程序員不明白經理這個職位的期望和工作要求。當然,我們都有經理,但怎樣才能成爲經理呢?要具備什麼素質?中層管理者和一個高級程序員之間有什麼區別?
在這篇文章中,我會拉開帷幕,介紹從一個從初級程序員到頂級 CTO 的潛在職業之路。
注意:很多偉大的職業生涯停留在了不同的職位上,直到退休。一些職業生涯卻連連升級。但是管理和領導角色並不適合每一個人,幾年以後你可能會發 現你在管理上的興趣改變了。二十幾歲的時候你可能不喜歡做經理,但是四十歲時你可能不再喜歡寫代碼了。未來什麼樣,誰都很難說。然而,多瞭解一下你的選擇 和情況總是好的。
下面一張圖表示的是程序員的各個職位的平均工資。注意在垂直水平上,一些人可能拿着兩倍或者三倍於別人的工資(像是銀行,貿易等行業)。所以這些數字僅代表了一個平均水平,並不全面。
初級程序員
0-3 年工作經驗(一般是剛從大學畢業)
會寫簡單的腳本
初步瞭解整個應用程序的生命週期
初步瞭解數據庫和應用程序的服務(隊列,緩存等)
不需瞭解複雜的應用中的每一個部分
當你剛剛踏入程序員的行列中來的時候,可能會感到畏縮和煩惱。會時常感覺到自己資歷尚淺,驚訝爲什麼會有人寫出這麼大而複雜的程序。不久之後,你就會想爲什麼自己還沒有升級到高級程序員。看看其他的高級程序員,你覺得自己做着跟他們相同的工作。
但是區別就在於初級程序員缺乏經驗。即使是學習最快、最聰明的初級程序員,也沒有接觸到足夠多的代碼和邊界情況,以勝任高級程序員的工作。在軟 件開發方面,軟件設計模式也是一種智慧。雖然在這方面可以閱讀相關的書籍,但還是需要寫足夠多的代碼,將錯誤儘可能地暴漏出來,真正理解軟件設計模式的價 值。
相關鏈接:
《設計模式》 Gamma 著
“初級”程序員的真正含義
初級開發者如何提高自己
高級程序員
至少四年工作經驗
能寫較複雜的程序
深入理解整個應用程序的生命週期
掌握數據庫和應用服務(隊列,緩存等)
要了解應用程序的每一個方面
稱職的高級程序員非常擅長構建大型程序。擔任高級程序員佔了程序員生涯的大部分。事實上,如果你不喜歡管理的工作而僅僅喜歡寫代碼,可以一直做一個高級程序員,我就僱傭了一些終生做程序員的人,但是,當老了以後,這項工作也會變得困難。
這個職位也可以作爲一個過渡。一旦你掌握了足夠的技術,那麼很可能就有能力擔任一家技術創業公司的創始人或者 CTO 了。作爲一個創始人或者 CTO,寫代碼的就會就少了,更多的是需要處理事務的技巧。但是深入理解技術非常有必要,是做好這份工作必不可少的部分。
團隊領導或架構師
七年以上開發經驗
掌握高級程序員必備的技術
團隊領導:向架構師過渡
架構師:沒有更高的技術方面的職位
做了七年程序員之後,如果你覺得不喜歡管理方面的工作,那麼可以考慮一下做架構師,這是技術方面最頂峯的職位。架構師有時候也寫代碼,但大多數 時間他們在設計複雜的系統,然後交給由初級和高級程序員們組成團隊來實現。架構師的工作就是,利用他技術方面的智慧以及多年的經驗(學習程序的模式和反模 式),來爲軟件項目創建合適的架構。有新的需求的時候,軟件架構師需要對項目選擇正確的方向,並估算應用程序的規模。
首席開發人員的工作是給其他初級的和高級的程序員指導和方向。雖然首席開發者通常不會做僱傭、解僱程序員的事情,但是他們的許多工作和經理無異。他們需做開發方面的協調,並在寫代碼的時候做出實現方面的決定。
中層領導
通常包含經理和負責人等職位(開發經理,項目經理,產品經理)
做發人員的老闆(例如人事工作)
向高級主管彙報工作
管理人員通常向工程師發展。他們的方向很多:如果你喜歡接觸開發團隊,並對細節感興趣,那麼可以選擇產品經理,做你的夥伴們的盟友;如果你對產品特性和增強其性能着迷,那麼做一個產品經理是最好的選擇。
然而大多數人的選擇是開發經理。這是個經理中經典的職位,要求平衡項目經理和產品經理的需求和開發團隊的性格之間的矛盾。這個職位對人事處理和 化解矛盾的技能要求較高,要經常做出退讓。開發經理的工作不僅僅是僱傭新人,在必要時也要解聘一些人。這就意味着很難和他們成爲朋友。因爲一旦和他們成了 朋友,就處在了一個尷尬的位置。如果你認識的一個人從開發人員的職位升到了開發經理,你會發現這個人幾乎在一夜之間變了。這就是爲什麼,這通常是一份費力 不討好的工作。
但如果領導一個團隊勝利了,也是非常有收穫的。如果你想提高領導才能,準備做一個管理角色,可以讀讀 Phil Jackson 的書 《Eleven Rings: The Soul of Success》 。
高層領導
VP,CTO 或 CEO
是中層領導的老闆(例如負責人事)
向另一個高層領導或者董事會報告
和中層領導顯而易見的不同是,高層領導負責管理中層領導。然而經理通常是不需要管理的,他們需要的是指導。中層領導需要知道高層領導的方向並跟進,不會得到非常具體的指示。
高層領導的工作是,做重要的決定,並激勵工作人員緊跟決策,增加對工作目標的信心。
你在這條路上走得越遠,寫代碼的機會就越少。到達頂峯的時候,做的都是人事方面的工作了。中層領導依然能在覈心技術方方面體驗到樂趣,但是對於 高層領導,就必須把所有的時間花在人事上:激勵員工,領導,指定策略。如果你寫代碼,也只能是不重要的項目(除非你是比爾蓋茨,但大多數人不是比爾,他是 個極端的特例)。Phil Jackson 的書要求,在這個職位上必須經常閱讀,不能安於現狀。
高層領導的工作要求確保公司的每一個人都朝着相同的方向努力,確保方向的正確,確保每一個人知道他們朝這個方向努力的原因。這個工作難度非常大,而且充滿着危險,心酸和陷阱。如果你想要一個高層領導,讀一讀 Ben Horowitz 的《The Hard Thing About Hard Things》.
高層領導從來都不是天生的,而是經過不斷地努力達到的。Ben Horowitz 的博客裏有有關成爲 CEO 的例子。
結論
今天,程序員的選擇是豐富多彩的。而且對於程序員的職業要求比歷史上任何時候都要高。對程序猿來說這是一個好的時代。但是任何時候規劃你的職業都不算晚。希望本文能排得上用場,給你一些指導和精神食糧。
來自: www.laixintao.com程序員職業路徑該如何抉擇?