对软件认知层次的思考

简介: 对于软件的认知层次代表着不同的专业程度,也代表着不同层次需要完成的工作的不同。在架构设计过程中需要有效的利用分层的认知,对不同层次的问题进行有针对性的解决确定。

1. 背景

在架构设计与实现过程中,需要对软件系统做全局的分析与考虑以求全局的认知。在分析和考虑过程中软件的不同层次都有独特的问题。为了在设计阶段做出更全面的决策,以解决绝大部分实现过程中可能遇到的问题,需要对软件开发过程中不同的层次的工作内容进行具体的分析。

所以需要对软件设计与决策提供全局框架,并把握每个层次的关键点。
软件层次

2. 层次

可以将软件的实现过程分为如图的几个层次,软件从业人员也可以根据图中的层次进行划分。对于软件实现层级的划分也印证了现在的软件设计与实现已经超越了算法和数据解构,对系统结构的设计与治理成为架构设计的重点。分层结构如上图所示,软件分为7个层次:

2.1 代码=数据结构+算法:

在学校学软件的时候有一种普遍的认知:软件=算法+数据结构。在当时(零几年)没有微服务、没有DevOps、没有超大互联网企业,那会对于软件的认识可能就是单体,mfc这种模式的软件。所以,将软件认为就是数据结构加算法即可解决绝大部分问题。

其实这样的认知也是受到时代的局限。在大部分软件都是小型的C/S、B/S的时候,当时最大的问题还是怎样开发一套业务系统的年代,不会涉及到分布式系统的情况下能做出来就很不错了。更不用谈对于软件的认知。

2.2 程序=代码+设计模式:

在代码使用设计模式。为什么?

软件规模在不断的扩大,不断的发展。而在这个过程中遇到的规模化代码的管理问题,可扩展问题,可修改性问题。急需为软件的持续发展提供一种解决方式,让软件规模增长提供管理的方法。

这时小规模的问题通用解决方案可以使用设计模式进行管理。因为每一个设计模式都是解决代码规模化的一部分问题。

2.3 模块=程序+分包模式:

这是伏羲一画开天式的创举,但很少有人提到分包模式。因为现在的mvc,mvp,acp等已经很流行而且已经深入人心。所以分包模式对于现在的开发已经很平常。但是分包模式是第一次进行了高内聚低耦合的实践。

2.4 软件=模块+架构模式:

设计模式之上的架构模式。为什么?

到现在为止并没有对软件系统中的工作内容进行划分,例如:MVC的各种变种。软件层之下的主要是管理代码,代码编写的内容。而架构模式管理的是对于复杂业务下模块的拆分,模块的关系,代码的复用的工作。这部分内容之所以需要做是因为意识到软件的工作中并不是所有的工作都需要用到算法和数据结构,需要将不同的业务之间隔离并确定业务之间的关系。

所以架构模式负责的是给业务分包、模块。让软件中的每一个模块都可以做到单一职责。

2.5 系统=软件+架构风格:

架构模式之上的架构风格。为什么?

上一个层次中已经说明通过使用分包、模块化的方法进行模块的职责的划分。那么一个系统应该以怎样的方式将系统中的服务链接起来。

在常见的架构的定义中有一种:一个程序或计算机系统的软件体系结构包括一个或一组软件构件、软件构件的外部的可见特性及其相互关系

2.6 平台=系统+企业架构:

架构风格之上的企业架构。为什么?

软件的最终目标是什么?按照作者理解应该是解决人们现实中的切实问题,不管是提升效率、降低成本、提升便利性还是提供特定帮助都是可以通过计算机的计算能力来解决的事情。抱着这个目标去实现

传说中的EA,它最主要的解决问题是:为了_解决_IT与业务对齐、业务和战略对齐_问题。_

2.7 企业架构

企业架构有多种方法论,也有不同层面的解决方案。例如:EA可以有togaf,zachman,dodaf等。产品开发方法有ipd,精益等方法。

我个人一般喜欢以:理想、目标、原则、方法这几个方向去分析一个公司是否真正的解决了现实问题。并根据四个元素去确认公司的目标与个人目标的一致性。

3. 总结

每个层次的认知都是对的,并没有错误一说。这里最主要的区别是你处在什么阶段就会认知到什么样的软件。行业所处的阶段也会影响从业者对于这个行业的认知,就像文中所说的一样认知是受到时代的局限。

就像《演进式架构》中所说的:适度的重复是有益的。而不像之前人们认为DRY,不能重复任何东西。所以,站在邓宁克鲁格的开悟之坡的人并不会去嘲笑处在愚昧之峰的人。

再比如《软件架构:架构模式、特征及实践指南》中所说的:适合的才是最好的。很多时候没有对错,只有合适,在马丁富勒的《单体优先》中也有类似的描述。

在这里说这么多要证明的是:认知处在任何阶段都是正常的,不过需要不断的提升认知

目录
相关文章
|
5月前
|
网络协议 Python
系统工程是一种跨学科的方法论,旨在通过分析和设计系统的各个组成部分、组织结构、信息流和控制机制,以实现系统的整体最优运行。
系统工程是一种跨学科的方法论,旨在通过分析和设计系统的各个组成部分、组织结构、信息流和控制机制,以实现系统的整体最优运行。
|
存储 架构师 测试技术
「企业架构」企业架构和系统工程:组件或关系的准则
「企业架构」企业架构和系统工程:组件或关系的准则
|
存储 NoSQL BI
【企业架构】描绘未来:使用能力、产品和技术路线图来调整企业和执行战略
【企业架构】描绘未来:使用能力、产品和技术路线图来调整企业和执行战略
|
供应链 数据可视化 BI
【企业架构】描绘未来第 2 部分:定义能力路线图
【企业架构】描绘未来第 2 部分:定义能力路线图
|
架构师 前端开发 测试技术
为了成为一名架构师必须稳扎稳打,软件架构设计的模块划分
之前,我们在开发的时候总是惯性思维的以某张业务表的维度进行三层结构的功能开发,没有去思考他们功能模块间的关系,只是为了完成目标而进行开发。
|
运维 架构师 测试技术
软件设计的方法论:软件为什么要建模?
软件设计的方法论:软件为什么要建模?
363 0
软件设计的方法论:软件为什么要建模?
《实践者的研究方法》—— 第1章 软件的本质 1.1 软件的本质
本节书摘来自华章出版社《实践者的研究方法》一书中的第1章,第1.1节,作者布鲁斯 R. 马克西姆(Bruce R. Maxim)郑人杰 马素霞,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 第1章 Software Engineering: A Practitioner’s Approach, Eighth Edition 软件的本质 要 点 浏 览 概念:计算机软件是由专业人员开发并长期维护的软件产品。
2162 1
|
运维 架构师 测试技术
从架构理解价值-我的软件世界观(转载)
程序员的迷茫-找寻不到价值 在浩大的软件世界里,作为一名普通程序员,显得十分渺小,甚至会感到迷茫。我们内心崇拜技术,却也对日新月异的技术抱有深深的恐惧。技术市场就像这喜怒不定的老天爷,今天下个大数据雨,明天挂个人工智能风,面对琳琅满目的技术浪潮的冲击,程序员难免深感无力,深怕错过了技术潮流从而失去了职场竞争力。
1248 0