如何才是一个优秀的软件架构师?



在企业软件开发中,软件架构师的职位极其重要。其设计的架构是否合理、实用、有弹性,直接决定了软件开发的复杂度、工作量和最终的软件质量。软件产品的进度、质量和成本,都与软件架构直接相关。优秀的软件架构,系统各部分分工合理,接口清晰,彼此间耦合度小,后续的软件编码、测试和维护起来都非常容易。而低劣的软件架构,层次不清,各部件间耦合度高,调用过程复杂而混乱,后续的软件编码、测试和维护起来工作量大,质量很难保障。

软件架构师,在实际项目开发中,往往扮演着软件产品总设计师的角色,对软件系统的结构、交互机制、接口、数据结构、采用的开发工具、框架、组件等具有生杀予夺的权力。因此,优秀的软件设计师要有全面而深刻的业务知识体系、技术体系和丰富的实战经验。

在一个软件团队中,至少需具备一个优秀的软件架构师。这是软件开发能够取得成功的基本前提。

本文对软件架构师的任职能力进行阐述,供软件企业在招聘时参考。已经在企业中任职软件架构师的人员,可以比照本文,确认自己是否是一个优秀的软件架构师。

本文中,软件架构师是指这样的人员:在软件企业中,参与多个项目或多种产品的研发过程,负责软件系统的总体设计。其工作的输入为《XXX软件需求规格说明书》,工作输出通常为《XXX软件概要设计说明书》和/或软件架构图。

优秀的软件架构师,需要具备如下核心能力:
1. 需求理解能力。能够迅速透彻理解行业、客户、业务形态、业务流程、需求特性。深入而全面的理解需求,是进行软件架构设计的最基本前提。优秀的软件架构师,要能从《软件需求规格说明书》中提炼出最终交付客户的软件运行形态。能够敏锐发现《软件需求规格说明书》中未提及、未阐述清楚甚至阐述错误的需求项,并且能够对本软件的需求变化有一定的预测和感知能力。
2. 精通面向对象思想。面向对象思想是当今业界软件研发的主导技术体系,在软件开发、设计、测试、业务分析等领域广泛采用。请读者参考我写的另一文章:《面向对象,还是面向对象!》。不能深入理解面向对象的思想,是根本做不了软件架构师的。
3. 精通业界主流的软件技术,包括数据结构、设计模式、网络通信、数据库、Web开发等。
4. 熟悉业界主流的软件框架和组件,充分理解各框架、组件的使用场景、解决的核心问题、优缺点等。

综上,从技术角度讲,一个优秀的软件架构师的工作,就是在充分理解软件需求的基础上,在面向对象思想的指导下,用最适合的软件技术、框架、组件来建筑软件系统,通过综合分析、比较和权衡,确定最终的软件总体结构。

如何来确认一个软件架构师是否称职?或者说,如何确认一个软件架构师是否是一个优秀的软件架构师?

我有个非常简单的方法,与大家分享。通常,当一个软件架构师完成自己的软件架构设计初稿后,我就会让他给我讲一下,重点讲两个方面:
1)这个架构,是怎么想出来的?
2)为什么必须这么做?
我来讲一下,这两方面具体是什么意思。

1.“这个架构是怎么想出来的”,这个问题是考察软件架构师是否充分理解了需求,并且综合运用了面向对象思想各种软件技术、框架、组件等,有效的解决了客户的业务问题。
常见的问题是,很多软件设计人员,无法清晰说明“这个架构是怎么想出来的”。都是拍脑袋一想,就认为该这么设计,却说不出根本性的理由和依据。
还有一个常见的误区:很多人以为采用了框架,就叫架构设计。这是完全错误的!尤其Java开发团队中,很多设计师以为,Struts+Spring+Hibernate 就是软件架构,把这三个框架组装在一起,软件架构就完成了。存在这种想法的人不在少数。
这里强调的是,充分理解软件的需求特性,从需求一步步推导出软件架构。一个软件的架构,不是凭空而来的,而是从需求中来的。对需求进行全面而深入的理解,识别内在的核心结构和机制,选取最合适的技术来实现,这样一步步勾勒出软件的整体架构的。
因此,本问题考察软件架构师:
1)是否充分理解了软件需求?
2)是否用面向对象的思想对软件整体结构进行了正确的划分?
3)为了实现需求,是否选取了合适的结构、机制、技术、框架、组件?

2. “为什么必须这么做”,这个问题是考察软件架构师能否在多种方案中进行综合比对,权衡利弊,选取整体最优的软件架构方案。因此,软件架构师在构想软件架构的过程中,需考虑多种解决方案,包括软件整体结构的多个方案和具体软件模块的多个实现方案。在多个方案中,逐个进行优缺点分析,然后汇总,权衡总体的优劣,最后选取一个最优方案。
很多架构师常见的问题是,没有准备多个方案,只有一个方案,也就是最终方案。每个软件子系统、模块的结构、采用的组件和框架等,也只有一个分析结果。就单纯的认为,就应该这样设计!
不进行比较,如何得知,你的设计架构就是最适合、最有效、最优化的呢?
有的软件架构师为了应付这个问题,就在自己确定方案之后,后补了几个方案,而这几个方案都是用最差的技术和结构临时拼凑出来的,一看就不能用。
不能提出解决问题的多个解决方案,这样的架构师思维很狭窄,知识面不广阔,技术不全面,对问题的深入理解有限。
解决同一个问题,总是会有多个办法的。而只有进行比较,才会有鉴别,从而确定最优解。
这个过程中,考验的是软件架构师的比较能力和权衡能力。
比较能力:对实现同一软件需求的多个方案进行比较,确定最优方案。所谓最优,就是最合适、最有效解决问题的方案。每一种技术,都是为了解决某种特定的问题的。如果当前软件的需求,恰好是这类问题时,那么这种技术往往是实现这个软件需求的最佳方案。但如果软件的需求,不是这类问题,或者不完全符合这类问题,那么用这种技术来解决,就有些牵强,很可能不是最优解决方案。这里考验的是软件架构师对技术和要解决问题的精确理解程度。
权衡能力:汇总软件各部分的各种不同实现机制,形成多个候选的软件整体架构方案,进行综合对比,确定最后定稿的方案。最理想的情况是,最终方案是由所有的局部最优方案构成的。如果无法形成这样的方案,那么常见的情况就是每个方案都有自己的优势和劣势,并且无法将各个局部最优的方案直接进行组合。这种情况下,考察的是软件架构师对系统整体的认知能力:系统的核心部分在那里?哪些局部最优解对系统的核心和整体结构的贡献度最大?哪些局部最优解更能有效适应后续的软件需求变化?

能够清晰而准确回答以上两方面问题的软件架构师,我认为他就是一个优秀的软件架构师。
更为简单的说,一个软件架构师,如果能从软件需求一步步分析出软件架构,并且能讲明这样的架构是最优的,那他就是一个优秀的软件架构师。


猜你喜欢

转载自kong-desheng.iteye.com/blog/616097