前言
很多年前,刚刚从大学毕业的时候,很多公司来校招。其中最烂俗的一个面试问题是:“你希望你之后三到五年的发展是什么?”。我当时的标准回答是(原话):“成为在某一方面能够独当一面的技术专家“。后来经历了几家不同的公司,换了不同的方向,才知道这个真是一个很难的问题。因为兵无常势,什么东西都是在不断的变化,一早的时候看好的东西可能会被淘汰。
(几乎)没有人能够看准技术的下一个方向,因为这个问题实在是太难了,能够做到这一点的你就成为了技术界的巴菲特了。比如说11年加入Google,14年加入Facebook,16年加入阿里巴巴。做到这一点的人肯定有资本也有眼光去做风险投资,就算不做风险投资那么财务自由也是妥妥的。
现在毕业六年,从北京到上海到硅谷,从国内互联网公司外企,看到了公司好的地方和坏的地方,这里只是根据自己的经历写一些大方向选择建议,仅供参考。
一、行业背景很重要
行业背景非常重要;工作3年后必须确定自己的行业背景,比如一直从事电信行业,一直从事银行项目,一直从事ERP行业等等。
一个程序员不可能是一直写代码的,就是写代码也要知道业务逻辑,满足什么需求;俗话说隔行如隔山,每个行业的业务都不一样,甚至差别很大,比如你一直从事流媒体的研究,让你跳槽到一家银行项目,完了,一切从头学吧,以前的行业经验都用不上了;而且,一个公司公司招人,就是希望找到那些很容易上手,不需要培训业务很久的程序员;频繁跳槽的朋友,一定要注意这点;
一直在一个行业呆久了,就可以成为这个行业的专家;我们可以经常看到,一个项目组的某个leader,代码写的一般,但是却可以跟客户流畅的沟通,控制着新需求的提出,bug的修正等等;而客户也很愿意跟他打交道,因为那些老的项目只有他能维护,他甚至熟悉系统的每一张表结构——-可想在这个行业呆的时间有多久啦。
第二、合理的职业规划
什么是职业规划—-就是你短期或者长期的一个职业计划!大道理不讲,咱简单点。先问你几个问题:
a.你工作几年了,你愿意一直和新入行的新手一样就是个简单的程序员吗?
b. 你愿意一直写代码,而不关心其他吗?
c. 一个项目的前期需求,设计,后期部署维护,领导找到你,你说咱搞不定,行吗?
程序员不是敲代码的机器。第一年太多东西不懂,你可以一切听从老大的安排,敲敲代码,看看数据库,测试自己和别人的代码;但是第二年,你还是这样吗?不可能的,一年的经验你完全可以入行了,是时候该学习怎么进行需求分析,怎么设计数据库,怎么写各类文档,怎么写更好的代码?这是高级程序员的要求!说到有计划还是随变化,现在互联网技术更新的快,随着技术的不断更新我们应该随互联网的变化而有计划的学习。
三个阶段
如果去记录程序员的知识衰退和积累速度,我认为可能会是这样:
在职业生涯的开始,可以称之为热切的学徒阶段,积累知识比较容易。一切都是新的,每个经验都是获得更多知识的工具。而且,由于年轻,我们不会有太多的义务,所以可能不介意花几个晚上和周末拿起新的语言和框架。重要的是,雇主对我们的期望值也比较低,我们可以在工作期间抠出一点时间来填补知识。这是一个有趣的阶段,连自己都没意识到自己有多坚持。
在这个充满知识的阶段,我们开始赢得客户、同行和管理者的尊重,获得头衔、薪水和机会。虽然我们当时不一定看得出来,但这也是一个重要的转折点。
两件事情发生了。首先,“高级”的晋升不仅仅是金钱,而是更多的期待。雇主需要他们的“明星程序员”成为领导者 – 帮助初级开发人员,审查代码,执行访谈,参加更多会议,帮助他们维护、构建复杂的旧版软件。这一切都很合理,但它巧妙地牺牲了我们的知识积累速度,我们不再有时间去读一些科技博客、文章。第二,这时候,我们首次体会到(或至少认识到)一点点知识的朽烂,早期学到的一些东西开始过时了。
随后,我们进入第三个,也是最后一个阶段,衰落和流失。是的,我们是知识渊博和富有成就的,但我们也明白,事实上知道的已经比最初阶段更少(有用的)东西。我们可能没有时间积累足够的新知识来填补,这是令人沮丧的。我认为这就是为什么,在这时候,许多人开始转向 – 管理、销售、测试或农业(我的梦想)。我们意识到需要再次努力来保持我们的水平和熟练度 – 不然的话,我们的工作会在 5 年后比现在更糟。
两个方向
我正处于第三阶段。我还是很喜欢学习,但我明白,不努力的话,我可能会一直保持在“专家”的平衡状态边缘。
首先,我尝试采取长远的观点。不要过度榨取自己,要尽可能的取得获得新经验的机会。我看到不少同事虽然获得了丰厚的薪酬,但职业很少有机会接触新兴事物。再过五年,他们会意识到他们的宝贵知识已经蒸发,薪酬与实际价值相去甚远。在某些情况下,我认为短期内赚更少的钱(有更好的雇主)会在长期的职业生涯中产生更多的钱(和稳定)。
第二,考虑到时间有限,我试图去学习那些耐用的知识。也就是说,把精力投入在那些有更长的衰减期的知识上,比如,算法逻辑、应用安全、性能优化和架构。
最后,希望作各位程序员,要学会厚积薄发,应掌握安分守己,找准自己的核心竞争力,不断打磨,不断实践,才能临危不惧,活出精彩,最终迎来下一波红利,大家继续加油哦!!!
JAVA程序员技能提升路线:
Ⅰ、架构师筑基专题
成为一名优秀的架构师之前,必须熟练Linux操作系统,从JVM内存模型到深度优化实战,从Java程序性能优化过渡Tomcat、Mysql深度优化实战,从Netty框架入门使用到Netty源码解读实战,让并发编程与你的应用业务场景结合更紧密,系统性能直线提升上千倍,全面学习架构筑基专题,从性能调优到并发编程,逐步脱变成优秀的Java架构师。
二、开源框架解析专题
源码解读是一位合格架构师的必备技能,站在更高的角度来分析及解决技术疑难问题;所以必须学习开源框架的常用设计模式及经典设计思想,扎实源码内功基础,学习大牛们源码设计思想及技术规范,从源码学习过程中提升个人技术审美观及架构设计思想。多了解大牛们的源码分析及应用经验,以Spring5与Mybatis的基础应用编码为起点,去寻找底层源码切入点,让开源框架底层技术不再神秘。
三、高性能架构专题
熟悉大牛的源码框架后,接下来我们进入高性能架构专题学习,先讲解传统技术架构到大型互联网架构的演进过程,如何将传统软件技术升华到高并发高性能的互联网技术,理论与实战充分结合,让每个技术点学而不忘。然后再从高性能架构技术的基础入门,到技术架构的逐步进阶,再到技术架构的高级专题,最后通过多个实战环节将所有技术点巩固加强,让每个人在高性能架构技术的深度及宽度上得到跳跃式提升,成为互联网企业的核心技术人才。
四、微服务架构专题
在高并发的应用场景下,微服务技术是互联网平台必选的架构技术,目前国内较流行,用得较多的有Spring Boot, Spring Cloud, Duboo, 不仅要学习微服务架构的应用知识,还要会从底层源码透析每个开源框架的设计模式及设计思想,还有Docker虚拟化技术等等,使用微服务改变互联网系统的并发瓶颈,让你的平台开发更加高效、快捷。
五、团队协作开发专题
高速发展的互联网生态环境下,除了拥有优秀的架构技术之外,高效快捷的团队协作开发技能必不可省,优秀的架构师如何为企业减轻成本,如何更高效高质量的完成系统,学习团队协作开发,你不再是旁观者。
六、B2C商城项目实战
有了互联网热点技术,一个真实的互联网项目可以让你把所学的热点技术由点到线,由线到面,将所有技术聚集到实战的环境,最终将技术点和项目实战真正变成自己的本领;要会分析B2C项目的每一行源行及设计规范,让你对Nginx、 Redis、Docker、Mq等技术学而致用,用而不忘,具备独立的架构设计与开发能力。