1-001 软件架构师在团队中的角色描述

架构师在团队中的角色很独特,虽然做的更多的是软件架构的设计,但既要有研发经理的编码、部署等技术能力,也要有产品经理的业务能力,项目经理的交付能力,其在团队中的核心地位如下图所示:

1-002 软件架构师的定义和工作职责

笔者补充:软件架构师的定义】:软件架构师实际上就是软件项目的总体设计师,是软件组织新产品的开发与集成、新技术体系的构建者    —— 百度百科

六个方面的工作职责

1). 从工程角度定义问题:架构设计是一门以人为本的学科,架构师要与产品经理、项目经理一起共同定义满足所有利益相关方预期的项目的需求和目标。其中,产品经理关注功能需求、架构师关注质量属性(非功能需求,后续统一称为质量属性)和影响架构设计的约束和特性。

2). 分解系统,分配职责:架构师根据功能需求、质量属性、设计约束及其他需求策略,对软件系统进行分解。分解后的系统以承担不同功能或服务的组件、模块的形式出现,分配给不同的人或团队开发,使得软件具备更高的可靠性、可用性、可伸缩性。

除了前面的意义外,分解后的小模块更容易进行架构设计推演、测试、设计。

笔者补充:任务分解意义】:可以根据软件的不同特性,如跟硬件强相关的、跟用户应用场景强相关的软件等,进行合理的模块划分和对应的组织划分,进行软硬分离、软硬协同、接口抽象等设计,尽可能做到软件的并行开发和测试,缩短研发周期。

3). 关注大局:影响软件系统的因素有人员、过程、业务需求及其它技术和非技术因素 ,因此,架构师要想保证软件架构设计的合理性,就要从全局角度出发考虑整体系统,而不能只着眼于局部细节的设计。

软件设计是一个不断 ” 挣扎 “ 的过程,在预期目标和可接受的目标之间寻找平衡,这就要架构师从全局出发,深思熟虑的做出取舍。

笔者补充:架构师也要分段位】:主导和参与软件架构设计的所有架构人员原则上都应该能够从整体上理解和把握软件系统架构的设计思路。但是对不同经验和能力的架构师的要求应该有区分:首席/系统架构师,需要满足上述要求;模块/子系统的架构师只要关注本模块/子系统的背景环境,熟悉自身在整体架构中的位置、作用即可;初窥门径的架构师,主要是参与、学习、消化架构设计的思想、方法论、工具和技巧为主。

4). 在质量属性之间做出取舍:软件架构的设计需要不断进行取舍,架构师经常要找出方案与各利益相关方协商如何进行合理的取舍。如为了实现99.99%的可用性,需要引入冗余,通过双倍硬件的配置来实现,这就是典型的用高成本换取高可用性。

笔者补充:常见取舍场景】:1)用空间换时间,如Android从Dalvik虚拟机变更为ART虚拟机,前者是APP运行时才使用JIT(Just In Time)技术将代码转译为机器语言执行,影响APP的运行速度;后者采用AOT(Ahead Of Time)技术,在APP安装的时候就转译成机器语言,运行时直接加载运行,明显提升APP的运行速度。但后者因为提前转译,所以安装时,需要消耗更大的ROM来存储代码。其它的如:内存数据库、程序的预加载技术、各类池化(线程池、对象池、资源池等)技术、芯片中的多级Cache以及内置SRAM等。2)以时间换空间,如操作系统中的虚拟存储技术。3)以高成本换高可用性:一般都是引入了额外的硬件冗余,如自动驾驶功能安全技术中涉及的Lock-step(锁步核)技术、电源备份技术、车身控制信号冗余技术;云平台的双机热备技术和zookper的去中心化技术等。

5). 管理技术债务:所有软件都有技术债务,它是当前软件系统设计和你想要的设计之间的一条鸿沟。技术债务的多少是通过填平鸿沟所需的代价来衡量的。

架构师需要进行模块划分和协调工作,并将业务需求和技术决策通盘考虑,只有这样,才能游刃有余地管理技术债务。

出色的软件团队会有意引入技术债务来实现更快的交付,后续再逐步进行偿还,从而持续的创造价值。

笔者补充:技术债务定义】:我们有意或无意地做了错误的或不理想的技术决策所累计的债务,常见的债务源有代码债务、设计和架构债务、测试债务和文档债务等,常见的技术债务类型:

  1. 战略债务:在知情情况下,为了战略利益(如:如首次市场发行)而产生、并长期存在
  2. 战术债务:在知情情况下,为了快速收益而产生,通常适用于短期
  3. 疏忽债务:通常是在不知情的情况下缺乏知识或意识而产生
  4. 增量债务:定期不慎产生的债务导致增量债务

6). 提升团队的架构能力:架构师是团队的导师和顾问,有责任向团队分享知识,让他们成功地开发出软件。把架构设计当做一项社交活动,让团队成员都参与到设计中来,从而有效提升团队技能。

笔者补充:敏捷的味道】这里已经开始强调个体和互动的作用了,与敏捷宣言的第一条:“ 个体和互动高于流程和工具 ” 相契合。作者全书虽然没有提及敏捷,但是敏捷思想却贯穿始终。

1-003 什么是软件架构

笔者补充:软件架构的定义】:是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件体系结构是构建计算机软件实践的基础。—— 百度百科

软件架构是关于如何组织软件的一系列重大设计决策的集合,旨在实现期望的质量属性和其它软件特性。可使用《Software Architecture in Practise,软件架构实践》中定义的模块(Module)、组件连接器(Component & Connector,C&C)、分配(Allocation)三种元素来构建软件架构,将相同类型的元素和关系连接在一起,就形成了架构。三种类型的元素关系如下:

其中:模块存在于设计阶段、组件连接器(C&C)存在于软件运行阶段、分配展示了模块和组件连接器两元素之间,以及这些元素和现实的物理元素之间的协同与响应关系。

软件架构的设计需要推演质量属性(非功能需求)和其它系统特性,选择架构的结构就是选择你想在软件系统中提升的质量属性。质量属性让软件独一无二。

1-004 成为团队的架构师

团队中架构师的角色并非总是明确的,有的团队有,有的团队则是由成员分担架构师的职责。

程序员向架构师转变,至少要参与过三到五个系统的开发,且承担的技术职责应不断增加。【笔者补充:技术职责增长的必要性】:只有不断承担更多的技术职责,才能避免技术职责的重复性和单一性,才能有助于提升程序员的全方位的技术能力和大局观,为成长为架构师奠定基础。

程序员向架构师转变,要有耐心,时刻做好准备,把握一切设计架构的机会,尤其是设计复杂系统的机会。同时,与同事合作,让每个人都有机会提高水平。

1-005 软件架构是开发出色的软件的基础

从以下六个方面指引打造出色的软件:

1)软件架构将复杂的大问题分解为容易处理的小问题:解决现代软件系统庞大且复杂,有许多活动的部件问题。

2)软件架构告诉大家如何协同工作:软件开发既是技术,也是人际沟通的艺术。软件架构描述了整个系统如何组成有机的整体,掌握了软件架构就清楚了人们该如何合作开发软件。

3)软件架构为讨论复杂设计提供了基本词汇:软件架构为软件开发的沟通提供了基本概念和词汇,这样开发人员就可以把时间花在解决用户的实际问题上,而不必发明新的概念和词汇。

4)软件架构关注的不仅仅是功能:软件架构除了考虑功能需求,还要考虑成本、约束、进度、风险、团队的交付能力,以及最重要的质量属性(如可伸缩性、可用性、性能、可维护性等)。

5)软件架构让你避免犯重大错误:软件架构可以帮助发现那些今后可能会带来麻烦的问题和地方。

6)软件架构让软件更灵活:软件如水,架构如器。器可以是铁桶、塑料袋等各种形态,但都能盛水。没有架构,软件就像流淌的水一样无法控制。架构为软件提供了灵活多变的结构。

《架构师修炼之道》读书笔记之一:如何成为架构师相关推荐

  1. 测试架构师修炼之道读书笔记1

    前言 本书的价值? 讨论测试设计.测试方法.缺陷分析.质量评估等大家熟悉的测试技术. 讨论如何在工作中使用这些技术,指定出适应实际情况的策略,来是测试更为有效. 测试的核心是什么? 不是业务.测试方法 ...

  2. 架构师修炼之道学习笔记

    软件架构师的角色 架构师的职责 软件架构的组成 模块结构存在于设计阶段,组件连接器结构在软件运行时出现,分配结构展示模块元素与组件连接器元素之间,以及这些元素与现实的物理元素之间的协同与响应关系 软件 ...

  3. 复制:高效程序员的45个习惯敏捷开发修炼之道 读书笔记

    为什么80%的码农都做不了架构师?>>>    第一章 敏捷-高效软件开发之道 什么是敏捷开发方法? 从语法简单到c语言,从面向过程到面向对象语言到语言标准的建立,再到设计模式,以及 ...

  4. 编写高质量代码 Web前端开发修炼之道 读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> 第五章 高质量的JavaScript 5.1 养成良好的编程习惯 5.1.1 团队合作-如何避免JS冲突 使用匿名函数控制变量 ...

  5. MySQLDBA修炼之道读书笔记

    以下的命令将查看慢查询是否启用了,以及慢查询的日志路径. mysql> show variables like'%query_log%'; -------------show variables ...

  6. 【测试人生】《测试架构师修炼之道》阅读笔记

    <测试架构师修炼之道>一书,笔者入行一年多的时候拜读过.虽然这本书主要偏向业务测试.质量管理的方向,而并非技术测试.测试开发的方向,但只要是测试行业从业者,笔者认为都值得一看. 从笔者本人 ...

  7. 【新书速递】解决方案架构师修炼之道

    技术领域的发展日新月异,IT专业人员为了自身的职业发展,必须与时俱进地掌握新技能.然而,在过去的十年中,这种快速变化的趋势已经在云计算领域中占据主导地位,成为"新常态".现在,几乎 ...

  8. 爆肝分享!什么样的架构师修炼之道文档,才能帮助大家修炼成为最最出色的架构师?不服就干!绝不怂!

    前言 卓越的软件架构师从何而来? 所有程序员都有成为架构师的潜力,只要掌握了架构师的思维方式和工作方法,你也能成长为架构师. 本文教你如何像架构师那样思考问题.理解需求.设计架构.评估结果.编写文档. ...

  9. 【人工智能 AI 写书】《卓越架构师修炼之道》全书目录

    帮我写一本书的目录,书名<卓越架构师修炼之道>,总共10章,每章5个小节,细化到3级目录.用markdown格式. 文章目录 <卓越架构师修炼之道> 第一章 架构概述 第二章 ...

  10. 技术人修炼之道阅读笔记(二)重新定义自己

    技术人修炼之道阅读笔记(二)重新定义自己 在工作中有一个非常普遍的现象:有些人根本不知道自己想要什么或者什么都想要,无法取舍,但是人的精力毕竟是有限.那么我们如何来避免浪费自己的青春年华呢? 这就需要 ...

最新文章

  1. rrdtool 修改水印logo
  2. shell 学习笔记(18)
  3. Struts2 为什么被淘汰?自己作死!
  4. mysql锁相关讲解及其应用——《深究mysql锁》
  5. Codeigniter 用户登录注册模块
  6. [编程入门]阶乘求和:求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
  7. 计算机硬件配置组件,配置vcenter server的硬件(默认指windows版本的)
  8. android textview doubleclick,Android的TextView的双击事件监听
  9. Selenium UI自动化测试(五)WebDriver控制浏览器的操作
  10. opencv用python进行物体识别_教你用Python+opencv来识别物体的轮廓并标识显示
  11. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用6
  12. java - 常见对象object
  13. 构建Web内容的技术
  14. 20.UNIX 环境高级编程--数据库函数库
  15. Unity3D 动态改变地形
  16. 2021软考网络工程师2004-2020年真题含答案解析(最新)
  17. Android Studio简介
  18. 数据湖、物联网等--南水北调中线工程的“智慧大脑”,是如何工作的?
  19. appliedzkp zkevm(13)中的Public Inputs
  20. 菜鸟日记(yzy):opencMS系统-XML内容管理文件开发

热门文章

  1. OpenSSL安装配置
  2. RecyclerView库中的遗珠
  3. VMware vSphere ESXi6.7 的安装及基本使用
  4. 职场小白如何在工作中快速的升职加薪
  5. 协议类基础——LCD
  6. 【JZOJ1156】【GDKOI2004】使命的召唤(二分图匹配)
  7. 华为交换机——VLAN配置实验:基于端口划分Vlan
  8. 如何使用excel批量导入数据到数据库?看这一篇就够了!超详细
  9. Excel、Word、PPT快捷键介绍使用
  10. 罗密欧与朱丽叶的迷宫问题(java版带有详细分析与注释)