计算机和编程领域的18项伟大发明

最近,我和我的同事们就第一个计算机和程序的主题进行了讨论。这次谈话不仅让查尔斯·巴贝奇(Charles Babbage)等著名学者回想起,还让人们回想起了名不见经传的艾达(Ada Lovelace)。结果,产生了进行研究并编纂计算机和编程历史的年表的想法。

在研究各种来源的过程中,发现了许多有趣的事实。例如,Babbage在技术上不是计算机的发明者,第一种高级编程语言根本不是FORTRAN,而CRT监视器使用了触控笔。



1.第一台计算机:“差异机器”(1821)


分析引擎的前身。差异机器是创建机械计算机的首次尝试。该项目是由科学家查尔斯·巴贝奇(Charles Babbage)开发的。在英国政府的支持下,他开始研究该装置。但是由于成本高昂,融资被停止了,计算机也从未被制造出来。



2.第一台通用计算机:“分析机”(1834)


查尔斯·巴贝奇(Charles Babbage)继续他的工作,根据他的经验,着手开发机械计算机。该机器旨在通过多项式逼近函数并计算有限差来自动执行计算。由于可能在对数和三角函数的多项式中近似表示,因此“分析机”可能是通用设备。



3.第一个计算机程序:用于计算伯努利数的算法(1841-1842)


数学家Ada Lovelace开始翻译她的意大利同事数学家Luigi Menabrea的报告。为此,她在1841年使用了同一台Babbage分析机。在翻译过程中,这位女士对计算机产生了兴趣,并留下了笔记。其中的注释包含一种算法,该算法可通过分析机来计算伯努利数(有理数B 1,B 2,B 3的序列),专家认为这是第一个计算机程序。



4.第一台可运行的计算机:Z3 Konrad Zuse(1941)。


德国发明家Konrad Zuse是第一个创建可用的Z3计算机的人。基于他的前两个模型Z1和Z2,这位科学家组装了一个基于电子继电器的成熟的电磁编程计算机。 Z3有一个二进制系统,浮点数,一个带有两个22位寄存器的算术设备,可控制8个通道磁带。

据说这将是德国政府的秘密项目。在大多数情况下,它是为航空研究所设计的。的确,Tsuza自己对军事利益没什么兴趣,他只是想制造一台能正常工作的计算机。

最初的Z3在1943年柏林爆炸中被摧毁。



5.第一台电子计算机:Atanasoff-Berry计算机(ABC,1942年,Atanasoff-Berry计算机)



第一台没有移动部件的数字计算设备。该计算机由John Vincent Atanasov和Clifford Berry创建。ABC用于查找联立线性方程的解。它是第一台使用两件套来代表数据和电子开关而不是机械开关的计算机。但是,该计算机不是可编程的。ABC首先引入了更多现代元素,例如二进制算术和触发器。该设备的缺点是其专业性强,并且由于缺少存储的程序而无法更改计算。



6.第一台可编程电子计算机:“ Colossus”(1943年)


Colossus计算机是第二次世界大战以来的秘密发展。它是由汤米·弗劳斯(Tommy Flowers)和麦克斯·纽曼(Max Newman)分支机构共同创建的,目的是帮助英国人解密被截获的纳粹信息。它们使用洛伦兹密码进行了加密。通过电子开关和插头对动作进行编程。“巨像”花了几个小时到几周的时间来解密邮件。使用计算机解密了许多法西斯加密。



7.第一台通用可编程电子计算机:ENIAC(1946)


ENIAC(电子数值积分器和计算器)是第一台通用电子数字计算机,可以重新编程以解决各种各样的问题。ENIAC由美国陆军资助,由宾夕法尼亚大学摩尔工程学院开发。它是由John Presper Eckert和John William Mockley领导的一组科学家创建的。ENIAC为150英尺宽,可以进行编程以执行复杂的操作。计算是在十进制系统中进行的,该计算机使用最大长度为20位数字的数字进行操作。

一个有趣的事实是,用ENIAC编写任务需要花几天的时间,但是解决方案却在几分钟之内发布。切换时,ENIAC变成了用于解决特定问题的几乎全新的专用计算机。



8.第一个轨迹球(1946/1952)


跟踪球是一种定点设备,用于输入有关计算机相对运动的信息。实际上,是现代计算机鼠标的类似物。根据一个版本,它是拉尔夫·本杰明(Ralph Benjamin)研发的一款用于低空飞行飞机的监视系统时开发的。他描述的发明包括一个用于控制屏幕上光标的XY坐标的球。该设计于1947年申请了专利,但由于该项目被归类为“秘密”,因此未发布。

1952年,加拿大海军的DATAR系统也使用了跟踪球。汤姆·克兰斯顿(Tom Cranston)使用了这种“球指针”。



9.第一台用于联合存储数据和程序的计算机:SSEM(1948)


曼彻斯特小型实验机(SSEM)是第一台基于联合存储数据和程序的原理而构建的电子计算机。创作者-Frederick Williams,Tom Kilburn和Jeff Tutill是曼彻斯特大学的成员。该机器被认为是用于研究CRT(“威廉姆斯管”)上计算机内存属性的实验设备。在CRT产品上使用32个开关以两部分的形式介绍了程序。

顺便说一句,成功地对SSEM进行测试是在Williams的手机“ Manchester Mark I”上创建功能完备的计算机的开始。



10.第一种高级编程语言:Plankalkül(Plankalkül,1948年)


Konrad Zuse(第一台工作的Z3计算机的开发人员)使用了这种语言。尽管Zuse早在1943年就开始创建Plankalkül,但在1948年一位科学家发表了有关编程的著作时就首次使用了它。的确,这种编程语言并没有引起太多关注。Plancalkul的第一个编译器(用于现代计算机)仅由柏林自由大学的教授Joachim Homan于2000年创建。



11.第一位组装工:EDSAC的“初始团队”(1949年)


汇编程序是程序源代码的翻译程序,该程序将助记符(低级)转换为数字表示形式(机器代码)。

世界上第一台实用且实用的计算机,其程序存储在内存中。程序使用助记码而不是机器代码,从而使源代码成为第一个汇编程序。



12.第一台个人计算机:“ Simon”(1950年)


西蒙是第一台可用的计算机。它由埃德蒙·伯克利(Edmund Berkeley)设计,由机械工程师威廉·波特(William Porter)和哥伦比亚大学的毕业生罗伯特·詹森(Robert Jenson)和罗伯特·沃尔(Robert Wall)建造。西蒙有一个命令系统,可以执行9个操作,包括两个算术操作-加法和减法以及参数的比较和选择。从打孔的磁带上读取数字和命令,结果显示在指示器面板上。可以输入1到255之间的二进制数字,填充在打孔的磁带上。



13.第一个编译器:UNIVAC 1的A-0(1952)


编译器是将高级语言转换为机器代码的程序。A-0系统是由传奇女性程序员Grace Hopper创建的程序。该系统的主要目的是将定义为一系列子程序和参数的程序转换为机器代码。A-0随其源代码一起发布给客户,这可能是第一个公开可用的软件。

1952年,Hopper有了一个现成的编译器。她关于这个问题的发言:

他们不敢相信。我有一个工作正常的编译器,没有人使用它。毕竟,他们告诉我,计算机只能执行算术运算。




14.第一个自动编码:格雷尼自动编码(1952)


自动编码是编译器使用的一组高级编程语言的名称。为曼彻斯特,剑桥和伦敦大学的一系列计算机创建了第一个自动编码。自动代码是由图灵的曼彻斯特员工之一-Alik Gleni(实际上以他的名字命名)创建的。



15.第一款电脑鼠标(1964)


在计算机图形学会议上,计算机鼠标的想法由美国物理学家道格拉斯·恩格尔巴特(Douglas Engelbart)提出。他想出了一种带有一对小转轮的设备,可用于在屏幕上自由移动光标。该原型是由其首席工程师Bill English创建的,但是English和Angelbart从未收到此设计的专利使用费。



16.第一台商用计算机:Programma 101(1965)


PC Programma 101,也称为Perottina,是世界上第一台商用PC。他执行了以下操作:加,减,乘,除,计算平方根,绝对值和部分。该计算机的价格为3200美元,尽管成本很高,但还是卖得很好(约44000台)。Programma 101由意大利工程师Pierre Giorgio Perotto发明。



17.第一个触摸屏(1965年)


在下面的照片中-第一个触摸屏(尽管它与现代型号不太相似)。这是一种触摸屏面板,没有压力敏感度(对于任何触摸屏而言),只有一个接触点。随后,直到90年代,该概念一直被英国的空中管制员使用。



18.第一种面向对象的编程语言:Simula(1967)


Simula是由挪威计算中心(Oslo)的Kristen Nygord和Ole-Johan Dahl的员工开发的通用编程语言,用于对复杂系统进行建模。查尔斯·理查德·霍尔(Charles Richard Hoare)关于类构造,带有对象,类和子类的编程语言的教义导致了SIMULA 67的创建

.Simula 67也是第一款内置支持面向对象编程的基本机制的语言。

一个小代码示例
Begin
   Class Glyph;
      Virtual: Procedure print Is Procedure print;
   Begin
   End;

   Glyph Class Char (c);
      Character c;
   Begin
      Procedure print;
        OutChar(c);
   End;

   Glyph Class Line (elements);
      Ref (Glyph) Array elements;
   Begin
      Procedure print;
      Begin
         Integer i;
         For i:= 1 Step 1 Until UpperBound (elements, 1) Do
            elements (i).print;
         OutImage;
      End;
   End;

Ref (Glyph) rg;
   Ref (Glyph) Array rgs (1 : 4);

   ! Main program;
   rgs (1):- New Char ('A');
   rgs (2):- New Char ('b');
   rgs (3):- New Char ('b');
   rgs (4):- New Char ('a');
   rg:- New Line (rgs);
   rg.print;
End;


您可以从计算和创建计算机历史的先驱中学到很多东西。我们之前几代人所做的工作导致了许多变化,这些变化塑造了现代IT世界。

Source: https://habr.com/ru/post/zh-CN387479/


All Articles