一代人有一代人的COBOL
每一代的计算机从业者,都会遇到属于他们时代的1959年的“COBOL时刻“。
这是一个人类与机器沟通时的抽象层级不断跃升的过程。每一代人士,都会经历那个,“某个职位是否会取代我”的疑惑,“A职位是否会与B职位合并”的害怕,以及“我们的技术未来,到底会向何方”的,仰望天空,但是就如观测宇宙一样,自然却无法立即获得答案的发问。我们当然可以以今时今日的上帝视角告诉1959年的人士,今天的一切,解释他们当时的迷茫,害怕,不满甚至愤怒,正如我们现在被困在今时今日的历史时代中,但是我们自己就在历史所定义的“now and only now”的迷雾中。
从狭义的计算机编程来讲,或者从广义上的人类以各种方式告诉计算机它应该如何干活开始,每一次我们都在以各种方式尝试使得技术变得更加简单,直观,民主化,更加强调人是计算世界的主宰,更加弱化“一个巨大的机器配五个工作人员”的,人围绕机器的想法。从二战结束以后到现在,人类尝试了非常多的方式,所以,这就是我的开题,一代人有一代人的COBOL时刻。
我在雪城大学念书的时候,因为所在学院School of Information Studies与IBM的合作比较密切,所以机缘巧合地接触了Mainframe大机,接触了COBOL,IBM z/OS,ISPF, JCL这一些与个人计算时代完全不同的存储和技术路线。这让我接触到了这一些在时间线上古老的技术,此时此刻,正如彼时彼刻。
COBOL全称 Common Business-Oriented Language,由Grace Hopper在1959年带领团队于1959年公布。(偏题说,1947年,Grace Hopper第一个记录下来了人类有记录的软件运行bug,因为那真的是一个虫子卡在了计算机里造成的故障)。
当时她和她的团队为了解决一个问题:软件工程师的编程非常困难,而审计和商务人士面对如天书一样的代码也不知所以然。我们在这里先没有讨论科学运算中的运用,而是当时在银行业和金融业里早期使用计算机处理业务的场景。
想象一下,你是生活在20世纪60年代初的美国软件工程师,在一家地方大银行公司上班。那个时候,全美国的跨行实时查询余额并现金提款的功能还有十几二十年后才完全支持(无论是柜台与柜员交流还是ATM机),但是你那个时候不知道。你只知道,你的地方银行,已经引入了早期的处理交易的计算机IBM 1401,这个巨大的占用了一整个房间的机器可以把手动工作自动化,你知道它其实是一个非常不好伺候的机器,因为为它编写软件,简直是灾难。你用Autocoder给IBM1401 写代码,但是它的行文可读性太差了,但是你已经知道,比起早期的IBM 650 (更早的型号)上的SOAP (Symbolic Optimal Assembly Program)编写的难度来说,已经好很多了。
下面是一个非常简单的操作,就是一个客户进入到了营业厅,说我要取x美元,这是我的存折。银行柜员取了x美元现金给这位客户,然后记录下来了交易流程,等到每晚上批处理(Batch Processing)。在那个时代,实时在银行机器系统里查询户头余额是不可能的,所以白天只有相信客户存折上记载的是正确的。
接下来就是这个Autocoder程序的一个例子,看看诸位如果在没有行解释的情况下是否能看懂它的一分一毫:
* --------------------------------------------------------------
* IBM 1401 AUTOCODER - CASH WITHDRAWAL
* --------------------------------------------------------------
label op operands remarks
INPUT DA 1,80 ;
ACCT EQU INPUT+10 ;
OLDBAL EQU INPUT+20 ;
AMT EQU INPUT+30 ;
START R ;
SW OLDBAL ;
SW AMT ;
S AMT,OLDBAL ;
BM OVERDFT,OLDBAL ;
;
MCW OLDBAL,050 ;
MCW ACCT,040 ;
P ;
;
B START ;
OVERDFT H START ;
END START
简直就是天书!