真正的程序员用 Fortran 编写代码。
也许他们现在这样做了,在这个颓废的时代
啤酒时代,手计算器和
“用户友好”的软件,但又回来了
美好的旧时光,当这个词
“软件”听起来既有趣又真实
计算机是由鼓和
真空管,真正的程序员写道
在机器码中。不是 Fortran。不是
老鼠。甚至不是汇编语言。
机器码。原始的,朴素的,
难以理解的十六进制数。
直接。
免得全新一代
程序员在无知中长大
这光辉的过去,我义无反顾
描述,尽我所能通过
代沟,真正的程序员如何
写了代码。我会叫他梅尔,因为
那是他的名字。
我第一次见到梅尔是在我上班的时候
对于 Royal McBee Computer Corp.,
现已解散的子公司
打字机公司。该公司
制造了 LGP-30,一个小型的,
便宜(按照当时的标准)
鼓记忆电脑,刚刚
开始生产 RPC-4000,
大大改进、更大、更好、更快
-- 鼓记忆计算机。核心成本太高,而且不会留下来,
反正。 (这就是你没听过的原因
公司或计算机。)
我受雇编写 Fortran
这个新奇迹和梅尔的编译器
是我的奇迹指南。梅尔
不赞成编译器。
"如果一个程序不能自己重写
代码,”他问道,“有什么好处?”
梅尔用十六进制写了
最流行的计算机程序
公司拥有。它在 LGP-30 上运行
并有潜力地玩二十一点
电脑展上的顾客。它的
效果总是戏剧性的。 LGP-30
每次展会的展位都挤满了人,而且
IBM 的销售人员站着说话
对彼此。不管这
实际销售的计算机是一个问题
我们从未讨论过。
Mel 的工作是重写
RPC-4000 的二十一点程序。
(港口?那是什么意思?)新的
计算机有一个一加一寻址
方案,其中每台机器
指令,除了
操作码和地址
需要的操作数,有第二个地址
这表明在哪里,在旋转
鼓,下一条指令是
位于。用现代的话来说,每
单个指令后跟一个
去!将 that 放入 Pascal 的管道中,然后
抽它。
Mel 喜欢 RPC-4000,因为他
可以优化他的代码:也就是说,
找到滚筒上的说明,以便
就在一个人完成工作时,
接下来将是刚刚到达
“读头”,可用于
立即执行。有一个
程序来完成这项工作,一个“优化
assembler”,但 Mel 拒绝使用它。
“你永远不知道它会去哪里
放东西”,他解释说,“所以你会
必须使用单独的常量”。
过了很久才明白
那句话。自从梅尔知道
每个操作的数值
代码,并分配了他自己的鼓
地址,他写的每一条指令
也可以认为是数字
持续的。他可以早一点
“加”指令,说,和乘
由它,如果它有正确的数字
价值。他的代码不容易
别人来修改。
我比较了梅尔的手工优化
具有相同代码的程序被按摩
通过优化汇编程序,
梅尔总是跑得更快。那是
因为“自上而下”的方法
程序设计尚未发明
然而,梅尔不会使用它
反正。他写了最里面的部分
他的程序首先循环,所以他们
将获得最优的第一选择
地址鼓上的位置。这
优化汇编器并不聪明
这样做就够了。
Mel 从来没有写过延时循环,
或者,即使是在鲁莽的时候
Flexowriter 之间需要延迟
输出字符正常工作。他
刚刚找到鼓上的说明
所以每一个连续的都只是过去
需要时读取头;这
鼓必须执行另一个完整的
寻找下一个革命
操作说明。他创造了一个
这个过程令人难忘的术语。
虽然“最佳”是绝对的
术语,如“独特”,它变得普遍
口头练习使其相对:
“不太理想”或“不太理想”
或“不是很理想”。梅尔叫
最大延时位置“最
悲观”。
在他完成二十一点之后
程序并让它运行,(“即使
初始化程序已优化”,他说
自豪地)他收到了来自
销售部。使用的程序
一个优雅的(优化的)随机数
生成器洗牌“牌”和
从“甲板”交易,以及一些
推销员觉得这太公平了,因为
有时客户会流失。他们
想让梅尔修改程序,
在感测开关的设置
控制台,他们可以改变
赔率,让客户赢。
梅尔犹豫了。他觉得这显然是
不诚实,它是,它
影响了他的个人诚信
一个程序员,它做到了,所以他
拒绝这样做。首席推销员
和梅尔谈过,大老板也是
而且,在老板的催促下,几个
程序员同行。梅尔终于给了
并写了代码,但他得到了
向后测试,并且,当感觉
打开开关,程序
会作弊,每次都赢。梅尔
对此很高兴,声称他的
潜意识不受控制
合乎道德,并坚决拒绝修复
它。
在梅尔离开公司后
更环保的 pa$ture$,大老板问
我看看代码,看看我是否
可以找到测试并扭转它。
我有些不情愿地同意了
看。追踪梅尔的代码是真实的
冒险。
我经常觉得编程是
一种艺术形式,其真正价值只能
被另一个精通的人欣赏
同样的奥术;有可爱的
隐藏的宝石和精彩的政变
人的看法和钦佩,有时
永远,由本质上的
过程。你可以学到很多关于
个人只是通过阅读他的
代码,即使是十六进制。梅尔是,我
想想,一个无名的天才。
也许我最大的震惊来自于我
发现了一个没有
在里面测试。没有测试。 无。常见的
感觉说它必须是一个闭环,
程序会在哪里循环,
永远,无穷无尽。程序控制
然而,直接通过了它,并且
安全地离开另一边。我花了
两周时间搞清楚。
RPC-4000 计算机有一个真正的
称为索引的现代设施
登记。它允许程序员
编写一个程序循环,该循环使用
内部索引指令;每一次
通过,索引中的数字
寄存器被添加到地址
那条指令,所以它指的是
系列中的下一个数据。他有
只增加索引寄存器
每次通过。梅尔从来没有用过。
相反,他会取消指令
进入机器寄存器,加一
它的地址,并将其存储回来。他
然后将执行修改后的
指令权从寄存器。
循环是这样写的
花费了额外的执行时间
考虑到——就像这样
指令完成,下一个是
就在鼓的读音头下面,
准备好出发。但是循环没有测试
在里面。
当我注意到
索引寄存器位,放置的位
地址和操作之间
指令字中的代码,是
打开——但梅尔从未使用过
索引寄存器,将其全部归零
时间。当灯亮起时
差点把我弄瞎了。
他找到了他正在处理的数据
在内存顶部附近——
最大的位置说明
可以解决 - 所以,在最后
数据被处理,递增
指令地址会使它
溢出。进位会加一
操作代码,将其更改为
指令集中的下一个:a
跳转指令。果然,
下一个程序指令在
地址位置零,和程序
一路高高兴兴。
我没有和梅尔保持联系,所以我
不知道他有没有屈服过
被冲刷的变革洪流
编程技术,因为那些
久违的日子。我喜欢认为他
没有。无论如何,我印象深刻
足够我放弃寻找
冒犯测试,告诉大老板我
找不到它。他好像没有
惊讶。
当我离开公司时,二十一点
如果你程序仍然会作弊
打开右感应开关,并且
我认为应该是这样。一世
不喜欢破解
真正的程序员的代码。