CS课程 (crash-course-computer-sicence) 笔记整理

课程简介

最近,利用晚上的时间,大概 2 天左右看完了一门 crash course, 课程名字是 computer science, 授课人是Carrie Anne PhilbinCS 课程链接

个人感觉,这个课程特别适合 CS 入门,特别是针对 CS 的小白。就像Anne经常说的那样 “a new level of abstraction!”, 她会用特别简单的描述方式,把很多计算机中的抽象名词和概念生动的描述出来,而且课程是根据计算机的发展历史,一点点的引入各种技术和概念,逻辑性很强。很多时候,让我听完之后,会有种恍然大悟的感觉!对一些原先了解的名词,又有了新的认识。总之,是一门非常不错的课程!

课程总共包含 39 节小课,每节课 10 min 左右。讲解 computer 的起源,各个组件 (比如 CPU、GPU) 的起源,以及各个组件的真实含义、实例和作用。为了方便查看,我在博文贴出了原始的听课笔记 notes,用于快速查看。此外,我还在后面简短的概括了每节的课程大纲,以及和上节之间的逻辑关系。整理不易,部分细节和个人看法可能存在问题,后期会及时更正!


课程分节笔记

Lecture 1~3 Notes

【1】 Early computing

  • 首先,概述了早期的computing发展,从最初的计算设备(abacus,算盘),到第一个programmer(ada);
  • 其次,提及了IBM早期的computing发展,即实现了人口普查机器(通过水银实现电路的连通),这些介质存在很多改进的空间;

【2】 Electronic computing

  • 所以,随着computing发展,electronic技术在其中发挥了很大的作用,即继电器(relay)的发展;
  • 因为lecture one中提及的实现电路连通的方式,存在着多种limitations:
    1. relay 本身存在mass, 限制了电路开合的速度;
    2. 这些relay本身也会存在损耗。
  • 所以,在此基础上,发展了二极管,晶体管(由硅制成),relay往越来越小的程度发展。

【3】 Boolean logic & logic Gates

  • relay可以实现电路开关,实质上等同于,布尔变化,binary;
  • 总结了布尔计算,or / and / not / xor.
Lecture 4~5 Notes

【4】 Representing numbers and letters via binary

  • 那么,如何用二进制计数和表示letters;
  • 常用单位的换算,8bits=bytes, mega百万字节, giga十亿字节
  • 拆解我们常用的32bits的具体含义:
    1. 理论上它可以表示2的32次方个值;
    2. 通常,第一个bit,表示正负;
    3. 对于浮点数,采用科学计数法,通常第2-9位这8个bits用来存储指数,其余23位用来存储小数点尾数;
  • 对于letters,用很多类似ASCII码的编码方式。

【5】 How computer calculate?

  • 表示完数值之后,计算机主要通过我们之前提及的两个方式计算:算数运算 & 逻辑计算, 统称为ALU;
  • 在运行计算时,需要carry进位符指示;
  • 运算时,也可能存在overflow的情况;
  • 对于加减乘除运算,通常使用operatebits(4bits)去指代。
Lecture 6~7 Notes

【6】 Registers and RAM

  • 这些用于数值计算的数值,如何读取需要利用RAM (random access memory) & registers 寄存器,RAM通常具有的是短期记忆;
  • register的最小unit是latch,它通过两个组分,即set (一个逻辑块,可以实现由0-1,而不能由1-0) 和 reset (一个逻辑块,可以实现由1-0,而不能由0-1)组成,实现对memory的read或者write;
  • 多行多列的latch组成了register,比如常见的16rows*16cols,所对应的第一行第几列,也就是我们常说的memory的address;

【7】 CPU

  • 在上述基础上,CPU (central processing unit)可以看做是连接了RAM和ALU的中心组件,被用来执行program;
  • CPU执行的程序,可以简化成三个部分:fetch commands > decode commands > execute program
  • 在execute program过程中的速度,被称为clock speed,单位是HZ,是衡量CPU质量的一个指标。
CPU 示意图

Lecture 8~12 Notes

【8】 Instructions & programs

  • 我们已经了解了计算机内部的中心组件,接下来概述指令和程序之间的执行细节;
  • 通过instruction 让program执行计算,cpu中存在3种必备的指令,jump / halt / condition,可以用来控制或判断计算是否跳转,停止;
  • instruction 的长度是可以调节的;
  • 我们现在用的比较新的Intel icore 7 实质上就包含了多达上千种的指令。

【9】 Advanced cpu design

  • 为了提升cpu的速度,cache被设计,指的是为了避免cpu和ram 之间fetch data的过程busy,在cpu中提取一小部分用来缓存数据;
  • cache的出现让instructions pipeline成为可能,实现了指令的并行,这种pipeline必须完成branch prediction的过程;
  • 此外,也出现了,multiple cores cpu;

【10】 Early programming

  • 基于上述硬件,出现的最早的计算机只是简单的机器。最早的是tabluting machine,用来制表的机器。接着是control pannel 和 storage programming;
  • 直到后来,冯诺依曼计算机的出现,才标志着历史上第一台存储程序计算机的诞生。

【11】 First programming language

  • 随着计算机硬件的完善,也需要software的进步,这就需要从编程语言开始。最早的编程语言是A-O;
  • 计算机的hardware 工作,需要接受machine language,最早借助assembler去将pseudocode 转变为可执行的命令;
  • 后来,利用compiler可以直接将不同的高级程序语言(包含着大量的变量和内存的source code)转成机器语言;
  • 为了统一这些编码方式,Fortran出现了。

【12】 Programming basics

  • 这些编程语言进行编程的基础是,基于syntax语义,要能够通过状态流使计算机和外界进行交互;
  • 为了简化编程,各种function出现了,并进一步扩展成更大的module,甚至是library,再到后来的algorithm.
Lecture 13~17 Notes

【13】 Introduction to algorithm

  • 最简单的算法是sort,算法会涉及很多像array一样的数据结构类型;
  • 衡量算法会用到复杂度 O notion,蛮力解题通常被称为brute force 的方式;
  • 比较高阶的算法,还有graph search等。

【14】 Data structures

  • 数据结构指的是数值在内存中存储的方式,比如上面提到的array 就是数组;
  • 伴随着数据类型的不同的matrix,会用index索引去指向哪条数据;
  • 还有很多其它的数据类型,比如struts,pointer,linked list,stack,queue,trees等。

【15】 Alan Turing

  • Turning machine的出现,通过停机问题,证明了计算能力是有限的。

【16】 Software engineering

  • 正如之前所述,软件涉及的主要有三个部分:object, function, and variable;
  • 为了加快软件的开发,需要不同的人负责不同的部分,再汇总在一起。为此,我们把API(interface),称作是代码各个部分的交互方式;
  • OOP指的是面对对象的编程,编程需要IDE,在IDE中还可以完成codes的debugging,通常为了做注释,会在项目里添加一个ReadMe file;

【17】Integrated circuits

  • 再次回到硬件上,之前的计算机体积都很大,直到集成电路,ICs(包含晶体管的电路)的出现,让硬件逐步被缩小;
  • 最早,有印刷电路板(PBC), 可以减少需要的布线,后来出现了光刻半导体技术制作的芯片,让硬件体积变得更小;
  • 比如,A10芯片,上面就包含了33亿的晶体管;
  • 但是,这里仍然存在一些问题需要解决,比如如何改变光刻光源的波长,如何避免更小体积上的量子隧穿。
Lecture 18~20 Notes

【18】 Operating systems

  • 为了更好的连接各种software和hardware,出现了操作系统os,它通过driver实现各种API,允许程序员使用标准化的机制,与通用的输入输出硬件通信,即I/O通信;
  • Altas是历史上第一台实现多程序同时运行的计算机,multics是第一个操作系统;
  • 为了让多个程序更好的执行,发展了虚拟内存,即动态内存分配;
  • 比如unix系统,主要由内核+程序组成,多核、虚拟内存、内存保护等方法一起推进了多程序并行的可能。

【19】 Memory & storage

  • 有两种不同的存储器,一种是快的易失性存储器,一种是慢的非易失性存储器;
  • 存储器形式,经历了磁带 > 磁鼓 > 磁盘 > 硬盘的发展;
  • 还有一种便携式存储器,软盘,后来变成了U盘,SSD, 通常SSD的速度比RAM小。

【20】 Files and file systems

  • 这些存储设备存储的文件,有多种类型,比如txt, mav, bitmap等;
  • 在处理文件的过程中,不可避免的会生成很多碎片。
Lecture 21~24 Notes

【21】 Compression

  • 这些文件的内存很大,需要采用压缩技术,减少内存;
  • 最简单的方式是,删除冗余data,从而减少了实际的length,是最常用的无损压缩方式,后来还有利用映射(霍夫曼树等)方式的无损压缩;
  • 另外一种是有损压缩,简单理解就是对文件的不同部分使用不同的精度,因为觉得缺少某些信息可能不会影响整体信息的表达。

【22】 Keyboards & command line interaction

  • 我们需要对计算机提供输入和输出,最早会采用typewriter去实现,后来出现了键盘;
  • 键盘字母的排列有一定的规律,会把常用的组词字母放在相邻的位置,按照第一行的字母,我们通常使用的键盘也叫做 QWERTY 键盘;
  • 此外,还相继出现了touchtype 触屏,terminals终端等概念。

【21】 Screens & graphics

  • 为了让计算机执行过程更加的可视化,screens出现了,最早被用来显示寄存器中的数值,特别是对于可变数值;
  • raster scanning 是早期用来显示graphics的方式,大概就是一行一行的出pixel,但是缺点是会占据很大的内存;
  • 为了减低内存,显卡出现了,它采用ASCII编码的字母去组成图像和文本,从而替代原始的01构成的图像和文本;
  • 后来,还出现了用lines去绘制一切图像的CRTs方式,再接着就是动画的实现。

【24】 Cold war & consumerisum

  • 简单概括,就是,世界大战和消费者的需求极大的促进了computer的发展。
Lecture 25~29 Notes

【25】 personal computer revolution

  • 芯片的出现,显示屏的完成,硬盘的完善,导致了微机的出现;
  • IBM compatible 集成了Intel 的cpu, microsoft 的os, 配制了价格合理的个人计算机,占据了很大的市场份额;
  • 而相反,apple直接封闭了自己的os,做全栈计算机开发。

【26】 Graphical user interfaces

  • GUI的出现简化了对使用者的要求,模拟desktop,window的概念,鼠标的设计都使得计算机的操作变得更加简单化。

【27】 3D graphics

  • 通过将3D从不同的角度投射到2D,绘制出3D的效果;
  • 绘制图像,需要借助多边形,以一个简单的示例,三角形为例:
    1. 对于一个图像,沿着三角形的两个顶点取两条水平线,接着再在这两条线之间取无数条其它的水平线;
    2. 每条线会和三角形有两个交点,填充满那些交点中间的pixel格子,就能形成一个图像;
    3. 这样就会导致边缘锯齿的存在,一种flash shading的方式是,把边缘像素点的颜色设置成半透明;
  • GPU可以让这个图像处理速度变得更快,比如Getforce GTX 1080Ti 能够在1秒内实现几亿个多边形。

【28】 Computer networks

  • 为了实现多台computer的通信,提出LAN局域网的概念,以太网是最常见的一种;
  • 为了明确定位是哪台机器,又有了mac address的概念;
  • 为了减少机器之间传递信息出现的碰撞,出现了传输协议;
  • 再后来,有了域,routing,packets, agency等概念。

【29】 Internet

  • 最简单的IP协议,包括(ip address + data);
  • UDP协议,包括 IP header + port & checksum + data;
  • TCP/IP是为了更准确的传递,添加了序列号;
  • IP 地址和DNS域名系统之间通过注册表连接。
Lecture 30~33 Notes

【30】 word wide web

  • 万维网,由pages网页组成,涉及hyperlinker,这些hypertxt需要web server以HTTP(最初只有Get command)实现;
  • browsers用于请求或者呈现页面;
  • search engineering的出现,以Google为例,特点是实现backlink反向链接。

【31】 Cybersecurity

  • 网络安全三要素:保密性(授权),完整性,可用性(访问);
  • 为了安全,常需要做身份验证,有三种常见形式,密码,key,指纹等生物识别方式;
  • 对于访问权限,有 read / write / execute三种权限;
  • 通常会使用sandbox的方式去隔离各种程序。

【32】 Hackers & cyber attacks

  • 最常见的attack,是buffer overflow attack, 通过添加使缓冲区溢出,从而程序崩溃;
  • 还有种方式是插入SQL代码,比如数据库中,输入SQL命令在输入框,可能会直接进入。这也是有些用户名设置不准出现特殊字符的原因。

【33】 Cyptography

  • 密码学的鼻祖是enigma,用替换密码的方式编译原始密码;
  • 后来有了DES,AES key, 有了更大的bits, 还出现了 RSA等方式。
Lecture 34~39 Notes

【34-36】 Machine learning & AI / computer vision / Natural language processing

  • 这部分主要列举了一些概念和名词的定义,个人觉得讲的不是很形象,如果想要了解更多这方面的内容:
    1. 机器学习和AI:推荐吴恩达的课;
    2. CV计算机视觉:推荐Feifei Li 的课程;
    3. NLP自然语言处理:推荐cs224n课程。

【37】 robots

  • 构建robots最主要的三个元素:sensor, controlier, and system;

【38】 psychology of computing

  • 主要就是说UI的设计,需要遵从 affordance的原则,要考虑人类的认知心理去设计一些具有人文关怀的程序。

【39】 Educational Technology

  • 主要说了computer在教学上的一些应用。
The End ! Congrats !
以上就是课程的全部内容!

CS课程 (crash-course-computer-sicence) 笔记整理
https://codingyyao.github.io/2022/12/13/crash-course-computer-science/
作者
yuyao yang
发布于
2022年12月13日
许可协议