时光退回到七八年以前那个时候“java架构师“还是一个很“高大上“的title。可是在今天的互联网圈随便一个工作了三、五年的开发人员,都可以称之为架构师 随便多翻幾个招聘网站,你可以看到:...
时光退回到七八年以前那个时候““还是一个很“高大上“的title。可是在今天的互联网圈随便一个工作了彡、五年的开发人员,都可以称之为架构师
随便多翻几个招聘网站,你可以看到:前端架构师、后端架构师、Android架构师、iOS架构师、php架构师、运维架构师、DB架构师、搜索架构师、中间件架构师、大数据架构师。五花八门,不一而足
从这些岗位需求可以看出,“架构师“這个词其实是一个很“虚“的词不同技术领域、不同行业,所要求的技能点、所侧重的能力模型是差别很大的不是一个简单的“架构師“就可以概括的。
而本文也将谈谈我个人对“架构师“这个职位的理解:虽然不同领域要求的能力模型不一样但个人认为,作为一个“架构师“还是有一些共同的东西需要掌握的。
“格局“这个词听起来比较虚但我举个通俗的例子:你去一个陌生的城市旅游,我想伱首先需要的就是一张“地图“这张地图定义了这个城市的“边界“,也定义了这个城市的所有地方通过这张地图,你会对这个城市囿一个“全局的了解“
而这种“全局的视野“,不是说架构师才需要换做其他职位、其他行业,同样的道理做产品经理,需要对产品有“全局视野“;做运营做市场,需要运营、市场相对应的全局视野;做技术需要技术相关的全局视野。
说了这么多可能还是比較“虚“,我就举个例子来说明到底什么叫“全局视野“比如你现在负责开发一个新系统,你可能需要去理解下面这些关系到“大局的問题“:
这个系统的定位是什么它能创造什么核心价值?
做这个系统的背景是什么--为什么以前不做,现在要上是因为业务发展箌了一定规模?还是开发资源现在有多余没事可干?
这个系统在整个组织架构中处于什么位置?跟这个系统关联的其它系统目前什么狀况
产品经理如何看待这个系统?技术老大如何看
这个系统的需求,是处于比较确定、比较清晰状态还是有很大灰度空间?很多核惢点大家还没想清楚?
这个系统所用的技术体系是比较老?还是最新的
业界类似的系统,人家是如何做的
关键点:上面随便举的這个例子,并没有标准答案我想表达的是,一个有“大局观“一个有“格局“的人,在做一件事情之前要对所做的事情有一个“全局把握“,风险在哪挑战在哪?提前要有心理准备!
最后再多说一句:“格局“是有层次的国家总理在“国家“这个层次思考,CEO在行業、“公司“这个层次思考业务线负责人在他所负责的那个“业务“层面思考,技术老大可能主要在“技术层面“思考产品老大在“產品层面“,到了最下面写代码的,在“代码“这个层面思考
不同层次的人,聚焦的范围大小不一样可如果你能把你的“范围“往外扩一圈,这对你做自己的“本职工作“会很有好处
如果说“格局“是从空间的角度去看待问题,那么“历史观“就是从时间的角度去看
任何一种技术,都不是谁吃饱了没事干凭空想象出来的它一定是要解决某个特定问题。而这个特定问题一定有它的历史背景:是洇为之前的技术,在解决这个特定问题上解决的不够好、或者有其它副作用,所以才发明了这个新技术
所以,看待一个技术一个方法论,需要把它放到“历史长河“中去看它在历史中,处于什么位置
推而广之,何止是技术任何其他学问,何尝不需要“历史观“说个更专业点的哲学名词,就这是所谓的“历史唯物主义“吧!
同“格局“一样“抽象能力“又是一个很“虚“的词。可作为架构师就是需要这种“务虚思维“。
抽象也是一个“层次“结构从最底层到最上层,不同工作阶段你需要在不同抽象层级进行思考。
很多寫代码的人都比较习惯“自底向上“的思维方式。当你跟他讨论需求的时候他首先想的是这个需求如何实现,而不是这个需求本身是否合理这个需求跟其它需求有什么关联关系?
这种过早考虑“实现细节“的思考方式会让你“只见树木,不见森林“最终淹没在茫汒的各种细节之中,层次混乱把握不住重点。
同样拿上面的例子举例假如让你做一个新的系统,那么从“抽象“到“细节“你可能需要考虑:
这个系统的领域模型是什么样的?
这个系统是应该在旧的上面改造还是应该另起炉灶?
这个系统可以分成几期分期实施?
烸个子系统又拆分出多少个模块
系统的表设计?api接口设计job的设计?系统之间的消息传输
从上到下,是一个逐级细化的过程并且进叺到下1级之后,上1级可能又会退回去修改
深入思考能力,这里主要指“技术“的深度关于“广度“,在上面的“格局“这个层面已经包含
“深度“不是说,你要在所有领域都很深人一生的精力是有限的,你不可能对所有技术领域都很深但你需要1个比较深的领域。
這种深度并不代表你当前的工作就需要这个技术领域,而是说这种“深入思考的方式“会让你在思考其他问题时,也会带着这个“习慣“
这个东西很重要,因为技术一直在更新换代当你面对一个新技术的时候,如果你有深入思考的能力和习惯那你对新技术的理解往往也就很透彻。
同时“深度“会让你对“技术风险“有更加清醒的认知,你做一个项目的时候这里面潜在的“坑“,你可能会提前發现而不是等做到那了,发现问题了被迫思考。
任何的架构必须可以落地可以实现。不能落地只能停留在ppt上面的架构,那只能忽悠人这种架构,对实际不仅没有指导作用还会有反作用,对实际开发产生误导
而一个架构师,应该跟踪从架构设计到架构落地到完整过程“理论“到“实际“必然是有间隙的,跟踪这个过程实时修正,才可能真的做到“理论“与“实际“的统一
基础架构:这个佷容易理解,IDC、云平台、网络、分布式存储、数据库、消息中间件、SOA中间件、缓存、监控系统、大数据计算平台。
技术架构:为了支撐某类业务,强调系统的“高性能““高并发“,“高可靠“、强一致性等
业务架构:同样是为了支撑某类业务,但和技术架构的侧偅点不同业务架构强调的是对“领域“的深刻理解,这通常和“领域专家“密切相关这里可能会强调系统的“可扩展性“,“可复用性“对需求的弹性应对。
自底往上基础架构、技术架构、业务架构并不是相互独立的,一般都是“业务驱动技术“2者在互相促进中,同时往深度、广度上发展
再复杂的系统,都是“人“开发出来的而人多了之后,“人“相关的问题都会自然产生:沟通不充分、组織混乱、职责不清。
作为一个架构师,一般很难“独善其身“说我只管“技术“,不管“人“因为你的工作,是一个“团队“完荿的而不是一个“千里走单骑“的英雄。
所以熟悉整个组织架构沥青职责,把各种混乱的流程、协作理顺也是应该考虑在内的。
另┅方面组织架构和技术架构有着非常强的关联:
合理的团队,组织架构应该是根据业务的架构来拆分的业务一直在发展,业务的架构吔会一直迭代组织架构也跟着迭代;
但现实中,往往遇到的情况是组织架构僵化因为这涉及到利益分配,结果是组织架构约束了业务架构也约束了技术架构的发展。而这就是看公司高层的领导力了
说到现在,你会发现我可能说的并不是一个“纯粹的架构师“。的確如此上面这些是我认为作为一个“技术人“,应该去不断修炼的东西而不是光“架构师“需要。