控制您资金的代码

2020-11-22 11:10:06

Wealthsimple提供强大的财务工具来帮助您增长和管理您的资金。这是“货币与世界”部分的最新内容,在该部分中,我们研究了金钱如何塑造我们的生活方式。

托马斯(Thomas)刚开始编程时,是1969年。他还是多伦多高中刚毕业的孩子,没有任何人生目标。他的父亲是个木匠,但他的家人跟随他走了好运。托马斯全是大拇指。 “我父亲知道我不能将两块木头锤在一起,”他笑着说。

1969年,计算机仍然是奇怪的新奇事物,就像大机柜一样大。但是,世界各地的公司意识到,对于需要大量快速核算的任何任务(例如计算工资),它们都是无价的。提供给甚至可以学习一点编码的人的工作。因此,托马斯在多伦多市中心发现了“一所夜间飞行的小型弹出式学校”,并且在接下来的两个月中,学习了当今最热门的计算机语言:COBOL(通用业务导向语言)。

毕业后,他被加拿大一家大型银行的支票分类部门雇用。 (他不想我这样说,银行是秘密的;“托马斯”是化名,如果您还没有猜到的话。)当时,托马斯还不是银行的程序员,但是在接下来的几年中,他清楚地表明了自己的愿望,他的雇主付了钱,让他开办了许多诚实到善良的编码大学课程,并于1978年在银行开始了长期的程序员生涯。

托马斯喜欢它。就像不断地解决难题,就像下棋一样。他坐在办公桌前,用手将代码写出来,然后交给“打孔卡操作员”,后者会在卡上打孔以表示他的编程指令。他们一天两次将这些卡输入银行的大型“大型机”计算机。托马斯需要几个小时才能弄清楚他的代码是否真正正确地工作,或者他是否犯了一个使事情停顿的蠢事。如果这样做的话,他会仔细研究错误声明,重写COBOL,然后重试。

在接下来的几年中,Thomas擅长于COBOL,并编写了数千行宝贵的代码行。银行发出付款时,每天都是他的密码,可以帮助他们正确计算所有费用。随着70年代,80年代和90年代的持续发展,他和他的编码人员同事可能写了几千万行的COBOL。他特别引以为傲的是其中一个系统,一个闪电般的程序,可以每天处理“三到五百万笔交易”。那是我的孩子!”他于1988年编写了该程序的第一部分。

托马斯(Thomas)于2007年大约60岁时从银行退休,当他离开银行时,银行仍在使用该系统,当时托马斯拥有更多头发,而菲尔·柯林斯(Phil Collins)的《爱的时髦》(Groovy Kind of Love)则是20年的历史。 ”排在榜首。这些天来,代码已经有三十多年的历史了。每天仍在处理数百万条记录。实际上,他相信他和他的同僚当天写的大多数代码仍在运行,因为没有它银行将无法运行。

实际上,这些天,当电话在托马斯退休的房子里响起时-在多伦多郊外的一个小镇上-偶尔会有银行的人​​来。嘿,他们会说,您能帮忙...更新您的代码吗?也许会添加一些新功能?因为事实证明,该银行不再像托马斯那样雇用任何了解COBOL的人,他们可以潜入并对其进行调整以执行新任务。几乎所有COBOL退伍军人都是建立银行重要系统的打孔卡骑师,他们早已退休,他们知道COBOL内在和外在。他们像托马斯一样离开了建筑物。很少有年轻的编码人员对学习尘土飞扬的,已有50年历史的计算机语言感兴趣。多伦多蓬勃发展的人工智慧场景等新兴领域给他们带来了更大的兴奋。他们正在学习新的编码语言。

因此,这家庞大的银行仍然依赖73岁的托马斯(Thomas)这样的人,他们不仅可以保持运转正常,还可以添加新功能和改进功能。

那家银行并不孤单。 COBOL程序(很早以前就写过,甚至还没有彩色电视)在我们的日常生活中无处不在。

请考虑:美国金融机构中超过80%的亲自交易使用COBOL。在您刷卡的全部时间中,有95%的时间是COBOL在后台运行。 2012年,纽约梅隆银行发现有112,500个单独的COBOL程序,构成了近3.5亿行。这对于大多数大型金融机构而言可能是典型的。当老板将薪水交给您时,赔率是使用COBOL计算出来的。如果您进行投资,您的股票交易也将以此为基础。医疗保健也是如此:美国的保险公司使用“裁决引擎”(该软件可以计算出医生或药品公司将获得的服务报酬),该软件以COBOL编写。不知道为什么,当您在零售商处购物时,会看到一个店员在老式终端机中键入文字,黑色背景为绿色?这是因为库存系统正在使用COBOL。还是为什么您会看到航空公司预订代理商使用相同的黑色屏幕和绿色屏幕来更改航班? “哦,那是COBOL,那绝对是COBOL,” Faircom公司的高级工程师Craig Bailey笑着说,该公司生产的软件可以帮助公司管理那些旧系统。

没有人知道那里有多少COBOL,但是据估计,有多达2400亿行代码悄无声息地为我们日常生活中最关键的部分提供了动力。菲利普·特普利茨基(Philip Teplitzky)说:“仅次于石油,美国第二大最有价值的资产就是2400亿的COBOL产品线。”

人们经常被告知,技术之所以能够兴旺发达,是因为它具有开创性的创新-愿意用代码做大胆的新事物,“快速移动并打破事物”,就像年轻的马克·扎克伯格(Mark Zuckerberg)贴在Facebook墙上那样。的确,每天我们都会看到用新的,更新的语言编写的疯狂的新代码发布。如果您看到过这种疯狂的新型AI,它可以像人类一样写句子,那么它的创建就依赖于Python(一种著名的新型计算机语言)。当Facebook在其浏览器的应用程序中释放一些新功能时,编码人员通常会使用JavaScript,这是另一个热门。

但是,在较老的,规模庞大的行业对经济至关重要吗? COBOL仍然无所不在。这使其难以创新。您如何使用精力充沛的年轻编码人员没有兴趣的古老语言来修补和添加新功能?如果大型的老银行不是推进Venmo或Square等服务或其他模糊的“ fintech”产品的公司,那么COBOL就是问题的一部分。但是,如果真是这样,为什么托马斯仍然被拖出退休生活呢?我们为什么不能没有它?

部分原因是COBOL首先到达那里-并且是完全适合其任务的工具。在许多方面,COBOL都是点燃现代计算机时代的火花。

程序员于1959年开始设计COBOL。十年后的1969年终于发布了COBOL,它是使计算机广泛用于日常生活的第一门语言。在上世纪50年代后期,计算机才刚刚离开“实验”阶段。每天,公司开始考虑拥有自己的计算机来处理数字是否有价值。问题在于,在COBOL出现之前,编码是隐秘的且难以学习。程序员经常使用某种称为“汇编”语言的变体来编写软件,其中的命令可能过于抽象。 (例如,命令“ LXA A,K”的意思是“将加载到计算机内存中位置A的数字并将其加载到'索引寄存器'K中。”)更糟糕的是,计算机制造商经常为他们自己设计特殊的语言电脑。如果您为机器编写了出色的代码,则该代码无法在另一家公司生产的计算机上运行。

新一代有抱负的程序员认为这太疯狂了。其中一位是美国海军少将格蕾丝·霍珀(Grace Hopper),她曾在早期的实验计算机上砍过牙,还放了个性化的鞭炮。 (她是一个流行语:“请求宽容比请求许可容易。”)Hopper认为编程语言应该与英语更相似,以便它们易于学习和阅读。 1955年,她设计了一种名为“ FLOW-MATIC”的语言,旨在实现这一目标。要将数字从位置A移到位置D,例如,您只需编写“将A转移到D”。

1959年,一位名叫Mary Hawes的计算机程序员决定,她的行业需要设计一种像FLOW-MATIC一样容易编写并且可以在任何机器上运行的语言。她组建了一个专家委员会(包括许多来自新兴的商用计算机行业的专家委员会)来开始创建这种语言,并在国防部的领导下共同努力。目的是要使公司的普通公司经理即使不接受程序员培训也能阅读和理解这种语言。

十年的工作是由许多女性超级巨星贡献者(例如计算机科学先驱让·萨米特(Jean Sammet))大力推动的,产生了一种语言,很像FLOW-MATIC,这种语言很容易理解。例如,要添加两个数字,您可以编写“ ADD Num1,Num2 GIVING Result”。要进行3次计算,您需要输入“ PERFORM 3 TIMES”。

伊利诺伊理工学院历史副教授,《程序化不平等》作者马·希克斯说:“夸大COBOL的重要性确实很困难。” “它在计算方面做着绝对关键的事情。正是填补了在计算的最初几年中尚未填补的这个利基市场。它改变了您考虑编写程序的方式。”

它也改变了谁可以写它。 COBOL民主化编码;公司可以雇用日常工作人员,并在几个月内训练他们成为有用的COBOL程序员,并在一两年内成为专家。鉴于公司迫切需要更多温暖的身体来编写软件,因此这一点至关重要。

“您可以在街上接人,”英国编码员乔恩·皮克(Jon Pyke)说,他在1960年代就学会了COBOL,“并且基本上教他们如何做。”

关于COBOL的另一件事是它速度很快。它是专门为真正快速地进行大量“交易”而设计的。如果您是零售连锁店,则需要每晚计算销售额并重新计算库存。而且您没有太多时间来做这件事-营业时间结束后,可能是晚上几个小时,而计算机工作人员却迟到了。

银行也一样:白天,他们疯狂地接受交易,客户的要求将资金存入和取出帐户。在晚上,他们有几个小时来平衡所有这些书。如果您想知道为什么一段时间后无法存入支票,那部分是因为两家银行都需要在员工离职后运行其庞大的COBOL工作。在花旗银行,Teplitzky的代码通过一个拥有248台大型计算机的大型中心运行。

他告诉我:“您有六个,八个小时的窗口,如果您要表达的话,那是一件繁重的工作-您必须按照一定的顺序进行所有交易。”通过六个小时的批处理窗口,需要十亿美元的大笔资金来进行十亿笔交易。这是一个尖叫声。”

COBOL已针对以下任务进行了优化:处理大量的交易。计算机语言通常具有某种认知或创造性偏见。创建它们时都考虑了特定类型的任务。 Python非常适合数据科学和AI。 Fortran的创建是为了在代码中呈现数学公式。创建JavaScript是为了帮助程序员使网站具有交互性。

COBOL?它是为在那些大型计算机上工作而定制的,这些大型计算机本身是专门为处理数十亿笔交易,快速读写数据流而设计的。这就像是专为跑车设计的高辛烷值燃料。多年以来,COBOL的“编译器”(一种采用类似于英语的计算机代码语法并将其转换为计算机芯片可以执行的“ 1”和“ 0”)的软件越来越多,因此,COBOL的“编译的代码”成为了非常快。这意味着COBOL成为我们做很多重要事情的基础的部分原因是因为它确实很擅长。

“他们已经有50年的时间做到这一点,”经营COBOL Cowboys的比尔·欣肖(Bill Hinshaw)指出。

奇怪的是,那些COBOL系统的纯粹年龄实际上对他们有利。由于它们很旧,因此经过了不懈的调试。首次编写程序时,不可避免地会出现问题。有时这是一个错字,一个错位的命令;有时,用户执行了程序员从未想到的操作,结果崩溃了。当您获得一个新的应用程序时,如果它有故障和容易崩溃,这就是为什么:创建者将其发布到世界上时,却带有许多这些小缺陷。发现所有问题可能需要几天,几周甚至几年的时间。

但是那些运行世界的COBOL程序?他们已经有数十年的时间让编码人员和用户发现并解决所有问题。

我与另一位曾在加拿大大型银行工作的编码员Adriana Stern(这次不是化名!)在80年代开始了她的职业生涯,当时系统仍在消除一些奇怪的错误。有一天,她发现魁北克的一个特定的银行终端正在向系统发送带有重音符号的信件-最初的程序员从未想到会发生这种情况。

她告诉我:“因此,当系统试图解释它时,它会窒息。”在另一种情况下,另一个COBOL程序不断崩溃,她最终意识到这是因为新客户的名字中带有单引号-该程序意外地认为这是一条指令,指示“数据集的末尾”,代码停止。

斯特恩在银行工作了30年,她认为自己工作中的85%并未为银行编写大胆的新功能,而是“维护”。可以将其视为一种数字管道,它可以解决泄漏问题,并使所有操作逐渐变得越来越平稳。

她告诉我:“这是艰苦的工作,您在两端都在燃烧蜡烛。”

这就是为什么这些COBOL系统现在如此可靠的原因。它们已被调试,而不仅仅是地球上的任何代码。泡沫丰富的新TikTok风格的应用程序即使有很多错误,也可以启动并享有巨大的知名度。如果您最近发布的帖子中的“赞”计数略有错误,嗯,没什么大不了的。相反,如果一家大型零售商错误地估计了其库存,或者银行突然无法汇款?这造成了大规模的财务混乱。

Teplitzky指出:“ [银行]网络中的世界随时随地都在运转,” “一家银行每天要进出两倍的资产。例如,纽约的一家清算银行可能会更多……因此,在网络和大型后端系统中,有大量资金在流动。他们不能失败!如果失败,世界将终结。世界终结了。”

COBOL不仅快速正如托马斯(Thomas)告诉我的那样,它也是“稳定,稳定,稳定”的。他开发的其中一种程序每月需要提取约240万张政府养老金,并将适当的金额存入人民银行帐户。 “我们验证它们并在11分钟内对其进行检查。它已经20年没有失败了。”

这个想法-旧代码不仅可以很好,而且在关键方面要优于新代码-与许多硅谷神话相矛盾。由风险资本支持的初创公司通常会吹捧闪亮和新颖的事物。创始人并不夸耀自己的代码库有多老。恰恰相反:他们吹嘘自己的代码是最先进的,在整夜的会议中,满眼都是才华横溢的21岁孩子。但是,正如几乎每个程序员都会告诉您的那样,该软件较新且最近编写,它更有可能成为一堆烂摊子。

在大流行期间可以看到一个很好的例子。在Covid-19成立之初,企业大量关闭。下岗员工在网上蜂拥而至申请失业救济金,许多州政府的网站也因此而崩溃。在新泽西州,州长告诉媒体,他们的COBOL系统迫切需要帮助来应对新需求。他说:“从字面上看,我们的系统已有40多年的历史了。”

但是正在努力解决问题的技术人员知道,数字转换COBOL并不是问题。那旧东西工作正常。不,是那些崩溃的新东西-为网站本身提供动力的程序。

“风靡一时的是在大型机与外界之间的这个Web应用程序。那是一种崩溃。”在政府系统上工作了多年的程序员和作家玛丽安·贝洛蒂(Marianne Bellotti)说,他观察了新泽西的系统。但正如历史学家希克斯(Hicks)指出的那样,这太令人尴尬了,无法承认“哦,我们的网络系统崩溃了。”

贝洛蒂(Bellottti)看到其他政府机构(例如IRS)也发生了同样的事情。曾经打电话给她,以帮助无法使用的IRS网络应用。当他们进行调查时,他们发现问题确实出在新程序中,“这部分编写不良的Java代码”。相比之下,运行COBOL的大型机就像法拉利一样赛车。

但是,“稳定”和老练会造成悖论-成功的诅咒。因为当代码运行良好而无需任何人检查时,最终人们会离开。他们停止看它,停止检查它。这意味着他们不再了解它是如何工作的。

当然,他们知道它有效。嘿,它每天都在运行,可瞬间处理数百万笔交易!但是没人知道为什么或如何。 COBOL已成为一个难以理解的谜团,它是一个尽职尽责地执行其任务的守护程序,但没人能完全理解。

几年后,当您确实要更改某些内容或添加新功能时,这可能会成为一个大问题。

戴夫·瓜里诺(Dave Guarino)近距离看了看。他是一位软件开发人员,曾在非营利组织Code For America工作了多年,该组织吸收了才华横溢的编码人员,并帮助他们更新政府的旧服务。几年前,他正在帮助编写一个新的Web应用程序,以便加利福尼亚人可以更轻松地申请食品券。该Web应用程序曾经在加利福尼亚州的较早软件系统之上浮出水面;用户将与该应用进行交互,并将其请求传递给在加利福尼亚大型机上运行的数十年历史的代码。

这就是发生问题的地方。有一次,他的团队想为食品券获得者提供一种与政府官员预约会议的方式。加利福尼亚的旧系统已经有一个部门可以接受这样的请求。但是在您输入“您何时有空见面?”的字段中较旧的系统只能输入40个字符,并且不能使用连字符,因此您不能使用“ M-W”之类的简短语言来显示您周一至周三有空。

瓜里诺想,真是痛苦。因此,他遇到了管理旧软件系统的人。 “很遗憾,是的,这些都是真正的限制,”那家伙告诉他。这是一个COBOL问题。它是几十年前写的。 “所以,你可以做什么?您能扩大规模还是其他?”瓜里诺问。 “他就像,直起身来-不!我们无能为力。”那个COBOL代码-没人会碰它。该州没有足够的钱来花很多时间重新投入该代码库。

他们也可能害怕,如果他们试图改变一些关键的东西,他们会破坏它。这是COBOL成功的另一个悖论。因为它既快速又稳定,多年来和十年来

......