`
mingjian01
  • 浏览: 29538 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

你是个软件架构师吗?(转)

阅读更多

开发和架构的界限难以捉摸。有些人告诉你它根本不存在,架构只是开发者们所做的设计过程的简单扩展。 另外一些人认为这是一个鸿沟,它只能由那些做到高度抽象,而且不会陷入实现细节的开发者才能跨越。通常,在这两个极端的观点中间某处有个可操作的平衡点; 不论如何,怎么从开发转换为架构师都是个有趣的问题。

经常被用来区分软件架构和软件设计开发的关键几点包括 伸缩性和抽象程度的增加以及作出正确设计决策意义的增强。软件架构是通过一个全局的观点,宏观的视角来理解软件系统作为一个整体如何工作。

即使这能够帮助区分软件开发和架构,它并不能帮助理解某人如何从开发提升到架构。 并且,它也不能帮助识别谁能够成为一个好的软件架构师,如果你想雇人的话你如何去寻找他们以及你是否是一个软件架构师。

经验可以判定但你需要更深入地了解

要成为一个软件架构师并不是一夜之间或者一个职位的提升就能简单达到的。 这是个职责,而不是头衔。这是个进化的过程,你将会逐步得到担当这个职责所需的经验和信心。

当你寻找架构师时,需要考虑各方面的素质,他们过去的经验往往是他们有能力担当这个职责很好的判断。由于软件架构师的职责是多种多样的,所以你需要 再深入了解他们在不同领域的参与度,影响力,领导力和责任感。一般来说,在大多数项目中软件架构可分为两个阶段,架构的定义,然后是它的交付。

软件架构的定义

架构的定义过程看起来非常简单明了。 你需要做的是理解需求并设计一个系统来满足需求。 但实际上并没有那么简单,根据你不同的做法,软件架构的职责之间差距很大,以及如何认真看待自己的职责而定。如下图所示,这个职责的架构定义部分,可以进 一步细分成不同的元素。

The role of a hands-on software architect from a definition 
perspective

  1. 管理非功能性需求: 软件项目经常陷入问用户要求是什么,什么是他们想要的功能,但很少问他们需要什么非功能性需求(或系统 质量)有时候,干系人会告诉我们,“这个系统必须很快”,但是这太主观了。非功能性需求如果要满足的话需要明确,可度量,可获得以及可测试。大多数非功能 性需求本质上是技术层面的而且经常对软件架构有很大的影响。理解非功能性要求是架构师职责非常重要的一个部分,但假设这些需求是什么并不一定是对他们的挑 战。你见过多少系统真正需要24x7的运行呢?

    Management of non-functional requirements
  2. 架构定义: 捕捉到了非功能性需求后,下一步是开始思考你打算如何去解决干系人提出的这些问题并定义它的架构。 公平的说每个软件系统都有一个架构,但并不是每个软件系统都有一个定义好的架构。这正是问题的关键。架构定义过程让你想清楚你打算怎么在兼顾需求和限制的 情况下把问题解决好。架构定义是将结构,方针,原则和领导力引入软件项目的技术层面。定义架构是作为软件架构师的工作,但是从头开始设计一个软件系统和对 已存在的系统扩展是相当不同的。

    Architecture definition
  3. 技术选型: 技术选型通常是一个有趣的练习,但它也有公平的挑战,因为你需要综合考虑成本、许可、供应商关系、技术策略、兼 容性、协作性、支持、部署、升级的政策以及最终用户环境等各方面。综合这些因素,通常会导致简单选择类似富客户端技术而进入了完全的噩梦。接下来的问题就 是这些技术是否能真正有用。技术选型是彻头彻尾的风险管理;复杂性或不确定性太高的时候要减轻风险,当有机会或利益的时候要引入风险。技术决策需要考虑多 种因素,而且所有的技术决策需要被检查和评估。这包含软件项目的主要组成部分乃至开发中引入的类库和框架。如果定义一个架构,你还需要有信心认为选择这项 技术是正确的。同样在技术评估中也还是存在开发新系统和向现有的系统增加新技术的不同点。

    Technology selection
  4. 架构评估: 如果你设计软件,你需要问问自己你的架构是否有用。 对我来说,一个架构是成功的,如果它满足非功能性需求,而且为其他部分的代码提供必要的基础,并为解决和存在的业务问题提供足够的平台。软件的一个最大的 问题就是它复杂而抽象,导致很难从UML图或代码本身去设想出运行时的特性。在软件开发周期中我们进行了很多不同类型的测试,这样我们能够有信心我们发布 的系统在推出时能够正常运行。我们为什么不对架构也这样做呢? 如果能够测试你的架构,那你就可以证明它是有效的。如果你能尽早做到这一点,你就能减少项目失败的风险,而不是简单地希望一切都好。

    Architecture evaluation
  5. 架构协作: 任何一个软件都不是与世隔绝的,需要很多人理解它。 包括从需要理解和切入架构的直接开发团队到其他对安全性、数据库、运营、维护、支持等有兴趣的干系人。要想让一个软件项目成功,你需要和所有的系统干系人 紧密协作来保证架构和所在的环境很好的集成。不幸的是,现状是与开发团队的架构协作很少发生,更不要说外部干系人了。

    Architecture collaboration

软件架构的发布

对于架构的发布也是同样,对于成功的软件项目参与程度的不同,也决定了软件架构职责的不同。

The role of a hands-on software architect from a delivery 
perspective

  1. 拥有全局的视角: 为了把一个架构成功地实现,我们需要具有全局的视角并把贯穿软件开发生命周期的愿景加以宣传与推广,必要 的话在整个项目中展开和完善,并对成功发布负责。如果如果你定义了一个架构,参与并保持不断发展的架构才是有意义的,而不是选择把它传递给一个“执行小 组”。

    Ownership of the bigger picture
  2. 领导力: 拥有全局的视角是技术领导的一个方面,但是还有其他事情在软件项目发布阶段需要做。 这包括承担责任、提供技术指导、作出技术决策以及具有权力作出这些决定。作为架构师,你需要进行技术领导来确保每件事都被考虑到,而且团队在朝着正确的方 向持续前进。软件架构师职位是需要内在领导力的,虽然这听起来很明显,但很多项目团队并没有获得他们所需要的技术领导,因为架构师认为一个成功的发布并不 一定是他们所关注的问题。

    Leadership
  3. 教练和指导: 在大多数软件开发项目中,教练和指导经常不被重视,团队成员得不到他们需要的支持。 虽然技术领导是引导整个项目,但个人也经常需要帮助。除此以外,教练和指导提供了一个强化技能的方式,并帮助提升职业生涯。这应该是软件架构师份内的事, 而且指导团队架构和设计与帮他们解决代码问题是截然不同的。

    Architecture delivery
  4. 质量保证: 即使是世界上最好的架构和领导,很糟糕的交付也足以让一个具备其他成功条件的项目失败。质量保证在架构师职责中 占很大一部分,但这并不只是简单做代码检查。 比如,你需要一个基线来确保,这意味着引入新的标准和工作实践。从一个软件开发的角度来说,这可能包括代码标准、设计原则和源码分析工具甚至于使用持续集 成,自动化单元测试以及代码覆盖工具。可以说大多数项目质量保证做的并不够,所以你需要搞清楚什么是重要的并给予它足够的保证。对于我来说,一个项目的重 要部分包括架构上的重点,关键、复杂或高度可见的业务。你要关注实效并认识到你并不能保证一切,要知道做总比不做好。

    Quality assurance
  5. 设计、开发和测试: 软件架构师的职责范围的最后一件事是设计、开发和测试。作为一个实际动手的架构师并不是需要你每天都要 写代码,但是它的确意味着你一直在参与项目,而且积极帮助打造和交付它。说了这么多,为什么每天写代码不应该成为一个架构师职责的一部分呢?大多数架构师 都有写代码的经验,因此让这些技能保鲜是有意义的。而且,架构师能体会到团队里其他人的痛苦和感受,这样能让他们更好地理解他们的架构从开发角度看是什么 样的。很多公司有政策阻止软件架构师从事写代码,因为架构师“去做那些廉价的工作太贵了” ,这显然是个错误的态度...如果架构师已经花了那么多时间精力为项目做架构,何必从政策上不允许他们多走一步来帮助项目达到最终的成功呢?当然,有些情 况下卷入代码级别并不现实。比如,一个大的项目通常意味有一个更大的“全局观” 来考虑它,而且可能有时候你就是没有时间。但一般来说,一个写代码的架构师比只在旁边观望要更高效和快乐。

    Design, development and testing

你是一个软件架构师吗?

不管你认为软件开发和架构之间的界限只是一个幻觉还是个巨大的鸿沟,以上强调了人们对整个软件架构中的经验水平往往有很大的差别,而这取决于他们怎 么样工作以及他们如何认真地看待他们的职责。大多数开发人员不是在某一个星期一的早晨醒来就宣布自己成为一个软件架构师的。我当然也不是,我成为软件架构 师的路线是一个渐进的过程。话虽如此,但很可能同样那些开发者已经做了一部分架构的工作,不论他们的职位名称是什么。

为软件系统的架构作出贡献和自己负责定义它有很大的区别,拥有持续的、跨不同领域的技能、知识和经验构成了软件架构的职责。跨越软件开发者和架构师 的界限取决于你自己,但是首先你要明白你的经验水平,才能开始架构师之旅的第一站。

关于作者

你可以认为Simon Brown是一个写代码的软件架构师或者理解架构的软件开发者。当他没有用.NET或Java开发软件的时候,Simon通常在做咨询,指导或者培训。 Simon还写过关于Java的书,在行业活动做过演讲,并且整合了一个叫Software Architecture for Developers 的培训课程, 该课程基于他在Coding the Architecture 描 述的软件架构。你可以通过e-mailTwitter 找到他。

查看英文原文Are You a Software Architect?

分享到:
评论

相关推荐

    软件系统架构师

    ### 软件系统架构师的关键知识领域与实践 #### 软件架构设计的核心概念与价值 软件系统架构师负责设计和构建软件系统的基本结构,确保系统满足业务需求、性能标准以及未来发展的灵活性。他们不仅需要具备深厚的...

    软件架构设计:程序员向架构师转型必备(alin书签).pdf

    《软件架构设计:程序员向架构师转型必备》是一本旨在帮助程序员提升技能,迈向更高层次——架构师的著作。在IT行业中,架构师的角色至关重要,他们不仅需要掌握编程技术,还需要具备系统设计、项目管理以及业务理解...

    软件架构师

    ### 软件架构师的核心职责与实践过程 #### 一、引言 软件架构师在软件开发过程中扮演着至关重要的角色,他们不仅需要具备深厚的技术背景,还需要拥有卓越的领导能力和良好的沟通技巧。本文旨在深入探讨软件架构师...

    系统架构师(软考)-系统开发基础知识.pdf

    系统开发基础知识是系统架构师必须具备的基本知识,包括软件工程概述、软件开发方法、软件设计、软件实现、软件测试、软件维护等。 软件工程概述 软件工程是指将系统化、规范化和可量化的方法应用于软件开发中,以...

    软件架构师研修讲座.pdf

    从给定的文件信息中,我们可以提炼出一系列与软件架构师相关的知识点,这些知识点涵盖了软件项目的管理、架构设计以及团队协作等方面。以下是基于文件信息详细展开的知识点: ### 软件架构师的角色与职责 软件架构...

    系统架构师培训之软件架构设计.pdf

    #### 系统架构师培训之软件架构设计 ##### 一、软件生命周期 **软件生命周期**是指软件产品或系统的整个生命历程,包括从项目的启动、需求分析、设计、实现、测试、部署到维护直至最终退役的全过程。这个过程涉及...

    论软件架构师的角色和培养.pdf

    评估软件架构师的工作可以从以下几个方面进行: - **项目成果**:通过项目的最终成果来评估架构设计的有效性和实用性; - **代码质量**:评估代码是否遵循了架构设计的标准和规范; - **团队反馈**:听取开发团队...

    高级软件架构师复习提纲

    如何能抽象出一个统一的状态模型,可以使状态在留转过程中被保存和传递//最好能够用一套处理机制,能够满足WinForm程序和Web应用的需要 //用户的在一个操作流程中可能会嵌套子流程,或者会转到别的流程 //记录流程的...

    系统架构师(高级)学习资料.pdf

    系统架构是软件设计中的一个重要组成部分,它作为软件产品的骨架,确保了软件组件与环境的...架构师在面对实际项目时,需要在技术可行性和商业目标之间做出权衡,最终设计出既符合企业需求又具有技术前瞻性的软件架构。

    软件架构师的培养

    【软件架构师的培养】是一个关键的话题,特别是在IT行业中,随着对软件体系结构重视程度的提升,架构师的角色变得越来越重要。软件架构师不仅是技术专家,更是沟通桥梁,他们在开发团队和管理层之间起着至关重要的...

    软考系统架构设计师学习笔记.pdf

    对于软件架构师的培养,笔记强调了需要通过深入行业的实践和总结来提升自己的架构模式,而不是依赖短期的培训和认证。这提示我们,要想成为一名合格的系统架构师,必须注重实践经验和理论知识的结合,不断提升个人的...

    软件架构设计.zip

    在IT行业中,软件架构设计...这两个资源对于任何希望深入软件架构设计或者寻求架构师角色转变的个人来说,都是非常宝贵的学习材料。通过深入学习和实践,可以提升对复杂系统设计的理解,从而更好地应对软件开发的挑战。

    高级软考架构师模拟题.rar

    在准备高级软考架构师考试的过程中,考生需要对软件架构设计、系统集成、项目管理等多个领域有深入理解和实践经验。这份“高级软考架构师模拟题”压缩包文件提供了全面的练习资源,帮助考生熟悉考试的格式和内容。...

    架构师的职责

    软件架构——架构师的职责 一、架构师定义 架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单。架构师的主要责任是提供开发...

    架构师之路

    在IT行业中,架构师的角色至关重要,他们负责设计和指导软件系统的整体构造,确保系统的稳定、可扩展性和可维护性。以下是对这些知识点的详细说明: 1. **面向对象编程(OOP)**: 面向对象是现代编程语言的核心...

Global site tag (gtag.js) - Google Analytics