【置顶】架构师成长之路

  上个月公司组织我和另外一个同事有幸参加了每年一度的全球架构师峰会,姑且算是架构师们的一场盛宴吧,不过确实感觉这个峰会挺水的,和自己当初的期望相差甚远。虽然近一百多个场次中零星夹杂着一些产品、质量方面的主题,但是绝大多数会场都是架构师在秀技术,当然这也折射出来:在国内,架构师常常被狭隘成技术能力强的那一拨人群。
  虽然不知道国外的架构师是否真如书本上说的那样,是一个偏向技术族的高端(几近全能)管理型人才,但是理想总需要有的,而且我觉得能做到那种标准的人肯定是企业稀缺的人才。这就整理收集了一些所谓架构师的职责和所需技能,就置顶当做自己努力的目标吧,希望能早日实现梦想!

1. 系统架构师是技术领导
  这意味着架构师除了需要有技术能力,同时还必须有领导能力。在项目中架构师具有做出技术方面决策的权力,相比而言项目经理则更加注重于在资源、排期、成本方面的规划和跟踪。
  架构师还需要参与到架构团队的组织管理,除了在较高层次设计系统架构外还,需要对各种工作和活动做出策划,因为架构实现最终会被落实分解成一个个的任务去执行。团队的质量对整个架构的成败有至关重要的影响,所以架构师还最好参与到团队员工的培养和新员工的面试选拔上去。
  架构师的领导力还体现在和团队成员的沟通交互上面,给员工的工作方向做出指引,给予他们充分明确的信息,并在需要的时候能够做出样例师范。成功的架构师都是以人为本的,每个架构师都会作为导师、教练的角色来带领团队的成员,成员的成长进步会推动项目的顺利进行,同时也让员工自身、整个团队、整个项目大大获益;同时架构师还需要发掘团队中各个成员的长处优势,鼓励大家相互分享相互学习。
  架构师在技术角度上要是整个项目推动的驱动力,架构师必须能够适时做出决策,并且保证这些决策能够被充分的讨论和论证,内容明确,最终落实实现下来。
  架构师需要和不同领域的人协同工作,需要对商务环境、需求的变更做出快速的响应,所以架构师的压力回是比较大的,需要寻求方式来释放消极情绪,努力使自身和团队成员积极向上的工作态度。

2. 架构师角色可能是由整个团队来担当的
  架构师通常需要十分渊博的知识和技能,所以常常项目架构师的角色是有多个个体成员组合担当起来的,每个人将自己的技能贡献给这个架构师角色,比如:架构师角色需要同时有业务方面的知识、有技术方面的知识技能,这通常需要多个人来互相补充才能实现的。不过如果架构师的角色是由多个个体成员组合的,那么需要有一个人被认为是主架构师,这个人需要有对整个架构团队具有统领全局的视角才行。
  优秀架构师们都知道自己的长处和短处,保持一种客观谦虚的态度。架构师需要由一些可信的建议者来支持和做出建议,用以弥补自己的弱项和技能缺陷。所以现实中优秀的架构通常都是由团队而不是个人创造出来的,因为好的团队整体对技术会有更宽广、更深入的视野。

3. 架构师需要了解软件的开发流程
  架构师需要清楚了解软件开发流程,只有这样才可以保证团队所有成员都能协调合作,而一个好的工作流程规划包含了项目中所需参与角色、所需承担任务、各个角色切换时机等。因为架构师需要和团队多数成员日常工作在一起,所以需要架构师了解这些成员的角色、职责,需要经常清晰地告诉他们需要做什么、如何去实现。

4. 架构师需要有业务领域相关知识
  架构师需要高度(甚至必须)了解业务领域的相关知识,业务领域的知识可以让架构师更好的理解系统需求或者系统应该具有的需求。而且不同业务领域常常也有一些架构模式可以借鉴,这对系统架构的最终成功很有帮助。
  因此一个好的架构师需要在开发技术、业务领域知识之间找到那个关键平衡点,如果只注重技术而不熟悉业务逻辑,那么最终的架构很可能无法满足业务的需求,其最终只是体现架构师感觉舒服的、想象中应该的、经验上熟悉了解的东西。
  另外需要架构师了解领域内的知识是因为架构师需要对系统将来的更新迭代做出评判预估,从架构上事先对系统将来可能的更改、稳定性考量等因素做出合理的考量和决策将会大有裨益,比如架构师意识到将来某个时间点系统需要遵守新的规则,那么在系统架构的时候就对这类变更提供便利接口,那么将会使将来做出变更会更加的容易。

5. 架构师需要有技术方面的知识
  架构师需要在一定程度上掌握相关技术类的知识技能,即使不需要作为专家级别的深入,也需要有一定深度地了解架构中的关键组件;对于其他技术也需要有一定的了解涉猎,扩宽自己的视野,可以不必过于的在乎细节。同时现代技术变化更新起来很快,架构师需要积极跟进变化并做出适当的调整,保持一颗好学、乐于接受新事务的心态。比如即使技术不断的迭代更新、新的开发语言被引进,优秀的架构师都能从任何编程语言中抽象出一些编程理念并将其用于新开发语言的理解上,实现对新技术、新语言的深层次的理解。

6. 架构师需要有设计方面的技能
  设计是架构很重要的一方面,架构师需要同客户(或者潜在客户)、产品经理、开发者进行沟通,以此来进行系统初始形态的设计和建模,其中会涉及到关键结构设计方面的决定、特定模式的选择、需要遵循的准则和规范等。

7. 架构师需要有编码方面的能力
  开发者是架构师密切交互的最重要的一波人,毕竟最终是由他们开发、交付最终可运行的软件系统。只有当架构师和开发者的交流是成功的,开发者的工作才可能保证正确和出色的完成,所以即使架构师不需要写代码,也必须有一定的开发水平,才能和开发团队进行有效的沟通交流。如果没有这种技能,架构师就不能对架构上重要组件的实现做出明确的决定,同时架构师和开发者之间的沟通也会产生壁垒。
  多数成功架构师在某种程度上说,也都是一些程序员核心骨干。架构师通常还需要指定公司或者部门的编码、开发规范标准,编写项目相关的文档和技术手册,同时还需要Review项目的代码以保证实现的质量、简洁性和可维护性,有时候需要亲自动手进行原型的开发、技术的测试评估等。

8. 架构师是一个好的沟通者
  在架构师的所有软技能中,沟通能力是最为重要的,有效沟通有多个维度可以实现,架构师都需要对他们熟悉精通。特别的,架构师需要有有效的语言沟通技能,包括说、写、表述的能力。同时沟通也是双方面的,架构师除了作为一个优秀的表达者之外,也是一个优秀的聆听和观察者。
  有效的沟通技能是一个项目成功众多因素中最基本要素。很明显,同客户的有效沟通可以理解他们的准确需求,这通常是商务形式的口吻,架构师需要和客户在软件架构上达成的一些共识;和项目团队的沟通也很重要,因为架构师不仅仅负责要将向他们传递信息,还需要和他们交互,激励他们推动项目的进行;此外架构师还需要和各个层次的管理者沟通。

9. 架构师需要作出决策
  在很多信息和情况都未知、没有时间浏览所有的候选决策、对按时成功交付有一定的压力的情况下,如果架构师不能做出决策,那么项目就不太可能会成功。这类情形很容易出现,架构师需要从中获取知识教训,同时架构师需要学会“厚脸皮”,对待事务要客观公正,因为随时可能需要去修正自己之前的决定、推翻先前的观点。
  如果没有能力做出决策,就会慢慢的让项目收到影响,整个项目团队也会对架构师慢慢失去信心,项目经理也会担心因为架构不能按照预期的进度推进。而更大的危险在于:如果架构师不能对架构做出相关决定,那么团队成员就会去自己做决定,而这些决定往往可能是错误的。
  架构师的决策需要充分论证得出,因为架构师的决策相比普通开发者来说极为的重要、昂贵,一个普通开发者的错误可能只是浪费一个人几天的工作量,而团队架构师的错误决策在负责系统中可能会牵涉到年人级别的资源规模,所以架构师的决定要谨慎、谨慎、再谨慎。
  如果项目比较大的时候,架构师可能面临着多个部门、多个背景的团队产生技术冲突的情况,如果各个团队针对不同的模块各出其力、各司其职的话,特别是现在的技术解决方案很多都跨语言、跨平台的,通常也不会出现什么问题;但是在各种不同的技术都可以达到目的,而他们的任务又有不同程度重叠的时候,架构师此时的选择就比较的困难了。推荐的解决思路:
  (a). 坚守当初项目的设计原则,比如平滑过渡、稳定压倒一切(技术的成熟度)、技术创新和尝试等,坚持项目需求和当初设计原则,对技术的选型会有不小的帮助;
  (b). 通常各个团队负责的模块对项目的重要性是有差异的,掌握核心关键模块的团队会影响到整个项目的成败与否,同时项目完成后负责维护的团队也需要考虑进来,在这些因素中独裁的架构师能够做到不偏不倚,做出的抉择才算是对整个项目负责的。

10. 架构师是一个谈判者
  架构师需要和很多的客户、利益团体进行交互,这些交互有时候需要有一定的协商谈判技能,比如架构师通常会尽量最小化项目风险,因为这会直接涉及稳定架构的交付时间,而风险通常是和某些需求相关联的,降低风险的方法通常就是移除或者简化涉及风险相关的需求,这就需要架构师和相关方能够沟通谈判,并最终达成一致。这就需要架构师是一个有效的谈判者,能够清醒的认识不同的厉害关系,从而权衡并最终达成一致。

本文完!

参考