架构师这个角色在任何软件开发项目中都是最有挑战性的。编程
1. 架构师的领导与决策能力
首先,架构师是一位技术领导,这意味着架构师除了拥有专门的技能外,还必须拥有领导能力,领导能力也要能体如今组织中的职位上。架构
从职位上来说,架构师是项目中的技术领导,应该拥有进行技术决策的权威。不过,不少时候架构师和项目经理的职责很容易让人混淆,下面用电影行业的职位来打一个比方,帮助你们了解他们的不一样:项目经理是制片人(确保事情完成),而架构师是导演(确保事情正确地完成)。架构师和项目经理表明了这个项目的公共角色,对于项目外的关注人员来讲,他们是主要的联系点。架构师尤为应该是建立一个架构及给组织带来价值的投资倡导者。框架
在决策方面,架构师要综合考虑,果断下决定。例如,在某些状况不清楚或没有充足的时间探究全部的可能性及有交付压力的状况下,若是架构师不能进行决策,那是不行的。并且这样的环境会很常见,架构师要接受这个现实而不是设法改变它。学习
有些时候,架构师会在决策时咨询其余人并营造其余人共同参与决策的环境,可是进行适当的决策仍然是架构师的职责,即便有时候这些决策并不老是正确的(固然,是过后才发现这些决策不正确的)。所以,架构师必须是厚脸皮的,由于他们可能必须纠正他们的决策并原路返回。架构设计
没有决策能力的架构师会使项目慢慢被破坏。项目团队会对架构师失去信心,项目经理将会担忧,由于这些等待架构师决策的事项没有进展。更加危险的是:若是架构师没有制定关于架构的决策并编写成文档,团队成员会开始制定他们本身的(多是不正确的)决策。设计
2. 架构师的角色可能由一个团队来履行
角色和人之间是存在差别的。一我的可能会履行不少个角色,一个角色也可能会由许多人来履行。因为架构师须要很是普遍的技能,因此,架构师这个角色可能会由多我的来履行,这时,架构团队中的每一个人均可以充分运用他本身的经验来履行此角色。特别是在理解业务领域和各方面技术所必需的技能时,每每须要多人合做才能达到相关要求。有一点很重要,就是最终的团队必须平衡。接口
若是架构师角色由一个团队来履行,拥有一个首席架构师就很是重要了,他是架构团队的协调人,常常会有先见之明。没有这个协调人,要让架构团队的成员创造出内聚的架构,或作出决策是很困难的。资源
对于一个不熟悉架构概念的团队来讲,为了达成共同的目的,建议团队应该建立并颁布一个团队规章。
优秀的架构师知道他们的优点和弱势。最优秀的架构一般由一个团队而不是我的建立的,这都是由于“众人力量大”,人多则见识更广和更深。开发
3. 架构师要理解软件开发流程
大部分架构师曾经都作过开发人员(几乎是绝大部分架构师都是从开发人员走过来的),同时,架构师应该了解软件开发流程,由于这个流程能确保团队的全部成员协调的工做。文档
这种协调性能够经过定义涉及的角色、从事的任务、建立的工做产品、不一样角色之间的移交点来得到。由于在平常工做中架构师会影响许多团队成员,因此理解团队成员的角色和职责,理解他们正在生产和使用的东西对于架构师来讲很重要。实际上,团队成员也很是但愿架构师可以指导他们的工做。
4. 架构师掌握技术与设计知识
架构设计会涉及技术知识,因此,一个架构师应该拥有必定程度的技术技能。不过,架构师没必要是一个技术专家,他要关注的是技术相关重要因素,而不是细节(其实不少时候,架构师也是技术专家,并且对细节理解得很是深刻)。架构师须要理解像Java EE或.NET这样的平台上可用的关键框架,可是没必要理解这些平台程序编程接口(API)的细节。
架构师必须与项目中的开发人员打交道,只有当架构师认可开发人员的工做价值时,在架构师和开发人员之间的沟通才是有效的。这也说明了,架构师应该具备必定的编程技能,即便他们在项目中没必要编写代码,也必须跟上技术更新的脚步。
架构师应该有组织地参与开发,而且尽量地参与代码的编写。若是架构师参与实现,开发团队会从架构师那儿得到见识。架构师还能够经过查看他们决策和设计的第一手结果来进行学习,从而对开发流程给出反馈。
大部分红功的软件架构师都曾经是核心的编程人员。某种程度上来讲,他们就是经过这段经历了解到业务的某些状况的。若是没有这些知识,要实架构上的重要元素(如源代码的组织、采用的编程标准)时,架构师将没法进行决策,架构师和开发人员之间将会存在沟通障碍。
另外,设计是架构设计的核心。架构使关键设计决策具体化,所以,架构师应该拥有很强的设计技能。关键设计决策指的是关键结构的设计决策、特定模型的选择、指导规格说明书等。
一我的不可能在短期内得到设计能力,这是多年经验累积的结果。某些设计专家在回顾他们早期的工做时都会惊讶他们原来的设计是如此的很差。在学习一项新技能时,想要对此精通则必须进行设计实践。
5. 架构师要掌握业务领域的知识
架构师除了掌握软件开发技术以外,还要理解业务领域相关知识(能够说是必须理解),以便担任利益相关者、用户(他们理解业务)及开发团队成员(他们更熟悉技术)之间的中间人。
业务领域的知识除了使架构师更好地理解系统的需求以外,还可以确保他们及时捕获恰当的需求。另外,一个特定领域一般与应用到这个解决方案中的特定架构模型组(和其余资源)相关,知道这个对照关系能够极大地帮助架构师。
所以,一个优秀的架构师一般会平衡掌握软件开发知识和业务领域知识。当架构师理解软件开发但不理解业务模型时,可能会开发出只反映出他所熟悉内容但没法知足需求的解决方案。
熟悉业务领域使架构师可以预见到架构中可能发生的改变。既然架构受其部署的环境(包括业务领域)影响很大,对业务领域的正确认识会使架构师在可能改变的区域和稳定性方面作出更全面的决策。举例来讲,若是架构师认识到在未来的某点必须符合新的调整标准,他会在架构中考虑这个需求。
6. 架构师是优秀的沟通人员
在架构师相关的全部软技能中,沟通最重要。有效沟通所涉及的各个方面架构师必须所有精通。架构师尤为要拥有较强的口头、书面表达能力同时,沟通是双向的,架构师应该既是优秀的聆听者,也是优秀的观察者。
有许多理由说明有效沟通是项目成功的基础。很明显,与利益相关者的沟通对于理解他们的需求,以及就架构相关问题与他们达成(并保持)一致来讲很是重要。
与项目团队沟通也是十分重要的,由于架构师不能只是简单地把信息传达给团队,他还要激发团队,好比他必需要传达(并强调)系统的愿景,让你们都了解这个愿景,而不是只有他本身理解并相信。
同时,架构师也必须是一位比较好的谈判专家。对于架构设计的许多方面,架构师须要与众多利益相关者进行交流,其中的一些交流则须要谈判技巧。
另外,架构师应特别关注如何在项目中尽量早地把风险降到最小,由于这会对稳定架构所花的时间有直接影响。风险与需求(及需求中的变化)有关,消除风险的一个途径是精炼需求,以便这种风险再也不出现,那么这就须要回退需求并和利益相关者达成一致意见了。在这种情形下,若是架构师是一位谈判高手,可以清晰明白地代表不一样折中的后果,相信必定会事半功倍。
7. 架构师了解组织政策
成功的架构师并不仅是关心技术,他们还要对政治足够敏感,而且知道组织中的权力所在。他们可利用这些知识与恰当的人沟通,确保在项目的适当周期中得到相应的支持。
政策包括大量的不肯定性,这会使许多技术人员紧张,让他们感受仿佛在“客场”比赛,他们正处于一个不利的位置,由于他们的技术不能发挥出多大的威力。
实际上,组织中起做用的许多强制约束位于项目交付的系统以外,而且这些约束是必须考虑的。为了解决不一样的意见,一个政策性流程是不可避免的。所以,与其谴责它,倒不如把政策理解成是处理不一样意见的必然需求。