什么是软件?

到底什么软件? 显然,这不是您可以指出的物理问题。 如果我想象有一个特定的软件,该软件在哪里停止而没有软件开始?

回到软件? 什么是软件? 也许是编译的二进制工件? 可执行文件,DLL或JAR文件。 但这真的是什么软件吗? 软件是生机勃勃,不断发展,不断变化的事物–单个二进制文件只是给定时间点的快照。

也许然后软件包括源代码。 没有源代码,我们所拥有的就是死软件-永远不会(轻松)更改的单个二进制文件。 当然,从理论上讲,我们可以对类似于二进制文件的源代码进行逆向工程,但是对于任何大小合理的软件,如果没有原始源代码,那么进行一些琐碎的改动是否可行?

即使有了源代码,我是否也可以拿起Chrome或Excel的源代码并开始破解呢? 似乎不太可能–我需要花一些时间熟悉代码并阅读文档。 因此,也许文档是制造软件的一部分。

比起阅读文档,我会和已经熟悉该代码的其他开发人员进行交流,他们甚至可以向我解释它并回答我的问题。 也许甚至更重要的是,开发人员将能够解释为什么某些事物是它们的样子–这讲述了该软件的故事,其实现方式的历史。 一路走来的决定,犯下的错误和未走的路。

因此,开发人员对软件如何工作以及如何到达那里的知识是组成软件的一部分。 还有哪些其他知识组成软件? 发布新版本的过程如何? 没有这些知识,修改后的源代码将毫无用处。 实际上,实时软件的新版本需要获得用户的控制。

当涉及到与现实世界的交互时,定义软件的部分内容是什么? 例如,以优步为例–如果没有实体汽车,该软件有什么用? 从某种意义上说,物理汽车及其驾驶员是软件堆栈的一部分。

但是,软件是否仅是单一事物,单一规模? Web前端是单个软件吗? 没有后端服务,它将变得无用。 这会使它变成一两个软件吗?

随着软件的发展怎么样? 它会变得与以前的软件有所不同,独特吗? 原始版本是该软件历史的一部分,但没有区别。 只有对旧版本进行了分叉,我们才能最终获得新的软件-在这一点上,他们的历史各不相同。 随着时间的流逝,它们将适应微妙的上下文,具有不同的依赖关系,不同的决策和目标:它们将成为两个不同的软件。

如果软件被重写怎么办? 想象一下,负责后端服务的团队决定解决其技术债务问题的唯一方法是重新编写。 因此他们开始从头开始重写它。 最终,他们切换到新版本–旧版本已存档,仅出于好奇而保留在版本控制中。 这是新软件吗? 还是逻辑上只是一个新版本? 软件堆栈仍然执行相同的总体目的,仍然只有一个后端服务。 原始的,负债累累的版本已成为软件历史的一部分:我们没有两个系统,只有一个。 这表明实际的源代码不是软件的来源。

如果软件不是源代码,那是什么? 尽管拥有团队成员可以继续使用该软件,但它并不是拥有它的团队。 也不是文档-可以重写文档,并且软件可以继续使用。 软件是由其上下文定义的,但不仅仅是其上下文和过程。

软件就是所有这些东西,没有一个。 就像标致一样,软件是我们大家都信奉的小说。我们都假装我们都知道我们在谈论“软件”时的意思,但是实际上是什么呢?

如果说软件是什么,那就是故事。 这是代码如何到达今天的历史:已做出的决定,代码所处的上下文以及与之交互的组件。 文档化是为了保留此历史记录; 处理尝试将汲取的教训整理成文。

如果软件是一个故事,那么团队就是使故事保持鲜活的媒介。 如果您曾经看过新团队接管旧版软件时会发生什么,那么您将知道故事结束时会发生什么:僵尸软件,不是很死但还不是很活跃; 仍在发展和变化中,但是充满任何变化都可能带来灾难的风险。

什么是软件? 软件就是一个故事:无论它是什么,都将成为一种现状。

翻译自: https://www.javacodegeeks.com/2018/09/what-is-software.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值