Java行业流行一句话——黄金5年,意思是从一个程序员入职开始,前五年的工作选择直接影响整个职业生涯的职业发展和薪资走向。如何把握过去的五年,从一个初入行业的菜鸟,蜕变成一个见怪不怪的大人物,是一个涉及到自身专业知识储备和选择的难题。那么,一个Java程序员如何完成从入门到老板的晋升之路呢?在这1-2年的工作期间,想必对Java有了深入的了解。首先,你需要非常熟悉设计模式,阅读一些关于代码编写优化的书籍,提高自己的代码能力,能够写出优雅的代码;第二,你在工作中一定接触过并发,应该更深入地了解并发的相关知识;最后,你需要对你使用的框架和Java类库做一些研究,你还需要查看JDK中一些类的源代码,包括你使用的框架的源代码。总而言之,在这个阶段,你需要做的是深入了解Java底层和Java类库,也就是JVM和JDK。如果你工作3-4年后到了这个阶段,说实话,你的coding能力是很难提升的,因为这个阶段的学习会比较多样化。在工作的前三年,你肯定不同程度地接触过其他技术,比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等技术。这将是你未来面试的一个巨大优势。因此,如果你对某项技术感兴趣,此时可以深入研究。这个技术在你的工作中不一定会用到,但一定是相关的。工作4-5年,工作4-5年的程序员。这个时候应该遇到技术瓶颈了。不要急于提升自己的技术,这时候更重要的是提升自己的影响力,可以尝试去一些知名的公司,提升自己的就业背景;也可以发表一些技术文章,影响更多的人;你也可以去Github创建一个属于你的开源项目,构建你自己的产品。技术学习这个阶段,很容易遇到瓶颈,而且往往到了一定程度之后,你再深入研究的效果实在是微乎其微,除非你专攻学术研究。然而,遗憾的是,大多数程序员都做不到这一步,而这正是科学家所做的。这个时候提升自己的影响力主要是因为影响力可以为你创造更多的机会,所以你最大的任务就是提升自己的影响力,为以后的工作生活做准备。我有一个2010年毕业的朋友,作为一名软件开发程序员,已经在软件开发行业工作了8年。历任初级软件工程师、高级软件工程师、项目主管、技术经理、项目经理。多年来,我领导过开发团队,参与过招聘面试。我请他分享一下自己这些年的工作经验,有不同意见的欢迎讨论。对于软件开发专业的学生来说,首先要客观地了解自己的情况,想清楚自己现在想要什么,将来想要什么,做好职业规划,从而选择不同类型的公司。比如,身无分文,急需就业,技术水平一般,可以选择人力资源外包进行临时过渡;如果你喜欢技术研究,对技术有浓厚的兴趣,希望将来成为某个领域的技术专家,可以选择互联网平台类型:如果你有一定的技术基础,想往以下方向发展未来技术经理或者项目经理,可以选择项目外包的类型。接下来我就程序员的职业发展规划提出具体的建议:Java程序员有明确的职业发展规划吗?1.走向架构师对于任何Java开发人员来说,架构师是一个令人兴奋的机会,也是一个向往的角色。那么程序员和架构师之间的主要区别是什么?架构师具有完整扎实的技术体系,良好的系统分析和设计能力,丰富的项目开发经验。其实程序员的成长首先来自于自身的学习,阅读成熟项目的代码会让人受益匪浅;其次,来自于自己所从事领域的经验。要了解分布式系统的特点,在做项目的时候,必须能够关注性能、可扩展性、可靠性、可用性等指标。做架构师是一个长期积累的过程。大多数建筑师都在35岁左右。这个阶段是程序员的黄金时代。那么我们如何加强我们作为架构师的能力呢?程序员要想发展成为架构师,还需要进一步加强自己的技能。对于互联网公司来说,最重要的技能是对网络和分布式系统的理解。比较麻烦的是分布式系统。除了分布式系统,在如今的大型互联网公司中,掌握高性能、通俗易懂、性能调优也是很有必要的。、Spring、JVM等技术。当然,良好的开发团队管控能力和人格修养,可以让架构师在开发项目中做好工作,不受意外干扰。2.成为项目经理。一些程序员有更好的工作机会。他们不仅负责项目的设计,还负责项目的管理。他们对项目经理的工作有一些尝试。所以,这类程序员可以审视一下自己,看看自己是否适合这份工作。如果对这份工作满意,符合项目经理的要求,就可以往项目经理的方向发展。项目经理的工作重心已经从编程转移到人、技术、进度和项目的管理上。因此,项目经理必须了解软件开发的方方面面,了解开发的各种技术和应用,了解开发团队。层次和特点。在日常的工作和生活中,你要逐渐锻炼这种能力。其次,学习一些项目管理知识,如:PMP、CMMI、敏捷开发管理等。从程序员到项目经理,项目经理更能了解程序员在项目中的地位和作用,了解软件开发中的各种规律性的事情,从而保证项目的正常完成。而且项目经理的收入在公司里也是比较高的。因此,我认为成为项目经理是程序员的另一个发展空间。在此提醒各位程序员,在成为项目经理之前,最好先做好软件设计,这样当项目经理的时候,才会有很好的基础。3、去当经理很多程序员都希望自己能在公司里成为主管、经理、老板、老板,这样在公司的收入和地位会比较高。另外,一些程序员可能厌倦了年复一年的编程工作,希望摆脱这种紧迫的工作状态,成为一名管理者。程序员需要比普通人做更多的准备,做更多的改造工作。但是,如果你有这个志向,并且积累了这方面的工作经验,你是可以努力发展成为管理者的。因为软件公司的管理者不同于一般公司的管理者,专业能力越强越容易管理。没有专业的管理,就会遇到很多问题,很难解决。所以,我的建议是,程序员要在编程、项目设计、项目管理等方面打好基础,这样向管理者转型的成功率会更高。4.当然也有程序员比较懒,安于现状无可厚非。对于这些程序员,我的建议是原地发展,把本职工作做得更好,技术水平更上一层楼。在这个过程中,他们的能力和自信心都会得到提升,理念自然不会一成不变。无论从事什么行业,都应该尽早制定职业规划。每个人都需要有一个目标来激励自己,尤其是Java程序员。朝着一个目标逐渐提高自己的实力总是比原地踏步更好。在此,与大家分享一个自己收集总结的Java架构技术体系。希望对面临技术瓶颈和面试的程序员有所帮助。这个世界上最不可或缺的就是勤奋。不要徒劳无功,有计划地学习和努力,比盲目前进要有效十倍。如果你也对技术感兴趣,可以加入我的Java后端开发群:943918498,或者关注微信公众号:Java资料库,回复“架构”,在群里下载相关技术资料。这次是在面试期间,欢迎大家加入群讨论学习。Java程序员应掌握的技术1.通信协议各个子系统之间进行通信,必须选择一种或多种通信协议。现代的更常见的是基于HTTP。建议多了解一些协议,对学习安全也很有帮助。例如MySQL和PostgreSQL的协议都有安全设计。2、序列化系统在通过网络传输或存储在文件中时,必须只有一种格式,即字符串。转换复杂的数据结构和字符串,需要用到序列化,简单的序列化如JSON、XML,稍微复杂一点的如protobuf、thrift。需要了解所有这些序列化方法之间的优缺点,比如JSON和XML只能用来传输数据,而protobuf和thrift也可以用于RPC协议,至少要保证每种序列化方式都尝试过helloworld。3、数据库要形成自己的数据库选择风格,需要对自己常用的数据库有足够深入的了解。对于关系型数据库,除了一般的Create、Query、Delete、Update操作外,还需要能够自己建立索引,并行化数据库,了解如何进行性能调试,了解常见查询的性能水平操作和常见的查询性能瓶颈点。一个很好的例子是“SELECTCOUNT(*)FROMtableWHEREdt_create-86400>NOW();”.4.存储存储有几种类型。NAS和其他产品不同,大部分是通过NFS访问的。问题是NAS的价格很高,去IOE的趋势下很多人不愿意用,所以经常有基于文件系统的小型NAS文件。存储需求。需要注意的是每个目录下的文件数量不要太多。当一个目录中的文件数(实际上是inode数,包括文件和目录)超过1000时,性能会很差。因此,建议将要存储的对象ID做成16进制,然后每2位16进制做成一个一级目录,这样可以保证每个目录的文件数不超过256个.现代云计算,比如AmazonS3,已经很好的解决了存储问题,有条件的话尽量用好。5.应用框架有自己的语言选择。更加注意了解您关注的所有框架的优点和缺点。至少当一个孩子问你为什么不选择最新的框架时,你可以清楚地理解它。以自己的观点回答。对于常用的框架,强烈建议重新实现一个作为练习,实现一个WEB框架,不到200行代码就可以实现。6、接口主要是指接口协议,或者说RPC协议。在系统之间进行RPC调用是很常见的。注意选择自己能熟练使用的,并深入研究,了解其常见的局限性。RESTfulAPI是比较常见的选择,但是性能不好。你需要对性能等参数有一个量化的认识,而不是简单的一句话好坏。短连接接口是三次握手过程中的一个串行操作,需要理解为什么会耗时。除了对以上各种不可或缺的组件有所了解外,还必须能够清楚地了解一些常用的系统模块的原理,并能够深入发挥。需要注意的几点:HTTP服务器:常见的无非就是nginx、apache,基本的配置自己要会,包括静态文件、fastcgi转发等关系型数据库:常见的如mysql、postgresql和SQLite。您需要对它们中的每一个都有深刻的了解。可以对常用操作做性能测试,牢记于心。比如sqlite虽然不需要经过网络,但是实际查询性能很差。NoSQL数据库:memcache、redis、mongodb等,这几年出现了很多。一一了解它们的实现原理和各种常用操作的性能。必要时,它们可以随时使用。云计算平台:需要了解几种常见的云计算平台的应用方式,比如谷歌的资源方式,亚马逊的VPS方式。每个云计算平台往往会提供很多额外的服务,比如可靠的数据库、存储、Cache等,也需要单独了解。加密/签名技术:常见如truecrypt、openssl、gnupg、sha1、md5、scrypt等,了解各种加密/签名技术的安全性和字长,可以自己动手做helloworld。
