程式設計師的職場階梯與級別定義

2020-07-16 10:05:19
任何種類的職場上升通道都是一個階梯,但程式設計師的階梯有何不同呢?

在程式設計師職業生涯的發展過程中,都會經歷一個修煉成長、打怪升級的過程,而每個公司可能會定義自己的升級階梯。以 AT 為首的兩大巨頭,其對技術人員的級別定義在網際網路業界比較公開,例如:
  • 阿里的程式設計師級別從 P4 到 P14;
  • 而騰訊則定義了 5 個大級別:從 T1 到 T5,並且 T4 之前的級別內部還會細分為若干小級別。

相對來說,我認為騰訊的 5 個大級別與我自己一路走來經歷的幾個階段比較匹配一些,而大級別之間的分界線也會更明顯一些。我對升級階梯的定義也是 5 個:初級、中級、高階、資深和專家。

至於對不同級別的定義,我選擇了三個相對容易判斷的維度:
  • 具備什麼能力?
  • 解決什麼問題?
  • 產生多大影響?

初級程式設計師

初級,多屬於剛入職場的新人。

一般剛從學校畢業的同學,具備基本的專業技能和素養,能快速學習公司要求的常用開發技術、工具和框架,能理解所在的業務和產品領域,並按照設計要求來實現功能。他們通常都工作在系統區域性某個區域內,能獨立或在有限指導下實現功能並解決該模組碰到的具體問題。

這個級別基本完成的都是螺絲釘級別的工作,影響很有限。但如果從這個階段你就開始定期歸納總結這些區域性的工作經驗,不斷優化工作內容,並能在團隊小組內部做出分享,甚至幫助其他同學解決問題,那就說明你已經走上了一條快速成長的道路。

剛入職場的同學,有本科,有碩士,還有博士,這有區別嗎?我個人感覺本科和碩士進入職場的區別不大。當年我碩士畢業進入第一家公司算初級工程師,若本科生進入則算助理工程師,有一個小級別的差異,但薪酬待遇則相差無幾。

畢業那時騰訊也來學校宣講,本科年薪 6 萬,碩士 8 萬,而博士 10 萬。僅僅從年收入差距來看,讀碩、讀博似乎不是個划算的選擇,可很多人選擇讀碩恰恰是為了能有一個更好的工作起點,而選擇的標準也可能就是薪酬水平,這貌似是一個誤區。

以前看過一期《奇葩說》,一位在清華大學從本科讀到博士的學生在節目上說自己為找什麼工作而苦惱,惹得同為清華畢業的高曉松當場發飆,而同為點評嘉賓的蔡康永也說了句很中肯的“實在話”:
一直花時間求學,也許是為了拖延人生做決定的時間。

中級程式設計師

中級,相對初級最大的質變在於:獨立性。

初級同學經過兩三年工作歷練,對實現各種業務功能、開發規範流程都很熟練,擺脫了對基本指導的依賴性,這時就進入了中級階段。

中級工程師已經能夠獨立承擔開發任務,設計實現他們負責的系統模組,以及通過蒐集有效資訊、資料和汲取過往經驗來解決自己工作範圍內遇到的問題。

中級這個層面的基本要求就是:完成工作、達成品質和優化效率,屬於公司“動作執行”層面的中堅力量。

觀察下來,這個級別的工程師多數都能做到完成工作,但品質可能有瑕疵,效率上甚至也有很多無效耗散。不過,效率和品質總是在不斷的疊代中去完善的,他們自身也會在這個過程中不斷成長並向著下一個階梯邁進。

不少同學卡在中級階段,就是因為雖然不斷在完成工作,但卻沒有去反思、沉澱、疊代並改進,從而導致自己一直停留在不斷的重複中。所以,在工作中要保持迭代與改進,並把你的經驗分享給新來的初級同學,這樣未來之路你才會走得更快,走得更輕鬆。

高階程式設計師

高階,不僅要能獨立完成工作,還要能獨立負責。他們能獨立負責一個大系統中的子系統或服務,並成為團隊骨幹或最重要的個人貢獻者。

相比於中級,高階工程師在“動作執行”層面,不僅能獨立完成高階難度的開發任務,而且在使用者體驗(品質提升)和效能優化(優化效率)方面還能做出更全面的考量。

也就是說,他們不僅僅可以把開發任務完成得又快又好,還能清晰地定義出多快、多好。比如,一個服務的響應時間 99.9% 是在 20 毫秒內,記憶體消耗最大不超過 1G,並行吞吐量 10000+/s,即能用清晰的資料來定義服務品質和效率。

另外,高階工程師需要面對的問題就不再是單一維度的技術問題了,他們需要結合業務特性去考慮設計合理的解決方案。熟悉業務領域內的應用系統架構以及各個部分使用的技術,能根據業務特性,合理進行分層設計,實現高效率、低成本的運維或運營。

初、中級工程師的能力提升與影響輸出是通過經驗的歸納總結與分享,而高階工程師則需要在經驗這種偏個體特性的基礎上,再進行抽象提煉,沉澱方法論。換言之,通過個人的經驗,研究行業的優秀實踐,再結合自身實踐和邏輯推導,沉澱出切合現實的方法論,並在團隊內部推廣應用。

資深程式設計師

資深,有深度和資歷(即廣度)兩個層面,對應到職業生涯路線上,也有兩個方向。
  • 資深工程師
  • 架構師

在偏基礎研發、演算法和特定技術的複雜領域,會向“資深工程師”方向發展,屬於深度優先。而在面向業務開發的領域,業務複雜度高於技術複雜度,則會向“架構師”方向發展,屬於廣度優先。

但無論深度還是廣度,進入這個級別即說明你在特定領域已經具備了相當的積累。這時你是作為相關領域的專家,深度參與和支援團隊專案,在領域內進行關鍵的技術判斷和決策,進而幫助團隊專案或產品加速成功。

在這個層次,你面臨的都是一些更複雜的、具備一些灰度(不是非此即彼,而是需要折中權衡)特性的問題,這時就需要你能夠全方位、多層次、多角度地深入理解問題,評估每種方案的收益、成本和潛在未來的長短期影響等。

這個層次的影響方面,除了經驗分享和方法論沉澱,還有產品和團隊兩個考慮維度:
  • 即使是做純技術的東西,最終的影響也是通過技術產品來完成的;
  • 而另一方面,團隊的梯隊建設、結構調整與共同作業優化,決定了團隊的外在表現。

這兩個維度,前者可能是資深工程師方向需要側重多一些,後者則是架構師方向需要側重思考實踐多一些。

專家程式設計師

專家,表明了某種領域的明確建立。

也許架構師和資深工程師也具備在特定細分技術領域的深厚積累,說明他們和專家一樣也有屬於自己的領域,但這個領域還不算明確建立,還需要有公認的影響力。公認影響力實際是指一個範圍,如果是公司的技術專家,那麼範圍就是公司或行業。

雖然以“家”冠名會讓人感覺太高不可攀,遙不可及,但實際“家”也分大小:一般的“大家”可能屬於稀世珍寶,舉國稀有,確實是遙不可及;但也有“小家”,相對來說就沒那麼遙遠了。“大家”和“小家”的區別就在於,影響力的範圍大小。

影響力聽起來可能很虛,那我換個相對實的角度來說明。作為一個 Java 程式設計師,在學習使用 Java 的過程中總有那麼幾個人,你不僅要去讀他們的書還要去看並且使用他們寫的程式碼,反正在 Java 這個領域你總是繞不過去。那麼,這就是他們在這個領域實實在在的影響力,他們自然也是這個領域的專家。所以,專家可能就是“這個領域內你繞不過去的人”吧。

積累多年,建立體系,形成領域,他們需要解決的最重要的問題是:面向未來不確定的戰略問題。這就像機器學習用過去長期積累的資料,建立起一個模型,用來預測和判斷未來。未來不可測,但建立好一個領域體系後,當未來到來時,就可以很快將新出現的資訊加入到現有的領域體系中去,從而修正模型,快速做出調整與決策。

總結

最後,借用魯迅在《故鄉》裡說的一句名言總結下:
其實地上本沒有路,走的人多了,也便成了路。
前面定義出來的階梯就是很多人已經走過的路。不管現在走到了哪個階段,我們都走在同樣的路上,但會遇見自己不同的風景。