第1章《启蒙》. 3.什么是硬件、软件、程序
1. 什么是硬件?什么是软件?
我坐在电脑前发呆了半个小时,还是没想出如何给二者下定义。
美国有个电脑神童说:“凡是摔到地上会坏的就是硬件”,似乎有道理,但一旦硬件坏了,硬件所承载的数据,好像也会“消失”。想一想,新买的数码相机没用就摔坏是一种心疼,和女神春游拍了很多照片,回来的路上给摔坏了,又是一种心疼。那些照片数据算硬件还是软件呢?
还一种说法是:看得见摸得着的为硬件,看不见摸不着的为软件。刚觉得它说得不错,但马上我就发觉了它的破绽:我使用苹果平板的操作系统,它就在屏幕上,我看着它,感觉界面优美;我触摸它,感觉操作方便……
无奈之下,我搬出辞典,它说:
“硬件:计算机及其它直接参与数据运算或信息交流的物理设备” 。可见,硬件就是设备。平常我们生活中的各种设备,洗衣机、冰箱、电视、螺丝刀、钳子等,都是硬件。
“软件:控制计算机硬件功能及其运行的指令、例行程序和符号语言”。指令、程序和符号语言是什么且不说,至少我们得知:软件是用来控制硬件的运行的。
这么一说,前面以汽车为例所提到的“输入输出设备:方向盘、刹车板、油门……”是硬件;而“输入输出数据”,即:人类转动方向盘的力度、速度、扭矩,踩油门或刹车板时脚的行程这些数据,以及这些数据通过硬件展现出来的汽车各类性能,属于软件范畴。表面上看是硬件控制汽车的运行,但其实是这些软件数据控制着车。
再者,如何掌握好“力度、速度、扭矩、行程”这些数据的输入,以及它们之间的配合,叫做驾驶技术,也是一种软件。另外,在茫茫大草原、在高山峻岭以及在周五下班的城市里开车,你所能使用出的驾驶技术也不相同。因外部环境限制带来的各种“驾驶规则”,也是软件。
想要成为一名驾驶员,当然要学习和汽车自身紧密相关的驾驶技术,当然也要学习用以限制你如何开车的交通规则,当然也要学习一点汽车的硬件知识。
《白话C++》当然不能只教“C++”这门语言的课,它还得讲点编程的规则,还得讲点计算机硬件的知识。
所以,您应该不会太反感一本讲编程的书,为什么要有一个“启蒙”的章节呢?为什么不能迅速深入痛快地,说说C++的那些事儿呢?
我才不呢,既然是要学习编写程序,那我们就得说说什么叫“程序”。
2. 什么是程序?
计算机程序是一组指令(及指令参数)的组合,这组指令依据既定的逻辑控制计算机的运行。
2.1 指令
让我们来想象一个游戏。
游戏中有两个人,其中一个双眼用布蒙上。另一个人是你。你不哑,他不聋。场地中混乱地摆上许多啤酒瓶(称为“雷区”)。游戏任务是由你发号施令,指挥被蒙眼者从场地的一端穿行到另一端,过程中不能碰倒啤酒瓶。
现在,你就会明白什么叫“指令”。指令就是一套符号,这套符号的含义,你懂,他也懂。
你会根据现场情况,向他发出类似这样的指令:“向前2.5步、向左1步,向后1.5步,向左0.5步,向前4步,停!”。
“向前”,这就是指令。“2.5步”,这就是指令所需要的参数。在不需要具体区分时,我们也往往将“指令和指令的参数”有时通称为“指令”,有时通称为“数据”。
不同的处理器往往会有自己的一套指令(称为指令集)。如果把锤子当作一个处理器,它的指令应该是“锤”。剪刀则是“剪”。换成汽车呢?如果你是初学者,正好,你的师傅坐在副座上,你就有幸听到相对复杂的指令了:“左转!右右右!踩离合!油门!减档!刹车!停!!滚!!!”。最后一个指令很明确不属于汽车的指令集。
2.2 指令兼容
对于计算机而言,不同的“处理器”类型——不同产家生产的处理器,甚至同一产家生产的不同版本的处理器,往往都会有不同的指令集合。为了商业利益,有些厂家间就会进行“联衡”,相互之间保持尽量大的兼容,当然也各有留了一手特定指令。典型的如Intel和AMD两家CPU产商。当然也会因为厂商策略,产品定位等不同,而无法实现兼容的指令集合,比如当前智能手机使用的的ARM-CPU,就和桌面PC机CPU的指令不兼容。
我们学习C++的推荐环境,是桌面PC,包括笔记本,所采用的CPU基本使用Intel或AMD等厂商的生产的CPU,这一类指令集称为“80x86 CPU 汇编指令”。
2.3 程序 = 指令的逻辑组合
这是我们给出的第一个回答“计算机程序是什么”的表达:
“计算机程序是一组指令(与其所需的参数),这组指令依据既定的逻辑控制计算机的运行。”
在这个定义中,有三个重要的概念。其中,我们谈到了程序中的“指令”,但是我们还没有谈到“组合”及“逻辑”。
继续前面的“雷区安全穿越”游戏。
理论上,如果场地不变、酒瓶摆放位置不变、参与人不变,那么作为指挥者,你完全可以把第一次的指挥过程记录在案,形成一套“指令的组合”,如下图:
(图1-2 程序 = 指令的组合)
看,这就是程序!一组共六个的指令(及其所需数据)的组合。六步之间的组合逻辑又是什么?就是要帮助你成功地走出“雷区”的逻辑。这个最终目标,通常我们称为“业务需求”。
指令组合的结构又是什么呢?首先,指令和指令之间有次序关系,游戏者必须先执行完第1步,再做第2步……乱着来这个程序就完全失效了。从本例上看,就是要顺序执行,但有时会碰上更复杂的雷区,就有可能用上更复杂的结构,比如“重复”。发指令者会在某一种这么说“请重复前面两步三次”。在计算机程序中它叫“循环结构”。
在以后的学习过程中,很多时候我们认为程序就是指令;同样很多时候,我们会觉得程序就是逻辑。
3. 程序 vs. 软件
还有很多的时候,我们也不区分“程序”和“软件”二者。也许前者更趋于抽象,而后者趋于具体。比如我们在写那些表达我们的思想逻辑时,我们喜欢说“写程序”;而当程序完成,可以待价而沽时,我们称它为软件产品。
下一节:什么是编程语言
我们要对计算机下达指令,人类这一套得天独厚有悠久历史的自然语言,玩不转了,怎么办呢?解决这一问题所要做的第一件事就是:制定“机器语言”——机器有了语言,我们就可以和它亲切地交流……
“等等!”突然有个同学没举手就站起来要求发言:“机器,没有生命的东西!小猫小狗有语言倒可以接受,机器也有语言,还要我们去学习,这亵渎我作为人类的尊严!我要退学!”。
得解开这个结解,不然自尊心强的同学心生学习障碍。
第1章《启蒙》. 3.什么是硬件、软件、程序相关推荐
- 第十九章 Chisel基础——常用的硬件原语
前两章介绍了基本的数据类型和硬件类型,已经足够编写基本的小规模电路.至于要如何生成Verilog,会在后续章节讲解.如果要编写大型电路,当然也可以一砖一瓦地搭建,但是费时费力,完全体现不出软件语言的优 ...
- 计算机组成与设计 硬件/软件接口 Risc-v 版
第一章 计算机抽象及相关技术 1.1 引言 1.1.1 传统的计算机应用分类及其特点 个人计算机(Personal Computer, PC) 通用,各种软件;受成本.性能权衡 服务器(Sever C ...
- 计算机组成与设计硬件/软件接口 (MIPS版)
买了一本<计算机组成与设计硬件/软件接口(MIPS版)>,非科班出身的我,从事计算机行业已经8年了,却对计算机的基础什么也不专业.有点惭愧,因为对时间的流逝而感到遗憾!行了,但有言说,多无 ...
- 图书推荐|计算机组成与设计(原书第5版) 硬件软件接口 RISC-V
计算机组成与设计(原书第5版) 硬件软件接口 RISC-V 这本书是引进过来的,本系列图书广受盛誉,有两位"图灵奖"得主撰写,书的权威性及细致性不言而喻,两位作者的履历也是让我们 ...
- 冯诺依曼计算机程序及其执行,第4章冯.诺依曼计算机:机器级程序与其执行练习题答案解析...
第4章冯.诺依曼计算机:机器级程序与其执行练习题答案解析 (20页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 第 4 章 冯.诺依曼计算 ...
- 如何去设计硬件与程序之间的通信协议
硬件跟程序之间通信就是传递的byte数组,所以需要定义规则进行解析,这里的规则指的就是协议. 协议是由硬件工程师跟软件开发一起制定的 农业项目通信格式(沙盘专用),沙盘采购的传感器跟后续使用的传感器不 ...
- )类 新建javafx程序时_第三章 第一个OpenCV的JavaFX应用程序.md
# 第三章 第一个OpenCV的JavaFX应用程序 --- ***注意***:我们假设您现在已经阅读了之前的教程.如果没有,请在[http://opencv-java-tutorials.readt ...
- Atitit 硬件 软件 的开源工作 差异对比
Atitit 硬件 软件 的开源工作 差异对比 1.1. 模块化,标准化,以及修改的便捷性1 1.2. 生产和发布成本 1 1.3. 3. 入行门槛搞2 1.4. 在软件业极度发达的今天,任何具 ...
- μC/OS-II硬件软件体系结构
μC/OS-II硬件软件体系结构 转载于:https://www.cnblogs.com/markmin214/archive/2013/04/03/2997343.html
- 计算机软件系统课程导入,中学信息技术 计算机系统的组成课件 硬件软件导入恰当...
<中学信息技术 计算机系统的组成课件 硬件软件导入恰当>由会员分享,可在线阅读,更多相关<中学信息技术 计算机系统的组成课件 硬件软件导入恰当(20页珍藏版)>请在人人文库网上 ...
最新文章
- 社区智能家居产品研发商西谷数字新三板挂牌上市
- 科学家从脑电图中解读大脑的运动意图
- 【代码笔记】iOS-获得设备型号
- gdb 设置一个函数, 出现4个断点的原因
- 计算机网络第六章ppt课件,计算机网络与通信(第6章).ppt
- SQL Server 2017:列存储就地更新
- python mock接口返回数据(转载)
- java 动态代理 jdk为何比cglib效率低 原理总结
- 基于文本语义的智能问答机器人——工业应用
- 5G WIFI DFS介绍
- 分析微信聊天记录(2)——分析单人的微信聊天记录
- OpenVSwitch的端口Port学习使用
- 手把手教你用Java获取IP归属地
- 在Fcitx5中使用自定义双拼方案
- AUTOSAR CanNm Nm Configuration
- layui通用后台模板
- html css 基本词汇
- win10计算机拒绝访问,Win10文件访问被拒绝如何解决?
- c# .net接口协定Contract
- UVA1149 装箱 Bin Packing 题解
热门文章
- Java面试常见问题及答案
- 红帽RHCE之Ansible-6-playbook实验
- 手机照片删除了怎么恢复?解析恢复过程
- 德制语音设备现秘密后门、APT正在利用最新漏洞|12月22日全球网络安全热点
- 新纪元出纳专用软件 v5.5 绿色
- 发一个色彩学的转帖.相当有感触
- [系统操作][MS Office]Excel在无任何操作的前提下关闭文档却询问是否保存
- keil软件调试(Debug)仿真教程(软件调试和硬件调试的区别)及常用调试按键详解
- 【数据预处理】基于Kettle的字符串数据清洗、Kettle的字段清洗、Kettle的使用参照表集成数据
- 水表读数图解_水表怎么看吨数 水表读数图解 水费异常超太多怎么办