在计算机诞生之初,互联网、IDE、丰富的在线文档乃至Google和Stack Overflow都还不存在。那时的程序员,究竟是如何进行编程的呢?
前几天,恰好读到国外一位开发者分享的有趣文章,详细讲解了这个问题。以下内容经过编译和整理,让我们一同回顾那个充满硬核气息的编程年代。
关于“上古时期”的程序员如何编程,我想我得从头说起。当我开始接触编程时,使用的“计算机”是这样的:

没错,你没有看错。那时的计算机没有键盘,也没有鼠标。你能看到的只有一堆开关和指示灯。那么,如何知道该打开或关闭哪些开关?它们的含义又是什么?你需要参考这样一本书:

你可能会问,没有键盘和鼠标,程序写在哪里呢?答案是需要一些最朴素的介质:

当你想用代码解决某个问题时,必须手写汇编指令,然后纯手工在内存中为数据和代码分配位置——这叫做人工寻址。而且,你的内存可能只有1024字节。这一切在现代程序员看来,简直是天方夜谭。
这还不算完。写好的代码还需要手动转换为十六进制,检查无误后,再通过面板上的开关输入到设备中运行。
那个时期根本没有像现代硬盘这样的持久存储设备。当然,除了纸。每次运行程序,你都需要手工输入一遍。注意,是每一次。不过,这个纯手工时期很快过去了,纸带的时代到来了。

这东西噪声很大,也不可靠,但比起每次纯手工输入,已经是巨大的进步。那时,打印机和键盘还没什么用武之地。后来,我自己制作了一个IO卡,接上了这个小东西:

可以用磁带来加载和保存程序了,速度高达每秒110比特,简直是“神速”!当然,这个过程依然相当痛苦。
后来,BASIC语言的出现让编写真正的程序成为可能,磁带开始真正用于存储程序。在大学里,你开始能见到这些东西:

以及很多的这个:

当然,还有堆成山的这些书:

需要持久保存的程序开始存放在装满打孔卡片的盒子里。这一时期,你依然不能直接在机器上写代码或调试。调试代码需要“人肉Debug”——在你的大脑里模拟运行代码,而不是在计算机中。从修改一行代码到看到运行结果,时间是以小时为单位计算的。
所需的资料也多得惊人。某个计算中心有一整间屋子,用来存放关于计算机系统方方面面的手册,从地板堆到了天花板。我个人就有60多本书,涵盖多种编程语言的实现细节、操作系统原理以及课程所需的教科书。
那个时代根本没有现代的在线社区。最接近Stack Overflow的体验,就是跑到办公室的公共区域,对所有人喊一声:“谁知道某某某是什么意思?”,然后内心祈祷不会有人因为这个“简单”的问题而嘲笑你。
之后,这个东西出现了:

而且它能连接到……嗯,一些由开关组成的设备(注:此处原文图片为模拟合成器,可能是一种幽默或比喻):

更棒的是,这堆设备上运行着:

是的,运行着UNIX!
现在,你可以把程序保存在计算机上了。写代码时能在屏幕上实时看到,还能在计算机上实时编译和测试——是 实!时!的! 这简直就是程序员的天堂,难怪那个时期我写了那么多的代码。
之后,“互联网”出现了——好吧,还不是现在的互联网,而是USENET。你可以在新闻组或者ARPAnet的邮件列表里提问。当然,你依然会暗自期待没人嘲笑你的“蠢问题”。此时,可能会有些来自MIT、CMU或Berkeley的家伙来回答你。
这之后,真正的计算机革命开始了。
回顾这段历史,更能体会到开发工具与社区的演进如何深刻地塑造了编程本身。这些有趣的往事,也常是云栈社区里开发者们津津乐道的话题。