下面是一段BANCStar语言的程序代码:2999,,,8600,,,13000,829,6,3008910829,2446,22245,2201211585,15855,22002,2200211586,15865,22002,2200211587,1587,15875,22002,2200211588,1588,1585,22002,22002,22002,2200222002,22002,22002,22002,22002,22002,22002,22002,22002,22002,2200。22002,2200211600,6005,22002,22002116015,22002,22002116025,22002,22002,2200211603,1603,16035,222002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002110200,22002,16160216160,2200211608,16085,22002,2200211609,16095,22002,2200211610,1610,16105,2200211611,1611,16115,2222002,2222222222222002222222222222002,22002,22002,2200222002,220022222222222222222222002,222002,22002,2220022222222222222222222222222222222222222222222转,22002,22002,22002,22002,22002,22002,261353,2613,2613,2613,2613,2613,2613,2613,2613,2613,2613,255613,255613,261352002,2200211617,16175,22002,2200211618,16185,22002,2200211619,1619,16195,222002,220022200211624,16245,22002,2200211625,16255,22002,2200211626,16265,22002,2200211627,16275,22002,2200211628,16285,22002,2200211629,1629,16295,22002,22002,2200211630,1630,16305,22002,22002,22002,2200211677,22002,22002,2200211678,22002,22002,2200211679,22002,22002,22002,2200211680,22222002,222002,22002,22002,220022200211749,22002,22002,220023001,351,2,10190,3512,22002,2200210191,3522,222002,22002,220021902,1912,192210863,3552,22002,2200210864,3562,22002,22002,2200210865,3572,222002,22002,22002,22002,2200210415,3922,22002,2200210416,3932,22002,22002,2200210563,4072,22002,22002,22002,2200210562,4082,222222002,222002,222002,22002,222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222转,10001,785,10831599,10001,717,10831600,10001,710,10731601,10001,786,10831602,10001,715,10831603,10001,787,10831601,81301,71406,10801,713,10831606,10001,712,10831607,10001,711,10831608,10001,765,10831609,10001,766,10831617,10001,767,10831618,10001,768,10831619,10001,769,10831620,10001,770,10831621,10001,771,10831622,10001,772,10831623,10001,776,10831624,10001,777,10831625,10001,778,10831626,10001,779,10831627,10001,780,10831628,10001,781,10831629,10001,782,10831630,10001,797,10831631,10001,763,10831632,10001,764,1088500,,2,1254,2301,1,-2301想象一下,在工作的第一天,你会收到这样的一些程序代码。1990年2月,我就是这样。一个七人团队在纸上维护一批数百页的代码,所有这些代码都已发布到生产环境。并不是我们发明了它们,我们只是不得不使用它们。作为一个轶事,我在这里展示了这些代码的幸存文档的图片,其格式是使用我开发的工具生成的,它可能只是模仿我们程序员早期在纸上所做的这些文档的样子。关于此代码纸上的这些代码是C16LNAPP.SCN的一部分,它只是打印的第一页。它是1990年代美国一家大型商业银行——位于华盛顿的第一洲际银行(FirstInterstateBank)在生产环境中使用的一段代码。既然处理了也没用,征得了当时参与者的同意,发表在这里,供大家玩玩。下面的另一段代码也是来自生产系统环境。我不太担心在这里发布这么多有版权问题的代码信息,因为世界上只有大约10个人能看懂。8607,,,111547,15475,22002,220021316,1629,1,16493001,1316,3,3007811528,22052,22002,220029301,0,1528,152831568,1000,528,850,,3001,,,3100,1316,3,3008911547,15475,22002,220023001,1316,3,300893001,1317,3,100008400,,,8550,700,801,3001,1,0,2,5224,0,3,100018500,,3,8500,,5,1547,,1,-2301这样打印出来的代码文件估计有1350多个,大部分都有几百行,有的甚至几千行线。***洲际银行的银行部门使用这些程序来处理业务。BANCStar语言的一些有趣特性:BANCStar程序中唯一合法的字符是数字0-9、逗号、减号和回车。不允许有空行。如果有一个“.”文件中的任何位置,编译器都会崩溃。绝对不允许评论。有控制结构,包括3000(“if”)、3001(“endif”)和3101(“elseif”),以及8500(“GOTO”)和8550(“组合GOTO”)。有个硬性规定,整个系统的变量+常量不能超过2000个。任何需要显示在屏幕上或打印到表单上的东西都必须定义为常量,因此它们都占用有限的资源空间。因此,大多数计算都是使用几十个被系统不断重复使用的“临时寄存器”变量来执行的。系统中的一切都是全局的。对于开发新模块的程序员来说,最好的办法就是在系统中找到一些这些临时存储的数字,“借”来使用,完成自己的计算,而这些寄存器的真正拥有者却发现他们存储的数字丢失了.之前,恢复原始值。代码中的标签(Label)使用绝对行地址,所以一旦插入新代码,插入行之后涉及GOTO操作的代码必须重新定位和链接。据我所知,BANCStar代码实际上是使用“屏幕生成器”生成的,该工具最初可能是用于可视化编程的。但是这个生成器在5.1c版本中的功能太有限了。一些有经验的程序员很快就开始研究它的工作原理,并开始直接修改它生成的中间代码。这些中间代码是实际在生产环境中运行的代码。我在1990年代初来到西雅图,加入了这个由7名程序员组成的开发团队,他们的日常工作是直接用BancSTAR机器语言编写代码,完全抛弃代码生成器。当他们第一次向我展示这种语言时,我以为他们在开玩笑。但几周后,我也开始学习阅读和编写这种代码——在每个BancSTAR语言程序员最喜欢的工具的帮助下:点阵打印机,以及一堆用各种颜色突出段落的打印机.代码用彩笔,纸带上写满了各种系统提示表格,类似于速查手册。每次系统有任何修改,我们都认真仔细地修改相关数据和文件。(我不是开玩笑说临时寄存器的重复使用;如果你需要使用一个常量整数1000,你需要去程序中看看其他人是否在其他地方使用了相同的值,你需要使用你的链接到这个地方,并希望它不会被其他人修改,而你正在使用它。)我们已经开发了一些内部工具来帮助我们用BancSTAR语言编写大型应用程序,我们也已经将这些应用程序提供给所有Broadway&Seymour展示它,但我认为他们不会相信我们直接用他们的低级、未记录的机器代码编写它。英文原文:世界上最糟糕的编程环境?翻译链接:http://www.aqee.net/bancstar/
