不少年前,刚刚从大学毕业的时候,不少公司来校招。其中最烂俗的一个面试问题是:“你但愿你以后三到五年的发展是什么?”。我当时的标准回答是(原话):“成为在某一方面可以独当一面的技术专家“。后来经历了几家不一样的公司,换了不一样的方向,才知道这个真是一个很难的问题。由于兵无常势,什么东西都是在不断的变化,一早的时候看好的东西可能会被淘汰。程序员
(几乎)没有人可以看准技术的下一个方向,由于这个问题实在是太难了,可以作到这一点的你就成为了技术界的巴菲特了。好比说11年加入Google,14年加入Facebook,16年加入阿里巴巴。作到这一点的人确定有资本也有眼光去作风险投资,就算不作风险投资那么财务自由也是妥妥的。面试
如今毕业六年,从北京到上海到硅谷,从国内互联网公司外企,看到了公司好的地方和坏的地方,这里只是根据本身的经历写一些大方向选择建议,仅供参考。sql
1、行业背景很重要数据库
行业背景很是重要;工做3年后必须肯定本身的行业背景,好比一直从事电信行业,一直从事银行项目,一直从事ERP行业等等。后端
一个程序员不多是一直写代码的,就是写代码也要知道业务逻辑,知足什么需求;俗话说隔行如隔山,每一个行业的业务都不同,甚至差异很大,好比你一直从事流媒体的研究,让你跳槽到一家银行项目,完了,一切从头学吧,之前的行业经验都用不上了;并且,一个公司公司招人,就是但愿找到那些很容易上手,不须要培训业务好久的程序员;频繁跳槽的朋友,必定要注意这点;性能优化
一直在一个行业呆久了,就能够成为这个行业的专家;咱们能够常常看到,一个项目组的某个leader,代码写的通常,可是却能够跟客户流畅的沟通,控制着新需求的提出,bug的修正等等;而客户也很愿意跟他打交道,由于那些老的项目只有他能维护,他甚至熟悉系统的每一张表结构——-可想在这个行业呆的时间有多久啦。架构
第2、合理的职业规划并发
什么是职业规划—-就是你短时间或者长期的一个职业计划!大道理不讲,咱简单点。先问你几个问题:分布式
- 你工做几年了,你愿意一直和新入行的新手同样就是个简单的程序员吗?
- 你愿意一直写代码,而不关心其余吗?
- 一个项目的前期需求,设计,后期部署维护,领导找到你,你说咱搞不定,行吗?
程序员不是敲代码的机器。第一年太多东西不懂,你能够一切遵从老大的安排,敲敲代码,看看数据库,测试本身和别人的代码;可是第二年,你仍是这样吗?不可能的,一年的经验你彻底能够入行了,是时候该学习怎么进行需求分析,怎么设计数据库,怎么写各种文档,怎么写更好的代码?这是高级程序员的要求!微服务
3、什么是高级程序员?
具备分析设计能力,能进行技术攻关,并且具备某行业深厚背景的程序员!
全部,一个项目立项后,你要积极的参与到前期设计中,跟老同志们一道思考分析问题,学习经验!OK,你这就成长啦!
千万不要认为程序员就是写代码的哦!!!
并且,经过一个项目的开发,你要能粗略的统计出一个功能的开发时间;好比一个模块有20个小功能点,你开发了80个小时,每一个小功能点平均2小时——这时在前期就能评估工做量啦。固然每一个人的效率和工做质量是不一样的,因人而异,可是大概的工做量应该是能够统计出来的,用于统计一个项目的工做周期;
4、不要以为业务代码同样很牛逼
有人认为写业务代码同样能够很牛逼,理由是业务代码同样能够有各类技巧,例如可使用封装和抽象使得业务代码更具可扩展性,能够经过和产品多交流以便更好的理解和实现业务,日志记录好了问题定位效率能够提高10倍等等。
业务代码同样有技术含量,这点是确定的,业务代码中的技术是每一个程序员的基础,但只是掌握了这些技巧,并不能成为技术大牛,就像游戏中升级打怪同样,开始打小怪,经验值很高,越到后面经验值越少,打小怪已经不能提高经验值了,这个时候就须要打一些更高级的怪,刷一些有挑战的副本了,没看到哪一个游戏只要一直打小怪就能升到顶级的。成为技术大牛的路也是相似的,你要不断的提高本身的水平,而后面临更大的挑战,经过应对这些挑战从而使本身水平更上一级,而后如此往复,最终达到技术大牛甚至业界大牛的境界,写业务代码只是这个打怪升级路上的一个挑战而已,并且我认为是比较初级的一个挑战。
因此我认为:业务代码都写很差的程序员确定没法成为技术大牛,但只把业务代码写好的程序员也还不能成为技术大牛。
5、别以上班太忙没时间学习为借口
不少人认为本身没有成为技术大牛并非本身不聪明,也不是本身不努力,而是中国的这个环境下,技术人员加班都太多了,致使本身没有额外的时间进行学习。
这个理由有必定的客观性,毕竟和欧美相比,咱们的加班确实要多一些,但这个因素只是一个须要克服的问题,并非不可逾越的鸿沟,毕竟咱们身边仍是有那么多的大牛也是在中国这个环境成长起来的。
我认为有几个误区致使了这种见解的造成:
- 上班作的都是重复工做,要想提高必须本身额外去学习
- 造成这个误区的主要缘由仍是在于认为“写业务代码是没有技术含量的”,而我如今上班就是写业务代码,因此我在工做中不能提高。
- 学习须要大段的连续时
- 不少人觉得要学习就要像学校上课同样,给你一成天时间来上课才算学习,而咱们平时加班又比较多,周末累的只想睡懒觉,或者只想去看看电影打打游戏来放松,因此就没有时间学习了。
实际上的作法正好相反:首先咱们应该在工做中学习和提高,由于学以至用或者有实例参考,学习的效果是最好的;其次工做后学习不须要大段时间,而是要挤出时间,利用时间碎片来学习。
据不彻底统计,截至目前(2017.07)为止,中国Java程序员的数量已经超过了100万。并且,随着IT培训业的持续发展和大量的应届毕业生进入社会,Java程序员面临的竞争压力愈来愈大。那么,做为一名Java程序员,怎样努力才能快速成长为一名高级的程序员或者架构师,或者说一名优秀的高级工程师或架构师应该有怎样的技术知识体系,这不只是一个刚刚踏入职场的初级程序员,也是工做三五年以后开始迷茫的老程序员,都必需要面对和想明白的问题。
我总结出一个Java程序员的工做2-5年成长路线图
1、阅读源码
深刻的Java学习,经典源码阅读不可少:
2、分布式架构
随着业务愈来愈复杂,数据量愈来愈大,并发量愈来愈大,单体的架构模式显然再也没法对应,做为Java后端架构师,高并发+高可用+海量数据的分布式架构体系,是必不可少的:
3、微服务技术体系
服务分层,微服务架构是架构升级的必由之路,Java技术体系,和微服务相关的技术有哪须要深刻学习呢?
4、性能优化
做为后端Java技术专家,解决性能问题才真正体现一个架构师的功力。只有深刻学习JVM底层原理,Mysql底层优化以及Tomcat调优,作到知其然,知其因此然: