我在大公司干活前,基本都在小公司之间辗转,对比两种公司的经历,切身感受到“人往高处走“绝非是空话。我在之前的博文里,多次讲到程序员该去大厂看看,在这篇博文里,将结合我和我朋友的所见所闻,从技术和发展前景等方面,综合讲述小公司和大公司里程序员的普遍差别,以此再让大家感受下大公司经历的重要性。不过本文不是停留于此,还更将针对小公司干杂事的程序员,给出逆袭到大厂的若干建议,好正文开始。
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 总结:进大公司后,你会发现挣钱能力一下子会提升许多
在上文里,我向大家展示了大公司的发展前景,可能有些在小公司的同学没切身体会,但不要紧,“人往高处走“的老话总不会错,当你付出努力进大公司以后,就会发现你挣钱的渠道一下子宽很多,挣钱的能力会提升不少。
努力才会有收获,进大公司的路不会很平坦,我在小公司仰望大公司的时候,的确也有过遥不可及的感受,在接到大公司的面试通知时,也产生过自卑感。不过咬牙面试后,发现进大公司并不像想象中那样难,里面的面试官也不是三头六臂的神,经过实践努力后,大公司的面试题也并不是高不可攀。而且,我见到的人里,经过踏实努力然后进大公司的例子也比比皆是。
所以对大家而言,大公司不在天边,而在眼前,只要大家退而结网,就一定能收获到大公司给与的发展红利
原文地址:
cnblogs/JavaArchitect/p/12097776.html