我在大公司干活前,基本都在小公司之間輾轉,對比兩種公司的經歷,切身感受到“人往高處走“絕非是空話。我在之前的博文里,多次講到程序員該去大廠看看,在這篇博文里,將結合我和我朋友的所見所聞,從技術和發展前景等方面,綜合講述小公司和大公司里程序員的普遍差別,以此再讓大家感受下大公司經歷的重要性。不過本文不是停留於此,還更將針對小公司干雜事的程序員,給出逆襲到大廠的若干建議,好正文開始。
1 工作五年后,兩類程序員技術上的普遍差距
從畢業到工作5年,如果程序員一直在小公司干,如果再不注意積累,可能頂天了也就是個熟練工,熟悉本公司的業務,來了新需求,能很快地完成功能並交付測試,如果一個公司呆久了,可能再循例升級到組長或項目精力,帶一幫人完成功能業務,或者再憑借良好的人際關系,高效地和其它組交流。
也就是說,在小公司里干,時間可能更多用在重復性的實現業務上。從技術角度上來講,和剛畢業的人相比,可能是會知道一些項目開發的坑,也可能會多用些項目管理的工具,項目開發的經驗可能也相對豐富些。但熟練工嘛,可替代性太強,或許上點心的畢業生,工作個1年也就能達到熟練工的水准了。
但如果程序員畢業后一直在大公司里干,5年后,如果上進些,技術層面應該掌握不少值錢的技術,比如大數據,分布式組件或雲端部署,從經驗角度,可以調試和排查組件底層的問題,從運維角度,至少能在linux部署組件,這種人如果繼續在大公司里深造,晉級到資深架構指日可待,如果這個時候去小公司,做個技術主管問題應該也不大。
話不能說絕對,在大公司里混得很慘的人也有,在小公司里不斷上進,最后實現財務自由的人也不少,但這里就有個概率問題。相對而言,大公司員工普遍要比小公司員工能力更強,從而掙的錢也就更多,這也是為什么很多人要去大公司的原因。
2 技術視野方面,兩類程序員不能相提並論
為什么大公司里的員工發展前景要好呢?因為大公司的業務量大,所以用的技術更值錢,里面的員工有足夠多的機會積累值錢技術的項目經驗,而且大公司牛人多,通過和這些大神的交流,第一技術發展的視野就更寬廣,第二自我探索的試錯成本也會低很多。
相對而言,在小公司里,可能更看重實現業務,而並發量等指標相對很低,而且小公司未必有足夠的試錯空間,所以小公司的員工可能在平時開發過程中未必能直接實踐分布式,機器學習,數據分析和雲端的技能。如果小公司的員工要自己學,限於接觸的技術面,可能就需要更多的時間來嘗試了。
這我有親身經歷,之前在小公司,也就部署個SSM,外帶些java+JDBC的功能,只求功能沒毛病。我在小公司的時候,也能算不斷上進,但也就深挖個Java核心方面的底層代碼,或者在數據庫方面也就探索個諸如執行計划等的單機版的優化方式,這些有用,但僅僅算最基本的技能。
但在大公司里,接觸的都是分布式部署,產線上需要上萬並發量,性能優化就不提了,平時動輒調試產線dubbo, netty, mycat等問題,而且查問題時需要進入到dubbo等底層代碼,平時還有大神定期分享熱門知識點,可以這樣說,比起大公司的視野,我在小公司里就像井底之蛙。
或許這不是個例,我平時在面試過程中,發現有大公司背景的候選人綜合能力普遍要比只有小公司經歷的要強,而一些30歲以上並且只有小公司經歷的候選人,大多競爭力都退化了。
3 小公司遇到動盪的概率會被大公司大很多,所以小公司的程序員看上去不穩定
程序員在剛畢業的幾年里,可以頻繁跳槽,但到了30歲,就應該穩定下來。這里的穩定絕非是不擁抱變化,更不是混吃等死養老,而是要穩定的在一個公司的崗位上不斷積累技能和經驗,然后想辦法提升到架構師或技術專家。
但一些小公司可能沒法做到這點,比如業務線變更,或者組織架構調整,甚至各種原因公司倒閉,或許有時候不是程序員的原因,但頻繁遇到這種變動的話,程序員可能每次都得從零開始接觸業務和技術,如果每次技術面都不同的話,那么何來經驗積累?要知道,架構師和技術專家乃至CTO,都是需要靠時間沉浸的。
我在面試的時候,見到不少30歲以后的程序員,最近3年里不斷在一些小公司間輾轉,他們也是一臉無奈,告訴我各種原因,比如公司爆雷了,或者業務線被賣了。如果原因合理,不會質疑候選人的穩定性。但如果本招聘崗位需要spring cloud 5年經驗的,候選人在不斷變動中,spring cloud只有3年經驗,如果再因積累經驗過少而沒法回答出一些深層問題,那么就很吃虧了。如果年紀再大些,或者還只能繼續在小公司里碰運氣。
4 從掙錢的能力上看,大公司的程序員沒上限
技術不能當飯吃,所以這里就直接些,從掙錢角度分析小公司和大公司間的差別。
小公司的程序員,干了若干年后,工資上升的幅度就非常有限了,頂多一年加個幾百。老板不傻,這些人干的活和新畢業生差不多,頂多經驗豐富些,干活快些,而新員工因為沒有家庭等負擔,還能加班。而且老板也知道,這些人因為競爭力退化,跳槽風險很低,哪怕走了,找個能替代的員工就行了。所以老板敢壓低工資。
而在小公司里,拿高工資的,一般都是老板從大公司里請來的,在小公司里憑能力提升到高級崗位的,不能說沒,但很少,一般途徑都是先到大公司鍍個金,然后再到小公司做個技術主管。
但如果在大公司里,哪怕到了30歲以后,見過世面的程序員比比皆是,而且大多能獨當一面,雖然不能說無可替代,但哪天這些程序員只要高興,或者再憑經驗到其它大公司,或者到小公司里做技術,或者干脆就找個外企養老。所以大公司里工資增加的幅度一般不會低,而且經過大公司栽培后,也比較容易升級到架構師,到了架構師級別,工資就更沒上限了。
以上是主業,再說副業,小公司的程序員由於接觸到的技術面和人脈關系有限,可能也就掙個搬磚的錢。但如果在大廠干個幾年,再憑技術出幾本有技術深度的書,再經大公司高級職位的加持,外帶一些大神的推薦,至少在業內也能混個臉熟,憑此也能接到更多性價比高的外快了。
5 爭取30歲前進大廠,如果當前技術不行,趕緊努力
以上講的是進大公司的好處,前文是曉之以利,后面不是帶貨,而是給出建議了。其實大公司並不難進,一方面當前市面上類似教學視頻太多,哪怕基礎再差,看了這些好歹面試能吹吧,另一方面,大公司確實也在不斷招人,剛開始沒法以正式員工進去,可以先以外派的身份進吧。
但比較可悲的,是身在舒適區但安於現狀,淺嘗輒止挖掘一些所謂的技術后就夜郎自大。我面試一些高級開發的時候,有不少候選人會自信心爆棚,一些java核心和單機版的數據庫調優技能確實答得很好,有個別候選人甚至會顯擺類似“回有四種寫法”這些華而不實但實用性有限的技能。但當我深入到分布式組件架構這塊,這些候選人大多只知道皮毛。我非常為他們感到可悲,送他們走的時候也會和他們說,該去看哪些組件知識點,甚至還會推薦些書。但如果遇到些自我感覺過於良好的候選人,這些建議能有多少幫助呢?
但相反,我也在做線下培訓,哪怕當前技能再沒競爭力,只要態度端正了,其實后面都是體力活。
1 在做本職工作的時候,多上心,多去解決些產線問題,多去接觸些運維部署的技能。比如以前競賽,競賽題是來源於基礎,基礎扎實了,后繼才有提升的空間。
2 大公司面試要求會高,這里給出些補習基礎的技巧:通過ConcurrentHashMap綜合了解下數據結構,集合,並發的點,通過線程池加netty,了解下並發框架的實現方式,通過執行計划和索引了解下單機版的性能調優,框架方面,多去看下spring的ioc和aop, mybatis方面多去看下諸如事務的配置,分布式數據庫方面,了解下基於mycat的分庫分表外帶主從熱備的技巧,分布式消息方面,看下kafka實現冪等的方式,和zk+dubbo框架的實現方式。
3 然后是提升核心技能,這塊可以從底層協議和底層實現方式來看,比如看下netty的線程模型,零拷貝等,dubbo暴露服務等的方式,總之分布式組件方面,不僅要用,而且多少能了解細節和底層。
4 然后把技術和項目經驗綁定到一起,比如你netty+線程池是如何在工作項目里做的,做了有什么好處?如何部署的,這樣言之灼灼說出來,不由得面試官不信。
5 外帶准備些分析問題和解決問題案例,比如你遇到OOM是怎么排查的,遇到kafka消息重復消費問題后,是如何日志發現問題的。
至於Java的一些技巧,比如鎖,集合里的快速失效,這種可以准備,但包含的技能和之前提到的相比,太不值錢了。
為什么要提30歲前進大公司呢?一方面一些大公司有年齡限制,另一方面,如果30歲以后依然在小公司間游盪,那么后繼如果要再掙更多的錢,不是說不行,但付出的努力相對要多很多了。
6 總結:進大公司后,你會發現掙錢能力一下子會提升許多
在上文里,我向大家展示了大公司的發展前景,可能有些在小公司的同學沒切身體會,但不要緊,“人往高處走“的老話總不會錯,當你付出努力進大公司以后,就會發現你掙錢的渠道一下子寬很多,掙錢的能力會提升不少。
努力才會有收獲,進大公司的路不會很平坦,我在小公司仰望大公司的時候,的確也有過遙不可及的感受,在接到大公司的面試通知時,也產生過自卑感。不過咬牙面試后,發現進大公司並不像想象中那樣難,里面的面試官也不是三頭六臂的神,經過實踐努力后,大公司的面試題也並不是高不可攀。而且,我見到的人里,經過踏實努力然后進大公司的例子也比比皆是。
所以對大家而言,大公司不在天邊,而在眼前,只要大家退而結網,就一定能收獲到大公司給與的發展紅利。
版權說明:
如果要轉載本文,請先征得本人同意。