史上最全最详细的Java架构师成长路径图,程序员必备

从新手码农到高级架构师,要经过几步?要多努力,才能成为为人倚重的技术专家?本文将为你带来一张程序员发展路径图,但你需要知道的是,天下没有普适的道理,具体问题还需具体分析,实践才能出真知。

架构师的“内功”

我认为,架构师的内功主要包含三部分:判断力、执行力、创新力,简单解释如下:

  1. 判断力: 能够准确判断系统的复杂度在哪里,就像武侠高手一样,能准确地看出对手的破绽和弱点。

  2. 执行力: 能够使用合适的方案解决复杂度问题,就像武侠高手一样,能选择合适的招式或者方法打败对手。

  3. 创新力: 能够创造新的解决方案解决复杂度问题,就像武侠世界里,小一些的创新是创新招式,而武学宗师能够创立新的武学或者心法,例如张三丰创立太极拳一样。

因此,要成为一个优秀的架构师,就需要不断地提升自己这几方面的内功,而这三方面的能力主要来源于 经验、视野、思考

  1. 经验: 设计过的系统越多、系统越复杂,架构师的内功也就越强,不管是成功的架构,还是失败的架构,不管是踩坑的经验,还是填坑的经验,都将成为架构师内功的一部分。

  2. 视野: 掌握的知识和技能越多、越深,架构师的内功也就越强,他山之石可以攻玉,站在巨人的肩膀上会看的更高更远。

  3. 思考: 经验和视野都是外部输入,类似于我们吃的食物,但光吃还不行,还要消化,将其变为我们自己的营养,这就是思考的作用。思考能够将经验和视野中的模式、判断、选择、技巧等提炼出来为我所用,思考也能促使我们产生新的创意和灵感。

结合上面的分析,从程序员到架构师的成长之路,总的指导原则是:积累经验,拓宽视野,深度思考。按照这个总的原则为指导,接下来我们看看从程序员到架构师的成长过程中,具体如何实践。

我把程序员到架构师的技术成长之路分为几个典型的阶段:

  工程师 - 高级工程师 - 技术专家 - 初级架构师 - 中级架构师 - 高级架构师

虽然总的指导原则是一样的,但具体的实践方法有很大差别,如果在正确的阶段采取了错误的方法,可能会出现事倍功半的问题。

第一步:工程师

1. 阶段描述

成为一个合格的工程师需要 1~3 年时间,其典型特征是“在别人的指导下完成开发”,这里的“别人”主要是“高级工程师”或者“技术专家”,通常情况下,高级工程师或者技术专家负责需求分析和讨论、方案设计,工程师负责编码实现,高级工程师或者技术专家会指导工程师进行编码实现。

2. 成长指导

工程师阶段是最原始的“基础技能积累阶段”,主要积累基础知识,包括编程语言、编程工具、各类系统的基本使用。以 Java 后端工程师为例,工程师阶段需要积累的经验和技能有:

  1. Java 的语法、基本数据结构的使用。

  2. Eclipse、IDEA、Maven、Linux 命令行等各种工具。

  3. 数据库 CRUD 操作、缓存的基本使用等。

  4. 业务系统的基本流程。

工程师阶段最好的学习方法就是 找经典的书籍系统地学习,而不要遇到一个问题到网上搜搜然后就解决了事。以 Java 为例,《Java 编程思想》《Java 核心技术》《TCP/IP 协议》这类大部头,一定要完整地看一遍,即使里面很多内容当前工作暂时用不上。

高级工程师

1. 阶段描述

成长为高级工程师需要 2~5 年时间,其典型特征是“独立完成开发”,包括需求分析、方案设计、编码实现,其中需求分析和方案设计已经包含了“判断”和“选择”,只是范围相对来说小一些,更多是在已有架构下进行设计。以 Java 后端工程师为例,高级工程师需要完成的工作包括:

  1. MySQL 数据库表如何设计,是设计成两个表还是三个表?

  2. 是否要用缓存,缓存的 Key 和 Value 如何设计,缓存的更新策略是什么?

  3. 产品提出的需求是否合理?是否有更好的方式来满足?

2. 成长指导

从普通工程师成长为高级工程师,主要需要“积累方案设计经验”,简单来说就是业务当前用到的相关技术的设计经验。以 Java 后端高级工程师为例,包括:表设计经验、缓存设计经验、业务流程设计经验、接口设计经验等。当接到一个业务需求的时候,高级工程师能够组合这些设计经验,最终完成业务需求。

高级工程师阶段相比工程师阶段,有两个典型的差异:

深度:如果说工程师是要求知道 How,那高级工程师就要求知道 Why 了。例如 Java 的各种数据结构的实现原理,因为只有深入掌握了这些实现原理,才能对其优缺点和使用场景有深刻理解,这样在做具体方案设计的时候才能选择合适的数据结构。

理论:理论就是前人总结出来的成熟的设计经验,例如数据库表设计的 3 个范式、面向对象的设计模式、SOLID 设计原则、缓存设计理论(缓存穿透、缓存雪崩、缓存热点)等。

针对技术深度,我的建议还是系统地学习,包括看书和研究源码。例如,研究 Java 虚拟机可以看《深入理解 Java 虚拟机》、研究 MySQL 可以看《MySQL 技术内幕:InnoDB 存储引擎》、研究 Memcache 可以去看其源码。

针对设计理论,由于涉及的点很多,没有一本书能够涵盖这么多的设计点,因此更多的是依靠自己去网上搜索资料学习。那我们怎么知道哪些地方会有设计理论呢?简单来说,就是假设每个设计环节都有设计理论,然后带着这种假设去搜索验证看看是否真的有很熟的设计理念。

技术专家

1. 阶段描述

成长为技术专家需要 4~8 年时间,其典型的特征是“某个领域的专家”,通俗地讲,只要是这个领域的问题,技术专家都可以解决。例如:Java 开发专家、PHP 开发专家、Android 开发专家、iOS 开发专家、前端开发专家等。通常情况下,“领域”的范围不能太小,例如我们可以说“Java 开发专家”,但不会说“Java 多线程专家”或“Java JDBC 专家”。

技术专家与高级工程师的一个典型区别就是,高级工程师主要是在已有的架构框架下完成设计,而技术专家会根据需要修改、扩展、优化架构。例如,同样是 Java 开发,高级工程师关注的是如何优化 MySQL 的查询性能,而技术专家可能就会考虑引入 Elasticsearch 来完成搜索。

2. 成长指导

从高级工程师成长为技术专家,主要需要“拓展技术宽度”,因为一个“领域”必然会涉及众多的技术面。以 Java 后端开发为例,要成为一个 Java 开发专家,需要掌握 Java 多线程、JDBC、Java 虚拟机、面向对象、设计模式、Netty、Elasticsearch、Memcache、Redis、MySQL 等众多技术。常见的拓展技术宽度的方法有:

学习业界成熟的开源方案,例如,Java 开发可以去学习 Redis、Memcache、Netty 等,Android 开发可以去研究 Retrofit、Fresco、OkHttp 等。

研究业界的经验分享,例如 BAT、FANG 等大公司的经验,可以通过参加技术大会等方式去近距离了解。

需要注意的是,拓展技术宽度并不意味着仅仅只是知道一个技术名词,而是要深入去理解每个技术的原理、优缺点、应用场景,否则就会成为传说中的“PPT 技术专家”。例如,以 Java 开发为例,知道 Netty 是个高性能网络库是远远不够的,还需要学习 Netty 的原理,以及具体如何使用 Netty 来开发高性能系统。

初级架构师

1. 阶段描述

成长为初级架构师需要 5~10 年时间,其典型特征就是能够“独立完成一个系统的架构设计”,可以是从 0 到 1 设计一个新系统,也可以是将架构从 1.0 重构到 2.0。初级架构师负责的系统复杂度相对来说不高,例如后台管理系统、某个业务下的子系统、100 万 PV 量级的网站等。

初级架构师和技术专家的典型区别是:架构师是基于完善的架构设计方法论的指导来进行架构设计,而技术专家更多的是基于经验进行架构设计。简单来说,即使是同样一个方案,初级架构师能够清晰地阐述架构设计的理由和原因,而技术专家可能就是因为自己曾经这样做过,或者看到别人这样做过而选择设计方案。

但在实践工作中,技术专家和初级架构师的区别并不很明显,事实上很多技术专家其实就承担了初级架构师的角色,因为在系统复杂度相对不高的情况下,架构设计的难度不高,用不同的备选方案最终都能够较好地完成系统设计。例如,设计一个日 PV 100 万的网站,MySQL + Memcache + Spring Boot 可以很好地完成,MongoDB + Redis + Nginx + php-fpm 也可以很好地完成,备选方案设计和选择并不太难,更多的是看团队熟悉哪个技术。

2. 成长指导

从技术专家成长为初级架构师,最主要的是形成自己的“架构设计方法论”,我的架构设计专栏其实就是讲述完整的架构设计方法论,包括架构设计目的、架构设计原则、架构设计步骤、架构设计模式等,类似的架构设计方法论还有《恰如其分的软件架构:风险驱动的设计方法》和《领域驱动设计》等。

要形成自己的架构设计方法论,主要的手段有:

系统学习架构设计方法论,包括订阅专栏或者阅读书籍等。

深入研究成熟开源系统的架构设计,这个手段在技术专家阶段也会用到,但关注点不一样,同样是研究开源系统,技术专家阶段聚焦于如何更好地应用开源项目;初级架构师阶段聚焦于学习其架构设计原理和思想,例如 Kafka 的文档中就有关于消息队列架构设计的分析和取舍。

结合架构设计方法论,分析和总结自己团队甚至公司的各种系统的架构设计优缺点,尝试思考架构重构方案。如果在这个基础上真的能够推动架构重构,那就更好了,既能够实践自己的架构设计方法论,同时积累经验,又能够展现自己的技术实力,拿到结果。

中级架构师

1. 阶段描述

成长为中级架构师需要 8 年以上时间,其典型特征是“能够完成复杂系统的架构设计”,包含高性能、高可用、可扩展、海量存储等复杂系统,例如设计一个和 Kafka 性能匹敌的消息队列系统、将业务改造为异地多活、设计一个总共 100 人参与开发的业务系统等。

中级架构师与初级架构师的典型区别在于系统复杂度的不同,中级架构师面对的系统复杂度要高于初级架构师。以开源项目为例,初级架构师可能引入某个开源项目就可以完成架构设计,而中级架构师可能发现其实没有哪个开源项目是合适的,而需要自己开发一个全新的项目,事实上很多开源项目就是这样诞生出来的。

2. 成长指导

从初级架构师成长为中级架构师,最关键的是“技术深度和技术理论的积累”,例如:

技术理论:CAP、BASE 是异地多活的设计理论基础、Paxos 是分布式一致性的基础算法、2PC、3PC 是分布式事务的基础算法等。

技术深度:Kafka 用磁盘存储还能做到高效是因为磁盘顺序写;Disruptor 高性能是结合 CPU 预读取机制、缓存行、无锁设计等基础技术;Storm 的高效异或确认机制;Flink 的分布式快照算法等。

很多同学对这点可能有疑问,这些技术理论和技术深度的事情不应该是高级工程师阶段或者技术专家阶段就应该积累的么?为何到了中级架构师阶段反而是成长的关键了呢?主要原因在于高级工程师或者技术专家阶段即使去学习这些技术,实际上也比较难理解透彻,更加难以有机会去应用,更多的时候只是了解有这个技术点而已;而到了中级架构师阶段,面对高复杂度的系统,很多时候就是几个关键技术细节决定整个架构设计的成败,或者某个设计方案理论上就是不可行的,如果不深刻理解理论和相关的关键技术点,很难设计优秀的架构。

以我做过的异地多活设计方案为例,之前很早我就知道 CAP 理论了,但也仅仅只是知道几个概念而已。真正做异地多活的时候,开始的时候还是走了不少弯路,试图做一个完美的异地多活系统,最终发现这其实是不可能的,某天突然顿悟:其实 CAP 理论已经明确指出来了这点,但最初学习 CAP 理论的时候,很难有这样深刻的理解。

高级架构师

1. 阶段描述

成长为高级架构师需要 10 年以上时间,其典型特征是“创造新的架构模式”,例如:

谷歌大数据论文,创造了分布式存储架构、分布式计算 MapReduce 架构、列式存储架构,开创了大数据时代。

在有 MapReduce 分布式计算架构的背景下,Storm 又创造了流式计算架构。

在虚拟机很成熟的背景下,Docker 创造了容器化的技术潮流。

高级架构师与中级架构师相比,典型区别在于“创造性”,高级架构师能够创造新的架构模式,开创新的技术潮流。

2. 成长指导

坦白的说,对于从中级架构师如何才能成长为高级架构师,我并没有太好的指导,一个原因是我自我评价目前顶多算个中级架构师;另外一个原因是一旦涉及“创造性”,其实和艺术就比较类似了,创造性实际上是很难学会的,也很难由老师教会,更多是天分,或者某种场景下灵感爆发。

参考技术界几个创造性的架构案例,我总结出几个可能诞生创造性架构的背景条件:

足够复杂的业务场景:例如谷歌的大数据、阿里的双十一、Facebook 的海量用户等,业务场景越复杂,给技术带来的挑战更大,更有可能产生创造性的技术突破。

足够强大的技术团队:绝大部分创造性的架构都来源于大公司,或者知名的研究机构;没有技术实力支撑,想突破也是心有余而力不足。

不满足于现状的态度:例如虚拟机很成熟但是资源占用太多,所以发明 Docker;MapReduce 难以做到实时运算,所以创造 Storm 流式运算。

尊重技术价值的文化:创造性的东西往往需要投入大量的人力和时间,而且刚开始一般都不会很成熟,如果完全结果导向、KPI 导向,创新技术很可能在萌芽阶段就被否定。

对于2-5年的Java程序员我们应当如何来学习提升呢?下面是笔者收集整理的学习线路图:

(一)微服务
在这里插入图片描述

(二)分布式

在这里插入图片描述

(三)源码分析
在这里插入图片描述

(四)多线程并发编程
在这里插入图片描述

(五)工程化
在这里插入图片描述

(六)性能优化
在这里插入图片描述

(七)电商项目

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/348.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Verilog实现组合逻辑电路

在verilog 中可以实现的数字电路主要分为两类----组合逻辑电路和时序逻辑电路。组合逻辑电路比较简单,仅由基本逻辑门组成---如与门、或门和非门等。当电路的输入发生变化时,输出几乎(信号在电路中传递时会有一小段延迟)立即就发生…

马上要面试了,还有八股文没理解?让ChatGPT来给你讲讲吧——如何更好使用ChatGPT?

最近这段时间 ChatGPT 掀起了一阵 AI 热潮,目前来看网上大部分内容都是在调戏 AI,很少有人写如何用 ChatGPT 做正事儿。 作为一个大部分知识都是从搜索引擎和 GitHub 学来的程序员,第一次和 ChatGPT 促膝长谈后,基本认定了一个事…

AI又进化了,突破性革命来了

大家好,我是 Jack。 2023 年,AI 真的杀疯了。短短不到一年的时间,当我们还在感慨 AI 一键生成的二次元画作精美万分的时候,它已经进化到了写实美照也能手到擒来的地步。 更多的效果,可以看刚刚发布的视频,…

爽,我终于掌握了selenium图片滑块验证码

因为种种原因没能实现愿景的目标,在这里记录一下中间结果,也算是一个收场吧。这篇文章主要是用selenium解决滑块验证码的个别案列。 思路: 用selenium打开浏览器指定网站 将残缺块图片和背景图片下载到本地 对比两张图片的相似地方&#x…

十大经典排序算法(上)

目录 1.1冒泡排序 1. 算法步骤 3.什么时候最快 4. 什么时候最慢 5.代码实现 1.2选择排序 1. 算法步骤 2. 动图演示 3.代码实现 1.3 插入排序 1. 算法步骤 2. 动图演示 3. 算法实现 1.4 希尔排序 1. 算法步骤 2. 动图演示 3.代码实现 1.5 归并排序 1. 算法步骤 2…

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) A — E

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) 文章目录A -- A Xor B Problem题目分析codeB -- 吃苹果题目分析codeC -- n皇后问题题目分析codeD -- 分苹果题目分析codeE -- 完型填空题目分析codeA – A…

图像缩放对相机内外参矩阵的影响

参考资料:https://zhuanlan.zhihu.com/p/87185139 一、3D空间中点到图像的投影 设3D空间中的点(x,y,z)(x,y,z)(x,y,z)投影到图像上的像素坐标(连续值,以左上角像素的左上角为原点的坐标系,注意与整数值的图像像素索引相区别&…

HTTPS的加密原理(工作机制)

现在很多网站使用的都是HTTPS协议,比如CSDN他们为什么要使用HTTPS协议而不是继续使用HTTP协议呢?以及HTTPS都做了些什么?HTTP协议与HTTPS有哪些区别? 下面我来 讲解这些问题?(篇幅可能有些长,请求耐心观看,我以0基础的角度去讲解这些东西, 如果你有一定的基础前面的跳过就好…

docker安装elasticsearch与head教程完整版—.NET Core Web Api与elasticsearch打造全站全文搜索引擎

默认已经有docker环境 下载与安装 elasticsearch ,从hub.docker里面可以看到最新版本的镜像,选择你想要的版本 本教程是以 7.17.7 为案例,为啥不适用最新的,首先个人一般需用最新的版本,如果有亢很难填,其次…

三体到底是啥?用Python跑一遍就明白了

文章目录拉格朗日方程推导方程组微分方程算法化求解画图动图绘制温馨提示,只想看图的画直接跳到最后一节拉格朗日方程 此前所做的一切三体和太阳系的动画,都是基于牛顿力学的,而且直接对微分进行差分化,从而精度非常感人&#xf…

如何用Python求解微分方程组

文章目录odeint简介示例odeint简介 scipy文档中将odeint函数和ode, comples_ode这两个类称为旧API,是scipy早期使用的微分方程求解器,但由于是Fortran实现的,尽管使用起来并不方便,但速度没得说,所以有的时候还挺推荐…

Vite4 + Vue3 + vue-router4 动态路由

动态路由,基本上每一个项目都能接触到这个东西,通俗一点就是我们的菜单是根据后端接口返回的数据进行动态生成的。表面上是对菜单的一个展现处理,其实内部就是对router的一个数据处理。这样就可以根据角色权限或者一些业务上的需求&#xff0…

机器学习入门——线性回归

线性回归什么是线性回归?回归分析:线性回归:回归问题求解单因子线性回归简单实例评估模型表现可视化模型展示多因子线性回归什么是线性回归? 回归分析: 根据数据,确定两种或两种以上变量间相互依赖的定量…

自学大数据第六天~HDFS命令(一)

HDFS常用命令 查看hadoop版本 version hadoop version注意,没有 ‘-’ [hadoopmaster ~]$ hadoop version Hadoop 3.3.4 Source code repository https://github.com/apache/hadoop.git -r a585a73c3e02ac62350c136643a5e7f6095a3dbb Compiled by stevel on 2022-07-29T12:3…

【电赛MSP430系列】GPIO、LED、按键、时钟、中断、串口、定时器、PWM、ADC

文章目录MSP430一、GPIO二、点亮LED三、按键控制LED四、更改主时钟五、串口通信六、串口中断七、外部中断八、定时器九、定时器中断十、PWM十一、ADCMSP430 MSP430 是德州仪器(TI)一款性能卓越的超低功耗 16 位单片机,自问世以来&#xff0c…

程序员的逆向思维

前要: 为什么你读不懂面试官提问的真实意图,导致很难把问题回答到面试官心坎上? 为什么在面试结束时,你只知道问薪资待遇,不知道如何高质量反问? 作为一名程序员,思维和技能是我们职场生涯中最重要的两个方面。有时候…

【微信小程序】-- 网络数据请求(十九)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

到底什么是跨域,如何解决跨域(常见的几种跨域解决方案)?

文章目录1、什么是跨域2、解决跨域的几种方案2.1、JSONP 方式解决跨域2.2、CORS 方式解决跨域(常见,通常仅需服务端修改即可)2.3、Nginx 反向代理解决跨域(推荐使用,配置简单)2.4、WebSocket 解决跨域2.5、…

软测面试了一个00后,绝对能称为是内卷届的天花板

前言 公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资也不低,面试的人很多,但平均水平很让人失望。令我印象最深的是一个00后测试员&#xf…

【JavaScript 逆向】百度旋转验证码逆向分析

声明本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除!案例目标爱企查百度安全验证百度搜索:aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9zdGF0aWMvY2FwdGNoYS8以上均做了脱敏处理,B…