开发五年了,为什么我还不是一个合格的架构师。
背景:
今天接到一个哥们儿的电话,说,很郁闷,想和我聊聊。
我问,有啥郁闷的事情啊,说来听听。
他说,最近很郁闷,我本来今年的计划是成为一个架构师,但是,无论如何努力,都不知道为什么,感觉希望很渺茫…
这哥们儿其实是一个很努力的家伙,曾经是我Team里技术最好的程序员,对一个技术不钻明白不罢休的那种程序员。
我给他电话里说了说我一直想说,但一直都没有时间说的话,那就是:为什么你总是成为不了架构师?
什么是架构师?
其实架构师的概念并不是从程序开发专业一诞生就有的职位概念,架构师(Software Architect)仅仅是最近几年提出来的一个职位,貌似Software Architect的概念是IBM提出来的。然而,架构是什么样的一个职位,就像云计算一样,看起来很美,但是,每个人都有自己的理解。
- 很多人认为,架构师就是系统分析师,是拿到系统需求进行分析的人,错!如果系统只是系统分析,那么架构设计谁来弄?
- 有人认为架构师就是架构设计的人,画画UML,写一写文档之类的人,错!画UML就是设计吗?画图的人有了,设计的人是谁?
- 还有人认为架构师是从属于项目经理,只管设计,而没有任何权利的人,错!如果设计的决策权交给项目经理,那么这个设计是有分量的吗?
架构师是什么?
我们先不回答,我们先来看看在架构师概念出现前的一些职位提法。
在架构师概念出现前,微软是我们大多数软件企业的研发机构设置的样板,当时比较流行的职位搭配是——技术经理+项目经理。
ok,当然也有很多企业实际上,技术经理和项目经理是一个人。
也就是大多数企业当时是采用的开发主管负责制,即:技术+团队+项目,的负责人。
当我们把“项目经理”剥离出开发,仅仅对项目进度以及为项目推进而排除各项外部障碍时,其实负责开发技术和开发团队的人就是“技术经理”了。
如果,我告诉你,之前所谓的技术经理其实就现在的架构师,可能我们大家就更容易理解了。
没错,就是这样的,如果“架构师”的设计失去了“发言权”、“技术方向的决策权”、“团队人员的开发资源调配权”,那么我们可以想见,这个设计是多么的无力!!
因此,什么是架构师?
架构师是具有技术发言权,方向决策权,和团队人员开发资源调配权的开发团队的TeamLear,也是这个程序的设计者,当然他是这个程序团队的灵魂!!
因此,不想当Teamleader的程序员,绝对不可能成为真正意义上的架构师!
同时,不是Teamleader的架构师,也是一个被架空的,苍白无力的架构师!
架构师所需要完成的工作
作为一个程序团队的灵魂,架构师需要完成哪些工作,才能够成为一个好的Teamleade呢。
1,需求整理分析:
首先,第一手的信息损失最少,架构师能够更好的把握需求;其次,分析人员在与客户交流时,往往不会深入挖掘需求,因为有很多隐藏的需求客户自己都不见得意识的到,而架构师则可以依靠敏感的软件嗅觉发现这些需求,减少以后的变数;第三,分析人员往往脱离开发团队,盲目接受客户需求,而架构师能够清楚把握现有的研发团队能做什么,不能做什么,提前预知风险,降低项目失败的机率。
2,系统分解:
在收集完信息后,架构师需要将用户需求转化为软件需求,同时要补充非业务需求,如健壮性,扩展性等等。如何区分和化解用户需求与软件需求,如何有效把握用户需求与软件需求的区别,是系统分解的核心。这是最考验架构师的地方,也是只有架构师参与的工作。
3,技术选型:
这一步要根据对软件需求决定项目该使用何种架构,开发模型,及依赖选项。如使用多层架构还是分布式架构,是瀑布模型还是RUP,是使用MySQL还是SQLServer,是否需要使用企业库,是否需要使用ORM。但是,架构师对项目的技术选型要提供多种不同的方案,并为每种不同方案提供详细说明文档,用来阐述每种方案的优势,劣势,可行性等内容。这些文档供项目经理或领导决策最终的技术选型。
4,系统设计:
依据软件需求和技术选型,架构师需要和软件工程师一起将软件需求落实到软件详细设计说明书中。架构师负责将软件需求分解,重组织为子项目,子系统,组件和模块,以及它们之间的逻辑关系,从而形成不同的逻辑组成部分,最后还需要确定各个子系统及组件间的接口。这些都是作为进一步的团队分工的依据。同系统分解一样,系统设计是考验架构师能力的重要职责。
5,培训与指导:
在软件详细设计说明书完成后,为保证项目的顺利进行,架构师需要对整个团队进行技术培训,让团队中的每个人明白自己的职责范围,该做什么,不该做什么。
在项目实施过程中,架构师需要参与到具体开发过程中,给与每个开发人员有效指导,以避免团队成员对系统设计的误解而造成项目的延误。在我看来,这点对于新手比较多的团队尤为重要。因为国内新手的一个通病是眼高手低,刚学会了一点点就认为自己什么都会;当他们拿到真正的设计时又往往不知所措,畏首畏尾。
6,保持沟通:
沟通是保证项目顺利开展的有效保障。架构师要从多方面跟踪项目进度,及时与项目经理或直属领导汇报项目进展,与技术开发人员沟通遇到的问题,如果是迭代开发,还需要与用户沟通需求变更。
架构师的硬实力(所掌握技术)
作为团队的Teamleade,你要给与团队培训与指导,分析用户需求,转化为软件需求,都在考验着这个架构师的技术。下面我以Java架构师需要掌握的技术为实例来分析的。
(1) 要具备扎实的Java基础
这里所谓扎实的Java基础不是我们通常所理解的Java语法、面向对象的概念,而是能深刻理解Java的多线程开发,熟练使用NIO技术优化网络编程,了解JVM的底层机制,具备底层性能调优的能力,这些技能恰恰是Java开发人员往往忽略的基础。
(2) 深入学习常用开源框架
很多小伙伴可能会很困惑,为什么BAT的面试官总是喜欢问源码?其实我们常用的Spring、MyBaits这样的框架可以说是JAVA里面最经典的教科书,从中你能学习到很多写代码的经验技巧,而去悟开源框架中蕴含的优雅架构设计之道这才是最重要的。
(3) 高性能分布式系统设计与应用
根据双十一日志统计,前端系统有效请求约60w以上的QPS ,而后端cache的集群峰值近2000w/s、单机也近30w/s,互联网大厂的架构师面对的就是这样的生产环境,所以分布式、缓存、消息这样搭建高性能系统的技术必须掌握。
(4) 微服务(分布式服务技术)
微服务架构是一种架构风格,整个应用被划分并设计为以业务域为模型的松散耦合的独立服务,方便横向扩展能力、伸缩性强、便于开发和维护等等这些是微服务与生俱来的优势。
(5) 沟通合作的能力
程序员的战斗,往往不是一个人的战斗,我们如何在一个平台下高效的去重,进行代码review,对功能进行调整、debug,做到在统一的规划下步步为营,混乱的堆代码的过程中找到自己的记录。这一切都依赖于有效的工具,Git、Maven和jenkins。
熟悉的掌握上面的技能,是你成为架构师的根本,感谢小伙伴能够看完这篇文章,这些只是哦我对于架构师个人的一些见解,如果你觉得文章对你有帮助,记得帮小编点个赞哦。