从实践者的角度看软件架构的历史

无论什么东西,套用宋丹丹的话,就是都有它的过去、现在和将(jiǎng)来。因此学习一样东西,如果能多学一点它的历史,会让我们对其为何有如此现状少一些纠结,同时才有可能对其未来趋势有靠谱一点点的洞见。昨夜窗外雨声稀疏,难以入眠,突然想到软件架构的发展史是怎样的,于是今晨起来网上逛一圈,邂逅到这篇论文《The History of Software Architecture – In the Eye of the Practitioner》,因此,这是一篇译文。

小弟不才,没有能力自己去梳理这么庞大的论题,因此只能翻译了。不过我并没有翻译这篇论文的全部内容,比如附录就没有翻译。在翻译的过程中,一度觉得这论文的英文及其拗口,跟我阅读过的其它英文书比实在是难读。开弓没有回头箭,我还是把要译的部分译完了,难免有词不达意之处,还望海涵。

以下是译文:

1. 目标和动机

那些权威论文把软件架构当作独立的学科,一些科技期刊也把架构视角、架构描述语言、架构进化作为他们研究和实践的基石,从这些角度来看的话,软件架构正好迎来了它的25周年庆。

随着基于云交付的普及,分布式系统的各个部分需要动态集成,商业和社会数字化的曲线越来越陡,使得一个合理的设计决策包含了更大和更复杂的问题空间。软件架构的重要性前所未有,开展重要项目的组织离不开相应架构实践的支撑。然而,这25年来,软件架构的实践是如何进化的呢?未来又将面临哪些挑战?

对软件架构研究和实践现状的总结,曾有过各种不同的尝试,然而都缺少了从实践者的角度来看待上面的两个问题。

为了填补这个空缺,我们首先从5622篇科技论文中抽出10大主题,如图3。然后我们根据这些主题设计一个在线问卷调查,并由拥有5到20年不等经验的57位软件架构实践者填写了这份问卷调查。

2. 实践者对过去25年软件架构及未来之路的看法

这篇论文中,我们的调查聚焦于,在过去25年里,软件架构方面最突出的话题有哪些,以及在当下和不久的将来,软件架构方面的哪些话题会具有最深远的影响力。

调查问卷包含的问题有:

a) 参与者的背景、经验和其它一些统计信息;

b) 目前他们供职的机构,过去几年接手的项目类型;

c) 过去25年在软件架构方面的实践;

d) 最有影响力而且是目前软件架构趋势的话题(包括近两年新兴的);

e) 未来工业界可能在软件架构方向的实践(未来5年);

基于参与者的回答,我们精编得到以下结果。

过去:图1.PAST 总结了实践者们认为的过去25年最有影响力的10个软件架构话题。我们可以看到:

1.最有影响力的话题属于“软件开发流程”、“面向服务的架构(SOA)”、“架构风格”、“物联网(IoT)”。这些总共占了38%的比重。

2.SOA就像图中展示的那样了,其它的话题则包含更多特定的子话题:“软件开发流程”包含了敏捷开发、持续交付集成、DevOps、领域驱动设计、需求角色、遗留(系统/代码)、风险和质量管理、沟通技能。“架构风格”包含随着时间而演变的各种不同风格,从C-S和分布式架构,到生产线架构、MVC、多层架构等等。最后,“IoT”包括数字化、Web、互联网、工业4.0和移动优先。

图1.PAST 标红的数字表示它是否出现在图3中(科学文献中前10的话题)。同样的,我们可以看到:

1.工业界前4个话题同样出现在学术界的前10个话题中,但影响力有些差别:“软件开发流程”在工业界排第1,但在学术界只排第7,“SOA”在工业界和学术界都排第2,还有很明显的,“架构风格”在工业界的影响力被认为是大得多,排在第3,而在学术界排第6。

2.真正有大分歧的话题是“架构描述&语言”,这在学术机构排第1,而在实践者眼中只排到第8。不过这并不奇怪,符号和语言常常作为学术界深爱的研究课题,但工业界真正采用的并不多。不过也好,这正可以作为一个让研究者和实践者进行更好描述和高效沟通的契机。

还有一些话题,被实践者们提及,但是却不入专业研究者的法眼。最突出的比如:

1.软件质量(第5):很显然,质量成为软件架构的属性是过去25年的一个重要成果。“质量”有时候又被称为质量符合性、性能、可扩展性、可维护性等等。

2.云计算(第6)和微服务(第7):它们被认为非常(每样14票)的有影响力。作为SOA的衍生品,它们被认为是同属一个话题—这样就一共获得42票,变成了过去25年最有影响力的话题。

现在:图1.PRESENT 使用同样的分析方法得到现今软件架构最有影响力的话题。这个结果中,“架构风格”排在第10(紧挨着“SOA”和“架构设计决策”)。另一方面:

1.“SOA”被“云”和“微服务”替代:我们认为这是正常的技术进化,作为一种普遍的架构风格,SOA曾被应用到到各个应用领域。

2.“软件开发流程”仍然保持稳定(第1)。相较于对过去25年的回答,今天“一切都是敏捷”:敏捷之后呢,是DevOps、持续架构(continuous-architecting)。我们注意到,在敏捷开发中,架构扮演更重要角色的意识正在增强。

3.同样的,“IoT”保持稳定(第4)。然而相比过去,它被认为是有更大的影响力,关注点也从移动应用转变到基于IoT的架构。这也和Gartner关于2018年重大技术策略趋势的预测相符,预测中提到的“智能物件(intelligent things)”,就是将AI与IoT融合。

4.明显的,“软件质量”(第6)和“安全性(第7)”的影响力在下降。这或许是架构师们都知道了如何应对这些问题,又或许他们觉得有更重要的话题要关注。

总的来说,现今最有影响力的话题总共占据了70%的答案。其中,流程、面向服务(云和微服务)、IoT三者共占了62%。

而且,在现今的前10个话题中,有一些新名词引起了我们的注意:

1.“大数据”(第5):称为大数据,或者AI、机器学习、机器分析。

2.“第三方软件集成”(第8):在过去25年的部分曾被提及,但排在第14,不过都分别得到了5票。不过从答案中,可以看到软件架构正从封闭走向开放。

未来:图 1.FUTURE,我们从调查反馈中看到比较高的不确定性。即使实践者们认为前4个话题在未来5年仍保持主流,但它们占据总票数的52%,比现今的影响力要小10%。

图1.FUTURE 展示了:

1.“软件开发流程”、“大数据”、“微服务”和“云计算”会继续扮演非常重要的角色,然而:

2.对于“软件开发流程”,实践者们更关注如何管理不断增加的复杂性,可能是跨组织的,并将注意力放到了更高的自动化上。

3.对于“大数据”,提到了AI将扮演的角色和大数据在我们日常生活中进行的各种预测。

4.“微服务”将成熟,新的“云”将关注点放在基于云架构的风格/模式,以及如何通过软件架构来实现XaaS商业模型。

5.“自适应系统”(第5),在过去的几年里火热于学术界,被认为在工业界也变得越来越重要。

6.在新的话题当中,“区块链”也位于前10(不过反应平平,可能出乎你的意料)。

7.其它冒出的新鲜话题、不在前10名单中的有机器人、数字化转型、智能互联、绿色软件、伦理学。

3. 反思与收获

除了之前呈现的结果以外,我们还要求实践者们根据自身经历反馈哪些架构话题在他们过去的25年里产生过最重大的影响,以每5年为一个周期,如下图:

图2 展示了过去(比如client-server架构,从1992-2001年)占据主流的话题如何被新话题(比如“架构设计决策”、“架构知识体系”,从2002-2011年)超越的,以及最新的一些话题(“信息物理系统cyber-physical systems”和IoT,从2012-2017年)是如何涌现的。这让我们得到至少以下的认知:

认知1. 在软件架构的历史中,架构的概念从先前的一系列系统结构,变成了处于大型的、复杂的、不断进化的环境中的软件系统。然而在这样的环境中,不只是关乎技术,还包括人员、社交、组织生态和整个社会。软件架构的实践者关注的面比研究者们要广泛,软件架构实践者同时追随其它学科,从AI、IoT、自适应增强,到能源和伦理学。

认知2. “软件开发流程”赢了。无论是过去,现在还是未来,软件架构始终关注如何更敏捷的进行开发,怎样的人员技能可以有助于开发。房间里的大象(明显存在的问题)可以用来形容软件架构沟通和形式化之间存在的窘境:“架构模型”和“架构设计”常常用来弥补“软件开发流程”,但却从来无法达到预期—将架构代码化,使得架构可重用并且可靠。

认知3. 对于软件架构这个话题,不存在革命性的新东西,只有在旧的东西之上默默地演化。比如“软件开发流程”演化成各种形式的敏捷开发,“架构风格”从“SOA”演化到“微服务”和“云”,“信息物理系统”进化融合到“IoT”和“自适应系统”。总的来说,我们讨论的是软件架构的全局趋势,通向更便捷性的,可管理更多复杂性。

认知4. 软件架构的研究和实践始终保持一致。当我们对比图3中的前10个研究课题和图2中工业界的主流话题,我们看到比如“客户端-服务器”和“架构风格”在研究和实践方面有非常类似的趋势。“软件架构设计”和“架构设计决策”虽然研究和实践方面有不同的趋势,但都保持着重要的地位。最明显的就是“架构描述&语言”,在研究领域炙手可热,而实践中少得多。

最后,我们希望从历史角度看到的软件架构演化史能给读者带来进一步的思考和灵感。

文章最初发表于:从实践者的角度看软件架构的历史

原文地址:https://www.cnblogs.com/woshiweige/p/11079904.html

时间: 2024-10-03 08:11:54

从实践者的角度看软件架构的历史的相关文章

从一个程序员的角度看——微信小应用

前言: 最近初步了解了一下微信小应用,APP端的同事也非常感兴趣,于是在公司内部做了一个小小的分享,分享的过程中有很多讨论内容,大家也是非常感兴趣和有自己的看法,当时"混乱"的场面好几次我都没有把持住.以下内容部分来自于内部分享所用ppt.文章对微信小应用的使用做了展示性介绍,并简单介绍了代码结构.后端交互方法.最后提出一些总结和疑问.文章内容比较主观,有不对的地方欢迎大家指出纠正. 前段时间微信小应用公开内测,在朋友圈火了一把,各种阐述疯狂蔓延,干掉APP之类的说法比较突出,确实达到

另一种角度看《RFID Advanced Security》首部曲

机缘巧合,有幸看到了不少关于RFID的资料,并且有幸看到了<RFID Advanced Security>这份PDF,听说这是国内安全大会上比较早出现关于RFID的议题.又听说这份是乌云内部的高级教程,文章内容单薄是无可厚非,毕竟是演讲,单单时间上来说不可能什么都讲.看完了以后实在有点不(fei)知(yi)所措(si),因为槽点实在是太多了. 文章分成4大块,分别为"RFID Basic Knowledge.RFID Basic System Security.RFID Multip

从JVM的角度看JAVA代码--代码优化

从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一反复计算 片段二反复比較 在JVM载入优化为class文件,运行class文件时,会有JIT(Just-In-Time)的介入,它会做进一步优化,这样就须要考虑是否可能被JIT优化. 片段一:反复计算 // 反复计算,这里b()被计算两次 Object a = b() == null ? "" : b(); // 优化代码 Object c = b(); Object a = c == null ? &

INDEX--从数据存放的角度看索引2

在上次<INDEX--从数据存放的角度看索引>中,我们说到"唯一非聚集索引"和“非唯一非聚集索引”在存储上有一个明显的差别:唯一非聚集索引的非叶子节点上不会包含RID的数据,让我们继续来深挖一下. 准备测试数据: CREATE TABLE TB1 ( C1 INT, C2 INT, C3 INT ) GO CREATE UNIQUE CLUSTERED INDEX IDX_C1 ON TB1(C1) GO CREATE UNIQUE INDEX IDX_C2 ON TB1(

从一个程序员的角度看——微信小应用(第二弹 见解)

最近公司的小程序刚通过了代码审核(待发布状态),从最初对它的学习 到开发 到小程序待发布 再到28日微信公开课,也算一步步的了解了微信小程序吧. 28日微信pro公开课张小龙针对小程序进行了一些答疑,之后行业的同僚都很关注,似乎大家还是有很多疑惑.之前初学后写过博客 从一个程序员的角度看--微信小应用(第一弹 初学),今天决定再写一篇小程序的小文,所以此篇谈谈我对小程序的理解吧. 说说张小龙回答的8个问题 1.小程序的入口在哪里?张小龙给出的答案是:小程序在微信没有入口. 2.小程序会不会有类似

从节能角度看数据中心软硬件设计(一)

从节能角度看数据中心软硬件设计(一) -PMC公司资深顾问.前Facebook存储架构设计师. OCP创始人之一Per Brasher于CCCC演讲实录- 此次演讲流程如下.首先讨论关注数据中心效率的原因及其提升效率的原始动力所在.第二步讨论影响效率的主要构成部件,这些部件对效率的贡献大概有多少,以及怎样对每个部件的效率进行优化和提高.第三个方面是展望如何进一步降低TCO成本,其中将涉及更先进的数据保护机制.接着会对存储的各种新模式进行一定展望,最后做一个总结. 下表总结了OCP的设计理念,其中

从一个程序员的角度看——微信小应用(含直播视频)

前言: 最近初步了解了一下微信小应用,APP端的同事也非常感兴趣,于是在公司内部做了一个小小的分享,分享的过程中有很多讨论内容,大家也是非常感兴趣和有自己的看法,当时"混乱"的场面好几次我都没有把持住.以下内容部分来自于内部分享所用ppt.文章对微信小应用的使用做了展示性介绍,并简单介绍了代码结构.后端交互方法.最后提出一些总结和疑问.文章内容比较主观,有不对的地方欢迎大家指出纠正. 前段时间微信小应用公开内测,在朋友圈火了一把,各种阐述疯狂蔓延,干掉APP之类的说法比较突出,确实达到

一起talk C栗子吧(第一百三十二回:C语言实例--从内存的角度看进程和线程)

各位看官们,大家好,上一回中咱们说的C程序内存布局的例子,这一回咱们说的例子是:从内存的角度看进程和线程.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们刚刚介绍完C程序的内存布局,我们趁热打铁,从内存的角度来分析一下进程和线程. 不管是进程还是线程,他们都会加载到内存中才能运行,因此他们在内存中的布局和其它C程序的内存布局完全相同.进程和线程的内存布局也分为代码区,数据区,堆区和栈区. 对进程来说,父子进程只共享代码区中的内容,父子进程拥有各自的数据区,堆区和栈区.而且它们只能

从大数据分析的角度看世界

“大数据”目前是一个比较热门的词汇,出门在外大家都在谈“大数据”,过去由于缺少全面和完善的数据,大数据自身的价值被忽略,没有达到应该体现出来的价值,如今,各种企业都在依托大数据及大数据技术,实现利益最大化. 一.大数据分析在生活中的体现 对于普通老百姓来说,大数据分析也不神秘,在生活中完全可以利用它来解决不少困惑. 长期喝纯净水对身体有没有害?各方观点莫衷一是.还是从大数据分析角度看,美国人已经喝了四十多年的纯净水,也没发现长期喝纯净水给人体带来什么危害.所以可以放心的喝纯净水!例如喝可乐到底有