程序員的成長階梯和級別定義html
近月,公司召開了今年的「武林大會」—— 年度晉升評比。現在大會落幕,塵埃落定,我呢既做爲評委又做爲選手參加了此次大會,有些感想在這裏簡單寫下。程序員
隨着公司發展壯大,研發人員數量也日趨龐大(6k+),每一個人如何成長,發展,修煉,打怪升級不只是自身不可迴避的命題,也是公司的一個重要命題。在互聯網這行以 BAT 爲首逐步發展出了自身成熟併成型的技術人員晉升體系和級別定義。例如:B 廠從 T1 到 T10,A 廠從 P1 到 P11,T 廠分四個大級別(T1 ~ T4)每一個大級別內部再細分若干小級別。但無論如何劃分,我感受從自身的成長過程來回顧,整體仍是能分出幾個有明顯界線的階段。算法
剛入職場的新人通常都在這個級別了。這一點卻是不區分本科仍是碩士,好比我第一家公司碩士畢業進去算初級工程師,本科是助理工程師。而公司對於剛畢業的同窗的級別定義也是相似,本科 T1-1,碩士 T1-2。大級別都是 T1,小級別上的細分區分可能也就是在薪酬起點上略有不一樣(別問我差多少,我也不知道,但估計差距不大)。遙想當年剛畢業那會兒參加校園宣講,T 廠來學校宣講,本科年薪是 6萬,碩士 8 萬,博士 10 萬,而當時華爲統一給碩士比本科每個月高一千,我估摸如今的相對差距應該也差很少這樣吧。性能優化
僅僅從年收入差距來看讀碩讀博是個很不划算的選擇,而偏偏不少人選擇讀碩就是爲了能有一個更好的工做選擇,而選擇的標準也還偏偏就是薪酬佔據主導方面,這貌似就是一個誤區啊。固然你也能夠爲了學術夢想去讀,但我估摸這樣的人千中無一吧。去年看了期《奇葩說》,一個清華男從本科讀到博士,跑去節目上說了半天就是爲找什麼工做而苦惱,惹得同爲清華出生的矮大緊同窗當場發飆。而同爲點評嘉賓的蔡康永說了句是實在話:markdown
一直花時間求學,也許是爲了拖延人生作決定的時間。架構
說了那麼多其實就是不管本科仍是碩士,做爲程序員初入職場都是新手,要從最基本的學起作起,好比:學習並熟悉公司經常使用的開發技術、涉及的工具和框架,熟悉公司的開發流程規範等等。也許博士會稍有不一樣,但可能也要取決於所處的領域和學術成就是否恰好處在業界的風口上,好比最近隨着 AlphaGo 不斷升溫的 AI 領域。併發
要說中級和初級最本質的區分是什麼,我以爲體如今獨立性方面。初級的同窗剛進公司,通常還會給安排一對一的導師幫助其快速上手,因此不少初級的同窗在工做上就對導師存在依賴性。而工做一段時間(一、2年吧)後,他們對公司的各類開發流程規範已經至關熟悉,熟悉其參與項目中的部分業務、產品和代碼,可以按要求完成業務功能開發。框架
因此中級的工程師基本可以獨立承擔開發工做,甚至有些還能指導新人了,成長爲公司「動做執行」層面的中堅力量。這個層面的基本要求就是:完成動做、達成品質、優化效率。 但觀察下來這個級別的工程師多數都能作到完成,但品質可能有瑕疵,效率上甚至可能有缺陷。而關於效率和品質老是在不斷的迭代和改進中去不斷完善的,自身也在這個過程不斷成長向着下一個階梯邁進。工具
而很多人卡在這一階段,就是由於雖然不斷的在完成工做,但卻沒有去反思,沉澱,迭代並改進,致使一直停留在了不斷的重複中。post
這個級別基本屬於能獨立負責某個小項目或大項目中的子系統或模塊,本身是項目的骨幹成員,屬於團隊或項目中最大的我的貢獻者。
相比於中級,高級工程師在「動做執行」層面屬於攻堅力量,不只能獨立完成高級難度的開發任務,並且在用戶體驗(品質提高)和性能優化(優化效率)都能做更全面的考量。不只對開發任務完成的又快又好並且還能能清晰的定義出多快多好。好比,一個服務的響應時間 99.9% 的響應是 20 毫秒內,內存消耗估計不超過 1G,併發吞吐每秒 10000,相似能用清晰的數據來定義服務品質和效率。
這個級別有些叫「資深工程師」,有些叫「架構師」,而不一樣的叫法表明了兩種不一樣的發展方向。在基礎研發、算法或特定技術複雜領域會向「資深工程師」方向發展,屬於深度優先。而在面向業務開發的領域,業務複雜度高於技術複雜度,則會向「架構師」方向發展,屬於廣度優先。
無論是深度仍是廣度,進入這個級級說明在特定領域都已經具有了至關的積累,在項目和團隊中擔任技術骨幹。除了自身專業知識、技能和實踐經驗的積累,還可以從中總結沉澱出有效的方法論,引導和組織團隊成員一塊兒進行推廣應用。積極主動的輸出自身經驗,爲跨團隊項目提供技術支持。
不少工做有必定年頭的高級工程師卡在邁入這個級別的門檻邊,我以爲有兩個緣由,一方面是自身雖然各類實戰經驗豐富,但卻沒有系統的去梳理本身多年的積累,未能很好的造成體系。所謂體系也這就是上面所說的沉澱出有效的方法論,有效方法論的最大做用是幫助快速決策,並且決策的正確機率還會比較高。另外一方面,就是其雖胸有塊壘,腹藏千言卻倒不出來,出現明顯的瓶頸效應,形成的負面做用就是很難對其「資深」的程度做出有效評定。
技術專家通常在公司領銜重大技術項目,並且在其細分的技術領域,於業界也有公認的影響力。以「家」冠名會讓人感受高不可攀,遙不可及。實際「家」也分大小,通常的「你們」實際都是稀世珍寶,舉國稀有的,確實是高不可攀,但也有「小家」相對來講就沒那麼遙遠。
而專家總和影響力掛鉤,影響力聽起來很虛,那換個相對實的角度說說影響力。做爲一個 Java 程序員,在學習使用 Java 的過程當中總有那麼幾我的,你不只要去讀他們的書還要去看而且使用他們寫的代碼,在 Java 這個領域你老是繞不過去。那麼這就是他們在這個領域實實在在的影響力,天然也是這個領域的專家。因此,專家可能就是這個領域內你繞不過去的人吧。
有了級別的定義,那麼如何來評定一我的到底屬於怎樣的級別呢?這點在低級別的評定中標準會相對寬鬆,而越往高級別走越難評定。對於不一樣級別的評定標準一些大公司(如:T 廠)都定義了覆蓋多個維度的評判標準,並給出了詳盡的說明。對於高階的晉升會由公司專家評審小組來組織晉升述職答辯,評審小組的評委就是根據這些多維度的標準來作出一個綜合的評判。
這裏多維度的標準是客觀的,而評委的評判則是主觀的。這就好像奧運比賽中相似跳水這樣的項目,有規定的動做、組別和技術難度係數,這些都是客觀標準,這對於運動員的完成狀況的評判會有一些共識的判斷,但細微之處就偏主觀了。若是郭晶晶和一個新秀一塊兒參加國際大賽,她們跳一樣的難度一樣的組別動做,完成的一樣好,但最後可能郭晶晶會得分高一點,我印象中有屆奧運會上就出現過,這就是人主觀評判的細微之處。
而實際在一場半小時的述職中評定一個程序員的級別要比給一次跳水打分難多了,並且準確性更低。正如前文所說不少「高級」的工程師雖然已經在特定領域進行了多年的沉澱積累,但這也只是第一層次:深度理解並掌握了某領域的知識和技能。下一層次則是能很好的表達和展現該領域的知識和技能並能讓人容易聽懂,若是作到這層的話,基本就大幅下降對你進行評定的門檻和難度。而再進一步若你對該領域的觀點和認識不只能讓人聽懂還能給人啓發,並讓人認同和被二次分享,那麼你天然就具備了不少組織裏對高階人才要求的專業影響力。而在從積累沉澱中提煉觀點和認識並分享的過程當中,又會反過來加深你對該領域的認知,甚至還能幫助發現盲點,不斷造成正向反饋的循環。
職業的發展就像爬樓,每個級別就像一個樓層。魯迅曾在《故鄉》裏說:
其實地上本沒有路,走的人多了,也便成了路。
因此,前面定義出來的階梯不過就是不少人已經走過的路,咱們只須要去沿着這條路去持續成長就能爬上還算不低的樓層。只是到了必定樓層後咱們會發現上面彷佛還有幾層但卻看不見下一層的樓梯了。由於再往上走的人就很少了,也就沒能成了路,天然也就看不見,這可能就是不少大公司中到了必定層次面臨的困境。
程序員這行處在科技與互聯網的突飛猛進之下,因此無論你以前積累了多少但也停不下來。一旦停下來了,你這窪水可能就變成了一塘死水,死水終有乾涸的一天。走完看得見的路後,就該走看不見的路了,這條路誰也定義不了,只能本身去試。從這裏開始每一步都是一個不一樣的選擇,而每一種選擇都影響着將來人生的不一樣路徑。
...
最後,看到這裏你,行路的腳步是否邁得更堅決點了呢?最最後,是我寫這篇文章時參閱過的一些相似主題文章,有興趣能夠看看。