在开始正式讨论架构相关问题之前,需要明确以下几个问题
1.架构师和普通开发人员有什么区别
2.架构师需要关注那些能力
架构师并非更强
如果降低大家的工作层级,实际上那些高高在上的架构师甚至CTO与底层的熟练开发工程师之间进行开发能力PK。我想两者开发能力并不会有太大差距,甚至底层开发人员可能会更胜一筹。但是从收入来看,大部分承担架构师的开发人员工资收入会更高,从公司角度推断,架构师以及更高的技术负责人收入更高本质上是因为他们承担或者负责一些远比开发本身更加重要的东西,因为有这些关键事情的需求,所以才会用更高的薪资聘用。这些更加重要的东西是什么呢?
从笔者角度来看,实际上就是一个可以解决软件相关问题的能力比一般的工程师要更好一些。这里的解决问题比开发能力的范围大很多。我这里初步列举几点
1.开发人员之间工作安排
2.参与产品原型设计
3.不同部门之间沟通以及协作
4.向上产品汇报以及项目投入、产出评估
5.团队人员管理,项目全生命周期管理
有些读者可能觉得一下子架构师的职责扩大很多,对于个人在的公司认为架构师并没有承担上述提到的内容。对于一些职责分离较为清晰的公司,架构师只是狭隘的成为一个团队开发的头头,只需要按照预设的排期进行开发即可。但是这里还是建议大家从更高的维度的去思考作为一个产品或者功能负责人的角度去思考一些更为广阔的问题,即使目前是技术架构师,未来通过这些学习还是可能更近一步达到业务负责人。(成为一个领域的领导者实际上就是这个人本身就有相应的匹配能力,而不是成为这个角色后才开始学习和掌握这部分能力)上面列举的几点,每一点都可以扩展讲述,笔者这里先抛出问题,后续会针对这些问题逐一解答并且补充当前没有提到的内容。
继续回到本章节的讨论内容,我先抛出个人的观点。架构师是重点涉及合作、传播、管理以及执行的综合岗位。合作就是指多方利益团队之间交流,以及推动各方按照预期完成负责的工作。传播重点涉及向上汇报和向下传达,向上汇报就是将当前工作整体计划安排以及当前进度进行综合汇报,实际上就是领导的预期管理。向下传达包含了团队管理以及领导要求具体转化。管理就是传统的项目管理、人员管理。执行是指将上层下发的任务拆分为可以执行的具体工作分发给具体开发人员,拆分包含了任务拆解以及任务组合等。上面这几点从个人经验来看属于标准架构师应该具有的素质。
架构师需要哪些能力
笔者个人认为有三种能力必须要具备,沟通、管理和开发。
沟通包含清晰阐述当前事情,以及和他人交流按照自身原计划目标推动工作的能力。笔者这里从内心角度想再阐述一句话,规矩是死的,人是活的。个人应该保证行为处事符合规矩,但是要学会在规矩面前灵活变通。太过死板会导致工作效率低,并且很难应对突发场景下的问题。太过灵活而没有规矩容易让自己背负不该承受的责任,个人可能无法专注在应该聚焦的领域(后续考虑补充几个真实故事)。
管理是指项目管理、团队管理以及向上管理。团队管理是基础,项目管理是架构师的能力核心,向上管理决定发展上限。团队管理主要是知人善用,合理分配。项目管理较为复杂,后续会单独介绍,这里认为关键点就是关键阶段把控以及应对突发情况。向上管理是一门学问,有能力,让别人知道你的能力,依赖你的能力,怎么合理展示能力而受到重用也是需要细心钻研。
开发就不用多提了,想成为架构师至少要在一个领域的开发较为熟练,同时能够关注当前主流的技术。
1.一门开发语言和开发框架熟悉,对于高并发以及性能优化有一定实战经验
2.现有的容器技术熟悉
3.linux环境以及基础运维功能
4.数据库,包括关系型数据库、非关系型数据库、缓存数据库等
5.数据结构,设计模式以及常见的架构特征
6.常见消息中间件
7.架构文档编写以及场景绘图软件使用,包括UML设计
笔者独立负责的大型项目有多个,如果是参与则有几十个项目了。一路走来,发现职业生涯中最重要的是和人更好的打交道。并不是指个人努力或者能力不重要,随着团队人数增加以及外部门合作,个人亲临开发所带来的效率提升从整体来看影响有限,如何提升团队的效率是更值得思考的问题。