平时经常能听到一些同学困惑,“面试造火箭,天天拧螺丝”,每天进行重复的业务开发,似乎自己的能力被日常工作限制,无法突破提高自己的能力水平。我想说,难道懂得如何造火箭,还能没有实际价值吗?它的价值在于,当真的出现不可预测的、具有挑战性的任务时,你能不能Hold住。那么关于Java工程师的成长路线是什么呢?又给如何找到自己所处的能力水平,通过学习和实践实现进阶呢?一、新手如果你是新手阶段,全面、扎实地掌握语言的基本要素是当务之急。在这个阶段我认为是有无限可能的,因此我并不建议完全用《Java核心技术面试精讲》专栏作为Java语言入门的课程,而是更应该找到更基础的、系统的Java书籍或者课程。你可以在正规的指导(比如进行培训)飞速进步,并培养出良好的编码习惯。然后可以再结合专栏,看看Java技术领域典型的、长期的热点话题,了解业界通常从哪些角度判断你的能力和水平。你还可以从专栏的基础模块,看到Java领域长期的热点话题,增长自我见识。二、高级新手工作了几年,整天忙于业务代码,很容易困惑下一步的方向在哪里,相当多的程序员长期停留在高级新手的阶段。一个常见的表现就是发展成为了“面向搜索引擎”编程工程师,擅长快速利用开源项目或者以往成果,完成一些“OK”的工程任务。这本无可厚非,职业路线很多,未必每个人都想成为底层专家。但是,如果想在技术领域更进一步,一定要避免下面两个问题。面对没见过的、一定规模的或者较高标准的问题时无所适从,具体表现为“领导,你看这样行吗?”。没做过互联网高并发应用,难道就不能对并发编程有相对深入的思考吗?比如,习惯了使用Executors,你有没有思考过不同的线程池到底适合什么场景?当前的实现在未来业务量增长下可能出现什么问题?无法独立提供有说服力的、有深度的分析、设计和实现,比如业务系统运行一段时间就变慢,调整Heap大小,似乎仍然OOM。目前团队处理的方式就是重启服务器,有没有想过去发掘真正的原因,真正去解决它?三、胜任者那如何才能算是摆脱了高级新手的阶段呢?或者换句话说,如何成长为团队的核心成员?这取决于你能背多大的锅、填多大的坑,比如你已经可以:独立负责做GC调优,即使没有历史经验,也能给出有说服力的方案。在JVM领域有充足的技术经验和知识储备,全面评估评估后台变慢等问题的复杂度、风险点、解决的可能性。对于所谓本质的思考和理解,能听懂深入的抽象观点。并且,除了Java/JVM,还要掌握更完整的技能树,例如分布式系统设计、数据库隔离级别选型等。掌握将“OK”的事情做到“excellent”程度的能力,不断地进行高效实践、领域的扩展和精深,我们就可以达到并超过胜任者,逐步成为精通者和专家。
其实Java可以做的东西实在太多了,网站、软件、手机游戏、电脑游戏、中间件以及现在流行的安卓手机app等,都是由Java语言编写的;除了这些,Java还有很多用途,家里的微波炉、洗衣机等家电也有可能是Java控制的。
1、编写网站
现在许多大型网站都是用Java编写的,比如我们熟悉的电子商务交易平台阿里巴巴、淘宝、京东都是使用Java编写的。
即使是简单的jsp、servlet,和以struts为基础的网站,在政府项目中也是很受欢迎的,例如保险、教育、医疗、国防等部门的网站都是以Java基础来开发的。
2、Android应用
Java做安卓不单单是系统,还有APP。对于如今的开发人员来说,他们更多的时间是花在开发APP上面。
你在Android手机上,随便打开一个App应用,都是用Java语言编写。虽然现在Android运用了不同的JVM以及不同的封装方式,但是代码还是用Java语言编写的。
3、大型企业服务器应用
很多大型企业管理系统、CRM系统,ERP系统主要使JAVA编写。例如移动、联通、电信等通讯行业的客户管理系统,快递公司的物流系统离不开Java;交通工具的订票系统绝大部分也是使用Java开发的。
4、做软件工具
一般来说,编程语言都可以做软件,Java也不例外,许多常用的软件和开发工具都是运用Java来编写和开发的,例IneteliJIdea、Eclipse,NetbansIDE等。
5、嵌入式领域及消费类电子产品
Java在嵌入式领域发展空间很大,对于嵌入式系统来说,Java技术因为比C语言和汇编语言有很明显的优越性,而受到了嵌入式领域的青睐,并得到了大量的研究与开发应用。
嵌入式设备及消费类电子产品,主要用JavaMe,信息家电(如数字电视、机顶盒、电冰箱)、无线手持设备、通信终端、医疗设备、汽车电子设备等都是比较热门的Java应用领域。
6、大数据技术
Java最大的优势之一是它在大数据领域的地位,目前很多的大数据的架构都是通过Java来完成的。
例如现在最主流的大数据框架Hadoop的应用主要用Java开发的;Apache的基于Java的HBase和Accumulo以及ElasticSearchas。
Java软件工程师的发展方向大致分为两类:
1、管理类:成为管理人员,例如产品研发经理,技术经理,项目经理等。
2、技术类:成为Java高级软件工程师、实施工程师、测试工程师、需求工程师等。
Java就业前景广,就业方向大,薪资待遇高,作为一名掌握Java软件开发技能的工程师可以从事JSP网站开发、Java编程、Java游戏开发、Java桌面程序设计,以及现在最火爆的移动应用开发。对于技能高的优秀人才可进入电信、银行、保险行业从事软件设计和研发工作。
对于任何一个Java开发人员来说,架构师都是一个令人向往的角色。那么程序员与架构师有没有比较明显的区别呢?其实架构师和程序员的界限并不是很大,比如现在仍然在每天写代码。成长首先来自于自身的学习,而阅读成熟项目的代码会使自己受益匪浅。其次就是来自于所从事领域的经验,要了解分布式系统的特点。在做项目时,要能够关注性能、扩展性、可靠性、可用性等指标。架构师其实就是一个漫长的积累过程,从准备期到动荡期我们都是不停的探索,学习。
如果你真的想学Java,而且想学好!那你要注意的是,学习氛围很重要;其次是你自己的态度,态度一定要端正;再其次是你的目标,世上无难事,只怕有心人,要综合自身情况,认真考虑。
1)高级软件开发工程师:高级软件工程师是IT行业中的重要岗位。根据开发进度和任务分配,完成相应模块软件的设计、开发、编程任务;进行程序单元、功能的测试,查找出软件存在的缺陷并保证其质量等等。可以预见,中国软件和信息服务外包产业将在不久的将来成为中国第三产业转型和发展的龙头产业,相关职业包含高级软件工程师的人才需求将会非常巨大。
(2)产品研发经理:产品研发是二十一世纪企业竞争的主战场。想成为一个合格的产品研发经理,就必须面向市场,面向客户,迅速的满足客户的需求,这样才能使公司具有核心竞争力,那么创造核心竞争力的你也便被称为当之无愧的大功臣,所以该职业具有很大的发展空间和挑战性。
(3)需求工程师:需求工程师是沟通用户与开发人员的桥梁,做好需求分析是一个产品是否能够适应用户要求的关键所在。需求工程师们在了解用户又了解技术的基础上掌控着项目发展的风向标。在需求工程师具有丰富的软件开发经验和相关工作的技术背景,以及具有较强的管理和组织等方面的能力后,便可以向产品经理、技术经理、项目经理的方向发展。
除此之外,还可以从事JSP网站开发、Java编程、Java桌面程序设计,以及其他的与Java语言编程相关的工作。可进入电信、银行、保险专业软件开发公司等从事软件设计和开发工作
程序员的职业规划是非常清晰的:
程序员。如果你觉得你喜欢代码,喜欢开发工作,那么一-直做开发也是一件的不错的事,不过要考虑当你做开发10年后,你所做的工作,一个大学毕业2.3年的开发人员一样能做时,你的价值在走下坡路,越来越不值钱。所以要时刻保持学习,并且深入研究技术。
架构师。是往真正技术大牛的方向发展的职业线路。若未来你想成为架构师就需要现在你的不断专研技术和积累研发经验。不是随便开发人员凭借10年开发经验就可以成为架构师。成为架构师需要完善和扎实的技术体系,具备较好系统分析和设计能力,丰富的项目研发经验。
技术经理。是往技术加团队管理的方向发展的职业线路。往此线路发展的同学,需要一定的技术能力和团队管理能力。做管理与性格有关,首先得分析自己性格是否适合做管理的工作,这点也是很多做技术出身的人员,转型时最大的挑战。有技术经理岗位的存在,一般都是搭配偏需求、产品的项目经理进行项目实施。技术经理的技术可以不用深入研究,但是需要具备一定的广度和项目开发经验。
项目经理。是往管理的方向发展的职业线路, -般项目经理主要侧重项目管理工作,项目经理很关键的能力就是计划、沟通及组织协调的能力。沟通和表达是开发人员短柄,所以想往此线路发展的同学,从日常的工作、生活中就得逐步加强锻炼这方面能力,其次学习一些项目管理的知识,例如:PMP、CMMI敏捷开发管理等。
选择什么样的职业线路,需要客观认识自己,根据自己的特点进行规划,选中后制定有序的学习计划。职业机会也是留给已做好准备的人。
现在Java培训非常热,是因为通过学习java能够快速的就业,这对于今年就业压力非常大的大学生来说,无疑是一条就业的捷径,虽然培训费动辄过万,但还是非常值得的。可是你可曾想过,学习了java编程后,你就只能做java程序员吗?亦或者做了Java程序员,又具体是什么岗位呢?职业发展方向是什么,如何晋升?这些都是你需要提前考虑的,记住就业不仅仅是找到一个工作,拿一份工资,更多的意义在于开始了自己的职业生涯。
做java程序员也有很多方向
一般来说,java的应用还是非常广的,有erp等大型系统方面的,有web方面的,还有游戏方面的。java在大型B/S系统方面的应用非常广泛,什么是B/S呢,实际上就是通过浏览器访问的,网站就是一种B/S结构。作为新手,你会先从实习生或者初级程序员做起,然后随着自己技术的成熟,逐步的达到中级工程师的水准,能够独立分担一部分开发任务,如果达到高级工程师的水准的话,你还需要再学习更多的技术,这些技术不仅仅局限于java,如js和数据库等,当你对整套技术都非常精通时,你便是一个真正的高级工程师,而java则只是你所掌握的主要技术之一罢了。
做项目管理和分析也是一个方向
不少人学了java后,可能往软件工程方向发展,这个时候参与具体的编码工作不会那么多,主要要做的工作是需求分析,项目管理,随着水平的提升,有可能做到系统架构师的职位,一般能做系统架构的都是大牛或者高学历者,因为这不仅仅需要掌握java技术,更需要掌握数据库和算法逻辑等知识。
产品经理也是一个方向
实际上有不少初中级java程序员或项目经理转行做产品经理了,产品经理不仅仅需要对技术颇为了解,更需要懂得策划和规划,了解项目管理和产品管理的知识,并要具备非常好的沟通能力。当然,北大青鸟认为一个刚刚从业的人很难跨入产品经理的行列,一般做1到2年开发工作的人可能会跨到这个行业来。