为什么COBOL仍然是商业世界中首选的编程语言?

33
尽管我们有C++JavaPython等编程语言,但为什么COBOL仍然是商业界首选的语言?
它为什么如此受欢迎?

你能提供信息来源吗?谁说它仍然是“首选”?我知道它仍在使用,但我从未听说过有人将其优先于高级语言。 - vol7ron
11个回答

51

代码惯性。 大量使用COBOL编写的现有代码 = 切换到其他语言的成本过高。据维基百科称,目前有超过2000亿行COBOL代码在使用中。

政策惯性。 COBOL真正广泛使用的地方往往是政府机构和大型企业,这些机构通常变化缓慢。

人的惯性。 专门编写代码且了解多种语言的人更不太可能认为学习新语言是一件大事。而因需要掌握某种语言以执行“业务”工作而学习该语言的人可能根本没有考虑切换的想法。


4
确实,我认为“首选”不是描述COBOL的正确词语,它只是一直存在,似乎永远存在。 - bobince
36
维基百科页面上的“2000亿行代码”这个数据需要更好的引用,而不是只在一个网页公司不存在的文章中提及。该公司似乎主要从COBOL中获得业务,并在其网页上使用“范式转变”等词语。这个数字非常可疑;2000亿是一个巨大的数字。COBOL已经存在了60年。因此平均每年有33亿行代码。当然,在早期它不可能接近这个数字,所以我认为这个数据不可信。这并不是对你的直接回答,只是一般性评论。你的回答很好。加一。 - jason
3
再加上 COBOL 经常用于一些关键的商业应用程序,很少有人敢对其进行更改(比如银行交易),这就使得它更加重要。 - Christian V
2
2000亿行代码只是因为系统使用COBOL作为中间代码,并且执行得很糟糕。 - Stephan Eggermont
现在Java成为了新的COBOL。 - Peter Mortensen

32
我不确定COBOL是大型企业和政府首选的语言,我认为“容忍”可能更合适。
为什么呢?
1. 因为在管理他们的财务系统时,大型政府/企业对风险具有厌恶心理。如果犯错会将整个企业置于危险之中。如果不出问题就无需修复。 2. 难以为替换包含数百万行代码的关键系统建立一个扎实的商业案例,这归结为“我的语言比你的好”的争论。好吧,情况比这个更为复杂,但构建一个可靠的商业案例是困难的。 3. 事务量。COBOL应用程序往往针对吞吐量进行了优化。批处理大量数据是COBOL真正擅长的领域。由于Java应用程序倾向于在程序和“金属”之间增加更多的基础架构层,从而增加了处理拖延,因此更难针对吞吐量进行优化。大型企业/政府有大量数据需要推送到其系统中,并且吞吐量至关重要。 4. 每笔交易成本。当考虑所有因素时,COBOL的每笔交易成本通常较低。这部分是因为处理时间成本很高,而COBOL应用程序通常更加高效。然而,COBOL应用程序似乎也具有较低的开发/维护成本。
在大家对最后一点进行批判之前,让我解释一下...
我在一个非常大的工作环境中工作,几年前做出了执行决策,即所有新系统都要用Java构建,仅保留COBOL来维护现有的遗留软件基础。计划在15年的时间范围内完全淘汰COBOL。为了培训、设置最佳实践、建立基础架构和支持大规模Java开发,引入了一些最优秀的Java人才。这项倡议计划得当并得到了执行。然后,在部署了若干个Java应用程序之后,“算豆子”开始了。结果是,COBOL应用程序仍然比Java应用程序开发成本低。

维护,支持和运行 - 这里进行长时间的大量数字计算,因为结果不尽如人意!

COBOL回归了 - 但并非完全回归。 新的执行方向是保留COBOL用于繁重的工作(后端事务处理)和批量导向的应用程序。基本上,COBOL用于数字计算和业务规则实现。Java则提供GUI类型界面和轻量级处理。

我认为这可能是行业趋势。COBOL不会很快消失,但它可能会在幕后不被注意,以支持前台的新参与者。


2
从个人经验上说,对于COBOL的优点,可以提供一些信息。 - Noufal Ibrahim
1
那么为什么不使用FORTRAN或C进行数值计算呢? - user
9
COBOL的实现通常具有对压缩十进制数据类型(COMP-3)的本地支持,这些数据类型非常适合金融应用中常用的固定精度算术。与此相反,在其他语言如FORTRAN或C中,固定精度数学通常通过库函数实现(即更高的运行时成本)。另一方面,由于FORTRAN/C支持浮点操作的“接近底层”的特性以及相当直接的语句到机器指令的编译,它们仍然是高性能科学计算社区的常见语言选择。 - NealB

7
首先,我在为Micro Focus工作,所以我是一个利益相关者。然而,我会把问题反过来问。为什么不呢?固有的假设是C++、C#或Java自然会更好,因为它们是新的。然而,COBOL并没有停滞不前。部分原因是由于其冗长的语法,已经证明可以向COBOL添加新功能,使其保持竞争力。人们经常谈论COBOL有多“糟糕”,但是将30年前的COBOL与最新版本的C#、Ruby等进行比较!
事实上,COBOL的历史正在演变,但它保持向后兼容是企业投资的一个强有力的理由;TCO降低了,因为没有必要重写。
有关COBOL的最新版本的更多信息,请访问Managed COBOL的社区网站: http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4

你的链接已经失效。 - Pablo
链接已损坏(404)。 - Peter Mortensen

5

为什么COBOL变得流行?

因为在20世纪50年代末期,美国政府颁布了一项法令,规定如果软件供应商想要向政府销售或编写应用程序,语言必须是COBOL。

因此,在几十年的时间里,COBOL是拥有最多编译器供应商支持的语言,并且它是具有最高ISO标准化程度的语言,只有FORTRAN接近,但FORTRAN显然有完全不同的目标受众。

第二个原因:即使在今天,对于某些经常出现的特定业务问题,我确信它比我知道的其他任何语言都要好。其中最重要的方面是十进制算术。COBOL原生支持它(与PL/1等情况相同),但这并不适用于所有那些所谓的“更现代”的语言。顺便说一下:这正是为什么这里会有那么多关于“什么数据类型最适合存储货币值?”的问题的根本原因。提出这些问题的人们不知道整个IT世界不仅仅包括一些OO语言和一些ORM工具,而且他们也不知道为什么“货币算术”对于计算机语言来说可能是有用的,即计算机语言应具备内置的本地数据类型,除了bigint(程序员仍需跟踪小数位数)或float(程序员仍要负责在各个地方添加正确的舍入逻辑)。


5
没有哪种语言能像Cobol一样,快速高效地处理大批量数据。它不需要图形化,也不需要位操作,它只需要做好它的本职工作--主要是会计工作。
C++和C可以替代系统级别的东西,但在定点数学和记录导向的I/O方面,它们表现不佳。在大多数金融和商业应用程序所处的空间中,z/OS上的Cobol和z/assembler都有更好的本地支持。
Java是好的、安全的、可行的。在IBM大型机上,Java和Cobol之间的互操作非常好。但有些在Cobol中容易做到的事情,在Java中却很难做到,反之亦然。它们彼此补充,而不是取代对方。Java还通过库调用执行所有的定点数学运算,这比本地操作码支持要慢得多。
Python也使用库(又称模块)支持定点数学以及记录I/O。它也遭受致命的、在我看来是设计缺陷的问题,即使用缩进来分隔作用域。这在Mac/Windows/Unix等带有ISO8859-1字符集变体的相对均匀的环境中运作得相当不错。但是,当在ASCII为中心的世界和EBCDIC为中心的世界之间来回切换时,行终止符并不像"\n\r, \r, \n"那样简单,并且文件传输包、字符转换例程或由设置为不同字符集的终端编辑所引起的任何配置错误都会破坏你源代码的范围。
你提到的所有语言在Cobol最强大的关键商业需求方面都存在弱点。

3
它适用于可以热插拔任何硬件的机器,并且在处理器故障时可以平稳降级。当涉及到数十亿美元的业务时,可靠性至关重要。
这些机器还支持非常高的I/O速度;如果无法实时处理一天的交易量,您的业务将面临危险。
自1985年以来,它一直是一种稳定的语言,几乎没有过时的部分。
代码不容易移植到另一种语言,因为开发人员从未“计划”发生这种情况。将驱动系统的代码移动到另一种语言是一种风险和巨大的成本。
可靠性很重要,而COBOL在这方面非常出色。

2
可靠性往往至关重要。问问有人想让他们的银行账户由经过数十年打磨的坚如磐石的技术控制,还是由最新潮的“本月语言俱乐部”提供的技术控制?(是的,我知道还有其他可靠的编程语言,但我只是在阐述一个基本观点)。 - WarrenT
不必每五年重新编写所有内容,这具有巨大的好处。让我们来看看一些转向Visual Basic的企业,哦,天啊...... - mckenzm

2
为什么它流行起来了?
IBM 的大力推广对 Fortran 和 COBOL 很有帮助,但对 PL/I 不是很有帮助。
它很早就出现了,甚至在 1960 年之前就已经存在了。
相比使用汇编语言,甚至是 IBM System/360 汇编语言(这是一种非常适合业务处理的汇编语言),它要容易得多。因此吸引了很多人想要比使用汇编语言更好地完成任务。
它非常适合当时常见的商业计算实践。它非常擅长接受输入、进行小的转换,并生成报告。(实际上,它现在仍然如此,但现代企业的需求更加多样化。)
它具有一些特殊功能,例如十进制算术并跟踪小数点以及记录数据类型,这在商业领域中非常有效。

1

[供应商发布-但不一定是供应商的官方声明]

当然,惯性、安装基础和改变风险都是非常合理的原因,但我认为语言本身也有很好的理由。如果您想要批处理大量数据记录或进行财务计算,那么记录布局和数字数据类型的定义比任何其他语言都更好。

正如NealB在他的帖子中所描述的那样,我曾与那些自然环境和专业知识是Java的用户交谈过,但他们将核心逻辑保留在COBOL中,因为这是最适合工作的工具。他们在同一应用程序中自由混合Java(主要用于Unicode字符串操作和系统集成)和COBOL。如果他们比较了在Java中完成相同工作所需的代码量,那就没有意义了。Alex Turner在另一个网站上发布了一些很好的例子,比较了COBOL和Java中的典型业务功能。


1

Cobol的发明是为了让那些对计算机一无所知的人编写程序。这正是商业,特别是美国商业蓬勃发展的糟糕想法。

优秀的软件需要高超的技能和良好的工具,其中一些实际上需要真正的知识和理解才能使用得当。高超的技能水平往往要求高薪,因此寻找银弹的搜索继续进行,并且积极地阻碍高超的技能水平的发展。不相信我?试试这些链接

http://userweb.cs.utexas.edu/users/EWD/transcriptions/EWD12xx/EWD1284.html


1

我曾使用C、C++和Java。 所有语言都具有高级功能和图形特性。 但是当涉及到计算时,也就是业务计算和推断,并非越努力越好。在效率方面没有人比得过COBOL,尤其处理大量数据时, 一天或更长时间的处理......用Java或其他语言想都别想,只有COBOL和主机。

  1. 安全性方面,主机已经没有漏洞超过60年了。
  2. 处理紧急或关键情况下代码简单易懂。
  3. 他们在Java、VB.Net等语言中使用前端,但对于数据保存,他们依赖DB2,这就是为什么COBOL变得必不可少的原因。

这就是为什么领先的银行公司在从主机迁移到其他平台之前会考虑十次。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接