架构课学习笔记:职业成长

news2024/11/25 4:53:33

   架构师没有明确的定义,郭老师提出具备的能力:就是为一个复杂系统设计软件的能力,以及引导研发团队实施的能力。从5个 阶段来看对应的能力维度:结构化设计、解决横向问题、解决跨领域冲突、正确的技术决策和创造生存优势。

一结构化设计

   这个吧,我就是很惭愧,通常只要不给别人看,自己总是无比满意。如果后期经常做迭代,会发现之前写写的不太好,再去重构。结构化是一个结果,涉及很多方面,要做好不容易。

   代码抽象、OOP的设计思想

要求我们认真思考什么是类,什么是对象,什么是对象所具备的属性,什么是对象可能发生的行为,这个行为的作用对象是谁,等等。通过这种对模型本质的思考来定义软件结构,就是提升软件结构性设计能力的有效方法。

  如果单纯的写代码就是依照产品需求文档那就是从文字到计算机语音的转换,架构师的应该具备思维需要多思考,要这么具有前瞻性的设计吗?如果现在不需要,但是未来需要,我应该采取什么样的设计才能让未来的过渡最容易呢?这是基于对问题本质、商业价值和软件结构性思考的长远设计!

设计模式

  这个比较广泛 了,设计模式强调趋同性,用广泛传播的知识来标准化代码的实现,从而降低实现手段和命名的多样性,也就是提升代码的一致性,注意使用不当的 问题。

结构化设计过程关注点

   一 设计理念。整体设计需要与公司或部门的理念保持一致

    二 API 的结构性:

暴露给其他调用方的 API,要有条理、表达准确,且易于理解。

包含宏观的结构性,比如一个实体的 API 要反映出这个实体状态和行为。

功能组织上的结构性:一个 API 可能为多个用户角色服务,不同的用户角色和不同的使用场景,都应该有不同的设计粒度。

最后是数据模型的结构性。API 会暴露数据给调用方,那么暴露出来的数据就要有清晰的结构,遵守一定的规范。

  三  模块内部的结构性,也就是程序的结构性。

  比如Java的package、Interface、Class 和 function 实现的设计等。

如果个人与团队不太一致,可以尽量追求 API 的结构性,前提是不能与整个研发团队现有的设计规范相冲突。哪怕你认为现有规范不合理,也应该建议调整规范,因为这会影响他人代码的一致性和可读性,纯粹是私域的 代码除外。

二  解决横向问题

   横向问题,简单来说就是软件系统内部与业务无关的技术债,比如性能、可扩展性、可用性、可测试性、可维护性和安全合规等问题。

  从程序员成长为兼职架构师,需要跨越的主要的能力障碍就是责任边界,通常这种不属于某个研发人员具体的责任,应该优先吧日常开发工作做好,日常工作做不好,很快就被裁掉了,也做不了这个横向问题。

  从哪里开始呢?首先是 个人兴趣。其次考虑解决这个横向问题能给公司带来多大的价值?作为一个兼职架构师,最重要的价值就是帮助团队中被某个横向难题挡住的程序员清理路障。

    可以先从 稳定性解决,毕竟自身收益,报警少了压力也少。这个不需要额外授权,跟工作连续性大。这个话题很大,郭老师给了相关的一些建议:

1 从来都不要相信自己的代码是在一个可靠的环境中运行,任何时候都要坚持检测你的依赖方。

2  系统的可用性会随着复杂度的提升而降低。如果想设计一个高可用系统,就必须把依赖最小化。如果是被迫引入依赖的话,就要选择最靠谱的人和最靠谱的模块。

3  所有东西都会过期变质,尤其是数据。有时候不是简单回滚就能解决问题,可能数据配置不匹配造成数据污染,也就是在设计中要考虑数据污染的情形。

4 在可用性面前,所有依赖都可以被降级。也就是通过大量的压测和充足的预案,保障重大活动高可用性。

5 不考虑成本的稳定性就是耍流氓。要考虑成本 。

6 保护自己:当故障发生的时候,首先要想方设法地恢复自己所负责的服务,不要等待强依赖方的恢复。

降级、限流、监控、报警等稳定性常规手段,在多数互联网公司都已经齐备。手段还不算原则。

除了稳定性,性能也是与 商业回报有关的额高优先级。

    横向问题不是越多越好,公司发展到一定规模后相比覆盖广度,横向能力的深度和稀缺性要更重要一些。

 三 解决跨领域冲突的能力

     上节学了从程序员到兼职架构师的跨越,也就是如何搭建解决横向问题的能力。 在兼职架构师这个角色中,架构能力是一个加分项,写代码实现需求仍然是主要工作。

      从兼职架构师成为跨域架构师,需要完成从一对一关系到一对多关系的跨越。这个校色转变很大,跨域架构师对多个领域的软件架构间接负责,只能通过各领域的研发管理者来间接影响自己所负责的领域架构。

      在多个领域的软件架构,而每个领域都有对应的研发经理,甚至领域内还有对应的兼职架构师,这些领域之间的设计理念等肯定不一致。这些领域有各自的领域目标、领域挑战、需求优先级和相对独立的工作环境。因此跨领域架构师要持续抵抗天然的熵增,将多个子领域中不同的设计理念、代码结构和实现方式,往同质的方向上进行整合。是大型组织的需要。    

  对比一下兼职架构师,这个角色只需要关注自己领域或模块的架构问题就行了,解决的还是内部技术债的问题,不需要化解多个团队之间的冲突。跨域架构师对这些领域没有管理控制权。每个领域的大佬都有各自的理念和行事方法,不但互相之间有矛盾,好比你之前代码写的再好也不能把别人推开自己去改代码。现在只能靠驱动他人来作出正确的判断,才能让想法变成现实。

郭老师给了一个常见的背锅场景。一个交易域的跨域架构师对接三个独立团队负责交易、支付和资金领域的开发。

产生的跨领域问题本质: 领域割裂、决策割裂、执行割裂、沟通割裂

从全局视角做架构干预

跨域架构师的存在就是协调子域之间的决策、执行和沟通,从而平衡全局结构化和局部个性化之间的冲突,最终最大化全局目标的实现。

   再各个子域互相沟通的情况下,这不是说架构师没用了,架构师的专业会让大家少走技术弯路,因为你要靠真实可靠的技术论据和完美的逻辑来说服大家采用正确的判断。技术能力同样有价值。

高速发展的公司里,往往还有合规、审计、风控和安全等其他维度的问题被各团队忽视了,这类问题的共性,可以统一归结为之前局部最优的架构决策在全局视角下不再最优。此类决策都是跨域架构师的核心增值所在。

  到这里,理解一个跨领域架构师如何突破局部视角的障碍了:

  1.理解整个全局领域的目标。

2.最大程度地熟悉每个子领域,理解每个子领域的目标、挑战和需求的差异性。

3 围绕统一的目标去分析局部视角上的差异性,引导各个决策者和执行团队从全局视角上看问题,最终引导多个子域在目标和全局目标上形成对齐。

4.设计公开的沟通机制,促进子域之间的信息对称,使得每个决策者和执行者能够看到全局的优化目标,以及其他团队的重大决策、执行方式和当前状态。

5.逐步解决具体的设计理念、代码结构实现方式的冲突,达到全局最优。

而类似多个团队之间的判责,你可以引入这样一个思考实验:如果没有三个团队,只有一个具备超级大脑的人实现了整个系统,那么他是在什么阶段引入了这个故障呢?从整体视角去看,

跨域架构师千万不能充当和事佬,能力可以训练或者失败后修正来弥补,勇气是主要的。需要有足够的勇气去发现、面对和解决这些冲突。解决冲突的过程,也就是兼职架构师创造增值的过程,持续做好这件事,就能跨过从兼职到跨域架构师的最大障碍了。

   四 正确的技术决策和创造生存优势

总架这块我就是看看,体会不到这么高。认知达不到。

 看看郭老师说总架是如何思考和决策的。

  核心能力做正确的技术决策,也就是说,总架构师要为整个公司软件架构的正确性负责。其实是面向未来的技术不确定性下的外部适应性。不像是技术债跟 明确的去除局部架构缺陷,面向未来的架构正确性几乎永远没有明确的答案。技术发展、技术人才供给、商业竞争都有非常大的不连续性和不确定性。

    总架构师这种正确决策的能力,常常被叫作技术嗅觉。不断寻找高风险决策的机会来提升技术嗅觉。

你在帮助他人做高风险决策时,要做的事情就是:

1.理解整个决策的背景。

2.理解决策的制约因素。

3.在你所精通的领域提供尽可能多的依据,在最大程度上降低小决策的不确定性。

4.从你所精通的领域出发,为最终决策做出建议(也就是拍个板)。

5.尽可能多的参与到决策讨论中,了解其他领域的不确定性和收敛方法。

6.无论最终决策是否与你的建议一致,都要尽可能地理解最终决策背后的逻辑。之后的数月甚至是数年,持续关注决策的后续进展,反思自己提供的决策建议中那些缺失和误判的部分。

7.之后的数月甚至是数年,关注其他领域后续的变化,思考最终决策的正确性。注意,不仅要看最终效果,还要看判断决策逻辑和过程的对错。

CTO更高了,CTO 的商业嗅觉更重要。技术不是 CTO 决策的第一优先级,在技术之外寻找解决办法的思维。

对人才的判断力是任何一个管理者最重要的能力。能够相信、尊重、容忍与你不一致的判断,而且能够在他判断失误的情况下,帮助他提升,给他再次决策的机会。这才是一个了不起的管理者。

五 架构师成长的必要条件

  简单回顾下,这五个角色在架构师成长的五个阶段。1.在程序员阶段,主要关注需求实现的结构化,也就是一个模块内有关业务的部分。2.兼职架构师阶段,主要关注模块整体,以及与业务无关的横向问题。3.跨域架构师阶段,主要关注不同模块间结构合理性的问题。4.总架构师阶段,关注技术架构的长期正确性。5.CTO 阶段,关注企业的长期生存。

想培养出这五个维度的能力,需要具备什么必要条件呢?

一 独立思考的能力:通过独立思考带来有效结论的能力。 

独立指1.有别于其他人的视角;2.不同的证据组合;3.不同的思维方式。

其次是“有效”,也就是为公司或团队带来足够的价值。

  现在当我们面临的问题,会找到多个答案,难得是甄别多个答案优劣的能力 。

二 信息内化能力:

  信息内化的过程,也就是从接触信息到消化吸收成个人知识的过程。

 在当前高度竞争的环境下,缺少信息优势,很难在架构师的成长过程中胜出。我们需要深度理解自己所在企业和行业的特点,找到自己的特定信息优势,并最大程度地内化这些信息来获取成长。

三:适应力

 从程序员到架构师再到 CTO 的职业成长阶段,与其他职业相比有个重大的差异,那就是能力的不连续性。岗位技能、个人技能、管理技能等需要时间、经验和机会磨练出来。

其他通用技能想自驱力、学习、沟通、推动等,也需要,软件行业内卷的情况下,没有特别突出。这里又有个取舍,要专注于少量必需的条件上。

    看行业猎头发的跟大厂高P聊天,即要站队抱紧老大大腿,又要去竞争做出业绩来。这种高P就不是纯粹的技术,要有非技术的敏感度。机遇很重要,情商也要很高这些虽然老师没讲,但是也得明白。

  六  架构师成长的充分条件

不满足必要条件,就做不了架构师。还需要充分条件:

一 大量的高风险的决策机会:

一个激烈竞争赛道中的成长型的中小公司,往往有大量高风险的架构决策机会。

二 对架构师友善的环境:

1.相对宽裕的决策时间;2.对架构师意见的尊重;3.对错误决策有足够的包容度。

 考核、排期等决策容易看出来。

三  正确的目标

  工作环境能够一直维持正确的目标。这样的目标在定义中就公开透明,鼓励全员参与;在决策中尊重数据和事实输入,有确定的 KPI 和数据结果来衡量产出;在最终的复盘中,不忌讳失败,会认真反思分析。

这些充分条件就是外部给予的成长环境,这里郭老师引用了机器学习这个学科分支的基础假设,如果把架构师想象成一个大数据驱动的算法模型,那么架构师的成长,就是这个模型在不同场景下快速找到正确架构设计的过程。那么最终的产出是什么呢?对于机器学习系统而言,就是高质量的算法模型。对于架构师而言,就是最优的架构设计。充分条件保证了成长的有效性,必要条件保障了成长的速度。

  职业选择:

   选择行业要比选择企业更重要!寻找高速成长的企业,这个选择肯定是有风险的,如果从不为自己的决策担风险,就无法获得复杂、竞争的商业的成功。

小结:

  回顾这个模块,郭老师都在讲每个层级的目标是要解决什么问题?需要什么能力维度?再分析:现有能力 需要跨越的障碍是什么?最终 你的回报是能力的提升。这里有个隐含的条件,就是成长的意愿。

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

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

相关文章

树结构 根据关键字过滤

案例&#xff1a; 默认 过滤之后 直接看代码&#xff1a; <divclass"grid-content bg-purple"style"background-color: #fff"><p>单位列表</p><!-- defaultProps :这个里面的字段要与后端返回过来的字段一致 --><el-inputplac…

C++笔记之sizeof()判断对象所占内存空间的大小以及字符数组的长度

C笔记之sizeof()判断对象所占内存空间的大小以及字符数组的长度 code review! 文章目录 C笔记之sizeof()判断对象所占内存空间的大小以及字符数组的长度1.C笔记之sizeof()判断对象所占内存空间的大小2.C笔记之sizeof()判断数组的长度3.C笔记之strlen在字符数组中的使用 1.C笔…

《动手学深度学习》——多层感知机

参考资料&#xff1a; 《动手学深度学习》 4.1 多层感知机 4.1.1 隐藏层 隐藏层 激活函数能够模拟任何连续函数。 4.1.2 激活函数 4.1.2.1 ReLu函数 ReLU ⁡ ( x ) max ⁡ ( x , 0 ) \operatorname{ReLU}(x) \max(x, 0) ReLU(x)max(x,0) 当输入为负时&#xff0c;ReLU …

Python爬虫-求是网

前言 本文是该专栏的第2篇,后面会持续分享python爬虫案例干货,记得关注。 地址:aHR0cDovL3NlYXJjaC5xc3RoZW9yeS5jbi9xaXVzaGkvP2tleXdvcmQ9 需求:根据搜索关键词,爬取对应关键词下的全部文章信息 废话不多说,跟着笔者直接往下看详细内容。(附带完整代码) 正文 1. 请…

说说 OpenAI 最新发布的Function calling 是什么

这两天看的比较多的一个新闻就是 OpenAI 又更新了自己的 API。 除了各种大减价&#xff0c;增加 Token 数量之外&#xff0c;还新推出了一个叫做 Function calling 的能力。那么 Function calling 到底是什么东西&#xff0c;可能很多新闻类型的内容也没讲太明白&#xff0c;我…

基于SpringBoot+vue的教师人事档案管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

【力扣周赛】第 352 场周赛

文章目录 Q1&#xff1a;2760. 最长奇偶子数组解法1——纯纯暴力解法2——枚举左端点&#xff0c;尝试右端点继续优化 Q2&#xff1a;2761. 和等于目标值的质数对一个小优化 Q3&#xff1a;2762. 不间断子数组解法1——滑动窗口维护哈希表普通HashMap使用TreeMap补充&#xff1…

利用Python批量压缩图片大小(不改变图片尺寸,不改变图片格式)

我们经常需要在某些文件中如&#xff1a;Word,Excel&#xff0c;PPT等中&#xff0c;插入大量的图片&#xff0c;但是图片每一张的内存都不小&#xff0c;累计多了&#xff0c;就是导致文件的内存过大&#xff0c;导致客户打不开文件&#xff0c;那么我们可以将图片的内存压缩一…

指针的指针理解与用法

指针实际上就是一个变量&#xff0c;当他不是空指针的时候他的值就是某一个地址&#xff0c;同时他自己也是有地址的&#xff0c;因为它是一个变量。 指针的指针的值其实就是某一个指针的地址。 int main() {int a 5;int *p &a;int **pp &p;printf("%p\n&quo…

GitHub Pages + Hexo搭建个人博客网站

步骤 参考如下步骤&#xff1a;https://blog.csdn.net/yaorongke/article/details/119089190 出现的问题 1 Fluid主题 其更换Fluid主题时&#xff1a; 下载最新 release 版本 解压到 themes 目录&#xff0c;并将解压出的文件夹重命名为 fluid 按照上面执行后&#xff0c;后…

新增数据列--Pandas

1. 直接赋值 order pd.read_excel(C:\\Users\\changyanhua\\Desktop\\order.xlsx) print(order.head()) # 1.直接赋值新增列&#xff1a; order[平均价]order[销售额]/order[数量] print(order.head())2.apply()方法 2.1 函数功能 沿着DataFrame的某个轴应用一个函数。返回…

AIGC - Stable Diffusion 的 Prompts 提示词工程框架 (1)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131544508 当前 Stable Diffusion 模型使用基础的 stable-diffusion-v1-5&#xff0c;即 v1-5-pruned-emaonly.safetensors。 Stable Diffusion …

【RT】统一的基于文本的行人检索:大规模多属性和语言检索基准

Towards Unified Text-based Person Retrieval: A Large-scale Multi-Attribute and Language Search Benchmark 西安交通大学 针对 基于文本的行人检索的预训练 展开探索 Motivation Data Scarcity Contributions MALS(Multi-Attribute and Language Search dataset for pe…

关于亚马逊测评,为何绝大多数卖家都倾向于自养号测评

亚马逊测评在当前的电商环境中对于卖家的重要性不言而喻。现在越来越多的卖家选择自养账号测评&#xff0c;相对于找国外买手或测评服务商&#xff0c;主要是出于以下考虑&#xff1a; 1.避免买家账号资源的重复使用&#xff1a;使用国外买手或测评服务商时&#xff0c;买家账…

Python+selenium自动化测试

批量执行完用例后&#xff0c;生成的测试报告是文本形式的&#xff0c;不够直观&#xff0c;为了更好的展示测试报告&#xff0c;最好是生成HTML格式的。 unittest里面是不能生成html格式报告的&#xff0c;需要导入一个第三方的模块&#xff1a;HTMLTestRunner 一、导入HTML…

VSCode如何通过Ctrl+P快速打开node_modules中的文件

背景 咱们新建一个NodeJS项目&#xff0c;必然会安装许多依赖包&#xff0c;因此经常需要查阅某些依赖包的源码文件。但是&#xff0c;由于node_modules目录包含的文件太多&#xff0c;出于性能考虑&#xff0c;在VSCode中默认情况下是禁止搜索node_modules目录的。在这种情况…

Spring Boot 中的 XSS 攻击是什么,原理,如何预防

Spring Boot 中的 XSS 攻击是什么&#xff0c;原理&#xff0c;如何预防 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;是 Web 应用程序开发中常见的一种安全问题。在 Spring Boot 中&#xff0c;XSS 攻击可能会导致应用程序被攻击者利用&#xf…

阿里云直播配置

一、开通阿里云直播 首先进入阿里云直播产品主页&#xff1a;https://www.aliyun.com/product/live 。 点击下方的“立即开通”。 如果是还未注册的用户请按照页面提示进行完成注册并实名认证。 2、首次进入会提示开通服务&#xff0c;点击“开通服务”&#xff0c;然后选择计…

操作系统与内核、系统编程与应用编程

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

Ubuntu18.04系统如何安装和使用telnet工具

在ubuntu18.04中如何安装和使用telnet工具呢?本文给出详细说明。 1.更新软件列表 sudo apt update 2.安装telnet服务 sudo apt install openbsd-inetd telnetd 3.查看telnet运行状态 netstat -a | grep telnet 4.登录测试 telnet 127.0.0.1