【郭东白架构课 模块一:生存法则】01|模块导学:是什么在影响架构活动的成败?
你好,我是郭东白。这节课是我们模块一的导入部分,我会先来介绍模块的主要内容,以及为什么我要讲生存法则这个话题。
一名软件架构师要为相对复杂的业务制定,并且引导实施一个结构化的软件方案。这个发现最终方案和推动实施的过程,就是架构活动。架构活动是你作为架构师必须要认识清楚的,但同样也是很多架构师所忽略的。
那么我们就从分析架构活动开始,看看我笃信的生存法则,到底可以怎样保障你架构活动的成功。
影响架构活动成败的要素有哪些?
架构活动就是制定并且交付架构方案的过程。在整个软件架构的活动过程中,我们作为一个架构师,首先要做的就是确定架构设计方案。
这个方案需要和企业目标一致,与商业、软件环境相匹配,并且还需要满足各种资源的约束条件。而你作为一个架构师,要在这些方案中找到那个能够最小化资源和成本,最大化商业价值,以及最大化目标用户满意度的方案。最终,你还要组织技术团队交付这个架构设计方案。
这里我们需要明确一点,在一个企业内,大多数研发任务的交付都与架构师无关。多数时间,研发团队开发的软件解决方案和软件产品是用来服务用户的,不需要架构师的参与。但当面对跨多个团队,或者是大面积的技术改造时,就需要架构师参与到其中,来完成软件研发任务的交付。
如图所示,展示了架构师的全部活动,按照颜色分类,主要包括三个部分。
中间白色部分是架构师的决策领域,包括架构方案和架构活动。
需要强调的是,架构师对研发活动没有完全的决策权。也就是说,架构师无法决定研发项目的选择、优先级、排期、代码实现方式等等。
同样的,其他影响架构活动的因素,也就是图中白色区域以外的部分,架构师也不具备决策权。这些部分包括目标、商业环境、架构活动消耗的资源,以及产出的商业价值。架构师仅仅可以关注、影响和干预这些因素。
黄色部分指架构师的输入和输出部分。
输入不仅指架构活动消耗的资源(商业资源、研发资源等)和成本(时间成本、机会成本等),还指不受架构师所控制的部分研发活动。两者会综合影响架构活动的最终结果。
而输出呢,不仅指架构活动可能带来的短期和长期的商业价值(公司的规模、效率和体验等),还指架构活动为目标用户群体所提供的直接价值。这就意味着我们架构师必须时刻关注自己的输入和输出,它们是保证架构活动成功的前提。
蓝色部分指架构师的工作环境,主要包括企业所处的商业环境,如竞争、市场、监管等;企业内部的技术环境,如交互设备、sensor 网络、计算环境、外部的数据源等;以及企业和团队的文化环境。环境在很大程度上会影响架构方案的选择和实施路径,但同时也是大部分架构师最容易忽略的考量因素。
当我们把架构师的活动归纳总结后,很容易就能清楚到底是什么在影响整个架构活动的成败。我将它们总结归纳为六个要素,分别是:目标、资源、行为、天时、地利以及人和(要素的排列顺序与法则的顺序并不是一一对应的,在这节课的最后我会进行解释)。
第一个要素是目标。事实上,确定目标应该是架构规划的起点,所以深入理解目标对你的架构活动至关重要,但这一步往往会被架构师所忽略。
因此我们生存法则的第一条,就是教你如何去理解和干预这个目标,确保最终的架构活动能够为你所在的团队或企业带来价值。否则目标错了,你的项目永远也没办法成功。
然后是资源。我们所有的活动都要消耗资源且最终要创造价值,就是图中标记为 3 的部分,架构活动当然也不例外。在大多数企业里,甚至包括非盈利型组织,都需要关注有限资源的利用率,以及架构活动最终可以带来的商业回报。
所以我们生存法则的第三条,是关于你应该如何通过架构活动来最大化你所贡献的商业价值的。否则资源不足或者是消耗太快,你的项目也同样无法成功。
有了目标,有了足够资源,如果你还有正确的行为,也就是正确的做事方式,那你就能逐步逼近正确的架构方案,并且指导团队完成它。然而不确定性是互联网大环境的常态,那么身为架构师,你应该在周遭环境发生变化时做出什么样的响应呢?这正是我在第五条生存法则要回答的问题。
做成一件事情,如果周边条件成熟,环境好,那么事情就会进行得很顺利。反过来,如果条件不成熟,或者你逆势而为,那就会很艰难。架构活动也一样,影响它成败的要素也有天时、地利和人和。
先说天时,这里指的是商业环境和技术环境的变化趋势。环境复杂多变,那么看清楚变化趋势的本质,就可以让我们的架构决策顺势而为,借助于环境的变化来成就我们的团队、企业。这正是我们第四个生存法则要覆盖的内容。
再讲地利,就是你作为一个架构师待的地方,你所在企业的文化环境,这是我们作为架构师无法改变的部分。虽然没法改变,但“良禽择木而栖”。那么第六条法则就会帮助你选择最有利于架构师职业发展的文化环境,最大化你的成长。
最后讲人和,在上图中标注为 2,架构活动中涉及的人主要是研发人员和目标用户。在输入端,架构师需要与多个研发团队协作,因而理解研发方的核心诉求就尤为关键。在输出端,架构师产出方案的最终评判即目标用户的长期满意度。因此深度洞察用户的人性就是保证架构活动成功的关键所在。这是我们第二个生存法则要覆盖的内容。
理解了影响架构活动的这些要素,我们很容易就知道应该以什么样的视角来关注和干预这些架构活动。而我根据这些,提炼出了你作为架构师必备的六大生存法则。
如何利用生存法则,最大化架构师的成长?
简单来说,生存法则指的是我们作为架构师在设计架构方案和组织架构活动时必须要尊重的一些原则。如果违背这些原则,那么作为一个架构师的生存就会受到威胁。
之所以总结提炼这些原则,是因为在我二十多年的职业生涯中,一次又一次地看到我周遭的架构师,包括我自己,在违反这些规则后付出了惨重的代价。所以我会将自己经历的、看到的大量失败案例呈现出来。
我先简单陈述一下这六个法则的核心内容,然后再讲你应该怎么学习和应用这些法则。
第一条,架构师必须保障整个架构活动有且仅有一个正确的目标。这是架构活动的起点,也是甄别架构方案的主要输入,所以架构师有义务影响和干预这个目标,以确保目标本身的正确性。
第二条,架构活动需要尊重和顺应人性。架构活动既要服务用户,也要组织研发人员协同工作。这就意味着架构师必须洞察研发人员和目标用户的人性。从人性角度出发来做决策,才能保障最终面向用户的方案具有长期正确性,以及面向研发同学的实施过程具有可行性。
第三,架构师永远需要在有限资源下最大化商业价值。对于任何一个架构活动来说,架构师的可用资源,包括商业成本、研发成本、时间成本、迁移成本等,都是极其有限的,所以架构活动必须在这些限制条件下,最大化商业价值。
第四,架构选型必须要考虑到所依赖的商业和技术模块的生命周期。在架构设计的过程中,架构师会有一个相对确定的商业和技术选择空间。那么在这个选择空间内,理解、顺应且利用好商业和技术周期就至关重要。也就是说,架构师要看准技术趋势,一般情况下,要选择已经有规模优势或者是即将有规模优势的技术,而不是选择那些接近衰老期的技术。
第五,架构师需要在架构活动中不断干预活动的目标和内容,以同时保证整个架构活动可以为企业注入外部适应性。这是架构师个人能在架构活动中创造的核心价值,而且也是架构师职业成长的必须,甚至也是架构师的荣耀所依赖。最终正确的架构选型会因为有很强的外部适应性而长期存在。
第六,架构师需要在一个相对安全的文化环境中探索未知, 只有这样,才有希望找到正确的架构方案。文化环境是架构师最难影响的,因而架构师要有足够的判断力,认清自己所在的文化环境是否有利于探索正确的架构方案,不要在一个错误的环境中浪费自己的宝贵生命。
可以看到,这六个法则的顺序跟我们刚才提到的影响架构活动成败的六个要素的顺序不完全一致,原因在于我是依照法则本身的重要性进行排序的,而不是要素的结构。
不过看完这些你可能会问,法则这东西听起来感觉很虚、也很简单啊,难道你讲的法则有什么精妙之处吗?
这些法则确实平淡无奇,原因也很简单。软件架构是人类活动中很小的一个细节,而先哲们老早就总结了人类活动的各种规律,譬如经济学、社会学、心理学、系统科学等等,软件架构这个活动自然也跳不出这些规律。
而我要强调的是,在信息化时代,我们获取这些规律并不难,难的是怎么将这些规律准确地应用到软件架构活动中去。
因为信息泛滥正让我们面临着一个颇为严峻的问题:通过朋友圈、短视频、网课等获取的规律教育,往往是泛泛而谈,甚至和软件架构领域扯不上关系。所以当我们在软件架构领域碰到某个规律可以适用的场景时,不仅很难识别出来,而且也不知道该如何应用。所以我们并不是缺少生存法则,而是不知道什么场景下该应用哪一条规律,也不知道哪一条规律是跟软件架构领域有关的。
比如说我们常说的摩尔定律、康威定律,到底和架构活动的哪个部分有关呢?你做架构的时候该怎么考虑它们呢?
因此,我会花大量的篇幅去说明法则的上下文,从而达到这样一个目标:不是要你记忆法则,而是知道怎么识别某个法则的适用场景,以及出现问题后的干预办法。
所以我期望你用一种完全不同的方式来学习这个模块:请你不要简单地相信或者背诵这些生存法则,而是跟我一起解释到底是什么原因让我把某个规律当成架构师的生存法则。也就是说,当你学习整个模块的时候,你需要试图理解我是如何被我所经历的事件教育的,并由此推断出这些生存法则的适用环境。
打个比方,假设你相信上帝存在,那么你可以认为我被上帝安排了一连串的经历,从而得出了自己坚信的一套生存法则。但是假设某一天你给别人讲这门课,你的经历与我不同;或者是因为你相信了这些生存法则,让你避免经历我的痛,而你自己的痛彻心扉的经历,又会让你总结出另外一套生存法则来。
这样一来,你理解了我的经历,也认同其中的推导逻辑。那么当某一天,你恰巧遭遇了一个类似的场景,可能会迅速思考这个法则是否适用。或许事过境迁,我讲的法则已经不再完全适用,但法则的核心逻辑依旧适用。不论是哪一种情况,只有理解它的背景和推导逻辑,你才能决定是否冒一次有备之险(take a calculated risk)。
这就是我期望你学习这个模块后,最终能达到的理解程度。那,接下来的一讲,我们就开始学习第一个生存法则吧。
相关文章:
【郭东白架构课 模块一:生存法则】01|模块导学:是什么在影响架构活动的成败?
你好,我是郭东白。这节课是我们模块一的导入部分,我会先来介绍模块的主要内容,以及为什么我要讲生存法则这个话题。 一名软件架构师要为相对复杂的业务制定,并且引导实施一个结构化的软件方案。这个发现最终方案和推动实施的过程&…...
webshell免杀之函数与变量玩法
webshell免杀之函数与变量玩法 前言 前文列举了一些用符号免杀的例子,此篇文章就以函数和变量来尝试下免杀。 本文以PHP为例,用PHP中函数和变量及语法特性,在不隐藏函数关键字情况下进行免杀。 动态函数 PHP中支持一个功能叫 variable fu…...
【新解法】华为OD机试 - 去重求和 | 备考思路,刷题要点,答疑,od Base 提供
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 去重求和 | 备考思路,刷题要点,答疑,od Base 提供 给定一个数组,编写一个函数, 计算他的最大N个数和最小N个数的和, 需要对数组进行去重。 输入 第一行输入M,M表示数组大小 第二行输入M个数,表…...
MySQL 服务正在启动.MySQL 服务无法启动.服务没有报告任何错误。请键入 NET HELPMSG 3534 以获得更多的帮助。总结较全 (已解决)
输入以下命令启动mysql: net start mysql出现以下错误提示: MySQL 服务正在启动 .MySQL 服务无法启动。服务没有报告任何错误。请键入 NET HELPMSG 3534 以获得更多的帮助。 出现这个问题的话,一般有几个情况: 一、MySQL安装文…...
【数据结构与算法】数组2:双指针法 二分法(螺旋矩阵)
文章目录今日任务1.Leetcode977:有序数列的平方(1)题目(2)思路(3)暴力排序(4)双指针法2.Leetcode209:长度最小的子数组(1)题目&#x…...
librtmp优化
librtmp是一个RTMP的开源库,很多地方用它来做推流、拉流。它是RTMPDump开源软件里的一部分,librtmp的下载地址:RTMPDump,目前最新版是V2.3。本文重点介绍librtmp优化。 1、调整网络输出块大小。 RTMP_Connect0函数中LibRTMP是关…...
数据结构与算法(二):线性表
上一篇《数据结构与算法(一):概述》中介绍了数据结构的一些基本概念,并分别举例说明了算法的时间复杂度和空间复杂度的求解方法。这一篇主要介绍线性表。 一、基本概念 线性表是具有零个或多个数据元素的有限序列。线性表中数据…...
IOS安全区域适配
对于 iPhone 8 和以往的 iPhone,由于屏幕规规整整的矩形,安全区就是整块屏幕。但自从苹果手机 iphoneX 发布之后,前端人员在开发移动端Web页面时,得多注意一个对 IOS 所谓安全区域范围的适配。这其实说白了就是 iphoneX 之后的苹果…...
在Java 中 利用Milo通信库,实现OPCUA客户端,并生成证书
程序结构: 配置文件resources: opcua.properties 西门子PLC端口号为4840,kepserver为49320 #opcua服务端配置参数 #opcua.server.endpoint.urlopc.tcp://192.168.2.102:49320 opcua.server.endpoint.urlopc.tcp://192.168.2.11:4840 opcu…...
三分钟学会用Vim
Vim知识点 目录Vim知识点一:什么是vim二:vim常用的三种模式三:vim的基本操作一:什么是vim vim最小集 vim是一款多模式的编辑器—各种模式—每种模式的用法有差别—每种模式之间可以互相切换 但是我们最常用的就是3~5个模式 vi…...
编译链接实战(8)认识elf文件格式
🎀 关于博主👇🏻👇🏻👇🏻 🥇 作者简介: 热衷于知识探索和分享的技术博主。 💂 csdn主页::【奇妙之二进制】 ✍️ 微信公众号:【Linux …...
新手小白如何入门黑客技术?
你是否对黑客技术感兴趣呢?感觉成为黑客是一件很酷的事。那么作为新手小白,我们该如何入门黑客技术,黑客技术又是学什么呢? 其实不管你想在哪个新的领域里有所收获,你需要考虑以下几个问题: 首先ÿ…...
【java】Spring Boot --深入SpringBoot注解原理及使用
步骤一 首先,先看SpringBoot的主配置类: SpringBootApplication public class StartEurekaApplication {public static void main(String[] args){SpringApplication.run(StartEurekaApplication.class, args);} }步骤二 点进SpringBootApplication来…...
一文掌握如何对项目进行诊断?【步骤方法和工具】
作为项目经理和PMO,面对错综复杂的项目,需要对组织的项目运作情况进行精确的分析和诊断,找出组织项目管理中和项目运行中存在的问题和潜在隐患,分析其原因,预防风险,并且形成科学合理的决策建议和解决方案&…...
系统分析师真题2020试卷相关概念二
结构化设计相关内容: 结构化设计是一种面向数据流的系统设计方法,它以数据流图和数据字典等文档为基础。数据流图从数据传递和加工的角度,以图形化方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模…...
<<Java开发环境配置>>5-MySQL安装教程(绿色版)
一.MySQL绿色版安装: 1.直接解压下载的ZIP文件到对应的目录下(切记安装目录不要有中文); 如图:我的安装目录:D:Program Files 2.创建配置文件: 在MySQL安装目录下,创建一个my.ini配置文件,然后在里面添加以下内容(别忘了MySQL安装目录要改成…...
空间复杂度与时间复杂度
1、时间复杂度和空间复杂度 (1)时间复杂度、空间复杂度是什么? 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,空间效率被称作空间复杂度时间复杂度主要衡量的是一…...
javaEE 初阶 — 延迟应答与捎带应答
文章目录1. 延迟应答2. 捎带应答TCP 工作机制:确认应答机制 超时重传机制 连接管理机制 滑动窗口 流量控制与拥塞控制 1. 延迟应答 延时应答 也是提升效率的机制,也是在滑动窗口基础上搞点事情。 滑动窗口的关键是让窗口大小大一点,传输…...
Twitter账号老被封?一文教会你怎么养号
昨天龙哥给大家科普完要怎么批量注册Twitter账号,立刻有朋友来私信龙哥说里面提到的这个养号和防关联具体是个怎么样的做法。由于Twitter检测机制还是比较敏感的,账号很容易被冻结,所以养号是非常重要的步骤。其实要养好Twitter账号其实并不难…...
当遇到国外客户的问题,你解决不了的时候怎么办
对我来说,今年的这个春节假期有点长,差不多休了一个月。复工之后,截止目前做到了60万RMB的业绩,但是相较于往年,整体状态还是差了些。往年的春节,我都是随时待命的状态,整个春节天天坐于电脑前&…...
算法刷题打卡第93天: 最大的以 1 为边界的正方形
最大的以 1 为边界的正方形 难度:中等 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。 示例 1: 输入:…...
python语言基础(最详细版)
文章目录一、程序的格式框架缩进1、定义2、这里就简单的举几个例子注释二、语法元素的名称三、数据类型四、数值运算符五、关系运算六、逻辑运算七、运算符的结合性八、字符串一、程序的格式框架 缩进 1、定义 (1)python中通常用缩进来表示代码包含和…...
Java小技能:字符串
文章目录 引言I 预备知识1.1 Object类1.2 重写的规则1.3 hashCode方法II String2.1 String的特性2.2 字符串和正则2.3 StringBuilder,StringBuffer引言 String,StringBuffer,StringBuilder,char[],用来表示字符串。 I 预备知识 1.1 Object类 是所有类的根类 toString…...
2023美赛D题:可持续发展目标
以下内容全部来自人工翻译,仅供参考。 文章目录背景要求术语表文献服务背景 联合国制定了17个可持续发展目标(SDGs)。实现这些目标最终将改善世界上许多人的生活。这些目标并不相互独立,因此,一些目标的积极进展常常…...
openwrt开发板与ubuntu nfs挂载
1.ubuntu需要安装nfs服务 sudo apt-get install nfs-common nfs-kernel-server2.修改 /etc/exports文件: /home/test *(rw,nohide,insecure,no_subtree_check,async,no_root_squash) 前面是挂载的目录,后边是相应权限 rw:读写 insecure&am…...
【Redis】Redis持久化之AOF详解(Redis专栏启动)
📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公…...
Git小乌龟每次推送拉取都弹窗和用户名密码报错(解决办法)
目录 一、小乌龟推送代码到云端用户名和密码报错 (一) 遇到问题 (二)解决办法 二、小乌龟每次推送拉取都要输入账号和密码 (一)遇到问题 (二)解决办法 一、小乌龟推送代码到云…...
emacs 使用集锦
emacs 使用集锦 声明, 主要在c/c环境中使用! ---------------------------------------- 1. emacs 中 TAGS 位置设置 ---------------------------------------- a)临时使用方式: M-x visit-tags-table b)启动Emacs时自动加载方式ÿ…...
蓝牙 - 如何实现安全性
蓝牙技术在加密上做了很多工作,来保证你的数据安全。 这些年来,我们的许多电子设备都转向了使用无线技术进行连接。我们的鼠标、键盘、耳机和扬声器上不再有长长的纠缠的电线,而使用了简单方便的无线技术,科技进步改善了我们的生活…...
深入理解顺序io和随机io(全网最详细篇)
MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql的索引分类&a…...
邢台哪个公司做网站好/免费留电话号码的广告
1, 解压:gzip -d aix5-bfagent-7.1.1.4-0-0007.tar.gz tar -xvf aix5-bfagent-7.1.1.4-0-0007.tar 2,传文件,最好使用WinSCP但是选择使用ftp而不是SFTP 或者SCP 3,查看目录大小,因为RAFW…...
做网站有前途/网站优化seo教程
环境准备:操作系统:RedHat 6.7数据库:Mysql 5.7.181.从官网下载 mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz官网地址:http://dev.mysql.com/downloads/mysql/2. 创建mysql的用户组/用户, data目录及其用户目录mkdir /home/mysql…...
江津网站建设/神马站长平台
题意: 用 a b c 三个字符构造一个长度为 N 的串,保证串中不出现长度大于等于 3 的回文串 并且 尽可能使字符 c 出现的次数最少。 思路: 串用 aabb 构造即可满足题意 例:长度为 3 的串为 aab 5 aabba 8 aabbaabb …...
给网站如何做飘窗/危机公关处理五大原则
键盘行 题目描述:给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。 示例说明请见LeetCode官网。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/keyboard…...
做网站需要租服务器/技能培训有哪些
以前做过一个自动收集网页内容的工具,使用的还可以,用Indy的IdHttp组件来获取网页内容然后分析处理。 现在很多网站都采用了Ajax技术,网页内容异步刷新,所以使用IdHttp组件就无法获取完整的网页内容了。我在 http://www.cnblogs.c…...
网站百度突然不收录/广告设计
HTML代码: <ul><li>jQuery判断当前元素是第几个元素示例</li><li>jQuery获取第N个元素示例</li><li>jQuery选择器示例</li> </ul> 判断当前元素是第几个元素 如果我们点击任何一个li标签,想知道当前点击…...