- 计算机科学之父:阿兰▪图灵
为解决“可判定性问题”,他提出了一种假想的计算机,即“图灵机”。只要有足够的规则、状态和纸袋,它就可以创造任何东西。
停机问题:假设一台H机,与H机输入相反的为反H机,将反H机的程序输入到H机中,当H机判断自己是否会停机时,总会得到相反的结果,所以,停机问题无法解决。图灵因此证明了计算机的能力有限。
二战期间,图灵发明的Bombe帮助破译敌军密码。
1950年,图灵设想了一种拥有和人类一样智力的计算机,通过图灵测试来验证,1956年被称为“人工智能”。验证码就是为了区分人类和计算机。
- 软件工程:程序员用各种方法来写大型程序,由此形成了“软件工程”学科。
程序员用“面向对象编程”的思想,将函数打包成对象,隐藏复杂度。
“应用程序编程接口”,简称API,帮助不同分工的程序员合作,就是不用访问原码,直接套用,还可以设置函数调用的权限。
“集成开发环境”,简称IDE,是表示辅助程序员开发的应用软件的总称,编译器里面一般都有许多功能,辅助写代码和调试。也可以写注释帮助程序员理解代码。一些大型开发公司使用“源代码管理”,也叫“版本控制”,就是把写好的代码都放到一个服务器里,可以借用,不必重复劳动,可以记录谁改了什么代码,或是将错误代码滚回源代码。检查软件的操作,统称“质量保证测试”,简称QA,就是找bug。
- 硬件进步,由“分立元件”到“集成电路”,简称IC,也就是把多个小组件包到一起,成为一个新的独立组件。Noyce在仙童半导体公司(硅谷)用硅制成集成电路,被誉为现代集成电路之父。
组装计算机需要多个IC组合在一起,后来工程师发明了“印刷电路板”,简称PCB,无需焊接或用一大堆线,通过蚀刻金属线的方式将零件连到一起。
光刻技术可以用光把复杂图案印到硅上,制作复杂的集成电路。过去的IC只能装5个晶体管,而现在却能装到上亿个。由于光波长和量子隧穿效应的限制,摩尔定律可能会走向终结。
- 操作系统,简称OS,本质上也是程序的一种,但可操作硬件运行和管理其他程序,充当软件和硬件之间的媒介。操作系统提供API来抽象硬件,即“设备驱动程序”,也可以在单个CPU上运行多个程序。为了在转换程序时不丢失数据,给各个程序分配了内存块。为了使这些内存块方便程序员追踪,操作系统将其抽象为“虚拟内存”,也就是程序看到的内存与实际硬件上的内存不一样。
操作系统也可以让多个用户同时访问,用户使用的是“终端”,终端就是计算机的外围设备,包括输入终端和输出终端。而计算机=主机+终端。
Unix操作系统分为“内核”(操作系统的核心程序)和外围程序两部分。它没有错误恢复代码,如果发生错误,就让内核“恐慌”,恐慌是一个函数,需要重启电脑才能恢复正常。后来改进的操作系统有了内存保护,电脑不会经常崩溃及蓝屏。
- 存储器:内存是易失性存储器,而写入存储器的数据断电也不会丢失。最初用纸卡存储数据非常耗时,而且不能重复使用,1944年出现了“延迟线存储器”,但一个时刻只能读取一位数据,不能随时访问任何数据。1950年代出现了“磁芯存储器”,可以随时访问任何一位数据。接着又出现了一种新存储,磁带,更便宜,但是访问速度慢,1953年的“磁鼓存储器”可以加快磁带的转动速度。磁鼓又导致了硬板的发展,它们间的区别就是一个是圆柱体,一个是盘,原理一样。类似的还有软盘。1972年出现了光学存储器,即“激光盘”,又演化为“光盘”,简称CD。后来,机械硬盘逐渐被固态硬盘所取代,简称SSD。
- 文件:
格式:简单的文件格式有文本文件,简称TXT,编码用二进制,可对照ASCII解码。波形文件,简称WAV,存音频数据,结构是元数据+音频数据。位图(bitmap),后缀.bmp,存图片。不管是什么文件,底层都是二进制数据,文件格式就用来判断这是什么文件。
储存与文件系统:文件连续存在存储器中,就需要“目录文件”对这些文件的头和尾进行区分,目录文件常在最开头,存其它文件的名称,格式为文件名+.+扩展名。目录文件就是文件系统的一个例子。这种把文件前后连续排列的就是平面文件系统。分层文件系统就是一个文件夹里还套着另一个文件夹。文件系统使得文件的管理和访问更方便,不用管文件具体在硬盘的哪一个位置。
- 压缩:减小文件大小,便于储存。图片压缩,游程编码可减少重复信息,但恢复后和原来的一样,这叫“无损压缩”。另一种无损压缩用字典编码,1950年代的“霍夫曼树”通过排列各块数据出现的频率进而编码。还有对音频及图像等进行的有损压缩,用感知编码删掉人类无法感知的数据。