专栏名称: 码农翻身
工作15年的前IBM架构师分享好玩有趣的编程知识和职场的经验教训, 不容错过。
目录
相关文章推荐
程序员的那些事  ·  清华出品:DeepSeek ... ·  3 天前  
OSC开源社区  ·  olmOCR:比传统OCR精度更高、比GPT ... ·  昨天  
OSC开源社区  ·  3月8日妇女节,来一场职场姐妹茶话会 ·  2 天前  
OSC开源社区  ·  DeepSeek公布模型推理系统的成本利润率 ... ·  4 天前  
51好读  ›  专栏  ›  码农翻身

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

码农翻身  · 公众号  · 程序员  · 2025-03-05 08:55

正文

写在前面 :我已经把这篇文章转成了视频,习惯看视频的朋友欢迎关注视频号" 码农翻身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,对应的开关是这样的:



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


4.查看结果


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



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



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


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



0 1
纸带



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


任何一次把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解释器,从此开始了微软的称霸之路。



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


0


肯·汤普逊和丹尼斯·里奇也是用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/编辑器,舒服地编程了。


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


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







请到「今天看啥」查看全文