不了解持续架构会落伍么?

简介: 不了解持续架构会落伍么?


信息技术是一个日新月异的领域,从自身的发展到学科的教程,再到应用场景的无处不在,导致每天甚至每时每刻都可能会有新的技术或者新的方法涌现出来。

“吾生也有涯,而知也无涯”,那么,对于一个工程师而言,不了解并学习持续架构会落伍么?

不学习就会落伍

在前不久QCon2022( 由于疫情的原因延迟到今年举办)上有个分论坛主题是“工程师成长实战”,无论是宗刚老师的《三倍速成长实现职场跃迁》,还是《Maven实战》作者许晓斌的《技术领导力实战》,或是老码农自己分享的《QCon:工程师成长的金字塔思维》,都涉及了一个同样的主题——学习。

对一个IT从业者,尤其是一名软件工程师,对自己而言,需要不断成长才能提高自己的适应能力以及市场的竞争力,才能坦然地面对所谓的“35岁危机”;对企业而言,只有不断成长才能持续地为企业创造价值。不断地成长,离不开学习,对于我们每个人而言,可能是终身学习。

那么如何学习呢?

在老码农自己的分享中,描述了关于学习的金字塔模型,将学习方式分为了三个方式:输入、消化和输出。尽管主动学习优于被动学习,很多的学习都是从输入开始,根源上都是从问题开始的,而阅读是学习方式中非常重要的一种方法。在计算机领域的思维范式金字塔中,历史思维是其中的一个支点,“治学先治史”,所谓治史离不开阅读。

或许,每个人都知道学习的重要性,但面对浩如烟海的知识,我们学习什么呢?

学习什么?

学习什么取决于学习的目的,不是为了学习而学习,不能把手段当目的。学习的目的是为了更好地解决问题,分析并解决问题才是价值所在,而个人的成长可能只是学习目的的一部分或者副产品。

“知人者智,知己者明”,有时候,发现问题比解决问题更困难。提出一个好问题是一件有挑战的事情,因为答案往往就在问题当中。对于我们软件工程师来说,有很多问题都会落到软件工程领域,例如软件架构。

如果把问题比喻成病痛,那么解决问题则类似于治病。在《扁鹊见蔡恒公》中有“君有疾在腠理,不治将恐深”,很多致命的问题可能都是小问题日积月累形成的。而治病的更高境界可能是“治未病”,即“防患未然”。然而,我们常见的情形往往是“曲突徙薪忘恩泽,焦头烂额为上客”。基于个人和环境的局限,我们的预见能力可能非常有限。

但是,我们可以通过学习,参考业界对未来的遇见,帮助我们提升洞察力,例如Gartner 对技术趋势的预测。2023年, Gartner 对十大战略技术趋势的预测如下:

  • 数字免疫系统
  • 应用可观测性
  • AI信任、风险和安全管理
  • 行业云平台
  • 平台工程
  • 无线价值实现
  • 超级应用
  • 自适应人工智能
  • 元宇宙
  • 可持续技术

这十大技术趋势划分为优化、开拓、扩展三大主题,其中,优化包括:数字免疫系统、应用可观测性、AI信任、风险和安全管理;开拓包括:元宇宙、超级应用、自适应AI;扩展包括:行业云平台、平台工程、无线价值实现。而可持续性技术贯穿2023年的所有战略技术趋势。那么,什么样的可持续性技术会贯穿所有的领域呢?聚焦在软件工程的话,恐怕应该是持续架构了。

从架构到持续架构

软件架构是客观存在的, 不论你是否主观情愿,它都在那里。然而,架构一词源自隐喻(关于隐喻的学习与思考),所以对软件架构的范围,人们往往有着不同的看法。例如,宏观的系统结构,把架构认为是一个软件系统的高级抽象,由一组计算组件和描述这些组件之间交互的连接器组成;那些对系统及其涉众有重大影响的决策;作为系统和开发项目的蓝图等等。

老码农喜欢用时空观来分析问题,在《如何进入一个新领域》以及《面向全栈的技术管理》有过描述。一般地,对于软件架构而言,从空间视角来看是软件系统的体系架构,例如架构模式(软件架构的10个常见模式)等;从时间视角来看是架构决策和实现流程。实际上,软件架构是时空视角的结合与统一,也就是说,在一般意义上,软件架构是指软件系统的基本结构以及创建这种结构和系统的规程。

令人困扰的事,基于时间的单向性和动态性,与时间相关的软件流程乃至所谓的“最佳实践”有时候往往又会成为生产力的约束。老码农个人认为,持续架构以及可持续性技术都是对时间视角架构问题的积极探索和实践,并且涵盖了空间视角架构的大多数方法。

什么是持续架构呢?这需要从明确架构活动开始——

软件架构是由业务目标所驱动,然而,在架构活动中,对业务及其需求的深入理解并不常见,进而被认为为业务增值,而且太慢了。于是,很多人把敏捷作为救命稻草,认为“最好的架构,需求和设计来自于自组织团队。”团队往往在专注于更快的交付功能,代价就是不断推迟技术债务和技术特性。于是,一些敏捷途径和方法论已经开始包含正式的架构活动与步骤。

借鉴敏捷原则的定义方式,满足以下六个简单准则的就可以被称作持续架构:

  • 准则1:用产品思维,而非项目思维来设计架构。从产品的角度来构建比单纯设计点解决方案更有效率,更容易让团队专注于客户的需求。
  • 准则2:聚焦质量属性,而不仅仅是功能性需求。质量属性需求驱动着架构。
  • 准则3:在绝对必要的时候再做设计决策。设计架构取决于事实,而不是猜测。设计和实施可能永远都用不到的功能是无意义的,是对时间和资源的浪费。
  • 准则4:利用“微小的力量”,面向变化来做架构设计。大的,单体的,紧耦合的组件很难改变。相反,应该使用小且松散耦合的软件元素。
  • 准则5:为构建,测试,部署和运营来设计架构。大多数架构方法只关注软件构建活动,但我们认为架构师也应该关注测试,部署和运营,以支持持续交付。
  • 准则6:在完成系统设计后,开始为团队做组织建模。团队的组建方式驱动着系统的架构和设计。

持续架构不是一种方法论,而是一组准则,工具,技术和想法,可以被视为架构师有效处理持续交付项目的工具集。

持续架构的目标是客户需求和交付能力的平衡,以创建一个连贯、可持续的系统,该系统不仅应满足其功能要求,还应满足相关的质量属性,例如安全性、性能、可伸缩性、弹性、数据等等。应用持续架构的方法如下图所示

对很多人来说,持续架构是一个新概念,曾经的老码农也是如此。幸运的是,在机械工业出版社杨福川总编的帮助下, 与茹炳晟、刘惊惊、右军等几位朋友参与了《持续架构实践》一书的翻译,才对持续架构有了较深入的理解和体会,这同样是学习的一种方式,包括了输入与输出,进而开始在工作中实践,融入更多的主动式学习方式。

“学以致用”,阅读往往只是输入式学习的开始,实践和分享给他人才能提升我们的学习效率,真心希望《持续架构实践》一书能够给工程师的成长提供一些助力,为大家的软件工程实践带来些许的帮助!

相关文章
|
11月前
|
安全 Java 程序员
《从头开始学java,一天一个知识点》之:控制流程:if-else条件语句实战
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列为你打造Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可完成学习。直击高频考点和实际开发中的「坑位」,拒绝冗长概念,每篇都有可运行的代码示例。明日预告:《for与while循环的使用场景》。 ---
241 19
|
数据挖掘 BI
大模型时代下的智能数据分析
在大模型时代,智能数据分析成为企业提升效率的关键。2024年,市场逐渐回归应用本质,客户更关注模型如何落地日常业务。瓴羊Quick BI智能小Q助手接入通义千问大模型能力,提供对话式报表搭建、一键换肤美化、智能洞察归因等高效功能,助力企业数字化转型,引领数据消费新范式。
265 4
|
机器学习/深度学习 人工智能 自然语言处理
人工智能与未来教育:重塑学习体验
【10月更文挑战第20天】 在21世纪的今天,人工智能(AI)技术正以前所未有的速度改变着我们的生活、工作和学习方式。本文探讨了AI如何深刻影响未来教育的各个方面,从个性化学习路径的设计到智能辅导系统的开发,再到虚拟现实(VR)和增强现实(AR)技术在学习中的应用。通过分析这些变革,我们不仅能够预见一个更加高效、互动和包容的教育未来,而且还能理解这一过程中所面临的挑战和机遇。文章强调了持续创新的重要性,并呼吁教育工作者、技术开发者和政策制定者共同努力,以确保技术进步惠及每一个学习者。
385 2
|
数据采集 运维 前端开发
【Java】全套云HIS源码包含EMR、LIS (医院信息化建设)
系统技术特点:采用前后端分离架构,前端由Angular、JavaScript开发;后端使用Java语言开发。
381 6
|
缓存 关系型数据库 MySQL
MySQL数据库优化技巧:提升性能的关键策略
索引是提高查询效率的关键。根据查询频率和条件,创建合适的索引能够加快查询速度。但要注意,过多的索引可能会增加写操作的开销,因此需要权衡。
|
供应链 安全 物联网
未来技术浪潮:区块链、物联网与虚拟现实的融合与创新
在科技飞速发展的今天,新兴技术如区块链、物联网(IoT)、和虚拟现实(VR)正在重塑我们的世界。这些技术不仅各自发展迅速,更在交汇融合中催生出新的应用场景和商业模式。本文将深入探讨这些技术的发展趋势,并分析它们如何相互促进,共同推动社会进步。通过数据支撑、科学理论和逻辑推理,我们将揭示这些技术背后的潜力,以及它们对未来世界的深远影响。
|
算法 网络协议 安全
后端返回的base64流形式的图片,怎么放在src中
后端返回的base64流形式的图片,怎么放在src中
370 0
|
Linux
CentOS7使用mount命令来挂载CDROM
CentOS7使用mount命令来挂载CDROM 命令:mount -t auto /dev/cdrom /mnt/cdrom 这命令就是把CentOS CDROM挂载在/mnt/cdrom目录中,这样我们就可以访问光盘里面的内容了。
1330 0