1.1 架构师与程序员的区别
笔者常会在抖音上录制一些小视频,分享一些架构知识,有很多程序员同行留言:“你混淆了架构师和程序员的职责”“这是架构师应该考虑的问题,程序员写好代码就行了”“程序员不需要考虑系统规模,高并发、高可用这都是架构师该考虑的问题”“实现系统功能就可以了,考虑那么多东西干吗”。都说“不想当将军的士兵不是好士兵”,那么不想当架构师的程序员同样不会是一名优秀的程序员,其实每一个架构师都是一个“笨鸟先飞”的程序员。
技术人员首先要做的是改变自己的思维方式,仔细思考“程序员和架构师的本质区别到底是什么?架构师为什么有那么高的现实价值?”。一个程序员就算编码能力再强也只是一个人,一个大型的企业级项目往往需要多个团队的大量人员协作完成。架构师的职责是怎样做好顶层抽象、系统功能架构、服务关系架构、服务部署架构、服务拆分、系统分层设计、划定边界、核心框架、技术选型等。架构师必须要做出精准的顶层架构设计,让一个抽象的需求落地成为一个具体的系统。
因此,架构师的重要之处在于,将抽象的东西具体化,让复杂的事情简单化,让众多部门、人员清楚自己的职责,有序地实现各自部分的系统功能,最终形成一个大而完整的系统。架构师是一个人驱动众人,而一个编程强人,往往只能自己驱动自己或少数人,为企业带来的价值是有巨大差别的,这也是架构师属于高级职位的原因。
架构师是需求与开发之间的桥梁,它并不是一个纯技术岗位,表面上离技术更近一些,因为架构师都是从一名普通的开发人员成长起来的。架构师往往需要具有深厚的技术功底,对于技术有一定的深度和广度,更加注重底层原理,并且能够融会贯通,具有自己的一套知识体系,如果只是照搬理论,就成了死记硬背。
架构师的职责除进行业务分析、系统架构、分层设计外,很大一部分职责在于双向传播,向上汇报系统的构建方案,向下传达系统建设方法,也就是清晰准确地让公司上层领导和下层员工了解自己的思想和意图。向上汇报更多的是站在宏观视角,在非技术层面、合理性层面、成本层面考虑,让公司上层领导清晰直观地了解团队要做一个什么东西、打算怎么做、需要投入多少资源、能够带来什么效果。在公司内,任何工作能够得以顺利执行,都必须得到公司上层领导的支持和认同。
架构师往往需要协调多个团队、多个部门的开发人员相互协作来进行系统实施,涉及任务的分配、设计的评审、人员的管理等。可以说,架构设计能力、系统研发能力只是技术技能。此外,组织协调能力、汇报能力、管理能力也十分重要。毕竟架构师不可能凭借一己之力,实现一个庞大的企业级系统。
有时也存在架构设计上的取舍,并不会进行过度设计。例如,一个100人使用的系统,与一个100万人使用的系统的设计是绝对不同的。在系统建设初期有很多问题都没有办法暴露出来,公司资源的投入也是有限的,而随着企业的发展、用户量的上升、需求的完善才会不断地加大投入。架构设计也是一个迭代的过程,要结合市场、资源、时间、政策等方面来做决定。
架构师与程序员的区别有很多,大家各司其职。高级开发工程师也同样具有巨大的价值,因此架构师与程序员没有绝对的高低优劣之分,只是发展方向和成长路径不同而已,架构师要求综合能力更强一些,而高级开发工程师要求专项技能更突出一些。