软件开发的历史与未来:从打孔卡到现代编程

本文回顾了软件开发从打孔卡时代到现代编程环境的演进历程,详细介绍了打孔卡编程、汇编语言、BASIC入门和C语言的兴起,展现了技术发展的脉络与变革。

软件开发的历史与未来(第一部分)

即使只回溯几年,软件工程的面貌也已有所不同。但如果回到20年前呢?70年前呢?我们还能认出当时的软件开发方式吗?

打孔卡时代

你知道为什么一些文本编辑器和开发者喜欢在代码达到80列后换行吗?甚至Python的PEP 8风格指南也建议这样做!这与打孔卡有关。

是的,打孔卡——当我们试图想象20世纪60年代计算机的样子时都会想到的东西。那时,我们的软件开发者同行使用打孔卡在大型主机计算机上存储和执行代码。

实际的开发工作并不是在卡片本身上完成的,而是通过一种称为编码表的工具完成的。这是一种漂亮的(通常是)绿白相间的纸张,程序员在上面编写和调试代码。这些编码表实际上可以容纳多行代码。

然后,编码表会被送到"打孔卡部门",转换成实际的打孔卡。这通常是在IBM 029等机器上完成的。一张卡片最多能容纳80个字符(包括空格)。超过这个限制就需要新卡片。这意味着你的单个编码表可能会产生多张卡片。

对于当时任何重要的软件,你都需要成堆的打孔卡。是的,1000行代码需要1000张卡片,而且必须按顺序排列。想象一下把这1000张卡片掉在地上!我需要花很长时间才能重新整理好顺序。当时的开发者经常遇到这种情况——所以有些人想出了创造性的方法来标记这些卡片的顺序。

这些打孔卡如何使用?通常用于批处理。意味着你要把卡片堆送到计算中心,在计算时间可用时运行你的软件。这是一次性的操作,如果失败——就失败了。你必须在纸上调试并重试。听起来很可怕,但在当时这是革命性的。

家庭编程时代

让我们从商业和大型机的世界退一步,回到家中。让我们认识一下卧室程序员。到20世纪70年代中期,经济实惠的家用计算机开始成为现实。计算机不再只是工作工具,爱好者开始将计算机用于个人用途——也许我们可以称之为个人计算机。Altair 8800、IMSAI 8080、Commodore PET、Apple II和TRS-80的世界正向开发者走来。

由于这些计算机的能力有限,任何严肃的软件都必须用机器代码或汇编语言编写(在某些情况下,甚至是直接拨动开关)。这让开发者能够通过移动比特来充分利用硬件的能力。汇编语言的语法取决于计算机使用的架构(Z80、MOS 6502、Intel 8080等),有时甚至取决于使用的汇编器。

注意: 汇编器和汇编语言经常被混用,但实际上是两个不同的东西。汇编语言是实际的语言、语法——使用的指令,与架构紧密耦合。而汇编器是将汇编代码组装成机器代码的软件——你的计算机知道如何执行的东西。

例如,在Commodore 64上,汇编代码ADC $c通过汇编器转换为机器代码$69 $0c

当时的开发环境是什么样子?以Tandy TRS-80 Model 1为例。开发者(称呼这个时代的开发者为"开发者"感觉很奇怪)会通过盒式磁带加载一个叫做EDTASM的工具,编写汇编代码,保存回磁带,然后汇编并运行。听起来很简单对吧?但请记住,使用汇编语言时,你要处理内存地址。意味着你要硬编码存储数据的内存位置。那编辑器呢?编辑器也存在于同一内存中吗?是的,你必须记住这一点,因为它可能存在于你想要在生产环境中使用的地址范围内。

例如,当我在Commodore 64上编写汇编时,会根据当前是编写软件还是推送到生产环境使用两个不同的ORG定义(我的起始内存位置)。在开发过程中,我的汇编器和编辑器会干扰。嗯…这一定是"但在我的机器上能工作"的第一个案例。

并非所有东西都是汇编语言,我们中的许多人都是从一种叫做BASIC(初学者通用符号指令代码)的小语言开始的。这是许多人进入编程世界的入口。虽然它让我们创建的软件运行缓慢,但它仍然是软件,任何人都可以使用。我的第一行代码就是在Commodore 64上用BASIC编写的。

展望C语言的未来

啊,C语言。无处不在的语言。即使在2025年,你仍然随处可见C语言的身影。从嵌入式开发到一些用Rust编写的包含不安全C代码的软件。我在高中时第一次接触C语言,那是2004年,我们使用了优秀的Borland C(不是C#或C++…就是C)。

C语言由Dennis Ritchie于1972-73年在贝尔实验室创建。最初是为了构建在Unix上运行的实用程序。C语言直到20世纪80年代才广泛流行。

如果你想写C语言,你需要了解"K&R C"。这实际上是一本书,由Dennis Ritchie和Brian Kernighan编写,已成为C语言的圣经。它被认为是C语言的最低共同标准,无论你决定使用哪个版本的C,这本书中的内容都必须有效。

那么开发者当时(甚至现在)如何用C语言构建软件?他们如何学习需要做什么?

从学习开始…书籍。是的,书籍!由于语言(及其框架)相当简单(没有7^32个JavaScript框架),当时的软件工程师只需几本书就能掌握一切。

这些不仅仅是参考文档,而是展示C语言可能性的书籍。然后你只需要找一个热切的软件工程师,让他们自由探索这种神奇的新语言提供的可能性!

编写软件呢?他们当时使用git吗?不,git直到2005年才出现,所以当时的软件版本控制相当手动。从开发者有自己的本地源代码管理方式,甚至还有墙图,开发者可以在上面"声明"某些源代码文件的所有权。对于那些能够在共享(多用户)系统上工作,或者拥有某些网络存储早期版本的人来说,源代码共享就像分发软盘一样简单。

当时,迭代很慢。软件(大部分)以物理介质发布,空中更新并不常见(某些软件可以通过调制解调器更新,但对大多数用户来说这不是标准做法)。所以像我们今天这样体验用户反馈并不那么迅速。

停下来闻闻90年代的气息

好吧,我在这篇文章中说得够久了。让我们在这里暂停一下,反思过去30多年我们走了多远。从绿纸和打孔卡,到移动比特和编译C语言。嗯…实际上并没有那么远。如果你看C语言,它的"hello world"与FORTRAN并没有太大区别。

事实上,我们进行软件开发的方式将在未来几十年大幅加速。从面向对象编程到Web,从JVM到LLM。所有这些以及更多内容,将在本博客的第二部分中讨论。

我将在接下来几周内在AWS Builder Center发布第二部分。请确保在那里关注我!

再见!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计