又回到最初的起点:软件和程序

1. 软件和程序

每每提到“编程”这个词,大家都会觉得这是件高端、神秘的事,或者会皱皱眉头,觉得这肯定是个挺难的事儿吧?

基本所有与编程没有打过交道的人,都认为编程似乎被一群秃头的程序员垄断了,是一种旁人无法介入的专属行为。

而就在这一两年里,“少儿编程”的概念又伴随着素质教育、stem 教育迅速崛起。好像一时之间,连小学生、幼儿园小朋友都开始学编程了。而且还有不少幼儿型选手拿了不少编程大奖!

所以,编程到底是个啥玩意儿?是不是真的有这么难呀?

2. 软件是什么

要说编程,首先就要先说一说计算机。

计算机大家都不陌生吧,就算是一个完全不懂编程的人,也每天会用到——工作中用来处理资料、文档的台式机、笔记本,看剧的 pad ,日常不离身的智能手机,这些其实都是计算机。

如果我们把计算机拆开,看到的是若干电路和电子元件。把这些东西组合起来,通电开机,就可以用来读新闻、刷抖音、听歌、 写文章、P照片、打游戏、看 idol ,发微博/微信……了。

你有没有想过,计算机能做这么多事,仅仅是因为有那些电子器件吗?当然不是!

我们新买来一个智能手机,上面的 App 少得可怜,最初的时候啥也干不了。需要我们自己去下载各式各样的 App 。

enter image description here

这些 App 又被称作应用软件,这些 App 正是通过编程制作出来的。

手机 App 是软件,台式机上的各种应用(浏览器、文本编辑器、图像处理工具等)是软件,嵌入式系统中的应用(汽车的防锁死刹车系统、核磁共振成像设备、大型固定装置如交通灯、工厂控制器,以及在非智能手机时代曾红极一时的 mp3 机中的播放器和手持 PDA 中的应用等)也是软件。

软件可以简单的被认为是一组程序,这组程序相互配合,通过接受输入、产生输出,来为我们每一个人解决问题或完成任务。

2.1 互联网软件

日常生活中,你打开微信,在朋友圈发了一张自拍,并精心配上准备好的文案 ”今天也要做个精致的猪猪男孩/女孩“ 这样的文字,然后点击 “发表” 按钮。

你的朋友圈里就显示出了你刚发的图和文字,你的朋友刷到了你的朋友圈顺手给你点赞评论一条龙。

这几个步骤对你而言可能只要几秒钟,但是在这样一个简单的过程背后,却有多个程序在为你提供服务。

enter image description here

首先你点击 “微信” 的绿色图标,然后点 “发现”->“朋友圈”->朋友圈右上角的小相机图标,到相机选择照片,输入文字,最后点击“发表”。

这个过程看起来是你在干活,其实微信软件也没闲着:

  1. 微信的前端程序在接受你的输入(每次点击按钮、上传照片和键入文字都是用户输入),将每一次输入记录下来。

  2. 在你点击了“发表“之后,微信前端将之前的输入打一个数据包,注明这是你新发的朋友圈内容,通过互联网发送给后端程序。

  3. 后端程序接收到了前端的发来的 “发朋友圈” 请求之后,会读取数据包,从中取出你的照片和配图文字,把它们记录(存储)下来。

当你点完 “发表“ 返回到朋友圈之后,看起来你并没有再做什么事情,然而这个 ”进入朋友圈“ 的动作就表示了你要阅读朋友圈内容。微信又会有一系列动作:

  1. 微信前端程序又会向后端程序发出一条请求,要求阅读最新的朋友圈内容。

  2. 后端收到这个命令后,会把最新的朋友圈内容打一个数据包发送回来。

  3. 前端接收到这个数据包后,会将其中的内容(图片、文字)按特定的格式显示出来。你通过手机屏幕看到的,就是这种显示的结果。

上述过程其实经过了简化,实际情况要复杂得多。

目前,我们暂时掌握前端、后端和通讯的概念就好。几乎所有的互联网应用都涉及到这几个概念。

enter image description here

我们手机上的 App 经常要更新,每次我们更新的都只是前端程序而已,更新前端后,经常会发现新的版本显示文字、图片的样式不同的,新的版本又加入了新的功能(比如新的页面、新的按钮)等变化。

实际上,一般互联网软件后端程序更新得往往比前端更频繁。只不过后端程序部署在开发软件的公司或个人自己的服务器上(或者第三方的云服务器上),更新的过程不被用户察觉而已。

因为内容来自于后端,所以,就算你的手机上有前端程序,如果网络不通,或者后台宕机,也无法使用该软件。

这是我们现在日常用到最多的互联网软件,大概就是这样运作的了。

2.2 单机版软件

在互联网时代到来之前,我们用的软件基本是单机版软件,比如常用的 Word , PowerPoint , Photoshop 等——当然现在这些工具也互联网化了。

单机版软件需要专门的安装程序(还记得光盘、软盘吗)一次只能安装到一台机器上(单机版软件流行的时候大家基本都在用台式机),软件中所有的程序都在一台机器上运行。

那个时候,软件是要钱的,一张光盘理论上只能安装一台机器,因为你买的是 license(安装许可证)——一张光盘都好贵的,当年微软的办公套件一套就要成千上万的。

所以当初在学校和普通家庭里,流行的是盗版和破解版……回首看好像是很久以前了,其实也不过就十来年前而已。

3. 程序又是什么?

到底什么是程序呢?

程序接受输入,根据输入完成某些特定任务后产生输出——你有没有发现,这么听起来和软件不是一样嘛?

确实,无论程序还是软件,都会接受输入,产生输出。

软件是由若干程序组成的,在多个程序组成的软件中,具体某一个程序都有输入和输出。但往往这个程序接受的不是全部用户输入,或者产生的输出也不是全部用户输出,而是输入或输出某些中间结果,经过几个程序的共同努力,才将原始输入转化成了最终成果展示出来。

打个比方,软件就像一条完整的流水线,能够把原材料加工成最终产品,一个个程序则像其中的一道道工序,这些工序的联合协作,完成了整个生产过程。

enter image description here

如果软件的功能非常简单,一个软件也可以只有一个程序。

理论上讲,其实很多全部功能都安装部署在一台机器上的软件(单机版软件),都可以把所有功能写在一个程序里。

但是在现实当中我们会故意不这样做。原因是,复杂软件的功能太多,如果所有功能都用一个程序来实现,会导致这个程序的源代码过多,程序结构很难清晰,管理和维护起来的成本太高。

等等,这里怎么又出来了一个“程序的源代码“,它和程序不是一回事嘛?且听下回分解啦!

4. 分享交流

我们为系列读者创建了微信交流群,以方便更有针对性地讨论专栏相关问题。入群方式请关注公众号:AI悦创「博客文章右边二维码哦!」加小编好友,小编拉你入群!(记得备注来意哦!)。

阅读文章过程中有任何疑问随时可以跟其他小伙伴讨论,或者直接向作者提问(作者看到后抽空回复)。你的分享不仅帮助他人,更会提升自己。

AI悦创·创造不同!
AI悦创|黄家宝 » 又回到最初的起点:软件和程序

Leave a Reply