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.什么是硬件、软件、程序相关推荐

  1. 第十九章 Chisel基础——常用的硬件原语

    前两章介绍了基本的数据类型和硬件类型,已经足够编写基本的小规模电路.至于要如何生成Verilog,会在后续章节讲解.如果要编写大型电路,当然也可以一砖一瓦地搭建,但是费时费力,完全体现不出软件语言的优 ...

  2. 计算机组成与设计 硬件/软件接口 Risc-v 版

    第一章 计算机抽象及相关技术 1.1 引言 1.1.1 传统的计算机应用分类及其特点 个人计算机(Personal Computer, PC) 通用,各种软件;受成本.性能权衡 服务器(Sever C ...

  3. 计算机组成与设计硬件/软件接口 (MIPS版)

    买了一本<计算机组成与设计硬件/软件接口(MIPS版)>,非科班出身的我,从事计算机行业已经8年了,却对计算机的基础什么也不专业.有点惭愧,因为对时间的流逝而感到遗憾!行了,但有言说,多无 ...

  4. 图书推荐|计算机组成与设计(原书第5版) 硬件软件接口 RISC-V

    计算机组成与设计(原书第5版)  硬件软件接口 RISC-V 这本书是引进过来的,本系列图书广受盛誉,有两位"图灵奖"得主撰写,书的权威性及细致性不言而喻,两位作者的履历也是让我们 ...

  5. 冯诺依曼计算机程序及其执行,第4章冯.诺依曼计算机:机器级程序与其执行练习题答案解析...

    第4章冯.诺依曼计算机:机器级程序与其执行练习题答案解析 (20页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 第 4 章 冯.诺依曼计算 ...

  6. 如何去设计硬件与程序之间的通信协议

    硬件跟程序之间通信就是传递的byte数组,所以需要定义规则进行解析,这里的规则指的就是协议. 协议是由硬件工程师跟软件开发一起制定的 农业项目通信格式(沙盘专用),沙盘采购的传感器跟后续使用的传感器不 ...

  7. )类 新建javafx程序时_第三章 第一个OpenCV的JavaFX应用程序.md

    # 第三章 第一个OpenCV的JavaFX应用程序 --- ***注意***:我们假设您现在已经阅读了之前的教程.如果没有,请在[http://opencv-java-tutorials.readt ...

  8. Atitit 硬件 软件 的开源工作 差异对比

    Atitit 硬件 软件 的开源工作 差异对比 1.1. 模块化,标准化,以及修改的便捷性1 1.2. 生产和发布成本 1 1.3.   3. 入行门槛搞2 1.4.  在软件业极度发达的今天,任何具 ...

  9. μC/OS-II硬件软件体系结构

    μC/OS-II硬件软件体系结构 转载于:https://www.cnblogs.com/markmin214/archive/2013/04/03/2997343.html

  10. 计算机软件系统课程导入,中学信息技术 计算机系统的组成课件 硬件软件导入恰当...

    <中学信息技术 计算机系统的组成课件 硬件软件导入恰当>由会员分享,可在线阅读,更多相关<中学信息技术 计算机系统的组成课件 硬件软件导入恰当(20页珍藏版)>请在人人文库网上 ...

最新文章

  1. 社区智能家居产品研发商西谷数字新三板挂牌上市
  2. 科学家从脑电图中解读大脑的运动意图
  3. 【代码笔记】iOS-获得设备型号
  4. gdb 设置一个函数, 出现4个断点的原因
  5. 计算机网络第六章ppt课件,计算机网络与通信(第6章).ppt
  6. SQL Server 2017:列存储就地更新
  7. python mock接口返回数据(转载)
  8. java 动态代理 jdk为何比cglib效率低 原理总结
  9. 基于文本语义的智能问答机器人——工业应用
  10. 5G WIFI DFS介绍
  11. 分析微信聊天记录(2)——分析单人的微信聊天记录
  12. OpenVSwitch的端口Port学习使用
  13. 手把手教你用Java获取IP归属地
  14. 在Fcitx5中使用自定义双拼方案
  15. AUTOSAR CanNm Nm Configuration
  16. layui通用后台模板
  17. html css 基本词汇
  18. win10计算机拒绝访问,Win10文件访问被拒绝如何解决?
  19. c# .net接口协定Contract
  20. UVA1149 装箱 Bin Packing 题解

热门文章

  1. Java面试常见问题及答案
  2. 红帽RHCE之Ansible-6-playbook实验
  3. 手机照片删除了怎么恢复?解析恢复过程
  4. 德制语音设备现秘密后门、APT正在利用最新漏洞|12月22日全球网络安全热点
  5. 新纪元出纳专用软件 v5.5 绿色
  6. 发一个色彩学的转帖.相当有感触
  7. [系统操作][MS Office]Excel在无任何操作的前提下关闭文档却询问是否保存
  8. keil软件调试(Debug)仿真教程(软件调试和硬件调试的区别)及常用调试按键详解
  9. 【数据预处理】基于Kettle的字符串数据清洗、Kettle的字段清洗、Kettle的使用参照表集成数据
  10. 水表读数图解_水表怎么看吨数 水表读数图解 水费异常超太多怎么办