计算机导论-1、2
简介
- 讲师:战德臣
- 哈尔滨工业大学、教授.博士生导师
- 教育部大学计算机课程教学指导委员会委员
第1讲-计算机、计算与计算思维
101-课程导引-为什么学
- 计算机:控制各种设备的大脑系统、设备系统,即:方便大家的“外挂”
- 计算机学科,学什么:
- 设计与人们息息相关的一些电子产品
- 如何设计机械产品当中的自动控制系统
- 如何通过计算改变人们的生活
- 即:计算思维,这也是导论的核心
- 为什么要学导论?
- 计算机发展到今天,已经深入各个领域,在各个学科中都有建树;这也导致了计算机学科的知识已经到了学不完的地步,而应该深入研究几个领域
- 因此,我们应该先专注计算机思维的学习
- 三大思维:
- 理论思维:以数学为代表,定义、性质、公理、定理及其证明
- 实验思维:以化学为代表,观察、实验、发现现象、对现象进行归纳和总结
- 计算思维:以计算为代表,理论思维和实验思维,都需要计算思维进行辅助支撑
- 计算机学科的人才,应该具有复合性思维(和其他学科相互融合的思维),才能具有创造性思维,也是社会进步的思维
思考
- 计算机科学,就是生产各种各样满足人们需求的“挂”,如:空调,不用请人扇风;冰箱,不用从北极运冰回来;各种机械,不用再用人力用生命建造城市等等
- 《隆美尔战时文件》,这本书提到,当自身实力和对方不对等的时候,应该采用奇袭的方式,打对方措手不及;运用在创业上就是,在边缘中寻找机会,在机会中寻找希望;也是乱世造英雄的体现
- 理论思维和实验思维,是人们和大自然之间相互学习;理论从人们总结中不断地进行推导出现的可能而运用到自然中,实验从大自然中不断地总结在反馈给理论
- 理论思维:就是用现有知识对大自然进行预言,是针对于未来
- 实验思维:是从大自然中总结和学习知识,是针对于过去
- 计算思维:能够让理论思维和实验思维预测的越远,总结的越深,是一种能力的增强,有种如虎添翼的感觉。
- 创造性思维,就是不断地尝试各种可能,从中找到真正的可能
核心
- 三大思维:理论思维、实验思维、计算思维
- 学习计算机导论目的:培养自我的复合性思维,即:创造性思维
102-本课程学什么
- 学习计算机是为了:解决社会自然问题;即通过计算手段,求解社会自然问题
数学中的计算和计算机中的计算,两者区别?
- 数学计算:解决人的计算
- 计算机计算:解决机器的计算
- 本质都是为了解决自身计算问题,让自身发展更好
如果实现机器自动计算
- 程序是如何被机器自动执行的:程序vs.系统?
- 如何编写机器可以执行的程序:语言vs.编译?
- 怎样构造求解问题的算法:问题->算法->程序?
- 算法->语言->程序->系统
- 源于算法,止于算法:最初设计算法,然后实现和执行算法
机器难于计算
难于计算:机器在有限的时间内,几秒钟、几分钟、几十分钟求解不出来,甚至求解这个问题,可能需要几年、几十年,这样的问题就属于机器难于计算
使用机器求解问题要思考:
- 可求解vs.难求解?
- 如何降低计算量:计算vs.算法?(算法的目标是为了降低计算量)
- 怎样研究算法?
算法的意义
- 在于降低计算量
怎么研究算法
- 借鉴自然界生物的一些规律
- 借鉴其他类型的系统
计算思维
- 奠基性思维
- 0和1思维
- 程序思维
- 递归思维
- 计算环境演化
- 冯·诺依曼计算机
- 个人计算机环境
- 并行分布环境
- 云计算环境
- 研究问题分为两个方向
- 构造算法:算法的思维侧重数学建模
- 构造系统:系统的思维侧重非数学建模
- 抽象到自动化的机制
- 语言->编译器(自动化手段):解决人和计算机交互的问题
- 协议->编解码器(自动化手段):解决了机器和机器之间,计算机和计算机之间,物体和物体之间交流和沟通的机制(编解码器:编码器、解码器、处理器、变换器等等)
- 模型(业务模型到计算模型)->系统(自动化手段):解决了理论实际到实践落地的问题
解说
- 机器自动计算和机器难于计算,构成计算机科学的研究内容
- 计算机科学:研究的是机器自动计算
- 理解奠基性思维:是帮助我们,理解程序是如何被计算机执行的关键
- 社会自然问题->计算化->体现抽象能力
- 计算机自动化->社会自然化->体现自动化能力
- 算法和系统:系统就像时间轴,算法是时间轴上的时间点
- 我们研究问题是一个系统化的流程,流程是由多种多样的问题组成
- 针对每个问题有自己的解决算法
计算机->计算机科学->计算科学
核心
- 理解:计算机是用于解决社会自然问题
- 计算机科学研究:研究及其自动计算
- 算法的目标:降低计算量
- 计算机奠基性思维:0和1思维、程序思维、递归思维
- 计算机最初环境:冯诺依曼计算机
103-怎样学习本课程?
- 本门课程重在深度,而不是广度;重在大思维,不注重小细节
- 重点在于知识之间的贯通
- 自动化:就是让机器代替人
代表抽象与自动化的分三个方面
- 符号化-计算机-自动化(0和1)
- 组合-抽象与构造:程序和系统
- 构造之基本手段:迭代与递归
学习顺序-知识构建次序
- 计算机本质:
- 抽象:学会理解、区分、命名、表达,学会将现实中的问题,表达成计算机、计算机器可以求解的形式
- 自动化:让机器代替人进行求解,我们要设计、构造、应用这样的机器
- 顺序从:计算机本质:抽象与自动化 => 体现在三个方面:符号化-计算化-自动化(0和1)=> 组合-抽象与构造:程序和系统 => 构造之基本手段:迭代与递归
- 带着上面图的思想、原理和基础,结合下面图的问题,进行研究和学习
什么是思维?
- 贯通的知识才是思维
从思维到碎片化思考
- 碎片本身是有用的,只是需要我们后期把大量的碎片贯通起来形成思维,才能有用,否则就像数据库里面存放的各种垃圾信息,不进行数据清理和整理是无用的
- 而且,由于我们生命和时间的有限,是更愿意从开始就系统性的学习一个学科,并掌握思维;还是要经过大量的碎片了解,后期再重头开始系统性学习,在掌握思维好呢!!
- 其实是仁者见仁,智者见智;有人喜欢从理论到实践,有的人喜欢实践结合理论,各有各的不同,重点是知道自己最适合哪个
计算机思维
和面向对象的思想特别的相像,原型和实例,实例是原型的外在体现
- 思维:社会/自然现象 => 逻辑 => 二进制 => 电路 => 集成电路 => 计算机
- 体现:语义符号化 => 符号计算化 => 计算0/1化 => 0/1自动化 => 分层构造化 => 构造集成化
- 学习顺序:表层意义 => 深层意义 => 集成意义
- 能力培养:思维(通过思考和理解提升) + 知识和技能(通过练习、练习...提升) => 能力
导论最终的目的
- 知识-穴位
- 思维-脉络(穴位链)
- 实践-锻炼,使脉络贯通
- 能力-内功(贯穿脉络)
- 口诀:
- 打通知识脉络
- 贯通各门课程
- 内功强化基础
- 外功灵活应变
核心
- 学习重点:在于提升计算机深度、在于学会贯通知识,即贯通知识才是思维
- 自然是如何到计算机:
- 0和1:负责把自然问题抽象成计算机表达方式
- 程序和系统:负责让计算机自动化处理自然问题
- 迭代与递归:是程序和系统的基本手段
- 能力培养:
- 思维:通过思考和理解提升
- 知识和技能:通过练习、练习...提升
104-人计算与机器自动计算
人进行计算
- 一条规则可能很复杂,但计算量却可能很小
- 人需要知道具体的计算规则
- 特定的规则,只能求:ax+ax=c
机器-自动计算
- 每条规则可能很简单,但计算量却很大
- 机器也可以采用人所使用的计算规则
- 一般性的规则,可以求任意:axb+...+axb=c
差分法求多项式
- 通过差分法求各种各样的多项式,把乘除法转化成加减法
- 著名应用:巴贝奇和差分机
思考
- 人类:省时、特定规则、特定求解
- 机器:费时、普遍规则、任意求解
领悟:计算机统一规律
- 就像花瓣的规则一样,无限放大发现都是按照一个固定的规律不断积累形成了最终最美的样子
- 计算机也一样,计算机通过01的多种组合,通过加法规律的无限叠加形成小程序,小程序和小程序结合下形成更大的程序,更大的程序和更大的程序结合形成更大更大的程序,无限循环下去,达到了今天的运算量级
核心
- 人计算:规则复杂,计算量小
- 机器计算:规则简单,计算量大
- 差分法:实现了乘法转加减法,加减法通过逻辑运算来实现
105-机器自动计算需要解决的问题?
- 任何一个计算式都包括:ax+bx+c=0
- 数据:a、b、c、x;
- 二进制表示数据
- 能够自动存取
- 如:钟表和差分机,而算盘不能实现自动存取
- 计算规则:加、减、乘、除;
- 程序表示计算规则
- 能够自动存取
- 程序更重要的还必须能自动执行
- 数据:a、b、c、x;
- 表示?自动存取?
- 人:十进制
- 机器:二进制
- 现实世界寻找表示十进制的元器件可选择范围有限,而表示二进制的元器件更多更广;且二进制的计算规则更加简单,稳定性更高,出错率更低
- 钟表是十二进制
表示计算机的硬件
- 从表示-自动存储-自动执行的角度:电子管 -> 晶体管 -> 集成电路 -> 超大规模集成电路
- 基本的元器件实现固定的输入和输出
这里我的疑问是,怎么实现自动存取的,断电之后不就什么都没有了吗?
- 首先元器件都是固定的规则,即:固定的输入,输出固定的结果
- 数据的表示使用,二进制的元器件
- 数据的规则,通过元器件的不同组合实现,固定输入,输出不同规则的结果
- 并且通电后,过程都是自动执行的
CPU(微处理器)重要参数
- 字长:指CPU一次性处理事务的固定长度
- 主频:指CPU单位时间内能够完成操作的次数
- 晶体管数量:字长和主频的根本保障,直接决定了两者最终数值,越多支持的功能广度和深度越好
核心
- 需要解决:数据和计算规则的表示和自动存取、程序自动执行
- 用二进制表示:现实表示二进制的器件容易获得,并且二进制规则简单,稳定性更高,出错率更低
- CPU参数:字长、主频、晶体管数量
106-计算机系统发展趋势
- 微型化:可嵌入、可携带
- 大型化:可进行大规模、复杂计算
- 智能化:理解自然语言,具有自适应性,自主完成复杂功能
- 网络化:未来互联网
- 机-机相联
- 物-物相联
- 物-人相联
- 人-人相联
核心
- 计算机趋势:微型、大型、智能、网络
- 最终实现智慧地球
第一讲扩展内容-机械计算与电子自动计算-元器件
计算学科的计算 vs. 数学学科的计算
- 用函数来表达一种问题、一种现象,以及学习这种函数如何通过简单的方法使人可以掌握规则,可以计算出结果
- 计算机:费时、普遍规则、普遍结果;普遍性,可以解决一类问题
- 人:省时、特定规则、特定结果;特殊性,可以解决一种问题
自动计算要解决的几个问题:表示-存储-执行
- 数据怎么表示、计算规则如何表示
- 计算规则和数据怎么自动存储
- 计算规则自动执行,是不是计算机的一个标志
从表示-自动存储-自动执行的角度看元器件的发展
- 电子管:解决了0和1存储的问题
- 晶体管:解决了电子管的体积问题,提高了可靠性
- 集成电路:解决了多个元器件之间,相互之间的可靠性问题,实际上是一种封装
- 超大规模的集成电路:
- 体积越来越小
- 可靠性越来越高
- 电路规模越来越大
- 速度越来越快
- 功能越来越强大
元器件的发展启示
- 一个元器件完成一种特定的功能
- 不同的元器件之间在组合成具有新功能的元器件;并且每个元器件都测试稳定
- 依次循环往复,就可以设计出大规模的、稳定可靠的的集成电路
- 由此我们可以得出:
- 世界是从无到有,不是一蹴而就,一下子什么都齐全了,都完美了
- 事情是在不断地变化和演化的,我之前所有看不惯,觉得事情应该是这个样子的,其实是正确的,也是我个人的优势,就是在最初就能看到事情发展到美好的样子,我要做的不是埋怨、气愤和抱怨,而是根据自己所思所想去改变自己,让自己在这种演化中不断地变得美好
- 而在事情没有演化到一定程度,都是非常混乱和具有极强的不确定性的,我要知道这都是正常的
- 因此呀,我要学会享受成长的过程,而不应该把注意力停留在那些不美好的事情上,这些不美好的事情其实就是我们努力和前进的方向,这是一种指示,使我们前进路上的明灯呀
核心
- 从电子管发展到超大集成电路,是从根本解决问题,这是值得我们学习的
- 从中体现了计算机能达到人类所达不到的水*
第一讲扩展内容-电子自动计算与计算机系统
- 上面我们讨论过自动计算需要解决的问题:
- 数据:表示、自动存取
- 计算规则:表示、自动存取、自动执行
- 表示:我们采用二进制,并找到了电子元器件进行表示和自动执行(通电即执行)
- 接下来要解决的问题是:如何构建一个计算机系统
构建计算机系统要解决的几个问题
- 控制与计算:微处理器
- 输入:外部信息输入到计算机中
- 输出:将计算机中信息输出到外界
- 永久存储与临时存储:将计算机中的信号永久保存或临时保存
微处理器
- 字长:
- 发展:8位 => 16位 =>32位 =>64位
- 表示:处理一次能处理数据的位数(多少个0/1)
- 字长越长处理速度越快
- 主频:
- 发展:几MHz => 几百Mhz => 几GHz
- 每秒钟执行运算(基本操作)的次数
- 次数越多处理速度越快
- 晶体管数量:
- 发展:几万 => 几百万 => 几亿颗
- 功能/规模:
- 发展:微处理器 => 微处理器+协处理器(浮点运算) => 微处理器+图形处理单元GPU => 微处理器+3D处理器+多媒体处理器 => 多核微处理器
存储设备
- 汞延迟线:
- 原理:水银柱的变化
- 磁带/磁芯/磁鼓存储(50年代)
- DRAM半导体存储器芯片
- 诞生原因:便于配合微处理的运算速度
- 缺点:电的易失性;即,停电存储的信息就丢失了
- 磁盘/磁带:永久性存储器
- 光盘
- FlashRAM存储器:闪存
- 固态硬盘
存储设备的发展方向
- 体积越来越小
- 容量越来越大
- 访问速度越来越快
- 可靠性越来越高
- 功耗越来越低
- 持久性越来越好
输入设备
- 穿孔纸带、键盘输入、鼠标输入、感知输入
输出设备
- CRT:阴极射线管、CRT:字符发生器、CRT:数字光栅扫描显示器、数字显示器、3D显示器
- 发展方向:
- 分辨率越来越高
- 颜色越来越逼真
- 显示速度越来越快(屏幕刷新速度和图形处理速度)
- 越来越薄,越清晰
- 可视角度越来越接**角
核心
- 输入、CPU控制与计算、存储设备、输出:统一构成了现代计算机系统
第二讲-符号化、计算化与自动化
201-本讲概述
0和1的思维
- 语义符号化 => 符号计算化 => 计算0/1化 => 0/1自动化 => 分层构造化 => 构造集成化
核心
- 0和1的层面
- 基于0和1的逻辑层面
- 硬件层面
202-信息如何用0和1表示
- 数值性信息:二进制
- 非数值性信息:编码 图表
- ASCII码:
- 数字(10个)、英文字母(26大写、小写)、一些特殊符号,使用7位二进制就可以表示完全,即最多128位;
- 7位二进制最多可以表示128个字符,转换成十进制是127,是因为应该从零开始算起
- 因为7位不是2的幂次方,计算机处理起来比较麻烦,所以采用8位
- 汉字编码:
- 8位二进制,只能表示256个字符,不满足1万多个以上的汉字需求
- 采用16位进行汉字表示
- 汉字输入表示:汉字内码
- 汉字输出表示:字形码
- 因为都是二进制表示,如何区分ASCII和汉字编码?
- 我们把八位的最高位从0变成1,这样就可以进行区分
- 但也因此,16进制位从2=65536减少到实际可用2=16384
- ASCII和汉字内码进行区分:本质就是0和1的合运算,全1为汉子,有0为ASCII
核心
- 数值性信息:使用二进制
- 非数值性信息:使用字母和符号表示,字母和符号使用0和1表示,规定好规则即可
- ASCII码表、汉字编码等等,这也就可以理解使用不同的字符编码规则,得到的结果不同
- 理解了为什么网页统一使用UTF-8规则,从根本上避免了乱码的出现
203-如何用0和1进行计算?
- 古人的八卦,易经的64卦完美的表现了二进制在实际中的应用
- 基本逻辑运算:即真或假进行运算
- 可以理解为世界本来就是:非真既假,非假既真;
- 只是后来真的学会了假,假的学会了真
- 0和1的运算就是基于逻辑的运算
- 与、或、非、异或:
- 是计算机当中最基本的逻辑运算
- 整个计算机就是基于这些逻辑运算开发出来的
- 规则简单,威力强大
核心
- 逻辑运算规则,转化成二进制(0和1)运算规则
- 掌握0和1的逻辑运算:与、或、非、异或运算规则
204-如何将减法变为加法?
- 二进制数可以表达为机器数用不同的编码方法,可以将减法变为加法,也可以使得符号和数值一样参与运算
- 正号:0,负号:1
- 正数:原码、反码、补码完全一样
- 负数:反码=原码取反;补码=反码+1
- 补码运算:
- 把减法运算转变为加法运算
- 补码运算得到的结果也是补码,需要把补码反运算成原码,才是最终的结果
- 正数的原码、反码同补码形式是一样的;最高位为0表示正数
- 负数:
- 原码:负数的最高位为1,表示负数。其余同真实数值的二进制数
- 反码:负数的最高位为1,表示负数。其余在真实数值的二进制数基础上逐位取反
- 补码:负数的最高位为1,表示负数。其余在反码基础上最低位加1后形成的。它的负数不包括0,但包括-2
- 机器数由于受到表示数值的位数的限制,只能表示一定范围内的数。超出此范围则为“溢出”
机器数和二进制数
- 最初完全不理解这两个有什么区别,从观察角度看完全就是一个东西
- 事实上可以理解为就是一个东西
- 只是诞生的领域不同,二进制是属于数学领域的规则
- 而机器数表示的是计算机领域的规则,可以说机器数本身诞生于计算机,机器数的规则源于二进制的规则
- 简单来说就是,通过二进制寻找到机器数最方便操作的规则,两者相辅相成
- 或者说,机器数是二进制数的实体,是硬件层面的具体表现,是二进制的实例;而二进制则为思维上的规则,理论上是无穷尽的,而机器数是现实中的产物,受限于现实实物的有穷性
- 机器数因为硬件本身的限制导致,并不是无穷尽的,也因此机器数存在位数的限制
- 四则运算都可以变成加法运算,而加法运算又可以通过逻辑运算今次那个操作
核心
- 通过原码、反码、补码实现了减法变加法的神奇蜕变
- 正数三码完全相同
- 负数:
- 反码 = !原码
- 补码 = 反码 + 1
- 理解运算符最终的作用:
- 0还是1,决定了后面的数值是否要反向转换
- 负数值 = !(负数补码 - 1)
- 正式二进制的无穷无尽,才使得当硬件水*不断提高,计算能力自然得到提高
- 这真是一种奇妙的感受
205-用逻辑实现加法,用硬件实现加法?
基本门电路的符号表示
- 用二极管、三极管可实现基本的集成电路:与门、或门和非门
- 这些电路被封装成集成电路(芯片),即所谓的门电路
利用Boolean理解二进制运算
- 理解上面的进位制,在之前的学习中总是无法理解透彻,今天发现,其实可以利用我们常用的Boolean的概念来理解这个逻辑,无非就是true/false的选择而已
- A、B和C三个值最多进位一次,A和B已经进位,那和C相加最大为1自然无法再次进位
- 而,如果A和B没有进位,那最有那和C就可能发生进位
- 理解了怎么说都通顺,不过还是应该说说灵光乍现那一刻,就是if···else···的关系,而且只是一层的判断,A XOR B是否进位:
- 是:结果为0,和AND C不会再进位
- 否:那就只有都为1的情况才能,AND进位
加法器
- 加法器就是不断地增加新的C位置,输出高位既是下一个C位,从而实现了分层构造化和构造集成化
核心
- 通过布尔类型理解二进制运算,达到事半功倍的效果,同时真正理解了前期课程中提到的,二进制运算简单和稳定
- 理解加法器的叠加,结果为下一个加法的的C位,C位不断的进行串联和叠加,从而实现分从构造化和构造集成化
扩展内容
十进制到r进制
- 整数部分:除基取余
- 小数部分:乘基取整
小数点如何处理
- 定点数:定点机、定点计算机
- 浮点数:科学计数法,符号位、指数位、小数部分
- 尾数多少决定了精度大小
- 指数大小决定了表示数的范围
- 单精度数/双精度数
- 通过符号转正好思想,整体向前挪移127位,这样就达到固定形式的展示,即:用整数处理一些列负数
易经中提现抽象的价值
- 自然现象中的天(本体),我们没有直接进行使用,而是抽象出来一个乾(用体)
- 原因就是,如果直接使用现有的,我们之后就无法区分,我们说天,指的是什么:
- 是天本身?
- 还是天代表的抽象体
- 本质就是出现了歧义,而抽象正是来解决这种歧义
《易经》是什么?
- 抽象体:天地日月风雷山泽
- 自然现象及其变化规律:
- 人事现象及其变化规律
- 其他现象及其变化规律
核心
- 理解负数用整数的方式去表示,理解具体的操作方式,很奇妙