成为系统架构设计师的关键是要培养自己的判新力、执行力和创新力。判断力是能够准确判断系统的复杂度在哪里,能准确地看出系统的脆弱点;执行力是能够使用合适的方案解决复杂度问题;创新力是能够创造新的解决方案解决复杂度问题。因此,要成为一个系统架构设计师,就需要不断地锻炼自己的内功,这些内功来源于经验、视野和思考。因此,要从工程师成长为架构设计师,应遵循积累经验,拓宽视野和深度思考的原则。下面说明从工程师到架构设计师的成长过程。
-
工程师阶段
要从一名技术员(助理工程师)成为一个合格的工程师需要参加相关工作1~3年时间,其典型特征是“在别人的指导下完成开发”,这里的“别人”主要是“高级工程师,或者“技术专家”。通常情况下,高级工程师或者技术专家负责需求分析、讨论和方案设计,工程师负贲编码实现,高级工程师或者技术专家会指导工程师进行编码实现。工程师阶段应该是原始的“基础技能积累阶段”,主要积累基础知识,包括编程语言、基本数据结构、开发环境、操作系统、数据库以及相关软件开发流程等。 -
高级工程师阶段
从工程师成长为高级工程师需要3~5年时间,其典型特征是“独立完成开发”,包括需求分析、方案设计和编码实现,其中需求分析和方案设计己经包含了“判断”和“选择”,只是范围相对来说小一些,更多是在己有架构下进行设计。高级工程师主要需要“积累方案设计经验”,简单来说就是业务当前用到的相关技术的设计经验。
高级工程师阶段相比工程师阶段有两个典型的差异:其一是深度,如果说工程师是要求知道How,那高级工程师就要求知道Why了。例如Java的各种数据结构的实现原理,因为只有深入掌握了这些实现原理,才能对其优缺点和使用场景有深刻理解,这样在做具体方案设计的时候才能选择合适的数据结构。其二是理论,理论就是前人总结出来的成熟的设计经验,例如数据库表设计的3个范式、面向对象的设计模式、SOLID设计原则、缓存设计理论(缓存穿透、缓存雪崩和缓存热点)等。 -
技术专家阶段
成长为技术专家需要4~8年时间,其典型的特征是“某个领域的专家”,通俗地讲,只要是这个领域的问题,技术专家都可以解决。例如:Java开发专家、嵌入式开发专家、操作系统开发专家等。通常情況下,“领域”的范围不能太小,例如我们可以说“Java开发专家”,但不会说“Java多线程专家”或“JavaJDBC专家”。技术专家与高级工程师的一个典型区别就是:高级工程师主要是在己有的架构框架下完成设计,而技术专家会根据需要修改、扩展和优化架构。从高级工程师成长为技术专家,主要需要“拓展技术宽度”,因为一个“领域”必然会涉及众多的技术面。
需要注意的是,拓展技术宽度并不意味者仅仅只是知道一个技术名词,而是要深入去理解每个技术的原理、优缺点以及应用场景。 -
系统架构设计师(初级)
成长为初级架构设计师需要5~8年时间,其典型特征就是能够“独立完成一个系统的架构设计”,可以是从0到1设计一个新系统,也可以是将架构从1.0重构到2.0。初级架构设计师负责的系统复杂度相对来说不高,例如后台管理系统、某个业务下的子系统等。初级架构设计师和技术专家的典型区别是:初级架构设计师是基于完善的架构设计方法论的指导来进行架构设计,而技术专家更多的是基于经验进行架构设计。简单来说,即使是同样一个方案,初级架构设计师能够清哳地阐述架构设计的理由和原因,而技术专家可能就是因为自己曾经这样做过,或者看到别人这样做过而选择设计方案。但在实践工作中,技术专家和初级架构设计师的区别并不很明显,事实上很多技术专家其实就承担了初级架构设计师的角色,因为在系统复杂度相对不高的情况下,架构设计的难度不高,用不同的备选方案最终都能够较好地完成系统设计。从技术专家成长为初级架构设计师,最主要的是形成自己的“架构设计方法论”。形成自己的架构设计方法论的主要手段有:系统学习架构设计方法论,包括订阅专栏或者阅读书籍等;深入研究成熟开源系统的架构设计;结合架构设计方法论,分析和总结自己团队甚至公司的各种系统的架构设计的优缺点,尝试思考架构的重构方案。 -
系统架构设计师(中级)
成长为中级架构设计师需要8-10年以上时间,其典型特征是“能够完成复杂系统的架构设计”,包含高性能、高可用、可扩展、海量存储等复杂系统,例如设计一个总共100人参与开发的业务系统等。中级架构设计师与初级架构设计师的典型区别在于系统复杂度的不同,中级架构设计师面对的系统复杂度要高于初级架构设计师。以开源项目为例,初级架构设计师可能引入某个开源项目就可以完成架构设计,而中级架构设计师可能发现其实没有哪个开源项目是合适的,而需要自己开发一个全新的项目,事实上很多开源项目就是这样诞生出来的。从初级架构设计师成长为中级架构设计师,最关键的是“技术深度和技术理论的积累”。 -
系统架构设计师(高级)
成长为高级架构设计师需要10年以上时间,其典型特征是“创造新的架构模式”,例如:谷歌的分布式存储架构、分布式计算MapReduce架构和列式存储架构等开创了大数据时代;在虚拟机很成熟的背景下,Docker创造了容器化的技术潮流。高级架构设计师与中级架构设计师相比,典型区别在手“创造性”,高级架构设计师能够创造新的架构模式,开创新的技木潮流。
总之,关于如何在专业领域内提升,有个著名的“10000小时定律”,简单来说要成为某个领域顶尖的专业人才,需要10000小时持续不断的练习,例如小提琴、足球、国际象棋、围棋等领域,无一例外都遵循这个定律,而技术人员的成长也基本遵循这个定律。系统架构设计师的成长其实最关键的还是技术人员对技术的热情以及持续不断地投入,包括学习、实践、思考和总结等