1.2 如何打磨自己的架构能力
与编程技能一样,设计能力、架构能力也是可以经过不断地学习、锻炼而打磨出来的。首先不要把架构师定位太高,认为那不是自己应该考虑的事情,或者架构师距离自己还太遥远,等以后时机成熟了、技术达到了一定的水平自然而然地水到渠成。
其实人人都是架构师,只是级别不同而已,就好比程序员还要分为入门级、初级、中级、高级。架构师同样如此,当自己还没有任何架构知识储备时,先将自己定位为入门级架构师,又有何不可呢?只有自己有了定位,才会进行刻意的积累和练习,才能逐步走进这个领域,了解这个领域要做什么,应该学习什么。
软件行业的特点就是知识的更迭速度太快,每天都有层出不穷的新技术、新理论、新名词产生。今天还在学习的东西可能很快就会被淘汰,所以无论想要成为一名资深程序员,还是一名资深架构师,都需要保持终身学习的心态,这是最重要的一点。
没有人能够保持百分之百的精力、持续的自律,总会有懈怠,想放松,想放弃,这都是很正常的,没有必要因为这些而失去信心。终身学习的技巧是追求平均值,可以在状态好时多学习一些,达到一个峰值,在状态不佳时适当休息,或者完全不做任何事情,达到一个谷值,但是只要不彻底放弃,总会找到一种平衡,让所有的投入达到一种均衡稳定的状态。
系统架构和技术开发的区别就在于,前者很难通过学习技术书籍、视频资料、代码编写而得来,因为架构具有一定的抽象性,越抽象的东西适用性越广,价值也往往越大,学习抽象性的东西,更多依靠的是思维能力、想象能力,简单来说就是要多动脑。
程序员如何提高自己的架构能力,主要有8种方法,如图1-1所示。
图1-1 如何提高架构能力
(1)反复认真地看系统原型。系统原型是一个经过了论证、仔细推敲的系统设计文档,它的特点是直观、便于理解。通过原型图可以清晰地知道系统中都包含哪些页面、功能、交互方式、操作流程。很多程序开发人员,有一个不太好的习惯就是不仔细地看文档说明,感觉了解得差不多了就开始动手敲代码。往往开发完的程序,这里少个逻辑,那里少个校验。养成仔细看原型的习惯,能够锻炼自己对细节的把控能力,使自己具有更强的洞察力,架构师经常需要在一些细微之处做一些灵活而复杂的设计。
(2)反复认真地看需求文档。需求文档详尽地描述了用户想要什么,希望达到什么效果,以及应该怎样做。对需求一知半解就进行开发,后果是可想而知的。一个好的架构师一定是一个好的需求分析师。架构师并不是靠凭空想象去做事情。所有的架构设计都是为了完成需求,脱离需求的设计是没有任何意义的。因此,想要成为一名优秀的架构师,一定要养成深入理解需求的习惯。
(3)反复认真地看设计文档。设计文档是架构师、设计师、Team Leader对具体功能的设计,包含了系统整体架构设计、交互方式设计、数据库设计、流程设计、模块设计、代码结构设计等。当自己还没有足够的能力独立做系统设计时,就需要不断地去学习和模仿别人的设计,理解别人的设计。
(4)扩大自己的视角。很多程序员只负责自己开发的系统,交给自己什么就只做什么。工作了一两年,甚至还不知道自己所开发的系统处于整个业务流程的哪个环节,不知道自己实现的功能和其他功能有什么关联关系,不知道自己开发的接口处于整个调用链路的哪个环节。在阅读任何原型、需求和设计文档时,都要养成一个全局视角,先了解整体,再了解局部,知道整个系统要干什么、包含什么功能、自己在做什么。不懂就问,一定要清楚自己处于一个庞大系统的哪个环节。
(5)养成刨根问底的习惯。多去阅读别人的需求分析文档、设计文档、数据库结构设计、接口设计等,思考别人为什么要这样设计,有哪些精妙之处,有哪些不足。当有不理解的地方就多提问、多探讨,这样自己才能进步。
(6)练习文档写作能力。很多开发人员最痛苦的事情就是写文档,他们对于写文档有一种强烈的抵触情绪。其实原因很简单,打开Word就不知道应该写什么、怎么写,不知道怎么把一件抽象的事情描述清楚,不知道怎么把自己的想法变成文字,不知道以什么样的形式能让别人理解自己的想法。可以尝试自己画一画原型、写一写设计文档、做一做需求分析,只有真正动手了才能体会出这项工作的特点是什么、难点是什么、自己还欠缺什么。有时认为自己已经想得很清楚了,当真的要落实到文档上时,才发现有那么多的问题。写文档的过程就是把思想具体化的过程,当写不出来时,根本原因是思路还不够清晰。
(7)抓住每一个验证自己能力的机会。有时自己也想去做设计,但是作为一个普通的开发人员,似乎并没有那么多机会去施展才华,毕竟自己还不是Team Leader、项目经理,自己说话根本没有分量,并且设计的事情已经有资深人员承担了。但是,反向来思考一下,有哪个项目经理、设计师、架构师不是从程序员做起的呢?一个公司有那么多员工,为什么有些年轻人能够快速被提拔,为什么有些人年纪轻轻就可以做项目经理、架构师,而大多数的同龄人却不行呢?这就是对机会的把握能力的区别,除不断地学习和努力,去储备自己的能力外,还要主动地去寻找机会,抓住机会。工作中主动申请去做那些更复杂、更有挑战性的工作,能够迅速地得到公司的认可。如果永远和别人做相同难度的增删改查,那么怎么能体现出自己比别人更强呢。主动地去申请做一些小模块的设计,不但锻炼了自己的设计能力,还能让公司感受到自己能主动担当,敢于挑战自己,有何不可呢?
没做过小的功能设计,就不会有机会去做模块设计;没做过模块设计,就不会有机会去做子系统设计;没做过子系统设计,更不会有机会去做多个系统相互协作的系统群设计;没做过系统群设计,又怎么成为一名高级架构师呢。
(8)锻炼总结能力。有时并不是自己的知识储备不够,而是因为自己掌握的东西没有形成体系。它们分散在各处,当需要使用时,就需要到各处去查找,再拼凑在一起。对于一个系统的架构方式、部署方式、数据库设计、核心流程等都是可以整理总结的内容。如果能够对自己参与的所有系统都达到十分清晰的状态,那么一定会引起公司足够的重视。养成总结的习惯,形成知识体系,会让自己很快成为一个有“干货”的人。
总之,要有一颗终身学习的心,一双善于发现细节的眼睛,一个善于总结提炼的大脑,一双勤于练习的手;主动地去创造机会并抓住机会,那么自己很快就会成为一名合格的架构师。