从面试官角度观察到的程序员工资瓶颈,同时给出突破瓶颈的建议
原文鏈接:
 https://gitbook.cn/books/5d98575e0f43867cba9d84a0/index.html
我在做技術面試官的時候,大多數面試的是初級開發和高級開發,偶爾也會面試架構師。我發現,IT 人的工資固然和相關技術的使用年限有關,但同時也發現,如果候選人的技能無法跨越到更高層次的話,他們的收入也就會停留在當前級別,哪怕工資年限再多,也無法提升工資。
比如,我就面試過不少工作了 5,6 年的程序員,他們的技能也就停留在增刪改查階段,那么他們只能領到初級程序員的工資。更可悲的時,在面試過程中我發現他們甚至不知道上升的途徑和方式,這樣的話,可能當他們有 10 年經驗的時候,或許還是初級程序員。本文將圍繞著初級程序員,高級程序員和架構師這三個職位,說明下這些級別的工資瓶頸,并給出若干突破瓶頸的建議。
1. 初級程序員的技能瓶頸與收入瓶頸
哪怕是非相關專業,從培訓班出來的程序員,要找個工作也不難,更何況是計算機相關專業出身的學生。
在一般的公司里,對初級程序員的要求大多也是會增刪改查,熟悉基本的業務,而且不少公司不會讓他們干更高級的活。所以我在面試過程中,不少 3 年以內的初級程序員的水平和一些有 5 年經驗的人差不多,這就進入了初級程序員的收入瓶頸。
比如 Java 方面,他們僅僅會用技能,比如集合,多線程,數據庫等,也會在 Spring 框架下干活,SQL 方面,僅會寫基本的 SQL 語句,或許還會使用簡單的索引等技能。但如果我問及底層代碼,他們知道得很少,問及 Spring 等框架知識,他們只會告訴我如何配置,如何在現有框架里干活。至于一些高級技能,比如分布式組件,或者 LInux 下的部署和日志排查,他們大多就不知道了。對于項目管理的工具,比如 Jenkins,sonar 等,他們可能都沒聽說過。
如果面試時僅表現為會干活,不會調優,不會分析和解決問題,那么能力上也就是初級開發。這樣的話,在上海,按當前行情,估計最高也就 12k 了,同時,如果干了 5 年還是這樣的話,那么競爭力會大大降低。那么如何提升到高級開發呢?
-  
在平時得熟悉調試代碼,并且,一旦組里出了問題,得盡量參與,剛開始可能分析和解決問題的能力不行,但慢慢就行了。
 -  
多看些優化方面的技能,以及比較熱門的技術,比如數據庫方面,別單純看 JDBC 的增刪改查,可以看些 NoSQL 甚至 redis 緩存,然后看下 SQL 調優技能。
 -  
多關注些項目開發和管理的技能,比如敏捷開發,站會,單元測試,集成部署,通過 Sonar 看代碼質量等。
 -  
這點比較關鍵,得多和別人交流,比如多和需求方溝通需求,多和測試方溝通問題重現步驟,多和組員領導溝通問題的實現方式。
 
其實初級開發升級到高級開發相對容易,只要主觀上態度上端正,別固步自封,然后到處看些資料多和人交流即可。
2. 高級程序員的技能瓶頸在于分布式組件
高級開發論技術,有一定的調優經驗,也有一定分析日志解決問題的能力,也能 debug。論解決問題的能力,也能和別人溝通,從而接簡單的需求,并能分析和解決一些問題。論團隊合作,也能帶 3,4 個人一起開發。其實這類能力,對工作個 3 年的程序員來說,不難達到,如果在節奏比較快的互聯網公司里,甚至 2 年即可達到。
論工資水平,當前在上海,高級開發拿個 15k 都算低,如果進個大公司,外帶 5 年左右開發經驗,估計能到 20k,如果在互聯網公司甚至能更高,但瓶頸估計在 25k 左右。
我面試高級開發,他們一般基礎知識比較扎實,比如 Java 集合內部的實現代碼,高并發的諸多類,或者 Spring 框架的一些關鍵底層代碼,都能說得上來。一般給我的高級開發的面試標準是,所需初級開發的技能,并在此基礎上具有一定的調優能力,通過日志定位問題,設計解決方案和解決實際問題的能力,而且 linux 上也能部署代碼。只要能說得上來,一般能給到高級開發的工資,就多少的問題。
但我面試時,感受非常深的是,和架構師相比,高級開發對于分布式組件或基于云組件(比如 k8s)或其它高并發分布式組件,有些人可能用過,但僅限于會用其中的 API,讓他們搭建一個集群,他們可能就力所不能及了,如果再問他們分布式組件在項目開發時經歷過的坑,他們大多也說不上來。
比如我問,Dubbo 里通訊協議有哪些?高級開發一般能說得上來,因為這有現成資料,但我再問,根據你們的業務實際情況,你們用的是長連接還是短連接方式?為什么要用這種協議?他們估計就很難回答。如果我再問,如果要處理高并發的請求,需要在 Dubbo 里做哪些配置?如何同其它組件搭建成集群?高級開發就更難回答了。
同初級開發升級到高級開發相比,高級開發升級到架構師更難,因為在一般的工作環境里,高級開發很難有相應的實踐機會。不過話說回來,如果程序員有 8 年經驗后還是高級開發,那么競爭力會逐步下降,一方面很難再要到更高的工資,另一方面很難通過面試爭取到架構師的工作機會。那么高級開發如何升級到架構師呢?這個時候光靠態度就不行了。
-  
理論知識不可少,甚至在自己電腦上,可以搭建個腳手架項目,比如自己裝個虛擬機,搭建個 dubbo 集群等。
 -  
最好要找個互聯網公司實踐下,哪怕在互聯網公司干的是高級開發的活,一定也有機會接觸分布式組件,這樣就有相關經驗了。
 -  
比如高級開發,架構師更得了解集群,而不是單機版的代碼,所以更得關注一些技術以外的技能,比如負載均衡,容錯處理,通訊協議和流程等。
 -  
雖然說光靠態度不行,但沒態度也不行,在升級過程中,可能因定位問題不及時不準確,或者提出的方案有瑕疵,從而受到別人挑戰,相反如果回到高級開發的舒適區也能穩定地過日子。我自己也有體會,我幸虧遇到了好師傅,而且我師傅的師傅是大牛,也為我指明了不少進階方向。否則的話,這條升級路能堅持下來,還能難說。
 
3. 架構師的瓶頸在于項目實踐經驗
目前在上海,架構師的月薪普遍在 30k 以上,如果稍微資深點的話,35k 也不是問題,如果是一個公司的主心骨的話,就更沒上限了。
雖然不多,但我好歹也面試過 Java 方面的架構師,我在面試過程中發現,一些資深的架構師,相關實踐經驗相當豐富,更有部署上線和在線排查問題方面的經驗。
比如 MyCAT 分庫分表方面,高級開發會使用,一般的架構師會搭建集群,也會排查產線問題,而資深架構第一能知道該如何上線,上線時如何采用分組發布確保數據兼容性,上線后又該如何清洗數據,如果上線過程中出現問題又該如何回退。
如果說,架構師還有人可以問的話,資深架構則沒人可問,有問題得靠自己之前踩坑獲得的經驗,或者自己找資料。從這個意義上來講,在架構師級別,如果技術上再要提升,那么只能多靠解決實際問題時積累的經驗,而且更得結合業務,把負載均衡,容錯處理等處理高并發的理念用分布式組件實現。這方面,我們可以參照下 BAT 或知名互聯網公司的架構知識體系。
4. 在任何時候,態度都是限制發展的瓶頸
不管是面試初級程序員還是高級開發或者是架構師,我發現一些表現好的,都比較積極向上。
比如回答問題時聲音洪亮,溝通時也有盡量向表達清楚的愿望,哪怕某個方面回答不正確,但也能看出平時在不斷積累知識,當被追問比較深時,也能比較耐心地一一解答,總之通過交流,給人的印象是比較靠得住。有些人甚至平時會寫博客,或者出過書,或者想盡一切辦法來積累和提升自己。這類人大多能過,哪怕個別過不了,但未來潛力也是非常可觀的。
但相反,有些回答不好的候選人,總會給人些得過且過敷衍的感覺,比如回答問題比較簡單,或者總是想套面試官的話,或者總想用些模棱兩可的回答來蒙混過關。
我和其它的面試官溝通以后,對此感受很深,總是先自己要了,然后再肯上進,再自發地歸納出好的學習方法,并能有效地進行時間和工作任務管理。
我見到過不少反面的案例,這些人論資質不錯,但或者光有決心沒行動,或者干脆陷入在舒適區不可自拔,這些人很難有技術上的突破。相比之下,初級程序員在有決心有行動后,升級所需的時間不會超過 1 年,有些半年就夠了,高級開發升級到架構師可能有些難度,但一般不會超過 2 年。
所以說,態度要端正,人要上進,這話說起來太容易,但能做到的并且能堅持下來的人數并不多,所以態度是發展的瓶頸,這話雖然通俗,但不無道理。
5. 技術可以暫時落后,但任何時候都要有上進的信念
本文提到的各級別程序員的瓶頸和突破建議,都是我和其它多位面試官在面試過程中總結而來,希望能對大家有所幫助。
再者,除去因升級而帶來的收入提升外,在任何技術前提下,都有對應的掙錢手段。比如我在 CSDN 等地,看到不少大學生朋友靠寫文章掙錢,而開專欄也并不是要多高深的技術積累。同時,當程序員升級到高級開發后,就能通過寫書或者錄制視頻等方式掙錢。此外,如果是接項目,在各技術層面都有對應的項目。不過話說回來,對我們程序員來說,在任何公司任何職位任何場景,都有機會進入到舒適區“享福”。
有道是“技術窮但志不能短”,我在博客園里就見識過不少靠努力翻身的例子,在我身邊的同事朋友里,也經常看到“半年后技術大變樣”的例子,這些榜樣能激勵我不斷上進。所以本文在給出突破瓶頸建議的同時,更希望大家要有不斷上進的信念。
總結
以上是生活随笔為你收集整理的从面试官角度观察到的程序员工资瓶颈,同时给出突破瓶颈的建议的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: RabbitMQ 入门系列(6)— 如何
 - 下一篇: 本田摩托多少钱啊?