我在大公司干活前,基本都在小公司之间展转,对比两种公司的经历,切身感觉到“人往高处走“绝非是空话。我在以前的博文里,屡次讲到程序员该去大厂看看,在这篇博文里,将结合我和我朋友的所见所闻,从技术和发展前景等方面,综合讲述小公司和大公司里程序员的广泛差异,以此再让你们感觉下大公司经历的重要性。不过本文不是停留于此,还更将针对小公司干琐事的程序员,给出逆袭到大厂的若干建议,好正文开始。java
从毕业到工做5年,若是程序员一直在小公司干,若是再不注意积累,可能顶天了也就是个熟练工,熟悉本公司的业务,来了新需求,能很快地完成功能并交付测试,若是一个公司呆久了,可能再循例升级到组长或项目精力,带一帮人完成功能业务,或者再凭借良好的人际关系,高效地和其它组交流。linux
也就是说,在小公司里干,时间可能更多用在重复性的实现业务上。从技术角度上来说,和刚毕业的人相比,多是会知道一些项目开发的坑,也可能会多用些项目管理的工具,项目开发的经验可能也相对丰富些。但熟练工嘛,可替代性太强,或许上点心的毕业生,工做个1年也就能达到熟练工的水准了。
但若是程序员毕业后一直在大公司里干,5年后,若是上进些,技术层面应该掌握很多值钱的技术,好比大数据,分布式组件或云端部署,从经验角度,能够调试和排查组件底层的问题,从运维角度,至少能在linux部署组件,这种人若是继续在大公司里深造,晋级到资深架构指日可待,若是这个时候去小公司,作个技术主管问题应该也不大。程序员
话不能说绝对,在大公司里混得很惨的人也有,在小公司里不断上进,最后实现财务自由的人也很多,但这里就有个几率问题。相对而言,大公司员工广泛要比小公司员工能力更强,从而挣的钱也就更多,这也是为何不少人要去大公司的缘由。面试
为何大公司里的员工发展前景要好呢?由于大公司的业务量大,因此用的技术更值钱,里面的员工有足够多的机会积累值钱技术的项目经验,并且大公司牛人多,经过和这些大神的交流,第一技术发展的视野就更宽广,第二自我探索的试错成本也会低不少。 spring
相对而言,在小公司里,可能更看重实现业务,而并发量等指标相对很低,并且小公司未必有足够的试错空间,因此小公司的员工可能在平时开发过程当中未必能直接实践分布式,机器学习,数据分析和云端的技能。若是小公司的员工要本身学,限于接触的技术面,可能就须要更多的时间来尝试了。数据库
这我有亲身经历,以前在小公司,也就部署个SSM,外带些java+JDBC的功能,只求功能没毛病。我在小公司的时候,也能算不断上进,但也就深挖个Java核心方面的底层代码,或者在数据库方面也就探索个诸如执行计划等的单机版的优化方式,这些有用,但仅仅算最基本的技能。性能优化
但在大公司里,接触的都是分布式部署,产线上须要上万并发量,性能优化就不提了,平时动辄调试产线dubbo, netty, mycat等问题,并且查问题时须要进入到dubbo等底层代码,平时还有大神按期分享热门知识点,能够这样说,比起大公司的视野,我在小公司里就像井底之蛙。数据结构
或许这不是个例,我平时在面试过程当中,发现有大公司背景的候选人综合能力广泛要比只有小公司经历的要强,而一些30岁以上而且只有小公司经历的候选人,大多竞争力都退化了。mybatis
程序员在刚毕业的几年里,能够频繁跳槽,但到了30岁,就应该稳定下来。这里的稳定绝非是不拥抱变化,更不是混吃等死养老,而是要稳定的在一个公司的岗位上不断积累技能和经验,而后想办法提高到架构师或技术专家。架构
但一些小公司可能无法作到这点,好比业务线变动,或者组织架构调整,甚至各类缘由公司倒闭,或许有时候不是程序员的缘由,但频繁遇到这种变更的话,程序员可能每次都得从零开始接触业务和技术,若是每次技术面都不一样的话,那么何来经验积累?要知道,架构师和技术专家乃至CTO,都是须要靠时间沉浸的。
我在面试的时候,见到很多30岁之后的程序员,最近3年里不断在一些小公司间展转,他们也是一脸无奈,告诉我各类缘由,好比公司爆雷了,或者业务线被卖了。若是缘由合理,不会质疑候选人的稳定性。但若是本招聘岗位须要spring cloud 5年经验的,候选人在不断变更中,spring cloud只有3年经验,若是再因积累经验过少而无法回答出一些深层问题,那么就很吃亏了。若是年纪再大些,或者还只能继续在小公司里碰运气。
技术不能当饭吃,因此这里就直接些,从挣钱角度分析小公司和大公司间的差异。
小公司的程序员,干了若干年后,工资上升的幅度就很是有限了,顶多一年加个几百。老板不傻,这些人干的活和新毕业生差很少,顶多经验丰富些,干活快些,而新员工由于没有家庭等负担,还能加班。并且老板也知道,这些人由于竞争力退化,跳槽风险很低,哪怕走了,找个能替代的员工就好了。因此老板敢压低工资。
而在小公司里,拿高工资的,通常都是老板从大公司里请来的,在小公司里凭能力提高到高级岗位的,不能说没,但不多,通常途径都是先到大公司镀个金,而后再到小公司作个技术主管。
但若是在大公司里,哪怕到了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岁之后依然在小公司间游荡,那么后继若是要再挣更多的钱,不是说不行,但付出的努力相对要多不少了。
在上文里,我向你们展现了大公司的发展前景,可能有些在小公司的同窗没切身体会,但没关系,“人往高处走“的老话总不会错,当你付出努力进大公司之后,就会发现你挣钱的渠道一会儿宽不少,挣钱的能力会提高很多。
努力才会有收获,进大公司的路不会很平坦,我在小公司仰望大公司的时候,的确也有过高不可攀的感觉,在接到大公司的面试通知时,也产生过自卑感。不过咬牙面试后,发现进大公司并不像想象中那样难,里面的面试官也不是三头六臂的神,通过实践努力后,大公司的面试题也并非遥不可及。并且,我见到的人里,通过踏实努力而后进大公司的例子也比比皆是。
因此对你们而言,大公司不在天边,而在眼前,只要你们退而结网,就必定能收获到大公司给与的发展红利。
版权说明:
若是要转载本文,请先征得本人赞成。