首页 > 其他分享 >码农的灵魂拷问之(二)什么是应用软件

码农的灵魂拷问之(二)什么是应用软件

时间:2022-11-06 21:34:48浏览次数:35  
标签:拷问 应用软件 系统软件 硬件 world 软件 我们 码农

什么是应用软件?这是一个看似很无聊很没有营养的的问题。然而如果不能立刻回答出来,则这意味着一个更加有趣的事实:作为一个程序员,天天在开发程序,然而却无法解释明白是应用软件,这说明这个问题看似无聊实则水很深,是一个值得深思的问题。

在回答这个问题之前,我们先简化一下。如果问软件是什么,作为一个有实际工作经验的程序员,即使无法对软件给出清晰的定义,但是他至少能识别什么东西是软件,什么东西不是。所以在此,我们不必去纠结软件这个术语,因为能区分什么是什么不是就说明我们已经理解了这个概念。

然而,应用软件是什么?这个就比较难以回答了。我们也不一定分的清楚什么是应用软件什么不是应用软件。作为一名单纯平凡普通守法的程序员,上百度百科搜一下应用软件这个概念,发现是这么解释的:

应用软件(Application)是和系统软件相对应的,是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的应用程序的集合,分为应用软件包和用户程序。应用软件包是利用计算机解决某类问题而设计的程序的集合,多供用户使用。
应用软件是为满足用户不同领域、不同问题的应用需求而提供的那部分软件。 它可以拓宽计算机系统的应用领域,放大硬件的功能。

第一句话咱就看不懂,因为它说应用软件是跟系统软件相对应的概念。然而什么是系统软件?幸好,百度百科在应用软件的词条下贴心给出了解释:

系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统;负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。

那么现在懂了吗?说句实在话,我不懂。因为从百度百科上引用过来的这两段话,有几个明显的问题:

  1. 我们都知道软件是人直接或间接写出来的,那么无论系统软件还是应用软件,它们必然都是人用程序设计语言编制出来的。哪怕是拿电话机按0101写程序的大神,那也是在使用机器语言编写程序,这仍然逃不开程序设计语言的框子。因此,是不是用程序设计语言开发出来的,这不能作为区分应用软件还是系统软件的依据。
  2. 系统软件的概念解释相对清晰,但也不算太清晰。比如它提到监控、维护计算机系统,众所周知,360安全卫士可以监控咱们的计算机系统免受病毒侵害,那么它算不算系统软件呢?如果它算,同时它又是用户可以使用的软件,那么它到底是个什么鬼?

正是因为这些自相矛盾或存在歧义的概念定义,使得我们搞不懂什么是应用软件。要搞清应用软件到底是什么,我们需要先回答另一个极为重要的问题:我们开发的软件是如何操控硬件的?

public class Main {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

以上是一个平淡无奇的java hello world示例代码。运行它可以在屏幕上输出hello world这行字。然而为什么它可以控制屏幕显示这行字呢?

此时我们不必翻开厚达千页的计算机科学系列丛书去寻找这个答案,我们可以从非常简单的常识去倒推背后的原理。具体如下:

  1. 我们都知道软件可以控制硬件,那么同样我们可知控制屏幕显示什么也一定是通过软件实现的。
  2. 不同的编程语言都可以控制屏幕输出hello world,但是他们的具体写法各不相同。
  3. 正是因为我们调用了System.out.println("hello world");屏幕才会输出hello world,所以我们知道println方法一定会直接或者间接的控制屏幕输出。
  4. 查看这些编程语言的具体实现,比如java,会发现println方法找不到具体实现的源码。

结合以上四点,我们可以合理的猜测,我们所使用的常规的高级编程语言,都可以间接调用硬件。但是我们在开发程序的时候,通常都无需关心控制硬件具体是怎么实现的,只需要调用标准库给我们提供的各种方法或函数即可。基于此,我们可以进一步猜测,无论是go还是java开发的程序,尽管源码不同,但是运行到到操作硬件的指令部分时,他们应该是执行的一样的代码,这样硬件才能表现出相同的行为。

如果觉得上面的推理不一定是对的,我们还可以观察在宏观层面的软件设计来佐证这个猜想。例如java web服务提供rest接口,无论是浏览器还是手机APP,它们都可以通过网络通信来调用这个接口,完成一样的功能。客户端的实现技术编程语言各不相同,但是它们都能调用到相同的后端服务接口。提供api接口供上层代码调用这个思想,放之四海而皆准。

分析到这里,对于应用软件与系统软件的边界,我们应该相对清晰了。系统软件可以直接操控硬件,这是百度百科说的,我们可以信。基于前面的api调用设计思想,系统软件它可以把操作硬件的部分封装成api,供上层软件调用。而这个上层软件,就是应用软件。

标签:拷问,应用软件,系统软件,硬件,world,软件,我们,码农
From: https://www.cnblogs.com/yish/p/16864160.html

相关文章

  • PlayCover for Mac(Mac电脑全屏运行ios应用软件)
    PlayCover是一款彻底解放苹果电脑的iOS软件安装工具,无需付费,操作简单,可以安装ipa文件,可以通过鼠标、键盘和控制器在Mac上全屏运行iOS应用和游戏,并且支持M1。PlayCover......
  • VMware Horizon 8 2209 - 虚拟桌面基础架构 (VDI) 和应用软件
    请访问原文链接:https://sysin.org/blog/vmware-horizon-8-2209/,查看最新版。原创作品,转载请保留出处。作者主页:www.sysin.orgVersion2209DocumentationRelea......
  • 移动应用软件常见的操作系统
    随着互联网技术的进步和软件形态的不断发展,移动应用软件(或称为移动终端软件)已经成为普通大众广泛使用的新型软件。因此,移动应用软件质量越来越受重视。移动应用软件与传统......
  • 移动应用软件的主要特点
    总体来说,移动应用软件是运行于移动设备上的一类新型软件,一般通过图形用户界面操作和传感反馈作为主要的软件交互方式。以Android应用软件为例,其主要特点包括:(1)多样的交互方......
  • 移动应用软件测试的手段
    ​在移动应用软件行业,人工测试仍然是开发人员和测试人员使用最普遍的测试方法。人工测试比较灵活,能够快速验证软件功能正确性,但往往人力成本较大,测试效率较低。为此,脚本编程......
  • 移动应用软件测试遇到的挑战
    脚本编程测试是目前业界实现移动应用软件测试,并提高测试效率的主要手段,在很大程度上降低了手工测试的成本,但在实际使用中仍然存在着一些局限性。此外,移动应用软件的测试也受......
  • Java注解(1):码农的小秘
    很多码农在写代码的时候不太爱写注释,结果任务一多,时间一长,需求一改,就完全不知道当初自己都干了些啥了。好在现在大多数编程语言都有注释功能,能够在代码里面做一些备注,不至......
  • 码农也要注意身体健康 q(≧▽≦q)
    说一下自己见证的有关身体健康的事情(大部分都是我同学的事):平日不运动的人,突然剧烈运动,有可能得肌酸肌炎,严重可能休克没得过水痘的人要小心重大考试前被传染,但得过之后就......
  • 灵魂拷问:高频一定是高速吗?
    ​“高频”与“高速”在工程应用中常常作为同一个词来理解,即:快天下武功,无坚不破,唯快不破!然而实际上,高频与高速两个概念有共性也有异性,虽然我们日常沟通中,往往混用这两个词,但......
  • 线上服务宕机,码农试用期被毕业,原因竟是给MySQL加个字段
    1.问题:怎么给线上表加字段?工作中最常遇到的问题,怎么给线上频繁使用的大表添加字段?比如:给下面的用户表(user)添加年龄(age)字段。CREATETABLE`user`(`id`intNOTNUL......