前言:

视频1:B站

视频2:GitHub

一个科普向系列视频,在短短 8 个小时里非常生动且全面地科普了关于计算机科学的方方面面:计算机的历史、计算机是如何运作的、组成计算机的各个重要模块、计算机科学中的重要思想等。正如它的口号所说的 Computers are not magic!

1.计算机早期历史

  • 计算机技术的影响——进入信息时代
    1. 出现自动化农业设备与医疗设备

    2. 全球通信和全球教育机会变得普遍

    3. 出现意想不到的虚拟现实/无人驾驶/人工智能等新领域

  • 计算机的实质:
    1. 计算机是由极其简单的组件,通过一层层的抽象,来做出复杂的操作。
    2. 计算机中的很多东西,底层其实都很简单,让人难以理解的,是一层层精妙的抽象。
  • 关于计算的历史:
    1. 公元前 2500 年:算盘出现,为十进制,功能类似一个计数器。
    2. 公元前 2500 年-公元 1500年:星盘、计算尺等依靠机械运动的计算设备出现
    3. 公元 1613 年:computer 的概念出现,当时指的是专门做计算的职业,
    4. 1694 年:步进计算器出现,是世界上第一台能自动完成加减乘除的计算器。
    5. 1694-1900 年:计算表兴起,类似于字典,可用于查找各种庞大的计算值。
    6. 1823 年:差分机的设想出现,可以做函数计算,但计划最后失败。
    7. 19 世纪中期:分析机的设想出现,设想存在可计算一切的通用计算机。
    8. 1890 年:打孔卡片制表机。原理:在纸上打孔→孔穿过针→针泡入汞→电路连通→齿轮使计数+1。

2.电子计算机的发展史

  • 电子计算机元器件变化:

    1. 继电器→真空管→晶体管
  • 计算机的出现背景:

    20世纪人口暴增,科学与工程进步迅速,航天计划成形。以上导致数据的复杂度急剧上升、计算量暴增,对于计算的自动化、高速有迫切的需求。

  • 电子计算机的发展:

    1945年 哈佛马克1:使用继电器,用电磁效应,控制机械开关,缺点为有磨损和延迟。

    *最早还因为有虫子飞进去导致故障,bug=故障。

    1943年 巨人1号:使用真空管(三极管),制造出世界上第一个可编程的计算机。

    1946年 ENIAC:第一个电子数值积分计算机,为第一台通用计算机。

    1947年 晶体管出现:使用的是固态的半导体材料,相对真空管更可靠。

    1950s 空军ANFSQ-7: 真空管到达计算极限。

    1957年 IBM 608: 第一个消费者可购买的晶体管计算机出现。

3.布尔逻辑与逻辑门

1.概念

  • 计算机为什么使用二进制:

    1. 计算机的元器件晶体管只有2种状态,通电(1)& 断电(0),用二进制可直接根据元器件的状态来设计计算机。
    2. 用True和False(可用1代表True,0代表False)进行逻辑运算,代替实数进行计算。
    3. 进制数越多(十进制等),信号越容易混淆,影响计算。
  • 布尔代数&布尔代数在计算机中的实现

    1. 变量:没有常数,仅True和False这两个变量。
    2. 三个基本操作:NOT/AND/OR。
  • 抽象的好处:

    使得分工明确,不同职业的工程师各司其职,而不用担心其他细节。

2.逻辑门的实现

1.NOT操作:

  • 命名:称为NOT门/非门。
  • 作用:将输入布尔值反转。输入的True或False,输出为False或True。
  • 晶体管的实现方式:
    1. 半导体通电True,则线路接地,无输出电流,为False。
    2. 半导体不通电False,则输出电流从右边输出,为True。

1.png

2.AND操作

  • 命名:AND门/与门

  • 作用:由2个输入控制输出,仅当2个输入input1和input2都为True时,输出才为True,2个输入的其余情况,输出均为False。

    *可以理解为,输入有假,输出为假,反之(输入为真-真,输出才为真)。

    2.png

  • 用晶体管实现的方式:

    串联两个晶体管,仅当2个晶体管都通电,输出才有电流(True)

    3.png

3.OR操作

  • 命名:OR门/或门

  • 作用:由2个输入控制输出,只要其中一个输入为True,则输出True。

    4.png

  • 用晶体管实现的方式:

    使用2个晶体管,将它们并联到电路中,只要有一个晶体管通电,则输出有电流(True)。

5.png

4.特殊的逻辑运算——异或

  • 命名:XOR门/异或门

  • 作用:2个输入控制一个输出。当2个输入相同(均为True时,输出False),输出false。反之,输入不同(一个True时,一个False),输出为True。

    6.png

  • 图示:

    先用一个OR门,将其与AND门并联,AND门与NOT门串联,最后让NOT与AND门并联,获得输出。

7.png

3.逻辑门的符号表示

  • 作用:将逻辑门简化,将逻辑门用于构建更大的组件,而不至于太复杂。
  • 图示:
    1. 非门:用三角形+圆圈表示

    2. 与门:用D型图案表示

    3. 或门:用类似D向右弯曲的图案表示

    4. 异或门:用或门+一个圆弧表示

8.png

4.二进制

  • 二进制的原理,存储单元MB/GB/TB解释

    1. 计算机中的二进制表示:

      单个数字1或0,1位二进制数字命名为位(bit),也称1比特。

    2. 字节(byte)的概念:

      1byte=8bit,即1byte代表8位二进制数。最早期的电脑为八位的,即以八位二进制为单位处理数据。为了方便,将八位二进制命名为1字节(1byte).

    3. 十进制与二进制的区别:

      • 十进制有10个数字,0-9,逢10进1(不存在10这个数字),则每向左进一位,数字大10倍。
      • 二进制有2个数字,0-1,逢2进1,(不存在2这个数字),则每向左进一位,数字大2倍。
    4. 如何进行二进制与十进制联系起来?

      将十进制与二进制的位数提取出来,编上单位:

      • eg:二进制的$1011=1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 1 * 2^3= 11$(从右往左数)
      • eg:十进制的$1045= 1 * 10^3 + 0 * 10^2 + 4 * 10^1 + 5 *10^0$
    5. 十进制与二进制的图示:

      • 十进制的263

        9.png

      • 二进制的10110111

        10.png

    6. 二进制的运算:

      相同的位数相加,逢2进1

      11.png

    7. byte在电脑中的单位换算:

      • $1kb={2^{10}}$$bit = 1024bit =1000b$
      • $1TB=1000GB$
      • $1GB=十亿字节=1000MB=10^6KB$
    8. 32位与64位电脑的区别

      • 32位的最大数为43亿左右
      • 64位的最大数为$9.2*10^{18}$
  • 正/负数、正/负浮点数的表示

    1. 整数:

      第1位:表示正负 1是负,0是正(补码),其余31位/63位: 表示实数

    2. 浮点数(Floating Point Numbers):

      定义:小数点可在数字间浮动的数(非整数)

      浮点数=有效位数指数32位数字中:第1位表示正负,第2-9位存指数。剩下23位存有效位数

      eg:$625.9=0.6259(有效位数)*10^3$

  • 美国信息交换标准代码-ASCⅡ,用来表示字符

    1. 全称:美国信息交换标准代码

    2. 作用:用数字给英文字母及符号编号

    3. 内容:7位代码,可存放128个不同的值。

      12.png

    4. UNICODE,统一所有字符编码的标准

      • 诞生背景:1992诞生,随着计算机在亚洲兴起,需要解决ASCⅡ不够表达所有语言的问题。
      • 为提高代码的互用性,而诞生的编码标准。
      • 内容:UNICODE为16位数字,有超过100万个位置,可满足所有语言的字符需求。

5.算术逻辑单元

  • 什么是算术逻辑单元

    1. 命名:简称ALU,Arithmetic&Logic Unit
    2. 组成:ALU有2个单元组成,1个算术单元和1个逻辑单元(Arithmetic Unit和Logic Unit)
    3. 作用:计算机中负责运算的组件,处理数字/逻辑运算的最基本单元。
  • 算术单元

    1. 基本组件:

      • 由半加器、全加器组成
      • 半加器、全加器由AND、OR、NOT、XOR门组成
    2. 加法运算

      • 组件:AND、OR、NOT、XOR门

      • 元素:输入A,输入B,输出(均为1个bit,即0或1)

      • 半加器:

        1. 作用:用于计算个位的数字加减。

        2. 输入:A,B

        3. 输出:总和,进位

          14.png
        4. 抽象:

          14.png
    3. 全加器:

      • 作用:用于计算超过1位的加法,由于涉及进位,因此有3个输入(C充当进位)。

        15.png
      • 原理图示:

        16.png
    4. 如何用半加器与全加器做8位数的加法

      说明:以8位行波加法器为例

      *现在电脑使用的加法器叫“超前进位加法器”

      • 用半加器处理第1位数(个位)的加法,得到的和为结果的第1位。
      • 将输出的进位,输入到第2位用的全加器的输入C中。
      • 将第2位的2个数用全加器计算,得到的和为结果的第2位(sum)。
      • 将第2位计算的进位连接到百位的全加器输入C中。
      • 在第3-8位上,循环第3-4步的操作。
      17.png
    5. 算术单元支持的其他运算

      18.png
  • 溢出的概念

    1. 内容:在有限的空间内,无法存储位数过大的数,则称为溢出。
    2. 说明:第8位的进位如果为1,则无法存储,此时容易引发错误,所以应该尽量避免溢出。
  • 逻辑单元

    1. 作用:执行逻辑操作,如NOT、AND、OR等操作,以及做简单的数值测试。
  • ALU的抽象

    1. 作用:ALU的抽象让工程师不再考虑逻辑门层面的组成,简化工作。

    2. 图示:像一个大“V”。

      19.png

    3. 内容包括:

      • 输入A,B

      • 输出

      • 标志:溢出、零、负数

      20.png

6.寄存器与内存

  • 原因是这是电脑使用的是RAM(随机存取存储器),俗称内存,内存只能在通电情况下存储数据。

1.概念

  • 概念梳理
    1. 锁存器:锁存器是利用AND、OR、NOT逻辑门,实现存储1位数字的器件。
    2. 寄存器:1组并排的锁存器
    3. 矩阵:以矩阵的方式来存放锁存器的组合件,nn门锁矩阵可存放n^2个锁存器,但同一时间只能写入/读取1个数字。(早期为1616矩阵)
    4. 位址:锁存器在矩阵中的行数与列数。eg.12行 8列
    5. 多路复用器:一组电线,输入2进制的行址&列址,可启用矩阵中某个锁存器
    6. 内存(RAM):随机存取存储器,由一系列矩阵以及电路组成的器件,可根据地址来写入、读取数据。类似于人类的短期记忆,记录当前在做什么事情。

2.部件实现

2、锁存器

作用:存储1位数字。

图示:

21.png

2.5、门锁:

锁存器需要同时输入2个数字,不太方便。

为了使用更方便,只用1根电线控制数据输入,发展了门锁这个器件。另外,用另一根电线来控制整个结构的开关。(和复位作用不同)

22.png

3、寄存器

作用:并排使用门锁,存储多位数字

图示:

23.png

4、门锁矩阵

作用:

n*n的矩阵有n^2个位址,则可以存储n^2个数。但1个矩阵只可记录1位数字,n个矩阵组合在一起,才可记录n位数。如1个8位数,会按位数分成8个数,分别存储在8个矩阵的同一个位址中。

8个矩阵,则可以记录256个8位数字。

通俗理解:

16*16的门锁矩阵,可理解为1个公寓,1个公寓256个房间。

8个门锁矩阵并排放,则有了8个公寓。

规定每一个公寓同一个编号的房间,都有一样的标记(地址),共同组成8位数字。

那么8个公寓就能存 (8*256 / 8)个数字。

原因:

16*16的门锁矩阵虽然有256个位置,但每次只能存/取其中1个位置的数字。因此,要表示8位数字,就需要同时调用8个门锁矩阵。

图示:

24.png

25.png

使用方法:在多路复用器中输入位址,x行x列(2进制),即可点亮x行x列的锁存器。

举例:

行列数 矩阵1 矩阵2 矩阵3 矩阵4 矩阵5 矩阵6 矩阵7 矩阵8
1行5列 1 0 1 1 0 0 1 0
2行3列 0 1 0 0 1 1 0 1

5、内存

粗略定义:将一堆独立的存储模块和电路看做1个单元,组成内存方块,n个内存方块组成内存模块。在一个电路板上所有的内存方块统称为内存(RAM)。

图示:

26.png

第七课 中央处理器(CPU)

1、概念梳理

  • CPU(Central Processing Unit):中央处理单元,负责执行程序。通常由寄存器/控制单元/ALU/时钟组成。与RAM配合,执行计算机程序。CPU和RAM之间用“地址线”、“数据线”和“允许读/写线”进行通信。

  • 指令:指示计算机要做什么,多条指令共同组成程序。如数学指令,内存指令。

  • 时钟:负责管理CPU运行的节奏,以精确地间隔,触发电信号,控制单元用这个信号,推动CPU的内部操作。

  • 时钟速度:CPU执行“取指令→解码→执行”中每一步的速度叫做“时钟速度”,单位赫兹Hz,表示频率。

  • 超频/降频:

  • 超频,修改时钟速度,加快CPU的速度,超频过多会让CPU过热或产生乱码。

  • 降频,降低时钟速度,达到省电的效果,对笔记本/手机很重要。

  • 微体系框架:以高层次视角看计算机,如当我们用一条线链接2个组件时,这条线只是所有必须线路的抽象。

2、CPU工作原理

1)必要组件:

  • 指令表:给CPU支持的所有指令分配ID

  • 控制单元:像指挥部,有序的控制指令的读取、运行与写入。

  • 指令地址寄存器:类似于银行取号。该器件只按顺序通报地址,让RAM按顺序将指令交给指令寄存器。

  • 指令寄存器:存储具体的指令代码。

27.png

2)过程

  • 取指令:指令地址寄存器发地址给RAM→RAM发该地址内的数据给指令寄存器→指令寄存器接受数据

  • 解码:指令寄存器根据数据发送指令给控制单元 →控制单元解码(逻辑门确认操作码)

  • 执行阶段:控制单元执行指令(→涉及计算时→调用所需寄存器→传输入&操作码给ALU执行)→调用RAM特定地址的数据→RAM将结果传入寄存器→指令地址寄存器+1

3)图示:

第一个CPU

28.png

第八课 指令和程序

1、概念梳理

  • 指令:指示计算机要做什么的代码(机器码),多条指令共同组成程序。如数学指令,内存指令。

  • 注:指令和数据都是存在同一个内存里的。

  • 指令集:记录指令名称、用法、操作码以及所需RAM地址位数的表格。

29.png

程序

2、指令的执行

  • 原则:

  • RAM每一个地址中,都存放0或1个数据。

  • 特定的数字组合,就表示为一个指令,否则表示一个值。

  • LOAD指令:

  • 计算机会按地址的顺序,读取RAM中所记录的指令/数据。

  • 计算机接受到指令后,如LOAD_A,则通过数据线将数据传至寄存器A。

30.png

  • ADD指令:

  • ADD B A指令告诉ALU,把寄存器B和寄存器中的数字加起来,存到寄存器A中。

  • JUMP指令:

  • 遇到JUMP指令,程序会跳转至对应的RAM地址读取数据。

  • JUMP指令可以有条件跳转(如JUMP-negative),也可以无条件跳转。

3、计算机指令长度

由于早期计算机每个字只有8位,指令只占4位,意味着只能有16个指令,这远远不够。

现代计算机有两种方式解决指令不够用的问题:

最直接的是用更多位来表示指令,如32位或64位。

采用“可变指令长度”,令不同的指令的长度不同,尽量节约位数。

假设1个字为16位,如果某指令不需要操作内存,则可以省去寻址的位数。

该情况下,部分指令后面需要跟数据,如JUMP,称为立即值。

第九课 高级CPU设计

0、概念梳理

  • 缓存:在CPU中的小块RAM,用于存储批量指令。

  • 缓存命中:想要的数据已经在缓存里

  • 缓存未命中:想要的数据不在缓存里

  • 脏位:缓存里每块空间,有个特殊标记,叫脏位,用于检测缓存内的数据是否与RAM一致。

  • 多核处理器:一个CPU芯片中,有多个独立处理单元。

1、现代CPU如何提升性能:

早期通过加快晶体管速度,来提升CPU速度。但很快该方法到达了极限。

后来给CPU设计了专门除法电路+其他电路来做复杂操作:如游戏,视频解码

2、缓存:

为了不让CPU空等数据,在CPU内部设置了一小块内存,称为缓存,让RAM可以一次传输一批数据到CPU中。(不加缓存,CPU没位置放大量数据)

缓存也可以当临时空间,存一些中间值,适合长/复杂的运算。

空等原因:从RAM到CPU的数据传输有延迟(要通过总线,RAM还要时间找地址、取数据、配置、输出数据)。

3、缓存同步:

缓存同步一般发生在CPU缓存已满,但CPU仍需往缓存内输入数据。此时,被标记为脏位的数据会优先传输回RAM,腾出位置以防被覆盖,导致计算结果有误。

4、指令流水线:

作用:让取址→解码→执行三个步骤同时进行。并行执行指令,提升CPU性能。

原本需要3个时钟周期执行1个指令,现在只需要1个时钟周期。

设计难点:数据具有依赖性。

数据依赖性解决方法:

动态排序、乱序运行、预测分支(高端CPU)

31.png

5、一次性处理多条指令

32.png

6、同时运行多个指令流(多核CPU)

多核处理器:一个CPU芯片中,有多个独立处理单元。但因为它们整合紧密,可以共享一些资源。

7、超级计算机(多个CPU)

在一台计算机中,用无数个CPU,做怪兽级的复杂运算,如模拟宇宙形成。

第十课 早期的编程方式

1、早期,程序如何进入计算机

程序必须人为地输入计算机。早期,电脑无内存的概念,人们通过打孔纸卡等物理手段,输入数据(数字),进入计算机。

2、早期计算机的编程

  • 打孔纸卡/纸带:在纸卡上打孔,用读卡器读取连通电路,进行编程。原因,穿孔纸卡便宜、可靠也易懂。62500张纸卡=5MB数据

  • 插线板:通过插拔线路的方式,改变器件之间的连接方式,进行编程。

  • 面板拨开关(1980s前):通过拨动面板上的开关,进行编程。输入二进制操作码,按存储按钮,推进至下一个内存位,直至操作完内存,按运行键执行程序。(内存式电脑)

3、现代计算机基础结构——冯诺依曼计算机

冯诺依曼计算机的标志是,一个处理器(有算术逻辑单元)+数据寄存器+指令寄存器+指令地址寄存器+内存

第十一课 编程语言发展史

0、概念梳理

伪代码:用自然语言(中文、英语等)对程序的高层次描述,称为“伪代码”

汇编器:用于将汇编语言装换成机器语言。一条汇编语句对应一条机器指令。

助记符(汇编器):

软件

1、早期二进制写代码

先前都是硬件层面的编程,硬件编程非常麻烦,所以程序员想要一种更通用的编程方法,就是软件。

早期,人们先在纸上写伪代码,用”操作码表”把伪代码转成二进制机器码,翻译完成后,程序可以喂入计算机并运行。

2、汇编器&助记符

背景:1940~1950s,程序员开发出一种新语言, 更可读 更高层次。每个操作码分配一个简单名字,叫”助记符”。但计算机不能读懂“助记符”,因此人们写了二进制程序“汇编器来帮忙”

作用:汇编器读取用”汇编语言”写的程序,然后转成”机器码”。

3、最早高级编程语言“A-0”

汇编只是修饰了一下机器码,一般来说,一条汇编指令对应一条机器指令,所以汇编码和底层硬件的连接很紧密,汇编器仍然强迫程序员思考底层逻辑。

1950s,为释放超算潜力,葛丽丝·霍普博士,设计了一个高级编程语言,叫 “Arithmetic Language Version 0”,一行高级编程语言 可以转成几十条二进制指令。但由于当时人们认为,计算机只能做计算,而不能做程序,A-0未被广泛使用。

过程:高级编程语言→编译器→汇编码/机器码

4、开始广泛应用的高级编程语言FORTRAN

1957年由IBM1957年发布,平均来说,FORTRAN 写的程序,比等同的手写汇编代码短 20 倍, FORTRAN 编译器会把代码转成机器码。

5、通用编程语言——COBOL

1959年,研发可以在不同机器上通用编程语言。

最后研发出一门高级语言:”普通面向商业语言”,简称 COBOL

每个计算架构需要一个 COBOL 编译器,不管是什么电脑都可以运行相同的代码,得到相同结果。

6、现代编程语言:1960s-2000

1960s起,编程语言设计进入黄金时代。

1960 :LGOL, LISP 和 BASIC 等语言

70年代有:Pascal,C 和 Smalltalk

80年代有:C++,Objective-C 和 Perl

90年代有:Python,Ruby 和 Java

*7、安全漏洞&补丁由来:

在1940年代,是用打孔纸带进行的,但程序出现了问题(也就是漏洞),为了节约时间,只能贴上胶带也就是打补丁来填补空隙,漏洞和补丁因此得名。

第十二课 编程基础-语句和函数

1、变量、赋值语句

如a=5 ,其中a为可赋值的量,叫做变量。把数字 5 放a里面.这叫”赋值语句”,即把一个值赋给一个变量

2、if判断

可以想成是 “如果 X 为真,那么执行 Y,反之,则不执行Y”,if语句就像岔路口,走哪条路取决于条件的真假。

3、while循环

当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。

4、for循环

for循环不判断条件,判断次数,会循环特定次数,不判断条件。for 的特点是,每次结束, i 会 +1

5、函数

当一个代码很常用的时候,我们把它包装成一个函数(也叫方法或者子程序),其他地方想用这个代码,只需要写函数名即可。

第13课 算法入门

0、基本慨念

算法:解决问题的基本步骤

1、选择排序

数组:一组数据

选择排序的复杂度为O(n²)

2、大O表示法

大O表示法(算法)的复杂度:算法的输入大小和运行步骤之间的关系,来表示运行速度的量级

3、归并排序

归并排序的算法复杂度为O(n*log n),n是需要比较+合并的次数,和数组大小成正比,log n是合并步骤所需要的的次数,归并排序比选择排序更有效率

4、Dijkstra算法

一开始复杂度为O(n²),后来复杂度为O(nlog n +I),在下图中,n表示节点数,I表示有多少条线。

img

第十四集 数据结构

1、数组 下标

数组(Array),也叫列表(list)或向量(Vector),是一种数据结构。为了拿出数组中某个值,我们要指定一个下标(index),大多数编程语言里,数组下标都从 0 开始,用方括号 [ ] 代表访问数组。注意:很容易混淆 “数组中第 5 个数” 和 “数组下标为 5 的数”,数组下标为5的数是数组里面的第6个数

2、字符串

即字母 数字 标点等组成的数组,字符串在内存里以0结尾。

3、矩阵

可以把矩阵看成数组的数组

4、结构体

把几个有关系的变量存在一起叫做结构体

5、指针

指针是一种特殊变量,指向一个内存地址,因此得名。

6、节点

以指针为变量的结构体叫节点

7、链表

用节点可以做链表,链表是一种灵活数据结构,能存很多个 节点 (node),灵活性是通过每个节点 指向 下一个节点实现的。链表可以是循环的也可以是非循环的,非循环的最后一个指针是0

8、队列

“队列” 就像邮局排队,谁先来就排前面,这叫 先进先出(FIFO——first in first out),可以把”栈”想成一堆松饼,做好一个新松饼,就堆在之前上面,吃的时候,是从最上面开始

9、栈

栈是后进先出(LIFO)

10、树

img

11、图

如果数据随意连接,有循环,我们称之为图,如下图

img

第15课 阿兰图灵

0.可判定性问题

是否存在一种算法,输入正式逻辑语句 输出准确的”是”或”否”答案?

  1. 阿隆佐邱奇,Lambda算子

美国数学家 阿隆佐·丘奇,开发了一个叫”Lambda 算子”的数学表达系统,证明其不存在。

  1. 图灵机

只要有足够的规则,状态和纸带,图灵机可以解决一切计算问题。和图灵机一样完备,叫做图灵完备。

  1. 停机问题

证明图灵机不能解决所有问题。

  1. 图灵测试

向人和机器同时发信息,收到的回答无法判断哪个是人,哪个是计算机,则计算机达到了智能程度。

第16课 软件工程

1、对象

当任务庞大,函数太多,我们需要把函数打包成层级,把相关代码都放一起,打包成对象。对象可以包括其他对象,函数和变量。把函数打包成对象的思想叫做“面向对象编程”,面向对象的核心是隐藏复杂度,选择性的公布功能。

3、API

当团队接收到子团队编写的对象时,需要文档和程序编程接口(API)来帮助合作。API控制哪些函数和数据让外部访问,哪些仅供内部。

4、集成开发环境(IDE)

程序员用来专门写代码的工具

6、调试(debug)

IDE帮你检查错误,并提供信息,帮你解决问题,这个过程叫调试

7、文档与注释

文档一般放在一个叫做README的文件里,文档也可以直接写成“注释”,放在源代码里,注释是标记过的一段文字,编译代码时,注释会被忽略。注释的唯一作用是帮助开发者理解代码。

8、版本控制

版本控制,又称源代码管理。大型软件公司会把会把代码放到一个中心服务器上,叫”代码仓库”,程序员可以把想修改的代码借出,修改后再提交回代码仓库。版本控制可以跟踪所有变化,如果发现bug,全部或部分代码,可以”回滚”到之前的稳定版。

9、质量控制

测试可以统称“质量保证测试”(QA),作用是找bug

10、beta alpha

beta版软件,即是软件接近完成,但没有完全被测试过,公司有时会向公众发布beta版,以帮助发现问题。alpha是beta前的版本,一般很粗糙,只在内部测试

第17课 集成电路与摩尔定律(硬件的发展)

  1. 分立元件与数字暴政

一开始,计算机都有独立组件构成,叫**”分立元件”** , 然后不同组件再用线连在一起,这会导致计算机的构成很复杂,这个问题叫做数字暴政

  1. 集成电路与仙童半导体

封装复杂性:与其把多个独立部件用电线连起来,拼装出计算机,不如把多个组件包在一起,变成一个新的独立组件。这种新的独立组件就叫集成电路(IC),仙童半导体(用硅做成)让集成电路变成了现实。为了不用焊接或用一大堆线,发明了印刷电路板(PCB),他通过蚀刻金属线的方式把零件连接到一起

  1. 光刻0421

即用光把复杂图案印到材料上。我们把一片薄片状的硅叫做晶圆,通过一系列生产步骤,将晶圆表面薄膜的特定部分除去的工艺叫做光刻

img

光刻组件示意图

img

光刻成品示意图

  1. 摩尔定律

每两年左右,得益于材料和制造技术的发展 ,同样大小的空间,能塞进两倍数量的晶体管。

  1. 进一步小型化会碰到的问题

1、由于光的波长限制,精度已到极限。

2、量子隧穿效应:当晶体管非常小,电极之间可能只距离几个原子,电子会跳过间隙,会产生漏电问题

第18课 操作系统

  1. 操作系统(OS)

操作系统也是一种程序,不过它有操作硬件的特殊权限,可以运行和管理其他程序。

  1. 批处理

一个程序运行后会自动运行下一个程序。

  1. 外部设备

和计算机连着的其他设备,如打印机。

  1. 设备驱动程序

为了使所写程序和不同类型的电脑兼容,我们需要操作系统充当软件和硬件之间的媒介,更具体地说,操作系统提供程序编程接口(API)来抽象硬件,叫“设备驱动程序”。程序员可以用标准化机制,和输入输出硬件(I/O)交互,

  1. 多任务处理

操作系统能使多个程序在单个CPU上同时进行的能力,叫做“多任务处理”

  1. 虚拟内存

多程序处理带来了一个程序所占用内存可能不连续的问题,导致程序员难以追踪一个程序,为了解决这个问题操作系统会把内存地址虚拟化,这叫“虚拟内存”。

  1. 动态内存分配

虚拟内存的机制使程序的内存大小可以灵活增减,叫做“动态内存分配”,对程序来说,内存看上去是连续的。

  1. 内存保护

给每个程序分配单独的内存,那当这个程序出现混乱时,它不会影响到其他程序的内存,同时也能有效地防止恶意程序篡改其他程序,这叫做内存保护。

  1. 多用户分时操作系统(Multics)

用来处理多用户同时使用一台计算机的情况,即每个用户只能用一小部分处理器,内存等,

  1. Unix

把操作系统分成两个部分,一个是操作系统的核心部分,如内存管理,多任务和输入/输出处理,这叫做“内核”,第二部分是一堆有用的工具,比如程序和运行库。

第19课 内存和储存介质(存储技术的发展)

  1. 纸卡 纸带

问题:读取慢 难修改 难存临时值

  1. 延迟线存储器

利用线的延迟在线里存储数据,又叫顺序存储器或者循环存储器。

存在问题:1 不能随意调出数据

​ 2 难以增加内存密度

  1. 磁芯

利用电磁感应原理

问题 成本高

  1. 磁带

问题 访问速度慢

  1. 磁鼓

与磁带相似

  1. 硬盘

与磁带相似

  1. 内存层次结构

在计算机中,高速昂贵和低速便宜的内存混合使用以取得一个平衡

  1. 软盘

除了磁盘是软的,其他都和硬盘一样,好处是便携

  1. 光盘

原理:光盘表面有很多小坑,造成光的不同反射,光学传感器会捕获到,并解码为 1 和 0

  1. 固定硬盘(SSD)

里面是集成电路

第 20 课 文件系统

0.为什么要采用文件格式:

可以随便存文件数据,但按格式存会更方便

  1. TXT 文本文件

用ASCII解码

  1. WAV 音频文件

记录的是振幅

  1. BMP 图片文件:

记录每个像素的红绿蓝 RGB 值

  1. 目录文件:

用来解决多文件问题,存其他文件的信息,比如开头,结尾,创建时间等

  1. 平面文件系统 - Flat File System

文件都在同一个层次,早期空间小,只有十几个文件,平面系统够用

  1. 解决文件紧密的排序造成的问题

  2. 把空间划分成一块块

  3. 文件拆分存在多个块里

  4. 碎片整理

文件的增删改查会不可避免的造成文件散落在各个块里,如果是磁带这样的存储介质就会造成 问题,所以需要碎片整理——计算机把文件内容调换位置

  1. 分层文件系统 - Hierarchical File System:

有不同文件夹,文件夹可以层层嵌套

第21课 压缩

0.压缩的好处

能存更多文件,传输也更快

  1. 游程编码 Run-Length Encoding

适合经常出现相同值的文件,以吃豆人游戏为例:

img

img

img

  1. 无损压缩 Lossless compression

没有损失任何数据的压缩。

  1. 霍夫曼树 Huffman Tree和字典编码 Dictionary coders

一种高效的编码模式,以压缩图片为例

img

img

img

img

img

img

  1. 感知编码 Perceptual coding和有损压缩 jpeg 格式

删掉人类无法感知的数据的有损压缩方法,叫做“感知编码”,如音频文件,人类听不到超声波,所以可以舍去,MP3就是音频的一种压缩形式。

有损压缩的一个例子就是jpeg模式,如图:img

img

img

  1. 时间冗余 Temporal redundancy

一个视频由很多图片构成,其中很多图片的背景一样,这就构成了时间冗余,很多视频编码格式,只存变化的部分。进阶的视频压缩模式会找到帧与帧的相似性,然后打补丁,MPEG-4 是视频压缩的常见标准。

第 22 课 命令行界面

  1. 人机交互 (Human-Computer Interaction)发展史

计算机早期同时输入程序和数据(用纸卡/纸带)

运行开始直到结束,中间没有人类进行操作,

原因是计算机很贵,不能等人类慢慢输入,执行完结果打印到纸上 (02:34)

到1950年代,计算机足够便宜+快,人类和计算机交互式操作变得可行

为了让人类输入到计算机,改造之前就有的打字机,变成电传打字机 (02:44~05:38)

到1970年代末,屏幕成本足够低,屏幕代替电传打字机,屏幕成为标配 (07:24)

  1. 人机交互工具的变化

1 早期输出数据是打印到纸上,而输入是用纸卡/纸带一次性把程序和数据都给进去

2 QWERTY 打字机的发展

3 电传打字机 Teletype machine

作用:用于发电报,使两人可以远距离沟通

  1. 命令行界面 Command line interface

输入命令,计算机会给予回应

第 23课 屏幕与 2D 图形显示

  1. PDP-1 计算机、键盘和显示器分开,屏幕显示临时值

  2. 阴极射线管 Cathode Ray Tube (CRT)

CRT 有两种绘图方式:

​ 矢量扫描 Vector Scanning

img

​ 光栅扫描 Raster Scanning

img

  1. 02:14 液晶显示器 Liquid Crystal Displays (LCD),像素 (Pixel)

随着显示技术的发展,出现了LCD,LCD 也用光栅扫描。在屏幕上显示的清晰的点,叫”像素”

  1. 03:32 字符生成器 Character generator,

相比于像素,为了减少内存,人们更喜欢使用字符,计算机需要额外硬件,来从内存读取字符,转换成光栅图形 \N 这样才能显示到屏幕上个硬件叫 “字符生成器”,基本算是第一代显卡。它内部有一小块只读存储器,简称 ROM,存着每个字符的图形,叫”点阵图案”,

  1. 屏幕缓冲区 Screen buffer

为了显示,”字符生成器” 会访问内存中一块特殊区域 这块区域专为图形保留,叫 屏幕缓冲区,程序想显示文字时,修改这块区域里的值就行。

  1. 05:09 矢量命令画图

概念非常简单:所有东西都由线组成,矢量指令可以画出线,把许多矢量指令存在硬盘上,就能画出很多由线组成的复杂图形。

  1. 06:34 Sketchpad, 光笔 (Light pen),位图显示和画矩形

Sketchpad ,一个交互式图形界面,用途是计算机辅助设计 (CAD)。

光笔,就是一个有线连着电脑的触控笔,有了它们,用户可以画出很完美的线条并进行缩放等操作。

位图显示,内存中的位对应着屏幕上显示的像素。

想画更复杂的图形,如画矩形,我们需要四个值,起点的x y坐标,高度和宽度。

第 24 课 冷战和消费主义

本课概括:政府和消费者推动了计算机的发展

早期靠政府资金,让技术发展到足够商用,然后消费者购买商用产品继续推动产品发展

冷战导致美国往计算机领域投入大量资源 (00:00~01:43)

范内瓦·布什 预见了计算机的潜力,提出假想机器 Memex

帮助建立 国家科学基金会,给科学研究提供资金 (01:43~03:43)

1950 年代消费者开始买晶体管设备,收音机大卖

日本取得晶体管授权后,索尼做了晶体管收音机,为日本半导体行业崛起埋下种子 (03:43~04:29)

苏联 1961 年把宇航员加加林送上太空,导致美国提出登月

NASA 预算大大增加,用集成电路来制作登月计算机 (04:29~06:27)

集成电路的发展实际上是由军事应用大大推进的,阿波罗登月毕竟只有 17 次

美国造超级计算机进一步推进集成电路 (04:29~07:11)

美国半导体行业一开始靠政府高利润合同活着,忽略消费者市场,1970年代冷战渐消,行业开始衰败

很多公司倒闭,英特尔转型处理器 (07:11~08:23)

第 25 课 个人计算机革命

本集概括:继续讲计算机发展史

00:18 1970年代初成本下降,个人计算机变得可行

​ RAM:random-access memory 随机访问存储器

​ ROM:read-only memory 只读存储器

01:51 Altair 8800 第一台取得商业成功的个人计算机

02:32 比尔·盖茨 和 保罗·艾伦写 BASIC 解释器,解释器和编译器类似,区别是解释器运行时转换,而编译器提前转换

03:45 乔布斯提议卖组装好的计算机,Apple-I 诞生

04:40 1977年出现3款开箱即用计算机:

“Apple-II”,”TRS-80 Model I”,”Commodore PET 2001”

06:26 IBM 意识到个人计算机市场

IBM PC 发布,采用开放架构,兼容的机器都叫 IBM Compatible (IBM 兼容)

生态系统产生雪球效应:

因为用户多,软硬件开发人员更愿意花精力在这个平台

因为软硬件多,用户也更乐意买 “IBM 兼容” 的计算机

08:44 苹果选封闭架构,一切都自己来,只有苹果在非 “IBM 兼容” 下保持了足够市场份额

第 26 集:图形用户界面 (GUI)

——GUI是“事件驱动编程”,代码可以在任意时间执行以响应事件,而不像传统代码一样自上而下。

01:10 图形界面先驱:道格拉斯·恩格尔巴特(Douglas Engelbart)——设想计算机成为未来知识性员工应对问题的工具,并发明了鼠标。

03:20 1970年成立 帕洛阿尔托研究中心(Palo Alto Research Center)

03:29 1973年完成 Xerox Alto(施乐奥托) 计算机——创立了桌面,窗口等计算机概念

06:38 1981年的 Xerox Star system(施乐之星系统)

​ 创建了文档概念

07:45 所见即所得 WYSIWYG——施乐打印出来的东西和计算机上一样,并发明了剪切 复制 黏贴等计算机概念

08:18 史蒂夫·乔布斯去施乐参观

09:15 1983年推出 Apple Lisa

09:31 1984年推出 Macintosh 成功

10:12 1985年推出 Windows 1.0,之后出到 3.1

10:43 1995年推出 Windows 95 提供新的图形界面,并有Mac没有的新功能,如多任务和受保护内存

11:08 1995年微软做失败的 Microsoft Bob——类似于房子的设计

第 27 集:3D 图形

1.线框渲染 Wireframe Rendering

有图形算法 负责把3D坐标”拍平”显示到2D屏幕上,这叫3D投影(包括正交投影和透视投影),所有的点都从3D转成2D后,就可以用画2D线段的函数来连接这些点,这叫线框渲染,

2.网格 Mesh

如果我们需要画比立方体复杂的图形,三角形比线段更好,在3D图形学中我们叫三角形”多边形”(Polygons),一堆多边形的集合叫 网格,网格越密,表面越光滑,细节越多,

3.三角形更常用因为能定义唯一的平面

4. 扫描线渲染 Scanline Rendering——填充图形的经典算法

​ 填充的速度叫做填充速率

img

抗锯齿——边缘羽化,如果像素在多边形内部,就直接涂颜色,如果多边形划过像素,颜色就浅一些

img

5.遮挡 Occlusion

用排序算法,从远到近排列,然后从远到近渲染,这叫画家算法

6. 深度缓冲 Z Buffering

另一种画遮挡的方法,简而言之,Z-buffering 算法会记录场景中每个像素和摄像机的距离,在内存里存一个数字矩阵,首先,每个像素的距离被初始化为”无限大”,然后 Z-buffering 从列表里第一个多边形开始处理,也就是A,它和扫描线算法逻辑相同,但不是给像素填充颜色,而是把多边形的距离和 Z-Buffer 里的距离进行对比,它总是记录更低的值,因为没对多边形排序,所以后处理的多边形并不总会覆盖前面的。

07:45 Z Fighting 错误

采用深度缓冲算法,哪个图形在前将会变化

07:51 背面剔除 Back Face Culling

由于游戏角色的头部或地面,只能看到朝外的一面,所以为了节省处理时间,会忽略多边形背面,这很好,但有个bug是 如果进入模型内部往外看,头部和地面会消失

08:53 表面法线 Surface Normal

在3D图形上任取一小个区域,它面对的方向叫“表面法线”

09:33 平面着色 Flat Shading

基本的照明算法,缺点是使多边形边界明显,看上去不光滑

09:43 高洛德着色 Gouraud shading, 冯氏着色 Phong Shading

不只用一种颜色上色

10:06 纹理映射 Texture Mapping

纹理在图形学中指外观,纹理有多种算法来达到花哨效果,最经典的是纹理映射。

img

纹理映射示意图

11:24 图形处理单元 GPU, Graphics Processing Unit

方便并行处理多个图形,并把图形分成一个个小块来处理。

(28-30:介绍网络的发展和支撑他们的基础原理和技术)

第 28 集:计算机网络

1. 局域网 Local Area Networks - LAN

计算机近距离构成的小型网络,叫局域网(LAN),以太网是经典的局域网

2.媒体访问控制地址 Media Access Control address - MAC

用于确认局域网和WiFi传输的对象

3.载波侦听多路访问 Carrier Sense Multiple Access - CSMA

多台电脑共享一个传输媒介,叫做载波侦听多路访问,共享媒介又称载体,如WiFi的载体是空气,以太网的载体是电线。载体传输数据的速度叫带宽,

4.指数退避 Exponential Backoff

当多台计算机同时想要传输数据时,就会发生冲突,当计算机检测到冲突 就会在重传之前等待一小段时间,,这一段时间包括固定时间+随机时间,再次堵塞时固定时间将会指数级增加,这叫做指数退避。

5.冲突域 Collision Domain

载体和其中的设备总称为“冲突域”,为了避免冲突,可以用交换器

07:08 电路交换 Circuit Switching

缺点:不灵活且数量昂贵

img

6. 报文交换 Message Switching

报文的具体格式简称IP,每一个电脑都会有一个IP地址

好处,可以用不同路由,通信更可靠也更能容错。

坏处,当报文比较大的时候,会堵塞线路。解决方法是 将大报文分成很多小块,叫”数据包“,来进行运输,这叫“分组交换”。路由器会平衡与其他路由器之间的负载 以确保传输可以快速可靠,这叫”阻塞控制

消息沿着路由跳转的次数 叫”跳数“(hop count),看到哪条线路的跳数很高,说明出了故障,这叫跳数限制。

img

第 29 集:互联网

1。电脑连接互联网的过程

你所用的电脑首先要连接到局域网,家里WiFi路由器连着的所有设备,组成了局域网,局域网再连到广域网(WAN),广域网的路由器一般属于你的互联网服务提供商(ISP),再连更大的WAN,往复几次,最后连到互联网主干。

2.IP - 互联网协议 - Internet Protocol

IP负责把数据包送到正确的计算机

3. UDP - 用户数据报协议 - User Datagram Protocol

UDP负责把数据包传送到正确的程序,有端口号(哪个程序),校验和(数据是否损坏)

4.校验和 - Checksum

UDP校验和只有16位,超过这个数,弃高位。

5.TCP - 传输控制协议 - Transmission Control Protocol

如果要控制所有数据必须到达,就用传输控制协议

TCP的特点

1 控制发送的文件按顺序到达

2 要求接收方确认无误后发送确认码(ACK),确认码的成功率和来回时间可以用来推测网络的拥堵程度,TCP可以根据这个调整传输率。由于这个特点,TCP对时间要求高的程序不适用

6 DNS - 域名系统 - Domain Name System

计算机访问网站时需要两样,IP地址和端口号,但记数字很难,所以互联网通过域名系统把域名和IP地址一一对应。域名系统是树状结构

img

10:47 OSI - 开放式系统互联通信参考模型 - Open System Interconnection

img

第 30 集:万维网(WWW)

1.基本单位

万维网在互联网上运行,它的基本单位是页面

点超链接可以去到另一个页面,文字超链接又叫超文本

img

超链接工作过程中示意

3.状态码

状态码代表所访问网页的状态

4.URL - 统一资源定位器 - Uniform Resource Locator

网页的唯一网址

5.HTTP - 超文本传输协议 - HyperText Transfer Protocol

6.HTML - 超文本标记语言 - HyperText Markup Language

7.万维网发展史

1 第一个浏览器和服务器是 Tim Berners-Lee 花了 2 个月在 CERN 写的

2 1991年万维网就此诞生

3 Jerry 和 David 的万维网指南 后来改名成 Yahoo

4 搜索引擎 JumpStation

(包括爬虫 索引 用法)

5 搜索引擎 Google

改进排序方法,按照链接指向的多少来排序

8.网络中立性

平等地对待每个数据包

第 31 集:计算机安全

1. 保密性, 完整性, 可用性 Secrecy, Integrity, Availability

计算机为了安全,要实现三性

保密性:只有有权限的人,才能读取计算机系统和数据

完整性:只有有权限的人,才能使用和修改系统和数据

可用性:有权限的人,可以随时访问计算机系统和数据

2.Threat Model 威胁模型

为了实现这三个目标,安全专家会从 \N 抽象层面想象”敌人”可能是谁,这叫”威胁模型分析”,模型会对攻击者有个大致描述:\N 能力如何,目标可能是什么,可能用什么手段,攻击手段又叫”攻击矢量”,”威胁模型分析”让你能为特定情境做准备,不被可能的攻击手段数量所淹没。

很多安全问题可以总结成两个:

你是谁?你能访问什么?

3.身份验证 (Authentication) 的三种方式:

What you know, 你知道什么 ex、用户名和密码

What you have, 你有什么

What you are, 你是什么

4.访问控制 Access Control

Bell LaPadula model 不能向上读取,不能向下写入

5.安全内核

安全内核应该有一组尽可能少的操作系统软件,和尽量少的代码。

6.独立安全检查和质量验证

最有效的验证手段

7.隔离 Isolation, 沙盒 Sandbox

优秀的开发人员,应该计划当程序被攻破后,\N如何限制损害,控制损害的最大程度,并且不让它危害到计算机上其他东西,这叫”隔离”。要实现隔离,我们可以”沙盒”程序,这好比把生气的小孩放在沙箱里,他们只能摧毁自己的沙堡,不会影响到其他孩子,方法是给每个程序独有的内存块,其他程序不能动。一台计算机可以运行多个虚拟机,如果一个程序出错,最糟糕的情况是它自己崩溃,或者搞坏它处于的虚拟机。

第 32 集:黑客与攻击

1.社会工程学 Social Engineering

欺骗别人获得信息,或让人安装易于攻击的系统

2.钓鱼 Phishing

3.假托 Pretexting

4.木马 Trojan Horses

5.NAND镜像 NAND Mirroring

——来避免输错密码后等待

6.漏洞利用 Exploit

7. 缓冲区溢出 Buffer Overflow

——一种常见的漏洞利用

9.边界检查 Bounds Checking和金丝雀

——防止缓冲区溢出的手段,金丝雀,留出一些不用的空间,当空间变少时,说明有攻击者乱来。

10. 代码注入 Code Injection

把代码注入到程序中,造成混乱

11.零日漏洞 Zero Day Vulnerability

当软件制造者不知道软件有新漏洞被发现了,这个漏洞被称为“零日漏洞”

12.计算机蠕虫 Worms

如果有足够多的电脑有漏洞,让恶意程序可以在电脑间互相传播,这种恶意程序叫做蠕虫

13.僵尸网络 Botnet

如果黑客掌握足够多电脑,那他们可以组成“僵尸网络”

第 33 集:加密

1. 加密 - Encryption,解密 - Decryption

01:11 凯撒加密 Caesar cipher——一种替换加密 Substitution cipher,把字母替换成其他字母

01:59 移位加密 Permutation cipher

img

列移位加密 Columnar transposition cipher

02:37 德国 Enigma 加密机 一种进阶的替换加密,每一次的映射都不同。

04:54 1977年”数据加密标准” - Data Encryption Standard (DES)

05:24 2001年”高级加密标准” - Advanced Encryption Standard (AES)

2. 密钥交换 - Key exchange

img

img

img

img

用颜色来举例”单向函数”和”密钥加密”的原理

实例:迪菲-赫尔曼密钥交换 - Diffie-Hellman Key Exchange

用模幂计算来得到秘钥

3. 非对称加密 - Asymmetric encryption

以上的例子,双方用一样的秘钥加密和解密信息,叫对称解密。也可以人们用公钥加密信息,只有有私钥的人能解密,或者反过来,这叫非对称解密。最有名的非对称加密算法是RSA

第 34 集:机器学习与人工智能

以区分飞蛾为例

1. 分类 Classification

2.做分类的算法 分类器 Classifier

3.用于分类的值是特征 Feature

4. 特征值+种类叫做标记数据 Labeled data

img

标记数据

5. 决策边界 Decision boundaries

img

虚线为决策边界

6.混淆矩阵 Confusion matrix

img

右下角表为混淆矩阵

7.03:49 决策树 Decision tree

img

8.支持向量机 Support Vector Machines

本质上是用任意线段来切分决策空间,不一定是直线。

9.人工神经网络 Artificial Neural Network

不用统计学的算法。模拟人类学习的过程,将数据进行加权求和修正等一系列处理。

10.深度学习 Deep learning

img

得名原因:有很多的隐藏层

  1. 弱AI, 窄AI Weak AI, Narrow AI

只能做指定内容的内容

12. 强AI Strong AI

通用的,和人一样智能的AI叫做强AI,目前没有人能做到。

14.强化学习 Reinforcement Learning

学习什么管用,什么不管用,自己发现成功的策略,这叫强化学习。

第 35 集:计算机视觉

1.颜色跟踪算法——跟踪一个像素

2. 检测垂直边缘的算法

物体的边缘有多个色素,不适合颜色跟踪算法。要识别边缘,可以判断其两边像素的颜色差异程度

3. 核/过滤器 kernel or filter

——用来检测垂直边缘的算法的数学符号,如下绿色的图。

img

核或过滤器图示

img

算法示例

4. 卷积 convolution

把核应用于像素块

5.Prewitt 算子 Prewitt Operators

水平和垂直边缘增强的核叫Prewitt 算子

  1. 维奥拉·琼斯 人脸检测 Viola-Jones Face Detection

7.卷积神经网络 Convolutional Neural Networks

用一层层不同的核来识别复杂场景,用脸来举例,先识别边缘,然后形状,器官…直至某一层把所有特征堆积在一起,识别出脸之后,可以进一步用其他算法定位面部标志,如眼睛和眉毛具体位置,从而判断心情等信息

第 36 集:自然语言处理 NLP

1.过程

通过词性 Parts of speech短语结构规则 Phrase structure rules构建分析树 Parse tree,并结合语言模型 Language Model来实现语音识别 Speech recognition

2.实现原理:

快速傅立叶变换 Fast Fourier Transform,把波形转换成频率

3. 音素 Phonemes

构成单词的声音片段

4.语音合成 Speech Synthesis

第 37 集:机器人

1.机器人发展中的例子

02:08 法国吃饭鸭 - Digesting Duck, Canard Digerateur

02:23 土耳其行棋傀儡, 下国际象棋(假的,有人控制)

02:43 第一台计算机控制的机器出现在1940年代晚期,叫数控机器, Computer Numerical Control(CNC)

03:32 1960年 Unimate,第一个商业贩卖的 可编程工业机器人

2.机器人控制的回路

04:08 负反馈回路 negative feedback loop

05:17 比例-积分-导数控制器 Proportional–Integral–Derivative controller PID 控制器

通过控制三个值,比例值——实际值和理想值差多少,积分值——一段时间误差的总和,前两者用来修正错误:导数值(微分值)——期望值和实际值之间的变化率,用来避免未来的错误,这也叫预期控制,来控制进程。

3. 机器人三定律 Three Laws of Robotics

——让机器人不要伤害人类

第38课 计算机心理学

0、计算机中用到的心理学原理

社会心理学 认知心理学 行为心理学 感知信息学

1、易用度

指人造物体,比如软件,达到目的的效率有多高

2、颜色强度排序和颜色排序

人类擅长给颜色强度排序,所以颜色强度很适合现实连续值;而人类不擅长给颜色排序,所以如果数据没有顺序,用不同颜色就很合适,如分类数据。

3、分组更好记

信息分块会更好记。分块是指把信息分成更小,更有意义的块,如电话号码分块,界面设计分块。

4、直观功能

直观功能为如何操作物体提供线索,如平板用于推,旋钮用来转,直观功能做得好,用户只需要看一眼就知道怎么搞,而不需要其他东西来说明。ex.门把手让人想拉开门,但如果门需要推开,那这就是个不好的直观功能,不如直接采用平板门来的好。

5、认出VS回想

和直观功能相关的一个心理学概念是认出和回想,这就是选择题比填空题简单的原因。一般来说,用感觉触发记忆会容易得多,比如文字、图片和声音,所以我们用图标表示功能,如垃圾桶表示回收站。但是,让所有菜单选项好找好记,有时候意味着用的时候会慢一些。这与另一个心理学概念冲突:”专业知识”,当你用界面熟悉之后,速度会更快一些,所以 好的界面应该提供多种方法来实现目标,一个好例子是复制粘贴,可以在”编辑”的下拉菜单中找到,也可以用快捷键,两者都不耽误,鱼与熊掌兼得。

6、让机器有一定的情商以及Facebook的研究

我们也希望电脑能有一点情商,能根据用户的状态做出合适地反应,让使用电脑更加愉快。因为情绪会影响日常活动,比如学习,沟通和决策,情感系统会用传感器,录声音,录像(你的脸)以及生物指标,比如出汗和心率,得到的数据和计算模型结合使用,模型会估算用户的情绪,给最好的回应用户。

7、用软件修正注视位

心理学研究也表明,如果想说服,讲课,或引起注意 ,眼神注视非常重要。为此,研究人员开发了计算机视觉和图形软件 来纠正头部和眼睛,看视频的人会觉得对方在直视他们

8、把机器人做得像人

人也喜欢像人的机器人。人机交互,简称HRI,是一个研究人类和计算机交互的领域。

img

​ 恐怖谷原理

9、开放性问题

计算机该不该对人类说谎等

第 39 集:教育科技

1. 通过调速,暂停等技巧,加强学习效率

2.大型开放式在线课程 - Massive Open Online Courses (MOOC)

3.智能辅导系统 - Intelligent Tutoring Systems

4.判断规则 - Production rule

5.域模型 - Domain Model

判断规则和选择算法,组合在一起成为域模型

6.贝叶斯知识追踪 Bayesian knowledge tracing

把学生的知识掌握当成隐藏变量,根据学生答题的正确度,更新学生掌握程度的估算值。具体而言,贝叶斯知识追踪有一组方程,会用这四个概率,更新学生模型,评估其掌握程度。

学生已经学会的概率

瞎猜的概率

失误的概率

做题过程中学会的概率

7.自适应性程序

一种算法,选择适合学生的问题,让学生学。

8. 教育数据挖掘 Educational Data Mining

看学生答题时停顿的时间,观察学生停顿和加速视频的时间段,看论坛问题,来评估学生的程度。

第 40 集:奇点,天网,计算机的未来

1. 普适计算 Ubiquitous Computing

计算机融入生活的方方面面

2.奇点 Singularity

——智能科技的失控性发展

img

3.把工作分为4个象限,讨论自动化带来的影响

img

4.机器人的存在时间可能长过人类,可以长时间探索宇宙

后记:

整个视频看完后,感觉质量很高。对于计算机的结构了解更加的透彻了。