【郭东白架构课 模块一:生存法则】01|模块导学:是什么在影响架构活动的成败?

news2024/11/16 15:25:58

你好,我是郭东白。这节课是我们模块一的导入部分,我会先来介绍模块的主要内容,以及为什么我要讲生存法则这个话题。
一名软件架构师要为相对复杂的业务制定,并且引导实施一个结构化的软件方案。这个发现最终方案和推动实施的过程,就是架构活动。架构活动是你作为架构师必须要认识清楚的,但同样也是很多架构师所忽略的。
那么我们就从分析架构活动开始,看看我笃信的生存法则,到底可以怎样保障你架构活动的成功。

影响架构活动成败的要素有哪些?

架构活动就是制定并且交付架构方案的过程。在整个软件架构的活动过程中,我们作为一个架构师,首先要做的就是确定架构设计方案。

这个方案需要和企业目标一致,与商业、软件环境相匹配,并且还需要满足各种资源的约束条件。而你作为一个架构师,要在这些方案中找到那个能够最小化资源和成本,最大化商业价值,以及最大化目标用户满意度的方案。最终,你还要组织技术团队交付这个架构设计方案。

这里我们需要明确一点,在一个企业内,大多数研发任务的交付都与架构师无关。多数时间,研发团队开发的软件解决方案和软件产品是用来服务用户的,不需要架构师的参与。但当面对跨多个团队,或者是大面积的技术改造时,就需要架构师参与到其中,来完成软件研发任务的交付。

如图所示,展示了架构师的全部活动,按照颜色分类,主要包括三个部分。

在这里插入图片描述

中间白色部分是架构师的决策领域,包括架构方案和架构活动。

需要强调的是,架构师对研发活动没有完全的决策权。也就是说,架构师无法决定研发项目的选择、优先级、排期、代码实现方式等等。

同样的,其他影响架构活动的因素,也就是图中白色区域以外的部分,架构师也不具备决策权。这些部分包括目标、商业环境、架构活动消耗的资源,以及产出的商业价值。架构师仅仅可以关注、影响和干预这些因素。

黄色部分指架构师的输入和输出部分。

输入不仅指架构活动消耗的资源(商业资源、研发资源等)和成本(时间成本、机会成本等),还指不受架构师所控制的部分研发活动。两者会综合影响架构活动的最终结果。
而输出呢,不仅指架构活动可能带来的短期和长期的商业价值(公司的规模、效率和体验等),还指架构活动为目标用户群体所提供的直接价值。这就意味着我们架构师必须时刻关注自己的输入和输出,它们是保证架构活动成功的前提。

蓝色部分指架构师的工作环境,主要包括企业所处的商业环境,如竞争、市场、监管等;企业内部的技术环境,如交互设备、sensor 网络、计算环境、外部的数据源等;以及企业和团队的文化环境。环境在很大程度上会影响架构方案的选择和实施路径,但同时也是大部分架构师最容易忽略的考量因素。

当我们把架构师的活动归纳总结后,很容易就能清楚到底是什么在影响整个架构活动的成败。我将它们总结归纳为六个要素,分别是:目标、资源、行为、天时、地利以及人和(要素的排列顺序与法则的顺序并不是一一对应的,在这节课的最后我会进行解释)。

第一个要素是目标。事实上,确定目标应该是架构规划的起点,所以深入理解目标对你的架构活动至关重要,但这一步往往会被架构师所忽略。

因此我们生存法则的第一条,就是教你如何去理解和干预这个目标,确保最终的架构活动能够为你所在的团队或企业带来价值。否则目标错了,你的项目永远也没办法成功。

然后是资源。我们所有的活动都要消耗资源且最终要创造价值,就是图中标记为 3 的部分,架构活动当然也不例外。在大多数企业里,甚至包括非盈利型组织,都需要关注有限资源的利用率,以及架构活动最终可以带来的商业回报。

所以我们生存法则的第三条,是关于你应该如何通过架构活动来最大化你所贡献的商业价值的。否则资源不足或者是消耗太快,你的项目也同样无法成功。

有了目标,有了足够资源,如果你还有正确的行为,也就是正确的做事方式,那你就能逐步逼近正确的架构方案,并且指导团队完成它。然而不确定性是互联网大环境的常态,那么身为架构师,你应该在周遭环境发生变化时做出什么样的响应呢?这正是我在第五条生存法则要回答的问题。

做成一件事情,如果周边条件成熟,环境好,那么事情就会进行得很顺利。反过来,如果条件不成熟,或者你逆势而为,那就会很艰难。架构活动也一样,影响它成败的要素也有天时、地利和人和。

先说天时,这里指的是商业环境和技术环境的变化趋势。环境复杂多变,那么看清楚变化趋势的本质,就可以让我们的架构决策顺势而为,借助于环境的变化来成就我们的团队、企业。这正是我们第四个生存法则要覆盖的内容。

再讲地利,就是你作为一个架构师待的地方,你所在企业的文化环境,这是我们作为架构师无法改变的部分。虽然没法改变,但“良禽择木而栖”。那么第六条法则就会帮助你选择最有利于架构师职业发展的文化环境,最大化你的成长。

最后讲人和,在上图中标注为 2,架构活动中涉及的人主要是研发人员和目标用户。在输入端,架构师需要与多个研发团队协作,因而理解研发方的核心诉求就尤为关键。在输出端,架构师产出方案的最终评判即目标用户的长期满意度。因此深度洞察用户的人性就是保证架构活动成功的关键所在。这是我们第二个生存法则要覆盖的内容。

理解了影响架构活动的这些要素,我们很容易就知道应该以什么样的视角来关注和干预这些架构活动。而我根据这些,提炼出了你作为架构师必备的六大生存法则。

如何利用生存法则,最大化架构师的成长?

简单来说,生存法则指的是我们作为架构师在设计架构方案和组织架构活动时必须要尊重的一些原则。如果违背这些原则,那么作为一个架构师的生存就会受到威胁。

之所以总结提炼这些原则,是因为在我二十多年的职业生涯中,一次又一次地看到我周遭的架构师,包括我自己,在违反这些规则后付出了惨重的代价。所以我会将自己经历的、看到的大量失败案例呈现出来。

我先简单陈述一下这六个法则的核心内容,然后再讲你应该怎么学习和应用这些法则。

第一条,架构师必须保障整个架构活动有且仅有一个正确的目标。这是架构活动的起点,也是甄别架构方案的主要输入,所以架构师有义务影响和干预这个目标,以确保目标本身的正确性。

第二条,架构活动需要尊重和顺应人性。架构活动既要服务用户,也要组织研发人员协同工作。这就意味着架构师必须洞察研发人员和目标用户的人性。从人性角度出发来做决策,才能保障最终面向用户的方案具有长期正确性,以及面向研发同学的实施过程具有可行性。

第三,架构师永远需要在有限资源下最大化商业价值。对于任何一个架构活动来说,架构师的可用资源,包括商业成本、研发成本、时间成本、迁移成本等,都是极其有限的,所以架构活动必须在这些限制条件下,最大化商业价值。

第四,架构选型必须要考虑到所依赖的商业和技术模块的生命周期。在架构设计的过程中,架构师会有一个相对确定的商业和技术选择空间。那么在这个选择空间内,理解、顺应且利用好商业和技术周期就至关重要。也就是说,架构师要看准技术趋势,一般情况下,要选择已经有规模优势或者是即将有规模优势的技术,而不是选择那些接近衰老期的技术。

第五,架构师需要在架构活动中不断干预活动的目标和内容,以同时保证整个架构活动可以为企业注入外部适应性。这是架构师个人能在架构活动中创造的核心价值,而且也是架构师职业成长的必须,甚至也是架构师的荣耀所依赖。最终正确的架构选型会因为有很强的外部适应性而长期存在。

第六,架构师需要在一个相对安全的文化环境中探索未知, 只有这样,才有希望找到正确的架构方案。文化环境是架构师最难影响的,因而架构师要有足够的判断力,认清自己所在的文化环境是否有利于探索正确的架构方案,不要在一个错误的环境中浪费自己的宝贵生命。

在这里插入图片描述

可以看到,这六个法则的顺序跟我们刚才提到的影响架构活动成败的六个要素的顺序不完全一致,原因在于我是依照法则本身的重要性进行排序的,而不是要素的结构。

不过看完这些你可能会问,法则这东西听起来感觉很虚、也很简单啊,难道你讲的法则有什么精妙之处吗?

这些法则确实平淡无奇,原因也很简单。软件架构是人类活动中很小的一个细节,而先哲们老早就总结了人类活动的各种规律,譬如经济学、社会学、心理学、系统科学等等,软件架构这个活动自然也跳不出这些规律。

而我要强调的是,在信息化时代,我们获取这些规律并不难,难的是怎么将这些规律准确地应用到软件架构活动中去。

因为信息泛滥正让我们面临着一个颇为严峻的问题:通过朋友圈、短视频、网课等获取的规律教育,往往是泛泛而谈,甚至和软件架构领域扯不上关系。所以当我们在软件架构领域碰到某个规律可以适用的场景时,不仅很难识别出来,而且也不知道该如何应用。所以我们并不是缺少生存法则,而是不知道什么场景下该应用哪一条规律,也不知道哪一条规律是跟软件架构领域有关的。

比如说我们常说的摩尔定律、康威定律,到底和架构活动的哪个部分有关呢?你做架构的时候该怎么考虑它们呢?

因此,我会花大量的篇幅去说明法则的上下文,从而达到这样一个目标:不是要你记忆法则,而是知道怎么识别某个法则的适用场景,以及出现问题后的干预办法。

所以我期望你用一种完全不同的方式来学习这个模块:请你不要简单地相信或者背诵这些生存法则,而是跟我一起解释到底是什么原因让我把某个规律当成架构师的生存法则。也就是说,当你学习整个模块的时候,你需要试图理解我是如何被我所经历的事件教育的,并由此推断出这些生存法则的适用环境。

打个比方,假设你相信上帝存在,那么你可以认为我被上帝安排了一连串的经历,从而得出了自己坚信的一套生存法则。但是假设某一天你给别人讲这门课,你的经历与我不同;或者是因为你相信了这些生存法则,让你避免经历我的痛,而你自己的痛彻心扉的经历,又会让你总结出另外一套生存法则来。

这样一来,你理解了我的经历,也认同其中的推导逻辑。那么当某一天,你恰巧遭遇了一个类似的场景,可能会迅速思考这个法则是否适用。或许事过境迁,我讲的法则已经不再完全适用,但法则的核心逻辑依旧适用。不论是哪一种情况,只有理解它的背景和推导逻辑,你才能决定是否冒一次有备之险(take a calculated risk)。

这就是我期望你学习这个模块后,最终能达到的理解程度。那,接下来的一讲,我们就开始学习第一个生存法则吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智加科技上市箭在弦上,头部自动驾驶技术企业何去何从?

/ 导读 /受禾赛科技美股上市成功的影响,中国商用车自动驾驶技术公司智加科技也传出了即将拆分在美股上市的消息。其中,智加科技的中国部分据传将被满帮收购,并且将并入自动驾驶卡车公司挚途科技。至于美国部分,将寻求独立上市。对…

python切片总算搞明白了

不会python已久矣! 简单切片 简单切片指的是这样的切片形式:a[start:stop], 左闭右开 负索引可以直接代表那个值 >>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[2:3][2]>>> a[5:9][5, 6, 7, 8]>>> a[5…

电商导购CPS,拼多多(多多进宝)如何跟单实现用户和订单绑定

前言 大家好,我是小悟 做过自媒体的小伙伴都知道,不管是发图文还是发短视频,直播也好,可以带货。在你的内容里面挂上商品,你自己都不需要囤货,如果用户通过这个商品下单成交了,自媒体平台就会…

Cortex-M0中断控制和系统控制

目录1.NVIC和系统控制块特性2.中断使能和清除使能3.中断挂起和清除挂起4.中断优先级5.中断控制的通用汇编代码使能和禁止中断设置和清除中断挂起状态设置中断优先级6.异常屏蔽寄存器(PRIMASK)7.中断输入和挂起行为8.中断等待9.系统异常的控制寄存器10.系…

JuiceFS 在火山引擎边缘计算的应用实践

火山引擎边缘云是以云计算基础技术和边缘异构算力结合网络为基础,构建在边缘大规模基础设施之上的云计算服务,形成以边缘位置的计算、网络、存储、安全、智能为核心能力的新一代分布式云计算解决方案。边缘存储主要面向适配边缘计算的典型业务场景&#…

Python seek()和tell()函数详解

在讲解 seek() 函数和 tell() 函数之前,首先来了解一下什么是文件指针。我们知道,使用 open() 函数打开文件并读取文件中的内容时,总是会从文件的第一个字符(字节)开始读起。那么,有没有办法可以自定指定读…

分布式事务实现机制及二阶段提交

注:本文章引自终于把分布式事务讲明白了! 分布式事务 分布式事务是指在分布式环境下事务,一个事务由多个数据库节点共同完成。分布式事务也必须要保证事务的ACID的特性。 实现分布式事务原子性的通常做法就是采用两阶段提交协议&#xff0c…

07- Rossmann商店销售预测 (Xgboost集成算法) (项目七)

查看数据是否为空: train.isnull().sum()查看特征元素: train[StateHoliday].unique() # array([0, a, b, c], dtypeobject)绘制热力图: sns.heatmap(df_train.corr(),cmap RdYlGn_r,annotTrue,vmin -1,vmax1)合并商店信息和销售数据: train pd.merge(train, store, on …

高校房产管理系统有哪些管理功能范围?

数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平台,是针对中国高校房产的管理特点和管理要求,研发的一套标准产品;通过在中国100多所高校的成功实施和迭代,形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。…

世界上最健康的程序员作息表!「值得一看」

昨晚看了一篇“传说中”的“世界上最健康的作息时间表”,开始纠结自己还要不要5点半起床。 都说程序员这一行,猝死概率极高,究其原因还是加班太狠、作息不规律、缺乏运动… 今天和大家分享一下这篇文章,还是非常值得参考的&#…

基于Java+SpringBoot+Vue+Uniapp前后端分离商城系统设计与实现

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及…

PyQt5 界面预览工具

简介 一款为了预览PyQt5设计的UI界面而开发的工具,使用时需要结合PyCharm同时使用。 下载 PyQt5界面预览工具 参数说明 使用配置 启动PyCharm,找到File -> Settings,打开 找到Tools -> External Tools点击打开,在新界面…

GuLi商城-SpringCloud Alibaba-Nacos注册中心

简介: Nacos(Dynamic Naming and Configuration Service)是构建以 “服务” 为中心的现代应用架构 (例 如微服务范式、云原生范式) 的服务基础设施。致力于服务发现、配置和管理,且提供了一组简单 易用的特性集。让微服务的发现…

GEE学习笔记 八十一:【GEE之Python版教程十二】

这一节介绍一下日期类,那么GEE基础的类型基本上介绍完成。后续开始介绍GEE在遥感GIS处理上的一些API内容,比如矢量数据、栅格数据处理等。 这段代码是在程序之前必须执行的,用来注册GEE。 import ee ee.Initialize() 1、日期类API 首先看一…

C语言-文件操作-10

题目&#xff1a; 修改下列程序&#xff0c;用命令行界面代替交互式界面 #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFSIZE 4096 #define SLEN 81 void append(FILE * source,FILE * dest); char * s_gets(char * st,int n); i…

Spring3定时任务

简介 Spring 内部有一个 task 是 Spring 自带的一个设定时间自动任务调度&#xff0c;提供了两种方式进行配置&#xff0c;一种是注解的方式&#xff0c;而另外一种就是 XML 配置方式了;注解方式比较简洁&#xff0c;XML 配置方式相对而言有些繁琐&#xff0c;但是应用场景的不…

借助 APISIX Ingress,实现与注册中心的无缝集成

作者张晋涛&#xff0c;API7.ai 云原生技术专家&#xff0c;Apache APISIX PMC 成员&#xff0c;Apache APISIX Ingress Controller 项目维护者。 原文链接 云原生场景下是否需要服务发现 背景 微服务架构是当前最为流行的应用架构之一。 应用被拆分为多个服务组件&#xff…

流批一体架构在快手的实践和思考

摘要&#xff1a;本文整理自快手技术专家、Apache Flink & Apache Calcite Committer 张静&#xff0c;在 FFA 流批一体专场的分享。本篇内容主要分为四个部分&#xff1a;Flink 在快手的发展流批一体在快手的规划第一阶段&#xff08;加强批能力&#xff09;的进展第二阶段…

什么是refresh?Spring refresh 流程

refresh 是 AbstractApplicationContext 中的一个方法&#xff0c;负责初始化 ApplicationContext 容器&#xff0c;容器必须调用 refresh 才能正常工作。它的内部主要会调用 12 个方法&#xff0c;我们把它们称为 refresh 的 12 个步骤&#xff1a;1. prepareRefresh2. obtain…

js将数字转十进制+十六进制(联动el-ui下拉选择框)

十进制与十六进制的整数转化一、十进制转十六进制二、十六进制转十进制三、联动demo一、十进制转十六进制 正则表达式&#xff1a; /^([0-9]||([1-9][0-9]{0,}))$/解析&#xff1a;[0-9]代表个位数&#xff0c;([1-9][0-9]{0,})代表十位及以上 二、十六进制转十进制 正则表达…