# 早期的编程方式 :::tip [前去观看第十集](https://bilibili.com/BV1EW411u7th?p=10) ::: ## 最初的编程 人们对于编程的需求远在计算机出来之前,而当中最著名的例子来自于纺织业。如果只是纯色的纺织品非常简单,但想要有图案的纺织品是,工人们就要每隔一会就调整一次织布机,这当中有着非常大的劳动力需求。正因如此,以前带有图案的纺织品价格十分昂贵。 因此, **约瑟夫·玛丽·雅卡尔** 在 1801 年发明了世界上最早的编程——可编程纺织机。 ![最早的编程](%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20221113194322.png) ## 早期如何编程 最初的编程用到的是可穿孔纸卡,通过特定位置是否有孔来确定图案。后来,可穿孔纸卡也在 1890 年用于美国的人口普查,但要注意,汇总机并不算计算机,它只做到了汇总数据,而不能编程,在几十年后,它们才可以做到一些减乘除,一些小决定。 ## 控制面板的过去 早期的面板有很多小插孔,程序员可以插电线,让机器的不同部分互相传数据和信号,正是这些特性,早期的面板就有一个十分相称的名字 —— 插线板。 ![插线板](%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20221113194808.png) 但插线板有一个“**小小**”的缺点,那就是运行不同程序是,要重新接线。所以到了 1920 年代,控制面板变成了可插拔。 可插拔的控制面板让编程更方便,现在可以给机器插入不同的程序,而不用重新接线了。举个栗子,一个插线板用来算税,另一个算工资账单。 但给插线板编程很复杂,下图中乱成一团的线就足以说明。而这,在 1940 年代十分流行。(_早期的程序员看这个真的不会头秃吗_) ![超级复杂!](%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20221113195538.png) ## 存储程序计算机 用插线板编程,不只在机电计算机中流行,于 1946 年完成的第一台通用电子计算机用的也是插线板编程。但是程序的更换需要非常大量的时间,最多可能要花三个星期,由于早期的计算机十分昂贵,停机几周只是为了换程序,完全无法接受,所以在 1940 年代晚期到 1950 年代出,人们发明了内存。通过把程序储存在内存中,使程序易于修改,方便 CPU 快速读取,这类机器叫“**存储程序计算机**”。 ## 冯诺依曼结构 一个名为*约翰·冯·诺伊曼*的人提出了一种结构——程序与数据都存在一个地方,而这,就叫做“**冯诺依曼结构**”。冯诺依曼结构的计算机的标志是有一个处理器(有算术逻辑单元的)+ 数据寄存器 + 指令寄存器 + 指令地址寄存器 + 内存(存数据和指令)。看到这里,你是否感到有一丝丝的眼熟呢?没错,在第 7 章,我们造的就是冯诺依曼结构的计算机。 ![复习一下](%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20221113201633.png) 而这种结构的计算机由曼彻斯特大学与 1948 年建造完成,绰号“宝宝”。如今,我们所用到的计算机也在用一样的结构。 ![是他,是他,就是他,我们的计算机,小“宝宝”!](%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20221113201716.png) ## 穿孔纸卡的再就业 虽然有了内存,但程序和数据及就需要某种方式输入进去。这个时候,穿孔纸卡就有了就业空间。到 1980 年代,几乎所有计算机都有穿孔纸卡读取器,将一叠卡片放进去,读取器会一个个写入内存,直到写入完毕,电脑开始执行。 :::info 用纸卡的最大程序使美国空军的 SAGE 防空系统,与 1955 年完成,据称顶峰时期雇佣了世上 20%的程序员。主控制程序用了 62500 张纸卡,等同于如今的 5MB ::: ## 面板编程 在 1980 年代之前,还有一种常见的编程方式 —— **面板编程**。 面板编程用大量的开关和按钮做到和插线板一样的效果,在面板上有指示灯,代表各种函数状态和内存中的值。在 50 年代和 60 年代的计算机一般都有这么巨大的控制台。 ![超大号控制台](%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20221113203315.png) 早期的家用计算机使用了大量的开关,因为大多数家庭都负担不起昂贵的外围设备,如穿孔纸卡读取器。这种计算机要编程,需要多次的拨动面板上的开关,最后按下运行按钮。 ![Alt text](%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20221113203640.png) ## 总结 在早期,不管是用什么进行编程,都需要非常了解底层硬件,这让编程变得十分困难。于是,人们发明出了更简单的编程方式 —— **编程语言**。 ## 接下来 下一章,我们开始学习程序语言的发展史。