很多年前,刚刚从大学毕业的时候,很多公司来校招。其中最烂俗的一个面试问是:“你希望你之后三到五年的发展是什么?”。我当时的标准回答是(原话):“成为在某一方面能够独当一面的技术专家“。后来经历了几家不同的公司,换了不同的方向,才知道这个真是一个很难的问题。因为兵无常势,什么东西都是在不断的变化,一早的时候看好的东西可能会被淘汰。
几乎没有人能够看准技术的下一个方向,因为这个问题实在是太难了,能够做到这一点的你就成为了技术界的巴菲特了。比如说11年加入Google,14年加入Facebook,16年加入阿里巴巴。做到这一点的人肯定有资本也有眼光去做风险投资,就算不做风险投资那么财务自由也是妥妥的。
现在毕业六年,从北京到上海到硅谷,从国内互联网公司外企,看到了公司好的地方和坏的地方,这里只是根据自己的经历写一些大方向选择建议,仅供参考。
目录:
行业背景很重要
合理的职业规划
何为高级程序员
2019跳槽必备
行业背景很重要
行业背景非常重要;工作3年后必须确定自己的行业背景,比如一直从事电信行业,一直从事银行项目,一直从事ERP行业等等。
一个程序员不可能是一直写代码的,就是写代码也要知道业务逻辑,满足什么需求;俗话说隔行如隔山,每个行业的业务都不一样,甚至差别很大,比如你一直从事流媒体的研究,让你跳槽到一家银行项目,完了,一切从头学吧,以前的行业经验都用不上了;而且,一个公司公司招人,就是希望找到那些很容易上手,不需要培训业务很久的程序员;频繁跳槽的朋友,一定要注意这点;
一直在一个行业呆久了,就可以成为这个行业的专家;我们可以经常看到,一个项目组的某个leader,代码写的一般,但是却可以跟客户流畅的沟通,控制着新需求的提出,bug的修正等等;而客户也很愿意跟他打交道,因为那些老的项目只有他能维护,他甚至熟悉系统的每一张表结构——-可想在这个行业呆的时间有多久啦。
合理的职业规划
什么是职业规划—-就是你短期或者长期的一个职业计划!大道理不讲,咱简单点。先问你几个问题:
你工作几年了,你愿意一直和新入行的新手一样就是个简单的程序员吗?
你愿意一直写代码,而不关心其他吗?
一个项目的前期需求,设计,后期部署维护,领导找到你,你说咱搞不定,行吗?
程序员不是敲代码的机器。第一年太多东西不懂,你可以一切听从老大的安排,敲敲代码,看看数据库,测试自己和别人的代码;但是第二年,你还是这样吗?不可能的,一年的经验你完全可以入行了,是时候该学习怎么进行需求分析,怎么设计数据库,怎么写各类文档,怎么写更好的代码?这是高级程序员的要求!
何为高级程序员?
具有分析设计能力,能进行技术攻关,而且具有某行业深厚背景的程序员!
所以,一个项目立项后,你要积极的参与到前期设计中,跟老同志们一道思考分析问题,学习经验!OK,你这就成长啦!
千万不要认为程序员就是写代码的哦!!!
通过一个项目的开发,你要能粗略的统计出一个功能的开发时间;比如一个模块有20个小功能点,你开发了80个小时,每个小功能点平均2小时——这时在前期就能评估工作量啦。当然每个人的效率和工作质量是不同的,因人而异,但是大概的工作量应该是可以统计出来的,用于统计一个项目的工作周期;
2019年跳槽必备
经过6年的沉淀以及观察,很多技术都是在不断进化升级。各大互联网公司需求也不断改变,所以我总结出以下技术点,不说会了之后年薪百万,最少能够让你上升一个档次。
掌握Java编程语言,包含io/nio/socket/multi threads/collection/concurrency等功能的使用;
熟练掌握jvm(sun hotspot和ibm j9)内存模型、gc垃圾回收调优等技能;
精通JVM,JMM,MVC架构,熟练使用struts2。
熟练使用spring、struts、ibatis构建应用系统。
熟练使用Servlet,jsp,freemark等前端技术。
熟练使用axis搭建基于SOAP协议的WebService服务接口。
熟练使用MAVEN构建项目工程。
熟练使用tomcat等web服务。
熟练使用mysql等关系型数据库,熟悉mysql集群搭建。
熟练使用redis等NOSQL技术。
熟悉tcp、http协议。
熟悉nginx、haproxy等配置。
熟悉javascript、ajax等技术。
熟悉主流分布式文件系统FastDFS等。
熟悉JMS,可熟练使用ActiveMQ。
分为以下几个小点: