科普 世界上第一个程序是如何写出来并让它按规定运行?

 

电脑的神奇之处在于他刚开始只是一堆金属元素,为什么在经过通电之后却实现了程序这一指令并在以后的发展中发展出如office这样强大技术的?...



世界上第一台机械计算机,出现于崇祯十五年,清崇德七年,1642年(1643年牛顿出生,1644年李自成攻陷北京,崇祯帝自缢,留血书“任贼分裂朕尸,勿伤百姓一人。”明廷进入南明时代),19岁的法国数学家~帕斯卡~制造了钟表齿轮式机械计算机,但仅能做加减法运算。



(永历三十二年,清康熙十七年,1678年,吴三桂称帝,蒲松龄落榜,同年吴三桂逝世,惠更斯向法国科学院提出光的波性理论——德国数学家莱布尼兹发明了可做乘除运算的计算机。)


道光二十二年,1842年,中国古典时代结束的第三年,英中签订《南京条约》。英国Lovelace女伯爵,一位名为Ada Augusta的女性,编写了世界上第一条程序(十进制),用于在分析机上计算伯努利数。她被认为是人类世界第一位程序员。


(分析机是英国数学家查尔斯·巴贝奇在1837年(道光十七年)提出的只存在于设计阶段的机器,这台机器因为政治经济公关等原因并没有造出来。模型为:

用打孔纸带输入。)

……
一战,默哀。
……
二战,默悼。

民国三十年,1941年,世界上第一台用电子元件制作的计算机,由德国~朱赛~用继电器制成。毁于战火。

民国三十五年,1946年,举世闻名的第一台通用计算机(不仅仅是专门用于哪类计算,谓之通用)ENIAC埃尼阿克诞生。




第一批真正意义上的通用计算机程序员,就是上面六位女孩子,她们的工作,是抽插电线和按开关(以及更换烧坏的零件)——划!重!点!这就是现代意义上!真正意义上的编程!也就是口口相传神乎其神的上古初代编程!——直接改电路!对电路下手!

(关于抽插电线,作为类比,见过老式电话站接线员的接线台吗?




所谓编程,就是根据数学问题,编出电线的连接方式,然后制作用于输入的一大堆打孔卡片,这可能需要几个月。
但是埃尼阿克运算很快,轰!半个镇子的电都供上了~立马就能算出来~虽然输出也是一大堆打孔卡片~又需要再花几天时间翻译这些二进制孔~但还是快多了~

知道了这些,我们应该明白:现在的所有计算机编程,都是在实现那六个女孩子的工作。所谓按规定运行~这个规定!就是电路~电路不变,程序不变!

更专业点的科普:
计算机的数字电路(也就是各种编码器、译码器、加法器、锁存器、计数器……)是用逻辑门实现的,逻辑门懂吧?就是高中物理说的“与、或、非”,无论输入输出,有电流就叫做1,没电流就叫做0。
埃尼阿克的逻辑门,是用粗大憨实的电子管做的(一个逻辑门是用好多管子做的),所以埃尼阿克极为庞大。而且每过几分钟就会烧坏几根儿管儿。



而现代计算机用半导体管(晶体管,用一两种半导体做的二极管三极管)代替了电子管,所以我们现在的个人电脑小多了,又叫微型计算机(微机)。


(所谓半导体,就是位于元素周期表金属和非金属交界附近的硅、锗那类过渡元素,下图黄色部分——给它小电压它不通电,给它大电压它就通——所以叫它们半 · 导体。又因为它的分子结构是有空间规则的,不是乱排的,所以又叫晶体~见人教版高中化学选修3~



换用如此小巧的原件以及他们的制作工艺后,集成电路和集成芯片就出现了。
(上图叫做单片机芯片,和下图的英特尔处理器,某种程度上说,是同类。这些处理器的核心,是寄存器,用于记录程序运行中产生的中间数据,以及负责挑选有我们需要的功能的电路(也就是各种“器”)。
(上图叫做单片机芯片,和下图的英特尔处理器,某种程度上说,是同类。这些处理器的核心,是寄存器,用于记录程序运行中产生的中间数据,以及负责挑选有我们需要的功能的电路(也就是各种“器”)。
还记得那六个女孩的连电线和按开关吗?
!所谓连电线,就相当于单片机编程里的选择寄存器、选择时钟、选择外部设备等等等。……甚至更原始些,现代意义上的有些寄存器,在那时还没有集合到一起,完全需要人下到更下一层的硬件去……接电线。
!所谓按开关,就相当于单片机编程里,给某寄存器的某位置1还是置0。




集成芯片,就把那六个女孩连电线的各个设备,全都用化学材料填充的方法搞到芯片里了,所以叫集成芯片,也就是CPU中央处理器。利用半导体各种通和不通的特性,代替了六个女孩子拔插电线的工作,所以里面就省了导线,所以才那么小。
(所以我们说,那时候的计算机,以处理器为核心;而现在的计算机,以存储器为核心;就是因为制作芯片变容易了,而我们需要处理的数据~和产生的数据却更多了。)
而更多的功能,就可以交给芯片外的集成电路了。
——如此这般,也就不需要每次编程都改电路了~只要用到哪部分电路,就在程序写一句代码,电流(0和1)就去找那部分电路了~
也就是说,编程通过控制电流,来选择需要的电路,从而实现那六个女孩子的工作~数据便在选好的电路里走一遍~然后吐出来——这就是“按规定运行”。

可能有的人无法理解那些女孩的工作与现代计算机的联系(所以我就再补充点儿)——那是因为ENIAC没有存储指挥自己指令的功能,所以每次遇到新的数学问题,都要重新接线;而现代计算机,是把指令预先存在了一个地方,所以我们只要敲代码就可以调用这些指令。

后来冯诺依曼又主持构建了EDVAC(1951年才正式运行,虽然草案在ENIAC运行前就有了),这个新的计算机就与现代意义上的计算机很接近了,也是真正意义上的冯诺依曼体系(ENIAC事实上并不符合严格的冯诺依曼体系,因为它没有专门的存储装置,只有计算中必要的暂存器。)
(此计算机就没有ENIAC那么庞大夸张了,因为已经用到半导体元件了。)
(此计算机就没有ENIAC那么庞大夸张了,因为已经用到半导体元件了。)
由于EDVAC的指令都是预先存好在内存(那时候应该还没有外存),所以人们把程序与数据全都用有二进制“码”的磁带输入,输出装置则是一个示波器(或者磁带记录仪也有记录输出数据的功能?这方面资料不全,求人赐教。)——这就是“用二进制码编程”的直观由来。

PS
很多人对编程的理解或印象,都是直接从C、C++、Java、python等个人电脑端的高级语言来的。
但其实,只有了解汇编语言,或了解C51之类语言是怎么给单片机编程的人,才真正明白CPU到底是怎么回事,以及具体到实际电路是怎么个原理。远不是高级语言的思维。
所以,我就不再多讲了。连本行里都有一半儿的人拎不清,更别说外行。


    关注 北航软件学院_tpai


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册