最近在github上有看到一个很不错的课,从看到到今天,我已经看了9课了...
推荐 程序员的你一定要看,不是程序员的也可以看看,我已经安利刚中考完的我妹妹看了(培养程序媛...)
大家都知道计算机世界是由0和1组成的,但是只有0和1是怎么实现这么多的功能的呢?
看了这个课,你肯定能明白这一点,而且还能自己造一个计算机!!!
还要说一点,本课程并不会教你如何编程.
课程链接 https://www.bilibili.com/video/av21376839/
更多课程介绍,请点击阅读原文,到github上查看.
第 1 集:计算机早期历史
提到的设备:算盘 → 步进计算器 → 差分机 → 分析机 → 打孔卡片制表机 提到的人名:Charles Babbage, Ada Lovelace
02:27 最早的计算设备是算盘,举例如何使用 04:31 Computer 从指代职业变成指代机器 04:57 机器里有名的是:步进计算器。第一个可以做加减乘除的机器 06:44 炮弹为了精准,要计算弹道,二战是查表来做。但每次改设计了就需要做一张新表 07:30 Charles Babbage 提出了 "差分机", 在构造差分机期间,想出了分析机, 分析机是通用计算机 08:50 Lovelace 给分析机写了假想程序,因此成为了第一位程序员 09:25 人口普查 10 年一次. Herman Hollerith 的打孔卡片制表机大大提升了效率
提到的设备:继电器 → 真空管 → 晶体管
00:17 20世纪的发展要求更强的计算能力。柜子大小的计算机发展到房间大小 01:06 哈佛 Mark 1 号,IBM 1944 年做的 02:25 继电器,继电器一秒最多 50 次开关 03:24 继电器出 bug 03:49 1904 年,热电子管出现,第一个真空管。改进后变成和继电器的功能一样 05:34 "巨人1号" 计算机在英国 布莱切利园 首次大规模使用真空管。但编程麻烦,还要配置 06:40 1946 年,宾夕法尼亚大学的 ENIAC 是第一个通用可编程计算机 07:36 1947 年,贝尔实验室做出了晶体管,晶体管有诸多好处,IBM 很快全面转向晶体管 09:27 硅谷的典故:很多晶体管和半导体的开发都是这里做的。而生产半导体最常见的材料是硅 09:41 肖克利半导体 → 仙童半导体 → 英特尔
01:00 什么是二进制, 为什么用二进制, 布尔逻辑 02:46 3个基本操作:NOT,AND,OR 02:51 解释3个基本操作 07:11 XOR 异或
00:46 用十进制举例二进制的原理,演示二进制加法。存储单位 MB GB TB 等 05:30 正数,负数,整数,浮点数的表示 07:20 美国信息交换标准代码 - ASCII, 用来表示字符 09:00 UNICODE 1992 年诞生,是字符编码标准, 解决 ASCII 不够表达所有语言的问题
00:03 简单介绍 ALU ,英特尔 74181 01:24 ALU 有 2 个单元,1 个算术单元和 1 个逻辑单元
01:32 算术单元 半加器 (处理1个 bit,2个输入) 全加器 (处理1个 bit,3个输入) 8 bit 加法 (1个半加器,7个全加器) 溢出的概念,吃豆人的例子 乘法除法
07:32 逻辑单元 检测数字是否为 0 的电路(一堆 OR 门最后加个 NOT 门) ALU 抽象成一个 V 符号 Flag 标志(是否相等,是否小于,是否溢出等等)
本机重点是 Memory (存储 / 内存 两种含义)
03:30 存 1 位 (Gated Latch - 锁存器) 04:48 存 8 位 (Register - 寄存器)
05:46 16x16 的矩阵存 256 位 数据选择器/多路复用器 (Multiplexer) 解码 8 位地址,定位到单个锁存器
07:38 4 位代表行, 4 位代表列
08:16 组合 256 位内存 + 多路复用器 09:01 可寻址的 256 字节 内存 一条1980年代的内存,1M 大小
10:14 8个模块,每个模块有32个小方块, 每个小方块有 4 个小块,每个小块是 128 位 x 64 位
重点
01:00 RAM + 寄存器 + ALU 做个 CPU 04:00 解释 "取指令→解释→执行" 这个循环 08:00 时钟是什么, 时钟速度和赫兹 10:00 超频提升性能, 降频省电
本集重点:一步步带你运行一遍程序
00:45 回顾上集的例子程序,一步步讲解。介绍”指令集”的概念 LOADA,LOADB,SUB,JUMP,ADD,HALT 等指令 05:16 带条件跳转,JUMP NEGATIVE 是负数才跳转,还有其他类型的 JUMP 08:00 真正现代 CPU 用更多指令集。位数更长。 09:07 1971年的英特尔 4004 处理器,有 46 个指令 09:36 如今英特尔酷睿 i7, 有上千条指令
00:24 早期是加快晶体管切换速度,来提升 CPU 速度 01:20 给 CPU 专门的除法电路 + 其他电路来做复杂操作,比如游戏,视频解码 02:28 给 CPU 加缓存,提高数据存取速度,更快喂给 CPU,用计算餐馆销售额举例 05:13 脏位 - Dirty bit 05:33 流水线设计,用 1 个洗衣机和 1 个干燥机举例 06:01 并行处理 - parallelize 07:33 乱序执行 - out-of-order execution 08:21 推测执行 - speculative execution 08:50 分支预测 - branch prediction 09:34 多个 ALU 09:54 多核 (Core) 10:11 多个独立 CPU 10:52 超级计算机,中国的"神威 太湖之光"
本集重点:早期计算机如何编程 打孔纸卡 → 插线板 → 面板拨开关
00:00 开头说本集重点:程序如何进入计算机 00:53 拿纺织业举例,给机器编程的需求远在计算机出现前就有了 01:41 打孔纸卡 - Punched card 02:36 插线板 - Plugboard 04:20 冯诺依曼架构 - Von Neumann Architecture 07:00 面板编程 - Panel programming 07:29 第一款取得商业成功的家用计算机: Altair 8800 08:15 编程依然很困难,人们需要更友好更简单的方式编程 08:44 下周主题:编程语言
编程:二进制 → 助记符(汇编器)→ A-0(编译器)→ FORTRAIN
01:45 二进制写程序,先纸上写伪代码,手工转二进制,很快就烦了 02:28 用 "助记符” 写代码(LOAD_A 14)为了把助记符转二进制,汇编器诞生 (Assembler) 04:32 葛丽丝·霍普 (Grace Hopper) - 哈佛1号计算机首批程序员, 海军军官 05:13 Grace 设计了编程语言 A-0 05:29 Grace 1952 年做了第一个编译器 (Compiler),实现 A-0 06:29 变量 (Variables) 07:01 FORTRAN 08:18 COBOL 09:25 新语言 1960 年代:ALGOL,LISP,BASIC 1970 年代:Pascal,C,Smalltalk 1980 年代:C++,Objective-C,Perl 1990 年代:Python,Ruby,Java
00:50 变量, 赋值语句 02:08 Grace Hopper 拍虫子游戏 02:52 if 判断 04:19 while 循环 05:48 for 循环 07:00 函数 11:11 下集介绍算法
03:00 选择排序 - Selection sort 03:52 大 O 表示法 - Big O notation 04:31 归并排序 - Merge sort 08:03 Dijkstra 算法
00:39 数组 - Array 02:06 字符串 - String 03:12 矩阵 - Matrix 04:05 结构体 - Struct 04:46 指针 - Pointer 04:44 节点 - Node 04:53 链表 - Linked List 06:21 队列 - Queue 06:21 栈 - Stack 07:31 树 - Tree 08:01 二叉树 - Binary Tree 08:26 图 - Graph 08:50 没时间讲红黑树和堆, 不同数据结构适用不同场景
00:33 介绍图灵 00:52 可判定性问题 01:14 阿隆佐·丘奇,Lambda 算子 01:38 图灵机 04:54 停机问题 08:09 破解德军英格玛加密机 10:40 图灵测试 11:18 图灵的个人生活 12:07 图灵奖
01:31 对象 Object 02:39 面向对象编程 Object Oriented Programming. 03:55 API Application Programming Interface 04:33 public, private 05:36 集成开发环境, IDE - Integrated Development Environments 06:09 调试 debugging 06:31 文档和注释 - readme, comment 07:33 版本控制 Version control 08:50 质量控制 Quality Assurance testing,QA 09:21 Beta, Alpha
本集重点:晶圆的制作流程:光刻 (04:21~07:42)
00:51 分立元件 Discrete components 01:09 数字暴政 Tyranny of Numbers - 是 1960 年代工程师碰到的问题 意思是如果想加强电脑性能,就要更多部件,这导致更多线路,更复杂。所以很难做 04:21 光刻 Photolithography 04:26 晶圆 Wafer 04:57 光刻胶 Photoresist 05:08 光掩膜 Photomask 06:00 掺杂 Doping 09:09 摩尔定律 Moore’s Law. 09:38 英特尔 Intel 10:20 晶体管数量大幅度增长, 1980年三万个,1990年一百万个,2000年三千万个,2010年十亿个 11:44 进一步小型化会碰到 2 个问题 1. 光的波长不足以制作更精细的设计 2. 量子隧穿效应
00:48 操作系统 Operating systems 01:34 批处理 Batch processing 01:58 计算机变便宜变多,有不同配置,写程序处理不同硬件细节很痛苦,因此操作系统负责抽象硬件 02:12 外部设备 Peripherals 02:48 设备驱动程序 Device drivers 04:43 多任务处理 Multitasking 05:54 虚拟内存 Virtual Memory 07:09 动态内存分配 Dynamic memory allocation 07:31 内存保护 Memory Protection 07:54 1970年代,计算机足够便宜,大学买了让学生用,多个学生用多个 "终端" 连接到主机 08:29 多用户分时操作系统,Multics 09:32 Unix 11:02 MS-DOS 12:09 下集是内存&存储介质
本集重点:存储技术的发展
01:01 纸卡 Paper punch cards 02:01 延迟线存储器 Delay Line Memory 04:06 磁芯 Magnetic Core Memory 06:08 磁带 Magnetic Tape 07:08 磁鼓 Magnetic Drum Memory 07:43 硬盘 Hard Disk Drives 08:53 内存层次结构 Memory Hierarchy 09:36 软盘 Floppy Disk 10:09 光盘 Compact Disk 10:51 固态硬盘 Solid State Drives
00:47 文件格式:可以随便存文件数据,但按格式存会更方便 01:00 TXT 文本文件:ASCII 01:31 WAV 音频文件:每秒上千次的音频采样数字 02:47 BMP 图片文件:像素的红绿蓝 RGB 值 04:43 文件系统:很早期时空间小,整个存储器就像一整个文件。后来随容量增长,多文件非常必要 05:37 目录文件:用来解决多文件问题,存其他文件的信息,比如开头,结尾,创建时间等
06:39 平面文件系统 - Flat File System:文件都在同一个层次,早期空间小,只有十几个文件,平面系统够用
06:57 如果文件紧密的一个个前后排序会造成问题,所以文件系统会: 1. 把空间划分成一块块 2. 文件拆分存在多个块里
08:30 文件的增删改查会不可避免的造成文件散落在各个块里, 如果是磁带这样的存储介质就会造成问题,所以做碎片整理
09:46 分层文件系统 - Hierarchical File System:有不同文件夹,文件夹可以层层嵌套
第21集讲压缩
00:26 压缩的好处是能存更多文件,传输也更快 01:52 游程编码 Run-Length Encoding 02:45 无损压缩 Lossless compression 03:55 霍夫曼树 Huffman Tree 05:56 "消除冗余"和"用更紧凑的表示方法",这两种方法通常会组合使用 06:07 字典编码 Dictionary coders, 游程编码 和 字典编码 都是无损压缩 08:03 感知编码 Perceptual coding 08:09 有损压缩 jpeg 格式 09:39 时间冗余 Temporal redundancy 10:30 MPEG-4 视频编码
本集重点:计算机早期同时输入程序和数据(用纸卡/纸带) 运行开始直到结束,中间没有人类进行操作, 原因是计算机很贵,不能等人类慢慢输入,执行完结果打印到纸上 (02:34)
到1950年代,计算机足够便宜+快,人类和计算机交互式操作变得可行 为了让人类输入到计算机,改造之前就有的打字机,变成电传打字机 (02:44~05:38)
到1970年代末,屏幕成本足够低,屏幕代替电传打字机,屏幕成为标配 (07:24)
00:32 人机交互 Human-Computer Interaction 00:50 早期输出数据是打印到纸上,而输入是用纸卡/纸带一次性把程序和数据都给进去 03:00 QWERTY 打字机的发展,克里斯托弗·莱瑟姆·肖尔斯 发明于 1868 年 05:38 电传打字机 Teletype machine 06:32 命令行界面 Command line interface 06:38 ls 命令 08:22 早期文字游戏 Zork (1977年) 08:47 cd 命令
00:05 PDP-1 计算机。键盘和显示器分开,屏幕显示临时值 01:14 阴极射线管 Cathode Ray Tube (CRT) 01:38 CRT 有两种绘图方式: 矢量扫描 Vector Scanning 光栅扫描 Raster Scanning
02:14 液晶显示器 Liquid Crystal Displays (LCD),像素 (Pixel) 03:32 字符生成器 Character generator 03:45 屏幕缓冲区 Screen buffer 05:09 矢量命令画图 06:34 Sketchpad, 光笔 (Light pen) 09:00 函数画线,矩形
本集重点:冷战导致美国往计算机领域投入大量资源 (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)
末尾总结:政府和消费者推动了计算机的发展 早期靠政府资金,让技术发展到足够商用,然后消费者购买商用产品继续推动产品发展 (08:23~10:41)
本集:全是历史故事 00:18 1970年代初成本下降,个人计算机变得可行 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 兼容" 下保持了足够市场份额
01:10 图形界面先驱:道格拉斯·恩格尔巴特(Douglas Engelbart) 03:20 1970年成立 帕洛阿尔托研究中心(Palo Alto Research Center) 03:29 1973年完成 Xerox Alto(施乐奥托) 计算机 04:42 举例:写一个简单的 GUI 程序 06:38 1981年的 Xerox Star system(施乐之星系统) 08:18 史蒂夫·乔布斯去施乐参观 07:45 所见即所得 WYSIWYG 09:15 1983年推出 Apple Lisa 09:31 1984年推出 Macintosh 10:12 1985年推出 Windows 1.0,之后出到 3.1 10:43 1995年推出 Windows 95 提供图形界面 11:08 1995年微软做失败的 Microsoft Bob
01:15 线框渲染 Wireframe Rendering 01:39 正交投影 Orthographic Projection 01:50 透视投射 Perspective Projection 02:14 网格 Mesh 02:37 三角形更常用因为能定义唯一的平面 03:09 扫描线渲染 Scanline Rendering 05:04 遮挡 Occlusion 05:19 画家算法 Painter's Algorithm 06:09 深度缓冲 Z Buffering 07:45 Z Fighting 错误 07:51 背面剔除 Back Face Culling 08:53 表面法线 Surface Normal 09:33 平面着色 Flat Shading 09:43 高洛德着色 Gouraud shading, 冯氏着色 Phong Shading 10:06 纹理映射 Texture Mapping 11:24 图形处理单元 GPU, Graphics Processing Unit
02:05 局域网 Local Area Networks - LAN 02:36 媒体访问控制地址 Media Access Control address - MAC 02:55 载波侦听多路访问 Carrier Sense Multiple Access - CSMA 05:18 指数退避 Exponential Backoff 05:36 冲突域 Collision Domain 07:08 电路交换 Circuit Switching 07:36 报文交换 Message Switching 10:20 分组交换 Packet Switching
02:23 IP - 互联网协议 - Internet Protocol 03:00 UDP - 用户数据报协议 - User Datagram Protocol 03:41 校验和 - Checksum 05:26 TCP - 传输控制协议 - Transmission Control Protocol 08:21 DNS - 域名系统 - Domain Name System 10:47 OSI - 开放式系统互联通信参考模型 - Open System Interconnection
01:01 超链接 Hyperlinks 02:20 URL - 统一资源定位器 - Uniform Resource Locator 03:01 HTTP - 超文本传输协议 - HyperText Transfer Protocol 04:13 HTML - 超文本标记语言 - HyperText Markup Language 04:24 写一个简单网页,用到了 <h1> <a> <h2> <ol> <li> 标签 06:04 第一个浏览器和服务器是 Tim Berners-Lee 花了 2 个月在 CERN 写的 06:32 1991年正式发布,万维网就此诞生 07:19 开始讲搜索引擎的故事 07:40 Jerry 和 David 的万维网指南 后来改名成 Yahoo 07:52 搜索引擎 JumpStation 09:07 搜索引擎 Google 09:20 网络中立性
01:00 Secrecy, Integrity, Availability 保密性, 完整性, 可用性 01:49 Threat Model 威胁模型
03:14 身份验证 (Authentication) 的三种方式: What you know, 你知道什么 What you have, 你有什么 What you are, 你是什么
07:34 访问控制 Access Control 08:48 Bell LaPadula model 不能向上读取,不能向下写入 11:00 隔离 Isolation, 沙盒 Sandbox
01:28 社会工程学 Social Engineering 01:38 钓鱼 Phishing 02:06 假托 Pretexting 02:50 木马 Trojan Horses 03:32 NAND镜像 NAND Mirroring 04:12 漏洞利用 Exploit 04:16 缓冲区溢出 Buffer Overflow 05:45 边界检查 Bounds Checking 06:16 代码注入 Code Injection 09:32 零日漏洞 Zero Day Vulnerability 09:53 计算机蠕虫 Worms 09:58 僵尸网络 Botnet 10:11 拒绝服务攻击 DDoS
00:16 多层防御 Defence in depth 01:00 加密 - Encryption,解密 - Decryption 01:11 凯撒加密 Caesar cipher 01:27 替换加密 Substitution cipher 01:59 移位加密 Permutation cipher 02:03 列移位加密 Columnar transposition cipher 02:37 德国 Enigma 加密机 04:54 1977年"数据加密标准" - Data Encryption Standard (DES) 05:24 2001年"高级加密标准" - Advanced Encryption Standard (AES) 07:06 密钥交换 - Key exchange 07:33 用颜色来举例"单向函数"和"密钥加密"的原理 08:24 迪菲-赫尔曼密钥交换 - Diffie-Hellman Key Exchange 10:18 非对称加密 - Asymmetric encryption 11:22 非对称加密算法 RSA
01:23 分类 Classification 01:25 分类器 Classifier 01:34 特征 Feature 02:03 标记数据 Labeled data 02:38 决策边界 Decision boundaries 03:00 混淆矩阵 Confusion matrix 03:39 未标签数据 Unlabeled data 03:49 决策树 Decision tree 04:25 支持向量机 Support Vector Machines 05:52 人工神经网络 Artificial Neural Network 08:34 深度学习 Deep learning 09:21 弱AI, 窄AI Weak AI, Narrow AI 09:43 强AI Strong AI 10:42 强化学习 Reinforcement Learning
02:41 检测垂直边缘的算法 03:26 核/过滤器 kernel or filter 03:56 卷积 convolution 04:23 Prewitt 算子 Prewitt Operators 05:34 维奥拉·琼斯 人脸检测 Viola-Jones Face Detection 05:35 卷积神经网络 Convolutional Neural Networks 07:33 识别出脸之后,可以进一步用其他算法定位面部标志,如眼睛和眉毛具体位置,从而判断心情等信息 08:52 跟踪全身的标记点,如肩部,手臂等
01:50 词性 Parts of speech 02:15 短语结构规则 Phrase structure rules 02:32 分析树 Parse tree 05:30 语音识别 Speech recognition 07:26 谱图 Spectrogram 07:44 快速傅立叶变换 Fast Fourier Transform 08:42 音素 Phonemes 09:29 语音合成 Speech Synthesis
02:08 法国吃饭鸭 - Digesting Duck, Canard Digerateur 02:23 土耳其行棋傀儡, 下国际象棋 02:43 第一台计算机控制的机器出现在1940年代晚期,叫数控机器, Computer Numerical Control(CNC) 03:32 1960年 Unimate,第一个商业贩卖的 可编程工业机器人 03:47 简单控制回路 simple control loop 04:08 负反馈回路 negative feedback loop 05:17 比例-积分-微分控制器 Proportional–Integral–Derivative controller PID 控制器 10:48 机器人三定律 Three Laws of Robotics
00:45 我们需要了解人类心理学,做出更好的计算机 01:12 易用度 - Usability 01:31 颜色强度排序 和 颜色排序 02:30 分组更好记,电话号码 317-555-3897 比 3175553897 好记 03:25 直观功能 - Affordances 04:33 认出 vs 回想 Recognition vs Recall 05:45 让机器有一定情商以及 Facebook 的研究 08:40 用软件修正注视位置。让视频通话时看起来像盯着对方,而不是盯着下方 09:58 把机器人做的像人,恐怖谷理论 11:35 有很多开放式的问题,心理学帮助我们明白不同选择可能带来的影响
02:15 通过调速,暂停等技巧,加强学习效率 03:15 大型开放式在线课程 - Massive Open Online Courses (MOOC) 05:08 智能辅导系统 - Intelligent Tutoring Systems 05:22 判断规则 - Production rule 06:10 域模型 - Domain Model 06:46 贝叶斯知识追踪 Bayesian knowledge tracing
01:21 普适计算 Ubiquitous Computing 04:55 奇点 Singularity 06:51 把工作分为4个象限,讨论自动化带来的影响 10:15 机器人的存在时间可能长过人类,可以长时间探索宇宙