我心里优秀架构师是怎样的?
先声明,这不是在打广告……。之所以那么认真看个宣传视频,是因为曾经阅读过李智慧老师的书籍(大型网站技术架构--核心原理与案例分析),书写的挺好,有兴趣的可以阅读下。
本文内容来源于:李智慧架构师训练营宣传视频。主要讲了:什么是架构师、架构师应具备什么素养、架构师基本工作和主要职责、架构师的学习和思考等等。本人觉得讲的不错,又因为在视频中干“听”,很难有个整体的认识,所以没忍住就把视频里的内容全部敲出来了,主要是方便理解和记忆。
讲解内容整理后:
1 在成为架构师的路上,有哪些困难?
1.1 做编程和做架构的区别
-
做编程:你只需要根据给定的功能模块和技术要求完成开发工作就可以了。
-
做架构:需要全局思考各种技术、业务、资源的要求,根据要求寻找最合适的架构方案。
所以编程和架构几乎是完全不同的两项工作。
1.2 怎么从程序员成为架构师?
(引出问题-->解决问题)
并不是你有了多年的编程经验,就自动获得了架构设计的能力,就能够成为架构师了。事实上,如果你没有从架构师的角度去思考问题,带领团队从整体完成一个系统的架构设计和开发,那么你永远也不会了解如何去做一个架构师。而你不去做一个架构师,又永远不会有机会带领一个团队完成一个系统的架构设计与开发。
所以这里似乎就形成了一个死循环,而突破这个死循环的关键就在于两点:
-
第一 你要表现出足够优秀的开发能力,让领导相信,即使你没有架构设计与领导开发的经验,你也能做好架构师这个角色,从而任命你做架构师;
-
第二 你在成为架构师之前,就掌握了足够的做架构的方法和能力,在被任命为架构师之后,不会手足无措把事情搞砸,而是有条不紊的开展工作,打好你的架构设计的第一仗。
成长为一个架构师,最主要的困难在于:
-
第一 你是否在编程这件事情上表现出足够的优秀,从而获得做架构的机会;
-
第二 你是否能够掌握好做架构设计的一般方法,能够把握住做架构设计的机会;
-
第三 你是否拥有关于系统架构设计足够的知识储备,能够在软件架构设计的生命周期,以及你自己的职业生涯中不断地迭代进步,使你负责的系统和你自己的职业前景都变得越来越好。
2 架构师应当具备怎样的素养?
如何才能成为一个优秀的架构师?一个优秀的架构师应当具备怎样的素养?换句话说,优秀的架构师应该拥有哪些能力,我这里总结了八个方面。
2.1 第一点:优秀的编程能力
对于架构师最大的误解就是架构师不需要编程。事实上,编程是架构师最基本的能力要求,表现出足够优秀的编程能力,才能够获得成为架构师的机会。架构不是画两张架构图就完事了的,要在编程中开发落地,开发过程中遇到的编程问题,需要架构师亲手去解决;系统维护的过程中出现的问题,也需要架构师对编码非常熟悉才能够解决。这些事情都需要架构师有非常优秀的编程能力。
2.2 第二点:设计文档的能力
架构师固然要自己写出好的代码,但是更重要的是要让整个开发团队都能够写出逻辑清晰、易于维护的代码。要实现这一点,就需要开发团队在架构的约束下进行开发,每个人都知道自己的工作在整个系统架构中的位置和作用,和其他同事的关联依赖关系,这些信息就需要架构设计文档来传递。设计文档是架构师最本质的工作,而要想做好设计文档使团队每个人的开发工作高内聚、低耦合、依赖关系清晰,那么架构师必须具备良好的模块分解能力。
2.3 第三点:模块分解的能力
我见过一些优秀的程序员,在成为架构师以后,主要的工作方式是自己承担了最主要的甚至大部分的工作,然后让其他的程序员帮他打杂,那么他今天请假,整个开发团队都不知道该如何工作了。事实上,架构师要让团队每个人都发挥出价值,并持续地进步,这样自己和团队才是可持续发展的,而不仅仅是完成工作而已。这就需要架构师有良好的模块拆解能力,将开发任务拆解成高内聚、低耦合的模块,分配给团队成员。如果说早期单体架构的时代,模块关系混乱的问题还没有那么突出的话,微服务架构就会让那些不关注模块依赖关系的架构师吃尽了苦头。
2.4 第四点:大规模复杂系统架构的能力
绝大多数的架构师都没有设计过一个淘宝或者Facebook的机会,但是每个合格的架构师都应该知道:如何去设计淘宝这样一个大规模复杂系统的架构。一方面淘宝这样成功系统的架构模式是架构设计师最主要的参考经验;另一方面是检验架构师学习能力的试金石。
2.5 第五点:掌握典型技术解决方案的能力
像负载均衡、分布式缓存、消息队列、NoSQL,这些几乎是很多稍具规模系统的标配。那么作为一个架构师除了会用这些技术,关于这些技术的内部原理、优缺点也必须要掌握,这样才能够选择具体技术产品(技术选型),解决使用过程中的问题时游刃有余。
2.6 第六点:系统优化以及保障系统稳定的能力
架构师不是在开发初期丢出一张系统架构图就完事了(比喻:就像当爸爸不是怀孕前期丢出亿个精子就完事了的)。架构师要在系统的整个生命周期内对系统负责,需要持续不断地对系统性能进行优化,保证系统稳定、高可用的使用体验。
2.7 第七点:数据处理与应用的能力
早期系统架构设计主要是围绕业务需求展开的,但是随着大数据时代的到来,越来越多的系统架构开始围绕数据展开,构建所谓的人工智能系统,因此架构师必须要掌握处理与应用数据的能力。
2.8 第八点:领导与管理的能力
架构师要想让自己的架构设计落地,变成真正运行的系统的架构,需要处理各种内外部的关系,需要领导开发团队按照自己的架构设计进行开发。那么架构师也许不是严格意义上的管理者,但是他必须要有一定的领导和管理能力才行。
3 架构师训练营的初心是什么?
(4点讲解初心)
业界关于架构师有一些误解,一方面觉得架构师是高大上的工作,画画架构图、对程序员的工作指指点点就可以了;另一方面又觉得架构师没什么用,可有可无。在具体的开发实践中,一方面对架构设计工作不重视,拿到需求几乎没有任何设计一上来就撸代码;另一方面随着需求不断迭代,项目逐渐失控陷入混乱,又开始埋怨当初没有好好做设计。很多关于架构的资料将架构等同于高并发、高可用系统的架构,各种分布式、熔断、限流,而绝大多数的人面对的开发任务,既不需要那么高并发,也就没有那么多的高可用,学了很多架构还是不会做架构。很多想成为架构师的开发人员,对如何成为架构师的技术发展路径也不清晰,无法系统的学习架构师相关的技能栈;而很多已经承担着架构设计职责的架构师,没有系统的方法论,既不能够输出清晰的架构蓝图,也无法高效组织培养团队。关于架构和架构师的种种误解和乱象,我想写点什么的念头已经由来已久了。
架构设计是开发中的一个重要组成部分,架构师是开发团队中的重要角色。架构不是高高在上的,而是实实在在的,架构有自己的科学方法和最佳实践。架构师不是在开发中指手画脚的那个人,而是技术团队的领路人,他用架构设计引导技术团队完成开发任务,在遇到困难的时候,又能够解决具体问题的那个人。(广告内容:极客时间这次找我开设《架构师训练营》,我想在这里把我多年思考经历的关于架构的方法和实践,架构师的成长和修炼讲出来。在这个过程中,如果能够对你有所启迪我会非常高兴。如果能够让软件开发这个行业变得更加科学规范我会更加的荣幸)--广告内容也打出来了,算是对创作者的一份尊重吧。
4 架构师训练营有哪些特点?
(架构师的基本工作和主要职责)
这是架构师训练营,而不是架构训练营。架构是没办法训练的,每个项目,每个软件都有各自的需求特色,每家公司都有自己的企业文化,每个架构师都有自己的背景经验,所有的这些都会导致没有任何系统的架构设计是相同的。架构设计必须要面向场景和实践,从实际需求出发,落到实际应用中去。但是架构师其实是可以训练的,设计模式、架构模式、技术原理、设计方法、管理技巧,这些都可以通过训练和学习获得。
我们整个课程是按照架构师的职责维度组织的。
-
一个新项目必须要从架构设计开始,那么架构设计的输出是什么?这就是架构文档要讲的。
-
有了架构设计要进行开发了,如何使开发过程遵循架构设计?如何使开发者尽量关注业务实现?需要架构师用开发框架规范开发过程,聚焦业务实现,这就是框架设计要讲的。
-
有了开发框架,如何使不同的开发者任务职责清晰?使他们开发的代码模块高内聚、低耦合,需要架构师做好模块拆分,这就是模块分解要讲的。
-
现在的主流系统架构是微服务架构,微服务的本质其实就是模块服务化,所以这部分课程我也会重点讲微服务以及远程调用框架。
-
随着系统规模的不断增加维护代价越来越大,架构师需要对代码进行重构,这就是代码重构要讲的。而重构和设计模式是分不开的,其实这一部分主要是讲设计模式。
以上这些都是架构师的基本工作。都是代码、设计这些基础的,似乎和期待的高大上的系统架构没有什么关联。我们前面说过,你几乎没有机会去设计一个淘宝这样一个大规模系统的架构,但是再小的系统你也应该把上面的工作职责做好,才能够成为一个合格的架构师,但是大规模分布式系统的架构设计方法又是每个架构师都必须应该掌握的,不管你是不是会用到,因为这是架构师的常识。
系统架构会讲述淘宝这样的系统是如何设计的。系统设计中会用到各种各样的技术方案,分布式缓存、NoSQL等等。如何用好这些技术,选择合适的实现方案,在使用过程中解决各种各样的问题,这些技术方案的架构设计原理是什么,技术选型会进行讲述。在系统的运行过程中,性能优化是架构师最主要的职责,性能优化:一是需要方法;二是需要对各种底层技术原理有深刻的理解,才能够准确地判断出性能瓶颈。也许架构的好坏会因每个人的审美不同判断不同,但是架构师水平如何,在性能优化的时候就能看得出来。性能优化课,会对性能优化方法和底层技术原理进行讲述。系统运行期如果常常出故障失效,那么通常架构师是要背锅的。如何保证系统高可用,安全稳定进行讲述。面对各种新技术,架构师如何突破自我,超越通常意义的技术架构和开发获得新的成就和机会,数据应用和技术创新会讨论大数据、AI、区块链、物联网,这些技术框架原理和应用场景。架构师是不能一个人工作的,架构如果不能够落到系统实现上,不能够被开发人员执行,就是废纸。如何和人打交道,如何在工作中成就自己,成就团队成员,技术管理进行讲述。事实上,这个按架构师职责维度组织的课程内容和前面提到的架构师素养也是对应的,实现相应的职责,需要具备相应的素养。
5 参加架构师训练营,需要具备什么基础?
(架构师的学习和思考)
除了具有一些最基本的编程技能和经验,并不需要额外的条件。但是要想在训练营中有所收获,你必须要善于思考,架构设计和编写程序是不同的,程序写错了是不会运行,但是架构无所谓对错,只要最后程序能够正常运行这都是OK的。但是架构有好坏之分,有合适和不合适之分,有精妙和糟糕之分,你不去思考就不会明白为什么要这样设计,这样设计有什么好处,好在哪里。在训练营中,我们会学习讨论很多的技术,这些技术本身也是有架构设计的,如:操作系统、数据库、虚拟机、分布式缓存、微服务框架等等,我们在学习这些技术的时候,要从架构设计的角度去思考,它的设计原理是什么,而不是使用者的角度去研究它怎么用。这个过程也是训练你架构思维的过程,但是可能会对你造成一定的困扰和痛苦,需要你做好准备。
这句话小编非常认同--这些技术本身也是有架构设计的。所以我们在进阶某项技术、研究其源码时,更应该侧重于架构设计原理,这是设计者在某项技术上的核心思想,是你学习架构设计的重要知识来源,掌握了这些技术的架构设计,在你未来自研的道路上添砖加瓦。
视频链接:我心里优秀架构师是怎样的
码字不易,还请三联:👍、在看、分享
更多优质资源:👇