經常在網上的論壇里看到討論程序員的級別,尤其在跳槽類的信息里可以看到對標阿里P7,百度T6,騰訊3.1等字眼,似乎大廠的級別儼然可以成為業內的通用貨幣,類似于高考分數一樣,哪一檔就對應著什么樣的待遇。
有人說現在的程序員級別也開始浮夸起來了,以前覺得從剛畢業開始算初級軟件工程師,到中級軟件工程師,高級軟件工程師,要熬上三五年乃至更高的時間。而現在接到同行的名片,往往高級開發經理、算法專家、首席科學家等層出不窮。
我從畢業后一直在海外工作,自己的頭銜從一開始的軟件開發工程師到現在全棧開發工程師,并沒有“級別”上的跨越。反觀我在國內發展的同學,已經很多是“總”級別的人物了。細細交流之后,覺的和自己做的事情也并無不同。
我在兩三年前,曾經非常重視在公司里的晉升,花了大量的時間精力去“面向升級編程”。在跳槽的時候,也會常常對比不同的職位,往往會對那些頭銜“高貴”的職位另眼相看。如今反思,當年的自己其實是掉入了級別的陷阱中。
程序員的級別重要嗎
程序員的級別到底重不重要?重要也不重要。
級別重要,是因為級別常常和你的待遇掛鉤。國內的大廠一般有很穩定的薪資體系,什么樣的級別代表著什么樣的工資、股票,和錢相關對個人來說當然重要。
級別重要,是因為常常和程序員的話語權相關。即使如谷歌,Facebook這樣的公司,沒有能夠達到高級軟件工程師(Senior Software Engineer)的級別之前,也很難獲得“搞事”的權利,不能為自己爭取到更多的資源。能夠給自己帶來更多表現的機會,當然很重要。
級別不重要,是因為級別并不決定你的能力。你不是因為被稱作高級軟件工程師所以你的技術厲害,而是因為你的技術厲害所以有可能成為高級工程師。技術厲害的程序員評不上高級工程師,也不會影響他的技術水平。
級別不重要,是因為級別并不能限制你的輸出。級別低的程序員在大公司可能只能做CRUD,但也可能在創業公司中做出千萬用戶的產品。級別高的程序員或許位高權重,但也有可能完全沒有時間寫代碼。
級別是相對的稀缺性
級別更多是代表對應人才在其組織、行業中的稀缺性,并且往往只有內部縱向比較意義,一旦跨組織,其意義就很有限。
在創業公司里的CTO,很有也就是大公司的高工(高級軟件工程師)出身;而默默無名的獨立開發者,也有可能成為行業巨擘。
在一些新興的領域比如最近很火的人工智能,入門的門檻很高,人才比較稀缺。一些名校的博士生可能一畢業就可以成為“高級”、“資深”AI工程師。
相對來說,比如前段計算的門檻不高,并且技術日新月異。所以前段工程師可能需要很多年的積累,才能說的上“登堂入室”。
開頭說的大廠的級別似乎可以成為業內通用貨幣,為何是這樣呢?
因為大廠的規模和業務都很龐大,一些大公司之間,由于業務上有重疊,并且經過長期的人才流動(跳槽),在市場的調節之后,互相之間的級別形成了一些對接。不但國內的大廠有這樣的現象,國外的大廠之間也會有這樣的情況。
而一些規模較小的公司,可能聚集了一些大廠的程序員,或者創始人本身從大廠畢業,也會傾向于從大廠去借鑒級別系統。但是正如上面所說,由于受到公司規模的限制,吸引到的人才分布不可能和大廠保持一致,其級別可信度就會比較低。
小公司的級別是否一定是有水分呢?也不竟然。這里得分公司和不同的崗位。
技術驅動型公司的核心程序員崗位,尤其需要技術過硬甚至是行業領軍的人物。 在這樣的公司里,可能掛著軟件工程師頭銜的員工都是在其他公司都是高級軟件工程師以上的職務。
業務驅動型的公司,更多的會靠銷售團隊來推廣業務,技術團隊往往并不是決定公司發展的關鍵。在這樣的公司里,往往可以看到高級程序員多是公司元老,并且主要的職責是管理,讓更多的程序員更高效的為產品服務。
級別不是衡量單維度的能力
對于程序員的級別到底應該對應何種能力,有很多極左或極右的認識。
極左派認為級別越高的程序員應該寫代碼越厲害。那么到底什么是厲害?
厲害是算法的能力嘛?如果是這樣的話那些國際編程競賽的金牌們應該是最頂級的程序員,但顯然不是。
厲害是做產品的能力嘛?Linux之父Linus一個人在1994年就寫出了第一版Linux內核,然而他1998年加入全美達公司后也只遠遠不是最高級別的技術人員(CTO或者是VP of Engineering)
極右派認為級別越高的程序員代碼能力越不重要。
他們覺得級別高的程序員只是會吹牛,或者會做PPT,把身下的程序員的功勞都攬在自己身上。
從一個角度上來說這是倒果為因,級別越高的程序員往往寫代碼的時間很少,而并不是他們的代碼能力不行。縱觀各個公司的技術高級職位,鮮有之前沒有在一線技術崗位干過很長時間的。比爾蓋茨、雷軍這些大家耳熟能詳的人物都是技術出身,并且技術能力都很強。
無論是極左派或者極右派,他們都忽視了一個事實:程序員的級別不應該只是衡量單維度的能力。
軟技能和硬技能
一個人的技能可以分為硬技能(Hard Skills)和軟技能(Soft Skills)。
對于程序員來說,硬技能包括并不限于算法,設計,實現,測試,架構等多個方面。高級程序員不比是寫代碼快,也不是比寫的代碼多,更不在于能寫出多么“精妙”的代碼。
程序員的硬技能實力應該表現在:
解決難的,復雜的,抽象的問題。
設計和實現出高效、可擴展、可維護的軟件、框架、系統。
推動組內、組間的技術方向發展。
如果你觀察一些公司里的大拿程序員,他們都或多或少的會在以上的方面展示過人的一面。做好以上的幾點,可以讓程序員變成一個好的“技術人”。
在硬技能方面之外,同樣還有軟技能,程序員的軟技能包括:
學習能力——快速掌握自己所不擅長的領域,并結合自身實際吸收和運用。
溝通能力——和技術和非技術性同事之間的進行高效流暢的溝通,能夠接受和傳達必要的信息。
協調能力——分清任務輕重緩急,把握住短期目標和長期目標之間的平衡,解決人與人之間的沖突。
……
程序員的軟技能和硬實力同樣重要,有的時候甚至要大于硬實力,為什么呢?
因為往往你不是一個人在工作,一個人的輸出和團隊相比是很有限的。一個人的硬技能再強,也突破不了自身的物理極限(時間、身體),而現代化的企業中,需要團隊的合作,才可以在短時間內完成龐大的工作。
再說Linus,他的硬技能強到可以一個人去寫操作系統,但是在所在他的公司里也不能做到最高級別的技術人員,究其原因,一個是他可能沒有野心不想去做,另一個重要原因是他的軟技能——特別是溝通能力上有很大的缺陷。如果由他來帶領團隊的話,那么可能還達不到他一個人的輸出能力。
但我們是否可以一味的只追求軟技能的提升軟技能,而不重視硬技能的發展呢?軟技能不是萬能的,軟技能也要硬技能做為依托。 學習、溝通、協調能力都是基于你自身對需要學習、溝通、協調的對象(技術)有清晰的認識,而這些認識來自于你的硬技能儲備。一個剛畢業的程序員,無論他的軟技能多么逆天,沒有技術上的積累,也很難勝任高端的職位。
我們可以用一個公式來總結一下:
程序員的影響力(Impact)∝自身的硬技能 *自身的軟技能 +所在團隊的能力 *自身軟技能
如果理解了這個公式,那么對于第一段中各個公司的級別不對稱現象就有清晰的認識,我們可以分析以下一些團隊的例子:
高技術小團隊 =》 強調單兵技術作戰能力 =》程序員的級別 ∝自身的硬技能
低技術小團隊 =》 強調單兵技術作戰能力和協力其他團隊的能力 ≈程序員的級別 ∝硬技能(少) *自身的軟技能
高技術大團隊 =》 需要協調高技術人才 =》程序員的級別 ∝自身的硬技能(多) *自身的軟技能
低技術大團隊 =》 需要充分的協調、管理能力 =》程序員的級別 ∝自身軟技能
總結
每個人都有自己擅長的和不擅長的,能夠揚長避短則事半功倍,反之盲目的追求不合適自己的高級級別,則事倍功半。看清自己的長處和短處,尋找最適合發揮自己的空間,這樣升級也會順利不少。
希望看完這篇博文,能夠讓大家開啟思索自己的升級之道,也祝大家早日步步高升。
-
程序員
+關注
關注
4文章
953瀏覽量
29843
發布評論請先 登錄
相關推薦
評論