编程第一个编程
第一章个人编程史
在一开始的时候
…没有程序员,因为计算机是程序 。 它们在任何方面都不像现代计算机。 他们重了几吨,并用继电器和电子管定制的空调和通风装置占据了整个房间的墙壁,更不用说特别加固的地板了。
很久以前,我学会了编程。 实际上,在我出生之前很长一段时间,第一台计算机是通过翻转机电开关并在配线架上插入电线来进行“编程”的。
操作这些计算机的人(穿着实验服)甚至都没有将插入和切换开关视为编程。 该程序是由电气工程师设计的,并内置于这些极其昂贵的巨型电气计算器的接线中。 这些人正在做的事情是输入要计算的问题 。
下面的照片经常贴有错误的标签, 对ENAIC计算机进行编程 。 事实是,与当时的所有其他计算机一样,ENIAC 也不是可编程的。 至少不是人们想的那样。 它像VCR或数字手表(对于我们的旧计时器)一样可编程。 然而,使它与众不同的是,它不仅有一个程序被硬连接到其中,而是有许多。 您在下面的照片中看到的每个面板都是一个固定的程序。 使用跳线,计算机操作员(例如照片中的操作员)可以将数据输入包含要运行的硬件“程序”的面板,并将面板配置为一起运行另一个程序/面板的结果。
我并不是要琐碎工作。 它需要大量的创造力和专业知识,并且本身就是开创性的。 但是,由于大多数人都理解该术语,因此它根本不是编程。 它更热衷于电气工程。
![](https://i-blog.csdnimg.cn/blog_migrate/a9680d1c14c7537815b705db8c39a240.png)
尽管KonradZuse¹现在被公认为是纳粹德国发明了现代计算机和第一门编程语言的人,但他的努力在很长一段时间内仍然是最高机密。 真正引发 软件 编程的事情是我们今天所知道的,是1945 年在EDVAC²上发布了报告初稿 ,应约翰·冯(John Von)的要求,由美国陆军编写(或更准确地说,是汇编和编辑)诺伊曼(Neumann)是一位了不起的人,在这里没有太多成就。 本文描述了我们所了解的现代计算机的基础。 使用机器语言存储程序并执行它们的非常快速的二进制计算器。 真正创新的部分是,他描述的计算机没有为任何程序进行硬连线 。 程序必须使用操作码编写(我将在下面描述)。 不可否认,这份报告的发布是现代计算机设计的催化剂。
1949年,EDVAC运行了它的第一个程序,该程序从一卷巨大的磁带中读取。 磁带卷轴如此之大,以至于担心像母亲那样的妇女无法以物理方式将其往返计算机,因此不鼓励他们进入该领域。
1949年:
- 哈里·杜鲁门(Harry Truman)出任总裁并介绍了他的公平交易
- 据报道,这是美国第一年没有非裔美国人被私刑
- 加拿大人和澳大利亚人摆脱了联邦制,建立了自己的公民身份
- 毛泽东和中华人民共和国掌权
- 以色列举行了第一次选举并加入了联合国
- 德意志民主共和国成立
- 北约成立
- 温斯顿·丘吉尔(Winston Churchill)提议建立欧盟
- 第一次环球直飞飞机发生了
- 第一架喷气动力飞机飞
- 苏联测试了第一枚原子弹。
编程由此诞生。
“如果ENIAC上的计算器配备有18,000个真空管并且重30吨,那么将来的计算机可能只有1,000个真空管并且仅重1(和)1/2吨。”
〜大众力学,1949年3月
然后有一个词
有时被称为现代计算机的“冯·诺依曼”计算机都在某些基本共享原则下运行。 它们的内存分为两个“空间”,分别称为堆栈和堆。 堆用于存储正在运行的程序,而堆栈用于存储作为输入和输出的数据。 正如您将在后面看到的那样,一些聪明的程序员在耍花招,在代码中隐藏数据,或者在数据中隐藏代码。
![](https://i-blog.csdnimg.cn/blog_migrate/2036a508ef06ea8e5b78fa67bfd0d8cb.png)
二进制程序以一系列十六进制字的形式存储在堆中。 字在不同的CPU上具有不同的长度。 很老的CPU使用8位字,而现代CPU使用64位字。 每个字都会触发特定的CPU操作。 因此,它们被称为操作码 。 例如,在旧的16位Intel CPU上,十六进制数字“ 2104”会将来自CPU中堆栈位置104的数字存储在称为寄存器的特殊内存暂存器中。 “ 1105”将把堆栈位置105中的数字添加到第一个数字中,“ 3106”将得到结果并将其存储在堆栈位置106中。所有计算机程序最终都归结为存储在内存中的一系列单词 。
在汇编语言中 ,三个字母的助记符表示二进制或十六进制的机器指令。 近十年来,程序员使用汇编语言来定位和检索内存中的数据,然后将其移动到中央处理器(CPU)进行计算。 逐步说明在任何方面都与普通的人为逻辑并不完全相似。
下面是一个非常简单的程序,将两个数字相加。 我并排显示了二进制,十六进制和汇编指令(未显示数据)。
![](https://i-blog.csdnimg.cn/blog_migrate/ee7fcd79478ed88e2ec940027e1ce2ac.png)
这是一个简单的汇编语言程序,它打印出短语“ Hello World”。 第5–9行的第一个单词是操作码的示例(此程序中还有其他操作码不易指出)。
1 section .text
2 global _start
3 _start:
4 ; write our string to stdout.
5 mov edx,len ; third arg: message length
6 mov ecx,msg ; second arg: pointer to msg
7 mov ebx,1 ; first arg: file handle (stdout)
8 mov eax,4 ; system call number (sys_write)
9 int 0x80 ; call kernel
10 ; and exit.
11 ebx,0 ; first syscall argument: exit code.
12 mov eax,1 ; system call number (sys_exit)
13 int 0x80 ; call kernel.
14 section .data
15 msg db “Hello, world!”,0xa ; the string to print.
16 len equ $ — msg ; length of the string.
这种编程称为裸机编程。⁵这是简洁且难以理解的。 在早期,计算机程序很小,因为计算机的容量很小。
您可能口袋中拥有的手机的存储量增加了3000万倍,比1954年的IBM 650快1000万倍。手机上最小的程序无法容纳10,000个连接在一起的IBM 650。 电话硬件的体积也更小,更轻约40,000倍,耗电量减少了约40万倍,而价格却便宜了10,000倍。 IBM 650在1954年花费了100万美元,相当于今天的460万美元。
在本系列的其余部分中,我将描述技术的进步,这些技术的进步使程序员能够从第一种编程语言开始,开发出越来越大,越来越复杂的程序。
下一章->
[1]对于有兴趣的人,我正在编写一个附录,该附录包含我提到的所有人员的列表以及基本的传记信息。 我将在本系列的最后一篇文章的最后发表它。
[2]冯·诺依曼,约翰。 “ EDVAC报告初稿”。 1945年, 宾夕法尼亚大学摩尔电气工程学院 ,doi:10.5479 / sil.538961.39088011475779。
[3]您可以在YouTube上了解有关二进制文件的信息: https : //youtu.be/lsCKJ6se_1w,以及有关位和字节的信息, 请访问https://youtu.be/b7pOcU1xMks
[4]而我们熟悉的计数系统以10为底,而二进制仅以2为底,而十六进制则以16为底。
[5] http://www.catb.org/jargon/html/B/bare-metal.html
本文摘自我即将出版的《混沌工厂》 ,该书解释了为什么大多数公司和政府无法编写“有效”的软件,以及如何对其进行修复。
翻译自: https://hackernoon.com/https-medium-com-it-explained-for-normal-people-the-metal-years-5be295dad17c
编程第一个编程