在撰写本文时,也就是2020年7月,新冠肺炎疫情在美国已造成超过133,000人死亡。死者不成比例地是黑人和拉丁裔,以及那些不能或不被雇主允许远程工作的人。在大流行期间,我们看到我们的技术基础设施变得越来越重要-从允许有手段和特权的人远程办公的通信技术,到放大公共卫生信息或致命的政治化错误信息的平台。我们还看到一些运行社会安全网的基础设施在不断增加的负荷下崩溃。这包括州失业制度,这些制度通过税收向工人支付他们几十年来贡献的福利。在全球大流行的情况下,能否在家工作,能否辞职并依靠储蓄生活,或能否下岗并领取失业救济金,实际上已经成为生死攸关的问题。
我们技术基础设施的裂缝在春季变得令人痛苦地显而易见,因为美国公司对这场流行病的反应是解雇越来越多的工人。如此多的人不得不立即申请失业,以至于计算机化的失业申领系统开始出现故障。在全国各地,电话线堵塞,网站崩溃,数百万人面临着无法支付房租、药品或食物的可能性。
随着灾难的展开,几个州政府将其归咎于用COBOL编写的老化的、理应过时的计算机系统,COBOL是一种起源于20世纪50年代末的编程语言。至少有12个州的失业制度仍然使用这种有61年历史的语言,包括在加利福尼亚州、科罗拉多州和新泽西州帮助管理10亿美元或更多资金的制度。当申领失业救济金的洪流袭来时,它似乎对COBOL系统造成了如此广泛的破坏,以至于许多州显然没有足够的程序员来修复损坏;新泽西州州长甚至公开请求懂这种语言的志愿者的帮助。
但是后来发生了一些奇怪的事情。当数十名COBOL程序员争相提供他们的服务时,州政府指责COBOL没有接受帮助。事实上,事实证明各州一开始并不真正需要它。出于许多原因,COBOL在这场危机中很容易成为替罪羊-但实际上失败的根本不是技术。
失业申领失灵最值得注意的事情之一不是COBOL系统可能突然出了大问题,而是它们以前从未发生过。世界各地的许多计算机化政府和业务流程仍然在运行,并积极使用COBOL编写-从协调全球几乎每一笔信用卡交易的程序,到管理为大约1000万美国退伍军人服务的残疾福利系统的程序。这种语言仍然非常重要,以至于IBM最新、最快的“Z”系列大型机都将COBOL支持作为一个关键特性。
六十年来,用COBOL编写的系统已经被证明是高度健壮的--这正是它们设计的初衷。COBOL是在1959年构思出来的,当时在商业设备制造商Burroughs的电子部门工作的计算机专家玛丽·霍斯(Mary Hawes)在宾夕法尼亚大学(University Of Pennsylvania)召集计算机专业人士召开了一次特别会议。霍斯希望将业界、政府和学术专家聚集在一起,为基本的商业功能设计一种编程语言,特别是财务和会计,这种语言可以很容易地适应不同组织的需求,并在不同计算机公司制造的大型机之间进行移植。
霍斯召集的小组演变成了一个名为CODASYL的机构,即数据系统语言会议,其中包括当时主要计算硬件制造商的计算机科学家,以及政府和军方。CODASYL着手设计一种编程语言,它比当时存在的任何其他编程语言都更容易使用、更容易阅读和更容易维护。
该委员会的核心洞察力是使用通俗易懂的英语术语设计语言,这种方式比其他语言更不言自明。使用COBOL(代表“通用面向业务的语言”),其目标是使代码具有可读性,以便程序本身记录它是如何工作的,从而允许程序员更容易地理解和维护代码。
COBOL是一种“面向问题”的语言,它的结构是围绕商业和管理用户的目标而设计的,而不是针对科学用户需要解决的那种复杂的数学问题而设计的最大限度的灵活性。COBOL的主要架构师Jean Sammet,当时是Sylvania Electric的研究员,后来是IBM的经理,他写道,“它的目的当然是(也是预期的)这种语言可以供新手程序员使用和管理人员阅读。”(尽管开拓性的计算机科学家Grace Hopper经常被称为“COBOL之母”,但她对开发该语言规范的参与微乎其微;Sammet才是真正配得上这个称号的人。)。
其他早期的高级编程语言,如FORTRAN(一种用于执行复杂数学函数的语言),使用特殊的缩写和数学符号,如果您不是该语言的熟练用户,可能很难理解这些缩写和数学符号。例如,FORTRAN程序要求程序员知道数学公式记法,并编写如下命令:
正如您可以从COBOL版本(但可能不是从FORTRAN版本)中看出的那样,此行代码是一个(简化的)示例,说明两种语言如何计算社保支付并将总数四舍五入到便士。由于COBOL的设计不仅是为了编写,也是为了阅读,COBOL将使计算机化的业务流程更易读,无论是对于最初的程序员和管理人员,还是对于那些在很长一段时间后维护这些商业系统的人来说都是如此。
一种可移植的、更容易使用的编程语言在当时是一个革命性的想法,并预示了后来的许多编程语言。然而,COBOL甚至在它诞生之前就几乎被宣布死亡。1960年,也就是该语言规范发布的那一年,CODASYL委员会的一位名叫Howard Bromberg的成员委托制作了一个小小的“COBOL墓碑”,作为一个恶作剧。布朗伯格是电子公司RCA的一名经理,早些时候曾与格蕾丝·霍珀合作开发Flow-马季奇语言,她担心当每个人最终完成COBOL设计时,专有语言的竞争对手已经席卷了市场,将用户锁定在可能只在一家制造商的机器系列上运行良好的编程语言。
但当COBOL在1960年问世时,也就是玛丽·霍斯最初呼吁采取行动不到一年的时候,它绝不是一到就死了。COBOL的最早演示表明,该语言可以跨硬件通用。“这件事的意义在于,”萨米特以其特有的轻描淡写的口吻写道,这意味着“兼容性真的可以实现”。突然之间,计算机用户拥有了一种功能齐全的跨平台编程语言,其功能比以往任何时候都要强大得多。Cobol取得了巨大的成功。到1970年,它成为世界上使用最广泛的编程语言。
在接下来的几十年里,人们编写了数十亿行COBOL代码,其中许多至今仍在金融机构和政府机构内部运行。这门语言一直在不断改进,并赋予了新的特点。然而,COBOL被计算机科学领域内的许多人嘲笑为一种软弱或简单化的语言。虽然这些批评是用技术术语表述的,但却从更深层次的来源中汲取了教训:早期计算机编程的文化和性别动态。
在20世纪60年代,随着计算机编程越来越被认为是一门科学,越来越多的男性涌入这个以前由女性主导的领域。这些人中的许多人都幻想自己比以前的程序员略胜一筹,他们经常认为COBOL低人一等,没有吸引力,部分原因是它不需要对底层计算机硬件的深奥知识或计算机科学资格证书。关于哪种语言和编程技术是“最好的”的争论是该领域不断增长的痛苦的一部分,因为新的实践者试图证明它们的价值,并将直到20世纪60年代还被视为机械的、非智力的、女性化的工作专业化。无论有意无意,许多进入该领域的男性计算机科学家最不希望的就是让该领域更容易进入,或者让代码更容易阅读,这可能会削弱他们声称的专业和“科学”专业知识。
然而,起初,这些人需要帮助。回顾过去,我们看到了许多女性教男性如何编程的例子,在女性逐渐退出该领域的显赫职位之前。朱丽叶·穆罗·欧芬格(Juliet Muro Oeffinger)是我为这篇文章采访的十几名程序员之一,她在1964年大学毕业并获得数学学士学位后开始用汇编语言编程。“当COBOL成为下一个热门的东西时,”她说,“我学习了COBOL,并作为客户教育代表为霍尼韦尔计算机系统公司教授它。”在下面的图片中,奥芬格在南印第安纳州天然气和天然气公司教满了男人的房间
与我交谈的另一位名叫Pam Foltz的退休程序员指出,良好的COBOL是伟大的长期基础设施,因为它是如此透明。几乎任何对编程有相当了解的人都可以进入别人几十年前构建的COBOL系统,并了解代码是如何工作的。福尔茨作为金融机构的程序员有很长的职业生涯,20世纪60年代在北卡罗来纳大学教堂山分校获得美国研究学士学位后不久,她就接受了COBOL的再培训。也许这种双重背景是她的代码如此可读的原因之一;正如她的一位主管钦佩地告诉她的那样,“您把COBOL写得像一本小说!任何人都可以遵循你的代码。“。
具有讽刺意味的是,这种可访问性正是COBOL被贬低的原因之一。这不仅仅是因为语言陈旧;许多基础设施编程语言也是如此。以C编程语言为例:它创建于1972年,但正如我采访的一位当前COBOL程序员指出的那样,没有人像人们使用COBOL那样取笑它或称它为“老死语言”。许多受访者注意到,了解COBOL实际上是一项有用的当今技能,在美国和世界各地的许多大学的社区大学计算机科学课程中仍然教授这种技能。
但尽管如此,还是有一个家庭手工业致力于取笑COBOL正是因为它的优点。Cobol相对容易自我记录、入职时间短(尽管成为专家的道路很长),以及最初由委员会为大型、平淡无奇的基础设施业务系统设计的特点,这些都对它不利。它不是像C、ALGOL或FORTRAN这样的语言那样,是从面向研究的环境中产生的,这一事实也是如此。
在更广泛的意义上,憎恨COBOL曾经是-现在也是-一方面巩固和保护计算机程序员的职业声望,另一方面使编程不那么不透明和更容易获得的斗争的一部分。程序员之间有一个古老的笑话:“如果它很难写,那么它就应该很难读。”换句话说,如果您的代码很容易理解,那么您和您的技能可能并不都是独一无二的或有价值的。如果管理层认为您使用的工具和您编写的代码任何人都可以很容易地学会,那么您显然是可以替代的。
对这种对计算机专业知识的生存威胁的恐惧已经在该领域变得如此根深蒂固,以至于许多人甚至看不到对复杂语言的偏好:试图通过偏爱守门人的工具而不是帮助新人的工具来保护自己的地位。正如一位在IBM主要从事C++和Java工作的当代程序员告诉我的那样,“每一种在某种程度上使事情变得更简单的新编程语言通常都会被一些现有的程序员取笑为编程过于简单-或者他们说它不是一种‘真正的语言’。”例如,因为Java包含自动内存管理,所以它被认为是一种不那么健壮的语言,用它编程的人有时被认为是低级程序员。这位已经在该领域工作了近30年的程序员说:“它永远都在进行。”“它关乎把关,并在技术进步面前保持自己的声望和重要性,这使得人们更容易被工具更容易使用的新人取代。”把关不仅仅是由个人和机构完成的;它本身也被写入编程语言中。
在一个提升了男孩天才和摇滚明星程序员、晦涩难懂的黑客和复杂的黑盒算法的领域,一种由委员会设计的、旨在更容易学习和使用的语言-由一个包括多名女性担任权威职位的团队创建的语言-会受到较低的尊重,或许也就不足为奇了。但是,现代计算已经开始瓦解,也开始瓦解我们社会的其他部分,通过该领域对自己的高度评价,以及通过它将权力集中到程序员手中的方式,这些程序员将社会、政治和经济问题误认为是技术问题,往往会带来灾难性的结果。
申请失业的人数比以往任何时候都多的全球大流行是COBOL系统从未设计过要处理的情况,因为这样规模的全球灾难本不应该发生。然而,即使在这场危机中,COBOL系统实际上也没有崩溃。尽管新泽西州州长对COBOL程序员发出了绝望的恳求,但后来的调查显示,正是人们用相对较新的编程语言Java编写的索赔网站导致了错误、故障和速度减慢。处理这些声明的后端系统-用COBOL编写的系统-根本不是罪魁祸首。
那么,为什么COBOL被陷害为罪魁祸首呢?计算技术往往会变得陈腐,这是一种常见的虚构
也就是说,即使是最健壮的系统也需要适当的维护,以便修复错误、添加功能并与新的计算技术接口。尽管COBOL系统具有基本的功能,但许多COBOL系统并没有得到很好的照顾。如果他们在当前的危机中几乎步履蹒跚,那就不会是因为技术本身。相反,这可能是由于如此多的州和地方政府已经屈服于紧缩逻辑。
为了维护技术基础设施,我们需要维护工程师,而不仅仅是系统设计师-这意味着要为人员付费,而不仅仅是为产品付费。Cobol从来没有打算把程序员排除在方程式之外。但随着州政府采取行动削减预算,他们越来越不愿意支付维护关键系统所需的劳动力。在新泽西州等州,许多本应在工资单上维护和更新COBOL失业系统的人,却由于州预算削减而被解雇。因此,这些系统可能会变得脆弱,在危机中,它们很容易因为缺乏维护而崩溃。
正是这种紧缩驱动的缺乏对人的投资-而不是州政府兜售的方便的虚构故事-拥有过时技能的程序员退休了-在最近这场危机之前的几年里,COBOL程序员被解雇了。现实情况是,有很多新的COBOL程序员可以做这项工作。事实上,COBOL程序员Facebook小组中的大多数人年龄在25到35岁之间,在全球范围内接受编程和维护COBOL系统培训的人数只会不断增加。许多从事COBOL工作的人毕业于20世纪90年代或21世纪头10年,他们在21世纪的大部分职业生涯中都在维护和编程COBOL系统。
如果本应在场的政府程序员还在工资单上,以维持失业系统,那么失业保险制度无法满足全国人民生死存亡的需求就很有可能不会发生。不过,这些程序员很可能需要发挥他们的Java技能来解决这个问题。因为,尽管COBOL系统的时代已经到来,但当危机来袭时,COBOL仍在缓慢前进,非常稳定。
事实上,当今的技术可以更多地使用COBOL为计算带来的弹性和可访问性-特别是对于影响广泛、将被广泛使用并且将是未来需要许多人维护的长期基础设施的系统。从这个意义上说,COBOL和它的替罪羊向我们展示了高科技的一个重要方面,硅谷或政府中似乎很少有人理解这一方面。较旧的系统是有价值的,以牺牲现有基础设施为代价不断建设新的技术系统以获取短期利益并不是进步。事实上,这是一个社会可以走的最倒退的道路之一。
当我们站在这场流行病的中心时,现在是我们集体重新思考和重新计算许多所谓的技术创新和创新者给民主带来价值的时候了。当这些贡献是围绕现有经济、社会或政治体系中的缺陷或差距货币化而设计的,而不是做那些平凡而乏味的工作来关心和修复我们所有人都依赖的体系时,我们最终会遇到更多的问题,而不是解决方案,更多的替罪羊,而不是对我们真正出错的洞察力。
州失业体系的失败与各种公共基础设施的失败有相似之处:飓风桑迪(Sandy)重创纽约市地铁系统,因为它也因数十年的撤资而受到削弱。卡特里娜飓风摧毁了新奥尔良的黑人生命和社区,因为由于种族主义资源分配,联邦政府负责的堤坝维护工作早就应该进行了。新冠肺炎继续对美国的蹂躏比其他任何国家都要大,因为几十年来,应对公共卫生危机所需的联邦基础设施一直是空心化的,尤其是被一个把利润放在人民之上的政府所蔑视,几乎不在乎(如果有的话)美国以黑人和拉丁裔为主的人正在不成比例地死亡。
如果我们想要照顾大流行中的人们,我们也必须愿意为护理的劳动买单。这意味着治疗COVID患者的护士和医生;需要较小的在线课程才能返回学校的学生和教师;以及每天冒着生命危险的杂货店工人。这也意味着对关心数字的工程师进行长期投资。
.