毕业9年,一直兢兢业业的待在软件开发岗位上,未出大错,也无大功,除了圈子简单,与电脑打交道的时间大于人外,也无别的忧愁,钱不多,活不少,就差猝死,这便是我这种积年程序员的常态。
一行干的久了,总有些经验、想法、思维,无声无息的影响着自己,或固化,或进取,但在职业方向上,却看的越来越明白,在开发岗位上,我待的甚久,它上方的风景总有涉及或了解,不说做的多么好,但总有些积累,愿给后来者一些路径,方不失我辈开源之精神。
构架师,作为程序员技术方向的进阶职业,业界尚未有清楚的定义,但作为程序员的你,是否清楚,它是什么?它有哪些职责?要成为构架师,要具备的能力有哪些?只有具有这些认识,你才知道差距和方向,那么,先让我,为你捋一捋,看它是否符合你心中的想象。
构架一词,原本来源于建筑行业,意为建筑师对建筑物的建造过程的规划、设计及检视,后被引用到软件行业,形容对软件产品的宏观构架设计,直白点,就是一个资深程序员从产品经理那拿到业务需求,搭建套系统将其实现,而如何将系统更好的实现,便是构架。构架师,可说是做这个的,但又不仅限于如此,类比的话,就是要造一栋房子,构架师负责主体的设计、布局、规划,资源协调,然后再作为技术咨询,指导类似农民工般的程序员来建这栋房子,最后并成功将之交付,从这里,我们可以看出,构架师的一项主要职责,便是思考怎么做的问题,与程序员平时接到功能需求将其实现的过程很像,但涉及的层面更高,更广,构架师更多的思考是整个系统,考虑怎样从0到1的创建,并且能兼顾现在和将来,而程序员更多考虑的是在已有的框架上怎么实现,区别很小,也很大。
在业界,构架师,一般会按照其面向的知识领域进行划分,有面向基础设施构架的,有面向中间件的,也有面向网络安全等特定领域的,但其中面向产品的应用构架师最为常见,基本也是我涉及的领域,一般,在应用构架师拿到一项做什么的业务需求,他需要实时与产品经理交流,将具体的业务转换成相应的领域模型,识别出其中的功能、非功能需求,最后评估系统量级,决定技术选型,划分模块,确定边界,做出包含整体、局部、数据、接口、部署、关键技术点实现等的构架方案,然后,在确认方案后,还需协助项目经理带领程序员们将其做出来,其过程可能还涉及到一些疑难问题的研究攻关、人员能力提升等问题,回看整个过程,其主要职责,基本可以划分为系统分析、构架设计、研究攻关、技术管理、带人识人这5方面,可说,这些是一个构架师应具备的基本能力,而更上一层,是技术规划,竞品技术分析,技术创新等更为宏观的事情,而对于其它类型的构架师,可能还需承担一些另外的职责或在这些职责上要求的比重会不一样,但大体却是相似的。
回顾过去这些年,做过的产品,从孵化到线上运营,遇到的各种设计问题,有几点,觉得对构架师来说,十分重要,第一,专业能力,不仅表现在对技术了解的广度和深度上,还有对业务的理解上,通过业务搭建领域模型,思考要全面,看的要长远,具体的实现上,需要了解一些新技术及趋势,知道其本质及应用场景,对成熟的技术要会使用并且能深入,知道当前什么是最适合的,追寻一种相对的平衡,不能过度设计,又要能兼容未来,同时,做完设计,还需要及时复盘反思,积极积累实践经验,最终能整合出自己的构架方法论,简单点来说,就是能系统化的思考,以发展的角度看待,同时能结构化输出,所以要做到专业,你的学习能力不能差。第二,良好的沟通表达和领导能力,能影响,能推进,能凝聚,能表达。
这些,便是我对构架师这个角色的认识,总结下,构架师的基本职责:系统分析、构架设计、研究攻关、技术管理及氛围的塑造、带人识人、技术规划;构架师应具备的基本能力:专业及学习能力、沟通及领导能力;构架师思考问题应具有的方式:系统思维、发展思维、结构化思维。