作者 | Alan Tai

译者 | 冬雨

策划 | 闫园园

在过去的 20 年里,作为一名软件工程师和软件架构师,我与不同领域和不同学科的软件工程师聊过很多次。他们中有一些人是有着 8 到 10 年经验的高级工程师,有许多人还在职业生涯早期,有着 3 到 5 年的经验。其中一些人是我的同事。有些人是求职者。聊到最后,他们几乎都会问到同样一个问题:

“我想成为一名解决方案架构师。了解更多架构相关内容的资源有哪些?“——很多软件工程师都会问的一个问题。他们问错了问题。如果你读下去,就会知道为什么我这么说。此外,撰写本文时我的公司正在招聘首席软件架构师,所以我正好解释一下什么是软件架构师以及如何成为一名软件架构师。

1 什么是软件架构?

首先什么是软件架构?提到软件架构师这个头衔,就经常听到拿建筑的架构与之作比。建筑架构师设计建筑的蓝图。工程师们将其实体按照该蓝图建造起来。我认为从很多方面来看,这都是一个糟糕的类比。

建筑的类比使人们过于关注系统的静态面。在这方面,城市建设是一个更好的类比,因为它既包括道路、建筑和桥梁等静态元素,也包括交通流量和城市居民等动态元素。城市架构师提出城市设计,制定计划来安排如何建设城市以及如何将所有东西组合在一起。最后但并非最不重要的是,城市架构师有一个城市将如何发展的愿景。但是软件架构还不仅如此。有时软件架构师需要放大或缩小”城市“,以确保计划可行。架构师可能不会太关心建筑的室内设计,而把重点放在决定在哪里放置红绿灯上。架构师需要广泛且深厚的技术知识,才能构建像城市一样复杂的软件。架构师还需要在不涉及所有技术细节的情况下向业务涉众传递一致的消息。

建筑架构的类比意味着架构师是团队中最资深的人,他做出所有关键的决定,预先创建设计规范,然后在实现过程中执行设计。起初,在很多人看来,成为那个最有经验的人,达到技术级别的顶端,是一件很酷的事情。让整个团队都听你的,服从你的命令和决定,可能会让你感觉好极了。但是,你再好好想想,这给了架构师一定要做出正确决策的巨大压力,而这在项目的早期阶段通常是不太可能的。在敏捷团队中,这意味着开发团队不是自组织的,架构师成了团队变得敏捷的障碍。架构师剥夺了团队的所有自主权。谁愿意在如此高的压力下担任这样的职位?

软件架构的角色

软件架构可以被视为位于业务目标和支持业务以满足这些目标的软件系统之间的中心。

软件架构的角色

软件架构用于满足业务目标。它是基于要实现的业务目标而设计的。然后,按照设计实现软件系统,使其遵从设计。这应该是一个迭代过程。正如我前面提到的,在项目的早期阶段通常不可能做出正确的决定。最好的决定是你仍然不必决定的决定。架构师将创建刚好能够满足业务需求的设计。这就关闭了反馈循环,就像你在敏捷和 DevOps 实践中看到的一样。这里的想法是,随着世界的变化,业务需求也会变化,软件架构应该随需求演变以支持业务接受变更。

软件架构“能力”

软件架构是一个非常具有挑战性的话题,您必须设计一个同时满足所有业务需求和所有质量属性的系统。这几乎不可能一个人完成,通常是架构师和领域专家团队合作的结果。

通用软件架构质量属性

软件架构不仅仅是图、框和线。让我们以其中一项质量属性安全性为例。只看高层次的设计图,只看一些线线连着框框,可能无法看到任何安全问题。我甚至不知道这个设计是否真的能行。保护系统安全的是代码。因此,架构师编写代码并与开发团队密切合作是很重要的。另外,架构师要能够阅读代码并经常与开发团队交流。这就是当软件架构师放大或缩小设计时所发生的事情,就像我在城市设计类比中所提到的。如果架构师不与开发团队沟通,也不编码,他们就会脱离现实,所设计的架构就不实用。

2 什么是软件架构师?

过去,软件架构师是在纸上勾画逻辑流程规范,然后交给另一个团队 (称为打孔者) 来生产穿孔卡片并使软件工作的团队。

图片来源:  Wikimedia Commons

随着技术的进步,我们不再需要这样的过程,软件架构师的定义也变得不那么明确了。在现代 IT 中,软件架构师不是一个头衔或级别,因为他们不会在一夜之间给你最高的软件开发权。在 Scrum 团队中,这个角色和其他任何角色一样。我认为软件架构师是最有趣的角色,与医生、土木工程师、心理学家、社会工作者或会计师不同,您不能通过单一的培训课程获得软件架构师资格。事实上,世界上几乎没有一所大学提供软件架构学位。软件架构师对几乎所有事情都需要广泛且深入的了解,以便完成前一节中提到的目标。那么软件架构师使用这些技能和知识做什么呢?

图片来源:https://dilbert.com/strip/2008-03-04

软件架构师做什么,和谁一起工作?

正如我前面所说的,软件架构位于业务目标和满足它们的软件系统之间。软件架构师将业务与使用不同语言、以不同方式思考并具有不同关注点的开发团队联系起来。具有多层管理和开发团队的竖井只会使交流变得更糟。拥有专业知识并掌握相关信息的软件工程师并不是决策者,而管理团队中的那些人则是不掌握相关信息的决策者,这种情况并不少见。为了解决相互冲突的权衡并推动组织前进,软件架构师在公司的阶梯上爬上爬下,在技术细节上扮演着至关重要的角色。

一名宇航员——由 NASA 拍摄

相比之下,如果大家在一些组织中冠有软件架构师的头衔,但他们只停留在企业阶梯的顶端,或者他们只关注图片时,他们就与现实脱钩了。正如 Joel Spolsky 所说,这些人被称为架构宇航员,他们没有贡献,也没有生产力。许多大的组织似乎都能负担得起很多这种人!

3 软件架构师的技能和获得多样化经验的方法

对于软件架构师这个角色来说,对每一件事情都有经验至关重要。它让你知道什么时候该充当公司的桥梁,当放大或缩小架构图时该关注什么。当在不同的上下文中应用特定的架构设计时,您还将观察模式。在十多家公司工作过之后,我最终进入了 Zuhlke 咨询公司,在那里我不再需要换工作来获得不同的经验了。我的项目几乎涵盖了无数种行业,包括金融科技、保险科技、物流、制造业、奢侈品时尚、初创企业,这份列表还在不断增长。

领域知识

对某些业务领域的深入了解对于软件架构师的成功是至关重要的,因为您不仅要知道它是什么,还要知道它将是什么,或者可能是什么,以及为什么。客户经常找到软件架构师,要求向他们展示行业领导者正在做什么以及如何做。领域知识还可以帮助软件架构师说一种商业通用的语言,这反过来帮助他们成为连接管理和开发团队桥梁。

人际交往能力

软件架构师也是一个伟大的沟通者。许多优秀的高级软件工程师发现很难晋升为软件架构师,因为他们没有展示自己的技能,如倾听、口头和书面沟通、推进、冲突管理、演示、谈判和说服。这份工作所需技能的具体类型取决于你工作的特定公司环境。

在我的公司,我有机会在安全的环境中练习这些技能,比如我们称之为“祖尔克日”和“祖尔克营”的环境。我的雇主也在这些方面为我提供了正式的培训。最后,公司的建设性反馈文化支撑着许多人成长了起来。

专业技术能力

单独任何一张大学文凭都无法证明你是一个软件架构师。你需要学习软件工程的所有领域,包括软件设计、编码、质量保证、DevOps、性能分析、软件安全、项目管理、软件支持等等。这些技能对于创建满足软件架构“能力”的解决方案至关重要。当与开发团队中的专家交流时,软件架构师能够更好地理解相关信息,因为他们已经具备了这些领域的实践经验。

作为一名开发团队成员,我可以胜任各个领域的日常工作,包括后端、前端和 DevOps。这让我能够以第一人称视角看到幕后发生了什么,并让我能够与团队保持较近的距离。

业务和开发过程

业务过程描述了一个组织的业务操作,并定义了业务需求,而这些业务需求通常没有清晰地表述为软件项目需求。软件架构师应该知道,或者至少应该知道向谁询问业务流程的相关信息。一个向行业组织交付解决方案的软件架构师,需要干上几年时间才能成为领域专家,这种情况并不少见。

理解技术过程、软件开发生命周期和最佳实践的重要性与了解业务过程一样重要。这是因为软件架构师通常在确保业务和开发过程之间的一致性方面扮演着关键的角色,如此,才能做到迭代交付,才能有现实的项目计划。

领导力

现在,您应该非常好奇软件架构师如何掌握所有这些知识和技能了吧。好吧,我告诉你,他们并没有掌握!一个人是不可能掌握所有这些的。伟大的产品需要一个有能力的专家团队来开发。成功的软件架构师通常是有效的领导者,他们的团队中拥有伟大的成员,并使成员们成长得更加伟大,而不仅仅是个体。

软件架构师通常被视为团队的代表。他们在领导、管理业务和技术方面投入了大量的精力。虽然人们常常认为领导者只在站在前面指挥,但有时在一个项目中需要五种领导风格。我们公司提供的领导力培训就是这么教的。

你准备好成为一名软件架构师来寻求职业生涯的进一步发展了吗?现在是行动的最佳时机!

作者介绍:

Alan Tai 是 Zuhlke 的首席软件架构师,Zuhlke 是一家优质的全球咨询公司,为我们的业务伙伴提供高质量的解决方案。

原文链接:

https://ayltai.medium.com/what-it-takes-to-become-a-software-architect-fa7788962c8c

译者介绍:

冬雨,小小技术宅一枚,现从事研发过程改进及质量改进方面的工作,关注研发、测试、软件工程、敏捷、DevOps、云计算、人工智能等各个领域,非常乐意将国外新鲜的 IT 资讯和深度技术文章翻译分享给大家,已翻译出版《深入敏捷测试》、《持续交付实战》。

强势开源一款小程序!
2021-11-07
强力推荐一个完善的物流(WMS)管理项目(附代码)
2021-10-23
推荐一个 Spring Boot + MyBatis + Vue 音乐网站
2021-10-19
分享一套家庭理财系统(附源码)
2021-09-20
推荐一个互联网企业级别的开源支付系统
2021-09-04
推荐一套开源通用后台管理系统(附源码)
2021-08-21
一款神仙接私活儿软件,吊到不行!
2021-07-31
基于 SpringBoot 的仿豆瓣平台【源码分享】
2021-07-18
干掉 Wordpress!这个开源建站神器有点吊!
2021-06-18
从朋友那里搞了 20 个实战项目,速领!
2021-06-12

如有收获,点个在看,诚挚感谢

资深架构师十年总结:成为架构师,你必须具备这五点能力相关推荐

  1. 资深架构师十几年的架构干货经验总结分享!

    图片来源:pexels.com 1 架构师承担什么样的责任 记录片<黑猩猩的守护者>中珍妮·古道尔博士说过:「唯有了解,才會關心,唯有關心,才會採取行動,唯有行動,生命才有希望」,套用到架 ...

  2. 架构师不可不知的十大可扩展架构

    2019独角兽企业重金招聘Python工程师标准>>> 可扩展性正是如今软件设计领域最值得优先考虑的要素.然而,计算机科学家们还无法了解一套单独的架构如何才能扩展至各类应用环境当中. ...

  3. 架构师十项能力,对标阿里P8晋升要求,学习内容梳理

    架构核心能力导论 数据流架构风格 调用返回架构风格 ABSD方法论 DSSA领域设计 AT方法论 技术架构路线图规划 架构设计维度 边界内聚耦合 扩展性核心方法论 应用扩展.数据扩展 组织可扩展性.流 ...

  4. 架构大咖说丨顶级架构师 = 技术大牛?

    -     前言    - 通过自身不断地努力,逐渐成长成为一个顶级的架构师,是许多技术人的梦想.然而,如何成为一个顶级架构师呢?很多人认为只要技术很牛,就能成为顶级架构师,这是一种错误的观点,因为技 ...

  5. 阿里P8架构师深度概述互联网分布式架构

    简介 作为一名架构师,我们要专业,要能看懂代码,及时光着臂膀去机房,也能独挡一面!及时同事搞不定问题,或者撂挑子,你也能给老大一个坚定的眼神:不怕,有我在!还能在会议室上滔滔不绝,如若无人,让不懂技术 ...

  6. 燕十八PHP高性能架构班Oracle部分课程

    课程简介: 本课程为燕十八老师的燕十八PHP高性能架构班内的Oracle教程,众所周知,燕十八老师的讲课风格都是一种幽默易懂深受学生喜欢,本部分课程依然继承了这种风格.本部分课程通过31课来讲解Ora ...

  7. 【软考系统架构设计师】2017下系统架构师综合知识历年真题

    [软考系统架构设计师]2017下系统架构师综合知识历年真题 [2017下架构真题第01题:绿色] 01.某计算机系统采用5级流水线结构执行指令,设每条指令的执行由取指令(2Δt).分析指令(1Δt). ...

  8. 刚哥谈架构 (五)- 推荐给架构师的书单

    刚哥谈架构 (五)- 推荐给架构师的书单 今天收到豆瓣的2019年的总结,发现自己已经在豆瓣渡过10个春秋.今年读了69本书,有很多书非常棒.今天我就给各位架构师,程序员,码农推荐一些我觉得对工作和职 ...

  9. GUI 应用程序架构的十年变迁:MVC、MVP、MVVM、Unidirectional、Clean

    随着现代浏览器的日渐流行,Web 以及混合开发技术的发展,大前端的概念日渐成为某种共识:而无论 iOS.Android.Web 这样的端开发还是 React Native.Weex 这样的跨端开发,其 ...

最新文章

  1. 【Codeforces】501B Misha and Changing Handles(map)
  2. 禁止右键 巧妙破解右键被禁的方法
  3. Sublime插件开发 启动Anaconda并运行对应Python脚本
  4. C\C++ 交换两个变量的方法
  5. tomcat 项目发布失败原因_项目启动tomcat失败的几种可能原因和解决方法
  6. saleor设置braintree支付方式
  7. 前端学习(2504):vue指令v-for key
  8. centos7 geenplum5.x postgis开源版本编译
  9. JAVA1.6实现动态编译加载运行
  10. Python数据挖掘-相关性-相关分析
  11. java生产订单号_java 生成订单号
  12. 大规模分布式系统概念介绍
  13. iserdese2接口详解_Xilinx FPGA LVDS应用
  14. 有什么好玩的网页小游戏网站推荐么?
  15. c语言十六位正整数表示,C语言学习(一)概述,数据类型
  16. Coolpad/酷派7231 root教程_方法
  17. 【转】一个交警肺腑之言:高速公路行车的安全注意事项
  18. VS Code 中选中英文单词大小写切换快捷键
  19. ModelSim 修改测量时间显示的单位
  20. Algo_网络流,最大流最小割总结, 残留网络性质,知识点总结Tips

热门文章

  1. python 读取文件时速度的问题
  2. einsum() operands do not broadcast with remapped shapes [original->remapped]报错解决方法
  3. python turtle画高达
  4. Eclipse上Hadoop插件中Run On Hadoop原理
  5. 三维点云体素滤波python_一种基于点云的Voxel(三维体素)特征的深度学习方法...
  6. 智能操控日益重要│万可WAGO SCADA系统助力企业数字化提升
  7. 在FastAdmin中引入Jquery插件
  8. 解决Could NOT find Boost (missing: log filesystem) (found version “1.76.0“)
  9. Tomcat环境变量的配置
  10. RegisterHotKey class wrapper