通向架构师之路

  • 崔康

2013 年 9 月 29 日

话题:语言 & 开发架构

对于不少开发者来说,成为架构师是职业生涯的目标之一,但是如何成为一名架构师却没有统一的教科书,Verizon 公司架构师 Bett Correa 在 Software 期刊中分享了自己的成长经历,主要的经验包括均衡发展技术知识、领域知识和沟通能力,通过架构来学习架构等。

Bett 认为架构师必须了解当前的系统如何满足客户的需求、实际地编写代码、与客户坐下来观察他们的工作,并听取他们对软件的反馈意见。架构师必须搭建团队之间的桥梁,理解每一个团队自身的局限性,并考虑每一方的利益。当业务部门提交了一个新需求,架构师必须据此做好满足需求的软件设计,并把这个设计“卖给”各个团队,让开发人员和测试人员了解新系统的工作原理。

另一个重要的经验是平衡,技术知识、领域知识和沟通能力之间的均衡发展。Bett 最初以技术人员出身,学习 Perl 和 JavaScript 等,当时并没有考虑软件设计方面的问题,基本的想法就是“尽可能快速地编码,快速完成任务”,但事实上,通常这只是个美好的愿望。在进入一家新公司之后,她开始了解该领域的知识和沟通技巧。她参与了 Toastmasters 活动,提高了当众演讲和主持会议的自信。然后,开始了解系统需求,这离软件设计又近了一步,她把其他人对系统的需求分析记录下来,持续了几个月的时间。

她的工作导师要求她了解软件系统和工作原理,并与各个团队的领导打交道。一段时间之后,她成为了该系统的专家,许多人开始找其咨询。同时,与业务部门接触,了解市场行情,学习公司的发展史,阅读公司网站上的白皮书和在线课程。

这些付出都是值得的,因为 Bett 可以轻松地与开发人员和业务客户讨论系统的细节问题。一天,导师让 Bett 设计软件系统的一个小模块,她需要决定许多方面的问题。Bett 发现设计不是一个简单的 01 游戏——设计都是权衡和妥协的结果,比如增强安全性可能会降低响应速度。某个决定在一些情况下生效,在其他情况可能无效,Bett 不得不找出失效的各种情况,并评估其成本。

在担任架构师的第一年,Bett 服务于 25 个不同的小项目,从而全面的了解软件系统的各个部分。她能够将不同背景的人组织到一起拿出解决方案。慢慢地,Bett 发现她的设计可以让各个利益相关者接受。

Bett 建议,如果你想培训架构师,那么:

  • 发展团队中的好苗子
  • 给他们安排一些设计工作
  • 鼓励互相交流
  • 让整个团队都考虑设计问题
  • 鼓励设计方面的培训

如果你想成为架构师,那么:

  • 找一位资深的架构师做导师
  • 寻找可以设计的项目,甚至可以是自己的项目
  • 参加正式培训并多交流
  • Bett 特别强调,只有亲自参与设计,才会真正了解应该如何设计。起初有很多想法,但是开始设计了,才发现很多都是不切实际的。通过课程或者书籍来培训自己是必要的一步。

说到架构师的沟通和协商能力,Dave Hendrichsen 在“软件架构师的 12 项修炼”中做了充分的剖析,建议如下。

多说“是”,少说“不是”

架构师经常会被咨询问到某个项目的可行性,并提供从战略到战术的多个替代方案,附带若干成本选项,以使商务伙伴能根据特定项目的投资进行判断。架构师与项目评估团队的角色不是决定要构建什么,而是决定怎样构建。我们试图说出的答案是“对,我们能构建这个项目,这些是相关的信息”。产生的信息需要包括诸如所考虑的各种替代方案、项目风险(以及可能的规避策略)、基于的假设条件,以及需要指出的突出问题。我们不是在寻找这样的答案:“不行,这个项目不可行,但我们能构建另一个项目(通过消除原困难项目中的难题,而代之以我们想构建的那些特性)。”

但是,如果一个项目或任务不可行,我们需要立即巧妙地指出评估结果、解释原因,并提供替代方案。这通常归结于法律法规、行规等原因,以致“不”是正确的回答。当然了,还有其他一些例外情况:提出需求的人是想逃避工作,需求违反了公司的政策,或者你手头有优先级更高的工作,无法让你有足够时间来对需求做出满意的答复。这些情况下,你要清楚地告诉人家你说“不”的原因。

了解别人和自己的沟通需求

在架构师的世界中,你需要例行地与许多人交流。你可能在上一次会议上与有些人谈过话,也可能没有和这些人谈话。挑战就是快速了解人们在说什么,他们怎么说这些话,来“读懂”本次会议。

观察关键的时刻,即做出决定的时刻是一个要点,以此识别人们提出的问题和关心的地方,来加强核心概念,帮助你关注会议的方向以及把会议引向一个成功的结论。为了认识这些关键时刻,我们需要吸收所有信息,包括提供给我们的语言或非语言信息。

观察别人的举止能够告诉我们如何与每个人最好地沟通。由于每个人都不相同,并且对沟通也有不同的需求,架构师必须让传递信息的方式适应这些需求,以确保有效沟通。

关键点就是我们要基于每个听众成员的沟通需求来匹配交流风格。有些人的反应是能够看出来的,他们的偏好能够用诸如“我明白你的意思”之类的话辨别。另外有些人需要倾听,并吸纳语言细节,他们的偏好能够用诸如“我在听你说”之类的话辨别。还有一些人在交谈中比较情绪化,他们的偏好能够用诸如“我觉得怎样怎样”之类的话辨别。

语言 & 开发架构