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

写在前面:我已经把这篇文章转成了视频,习惯看视频的朋友欢迎关注视频号"码农翻身Pro":

这是世界上第一台商业上成功的个人计算机:ALTAIR 8800。

0

它没有显示器,没有键盘,怎么写程序?

很简单,拨动开关来写程序!

如果仔细观察一下上面的图,就能发现面板上写着: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 000

3.拨动开关,输入指令

例如072,对应的开关是这样的:

e019324e5530355d32d1d00ad2aa98e7.png

就这么一点点地拨动开关进行输入,可不能出错,一旦出错就前功尽弃。

4.查看结果

输入完成,扳动“运行”开关,然后看看控制面板上的小灯,就知道运行接过是否正确了。

5945cd70ff07715df5949184e57cf212.png

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

4e1961a9d60523cf07693e3099f460ed.png

过程看起来非常繁琐,但是却体现了计算机最最本质的:存储程序。

程序也是数据,通过拨动开关的方式被输入到计算机内存中,然后逐条开始执行。

01

纸带

拨动开关的编程方式直接操作机器码,容不得一丝一毫的错误,拨动开关的每一次操作必须精确无误。

任何一次把0拨成了1,或者把1拨成了0,就前功尽弃。

所以极少有程序员这么干,有个更好的替代办法:纸带。

程序怎么才能进入纸带呢?有专门的设备。

例如著名的ASR-33电传打字机(Teletype),当时售价高达1000美元(相当于现在的10000美元)。

0

它有一个键盘,左边长长的就是纸带。

现在,程序员就可以先在纸上汇编程序写好:

3E 64 

C6 C8 

76

先在脑子中“调试”一下,没问题的话再通过ASR-33的键盘输入。

ASR-33就可以转化成二进制,然后输出到纸带上。

同理,ASR-33还可以反向把纸带中的内容读出来,输入计算机执行。

过程很繁琐,但是已经比拨动开关好太多了。

1975年,比尔·盖兹和保罗·艾伦为了抢到ALTAIR 8800的生意,通过这种方式,没日没夜地干了八周时间,为ALTAIR 8800写出了第一个Basic解释器,从此开始了微软的称霸之路。

7864d64f998ef9a3c512cca50e54da84.png

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

0

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

cfbb2238d9d94dac8a0211b63ab971ff.png

02

穿孔卡片

纸带便宜,紧凑,但是非常脆弱,容易损坏。 

如果纸带散落到地上,代码立刻就变成了一大堆意大利面条,真正的意大利面条,不管它是卷起来的还是折起来的,非常容易被撕破。

3ffe7b273d07e6273ecd057be1f5bbac.png

更烦人的是纸带难以编辑,如果程序错了,需要定位到错误位置——这不是一件轻松的事情,毕竟纸带上一行行全是孔——然后剪断现有纸带,拼接新的部分。

换句话说,纸带像是一个脆弱的“顺序存取”的媒介。

很快,大家就更喜欢IBM发明的打孔卡了。

d473659db6f301a0e00cb80f984a4b18.png

“写”在打孔卡上的程序,即使是出了错,也可以轻松地替换掉出错的那一张或者几张。

将有错误的卡片和一张空白卡片放在打卡机中,DUP 到错误处,打出正确的部分,DUP 剩余的,放回去就行了。

0e7ee26972e2b40e689e4faa19256580.png

所以打孔卡具备一些容易修改的“随机存取”的性质。

下面这幅图一共有62500张打孔卡(大小为 5 MB),保存着美国SAGE 军事计算机网络的控制程序。

a42456ecd7629473090fb2a607895574.png

如果打孔卡掉到地上乱了怎么办?

打孔卡上有序号,只需要把它们捡起来,放在同一个方向(将切掉的一角对齐),放进一个专门的机器(Punched card sorter)排序就行了。

03

硬盘

在打孔卡以后,大家又用了磁鼓存储器,磁带,最后才发展到硬盘,现在主要是固态存储了。

编程语言也从机器语言,汇编语言,发展到Fortran、C、 C++、Python、Java、JavaScript等高级语言。

一路走来,程序员现在终于可以坐在电脑前,打开自己喜欢的IDE/编辑器,舒服地编程了。

现在的程序员是幸福的,可以站在一个很高的抽象层次上进行编程创作。

现在的程序员也是不幸的,很多人丧失了了解计算机最底层原理的兴趣。

以后有了AI的辅助,程序员可能连代码都不用写了,当好一个代码审查员就行。

想想前辈们拨动开关输入程序,在纸带和打孔卡上编程,真是恍如隔世。

最后留个问题:如果现在退回到纸带和打孔卡时代,你还愿意从事编程这个行业吗?

近期爆文

一个软件Bug,竟然让爱好和平的国家领袖变成了核武器暴君!

小心,美国人又要在基础软件上弯道超车了

世界上最幸福的程序员

世界上最厉害的协作软件,让程序员痛不欲生,最后被印度人搞走了

1970年以来技术的发展趋势,怪不得程序员35岁就被裁......

这个大学生写了个免费软件,全世界网民抢着给他送钱,每月10万美元

全世界流浪的程序员,用最原始的技术,每月赚17.6万美元!

开源软件的叛徒,加入了微软

这两个程序员要花100万,彻底重写世界上最复杂的软件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值