膜拜!上古程序员实在太厉害了!

写在前面:我已经把这篇文章转成了视频,习惯看视频的朋友欢迎关注视频号"码农翻身Pro":这是世界上第一台商业上成功的个人计算机:ALTAIR 8800。

它没有显示器,没有键盘,怎么写程序?很简单,拨动开关来写程序!如果仔细观察一下上面的图,就能发现面板上写着:Data,Adress,Stop,Run,Deposit,CLR,D0 ~ D7, A0~A15等字样。如果想计算“1+1”,在这个机器上可以这么干。1.设计汇编代码;把该地址的数字装入累加器LDA 000020;将数字1和累加器的数相加ADI 001 ;将累加器的数保存到特定地址STA 000022
2. 把汇编转化成机器指令(用8进制,方便输入)072 020 000 306 001 062 022 0003.拨动开关,输入指令例如072,对应的开关是这样的:

就这么一点点地拨动开关进行输入,可不能出错,一旦出错就前功尽弃。4.查看结果输入完成,扳动“运行”开关,然后看看控制面板上的小灯,就知道运行接过是否正确了。

看过《编码》这本书的同学可能更有感觉,这种办法和书中说的是类似的。

过程看起来非常繁琐,但是却体现了计算机最最本质的:存储程序。程序也是数据,通过拨动开关的方式被输入到计算机内存中,然后逐条开始执行。0 1纸带拨动开关的编程方式直接操作机器码,容不得一丝一毫的错误,拨动开关的每一次操作必须精确无误。任何一次把0拨成了1,或者把1拨成了0,就前功尽弃。所以极少有程序员这么干,有个更好的替代办法:纸带。程序怎么才能进入纸带呢?有专门的设备。例如著名的ASR-33电传打字机(Teletype),当时售价高达1000美元(相当于现在的10000美元)。

它有一个键盘,左边长长的就是纸带。现在,程序员就可以先在纸上汇编程序写好:3E 64C6 C876先在脑子中“调试”一下,没问题的话再通过ASR-33的键盘输入。ASR-33就可以转化成二进制,然后输出到纸带上。同理,ASR-33还可以反向把纸带中的内容读出来,输入计算机执行。过程很繁琐,但是已经比拨动开关好太多了。1975年,比尔·盖兹和保罗·艾伦为了抢到ALTAIR 8800的生意,通过这种方式,没日没夜地干了八周时间,为ALTAIR 8800写出了第一个Basic解释器,从此开始了微软的称霸之路。

下图就是存储Basic解释器的纸带

肯·汤普逊和丹尼斯·里奇也是用ASR-33 Teletype来开发Unix的,所以Unix的Terminal 就叫做tty。

0 2穿孔卡片纸带便宜,紧凑,但是非常脆弱,容易损坏。如果纸带散落到地上,代码立刻就变成了一大堆意大利面条,真正的意大利面条,不管它是卷起来的还是折起来的,非常容易被撕破。

更烦人的是纸带难以编辑,如果程序错了,需要定位到错误位置——这不是一件轻松的事情,毕竟纸带上一行行全是孔——然后剪断现有纸带,拼接新的部分。换句话说,纸带像是一个脆弱的“顺序存取”的媒介。很快,大家就更喜欢IBM发明的打孔卡了。

“写”在打孔卡上的程序,即使是出了错,也可以轻松地替换掉出错的那一张或者几张。将有错误的卡片和一张空白卡片放在打卡机中,DUP 到错误处,打出正确的部分,DUP 剩余的,放回去就行了。

所以打孔卡具备一些容易修改的“随机存取”的性质。下面这幅图一共有62500张打孔卡(大小为 5 MB),保存着美国SAGE 军事计算机网络的控制程序。

如果打孔卡掉到地上乱了怎么办?打孔卡上有序号,只需要把它们捡起来,放在同一个方向(将切掉的一角对齐),放进一个专门的机器(Punched card sorter)排序就行了。0 3硬盘在打孔卡以后,大家又用了磁鼓存储器,磁带,最后才发展到硬盘,现在主要是固态存储了。编程语言也从机器语言,汇编语言,发展到Fortran、C、 C++、Python、Java、JavaScript等高级语言。一路走来,程序员现在终于可以坐在电脑前,打开自己喜欢的IDE/编辑器,舒服地编程了。现在的程序员是幸福的,可以站在一个很高的抽象层次上进行编程创作。现在的程序员也是不幸的,很多人丧失了了解计算机最底层原理的兴趣。以后有了AI的辅助,程序员可能连代码都不用写了,当好一个代码审查员就行。想想前辈们拨动开关输入程序,在纸带和打孔卡上编程,真是恍如隔世。最后留个问题:如果现在退回到纸带和打孔卡时代,你还愿意从事编程这个行业吗?
分类