有些语言在技术迭代过程中被逐渐淘汰,而有些语言则以另一种形式“向死而生”。


那么,编程语言的“陨落”意味着什么呢?在我们近一步讨论之前,会对此进行解释。


编程语言可以用来编写计算机应用程序,和其它人类语言或文化一样备受潮流影响。所以,某种语言“陨落”并非无人问津,只是不再“热门”了。一般来讲,一门语言出现超过25年热度便会下降!

一、古老语言的向死而生


很多古老编程语言已不复存在或正在以另一种形式存活于世...原因五花八门...


1.被“后代”吃掉


虽然 Algol 语言已死,但是,它的“后代”仍存活于世,只是与原始版本不像了而已。Algol 的死亡很好地诠释了语言消亡的方式之一——被后代“吃掉”,然后“夺走”整个用户群。


“Algol 语言家族”包含 Perl 和 Delphi 这样的“远亲”,后逐渐演变出 C、C++、Visual BASIC 和 Java 等语言。


这些流行语言很久以前就“蚕食”掉了整个 Algol 开发者社区,尤其是较早出现的 C 语言,它非常受欢迎,使程序员不得不放弃使用 Algol。


2.用户和社区不多


而有些语言从未被用户真正关注过。FLOW-MATIC 由格蕾丝·霍珀创造,但从未被广泛使用过。许多语言消亡的原因也都是如此:用户极少、社区不多。


而 FLOW-MATIC 也已经转化成 COBOL。所以,它的小用户社区已变成COBOL 用户社区。这就是很多种语言消亡的原因:引入另一种语言,使社区变成新语言社区。


例如,C 语言用 BCPL 命名,使 BCPL 用户(极少)变成了 C 的用户。但是,BCPL 是由 Martin Richards 编写,并不是 C 语言。


归根结底,还是用户的流失削弱了语言。随着最后几个日常用户的弃用或寻找到其它种类的语言,它们就会逐渐“陨落”,变得越来越弱,直到基本灭亡,然后,完全消失。


3.社区里的信息


你在编程社区里发布信息之前需要使其具有连续性。糟糕的信息会吸引到你不想要的用户,也会排除掉那些想要关注你的用户。所以,改变社区里语言的内容是最危险的。这可能导致社区用户的逃离。你可以做出微小的改变,但在发布之前一定要权衡利弊。

二、什么能够加强一门语言的热度?


实践证明,某种语言的小众用户群能够强化特定语言在人们心目中的地位。R 语言很适合做统计,在相关社区中拥有不可撼动的地位,Java 则是通用语言...


自此以后,一切语言都转变成为了各式各样的小众语言。Python 擅长数学、科学和人工智能编程,而 Ruby 擅长处理动态的 Web 应用程序。JavaScript 则应用于浏览器编程。Fortran 曾经是通用的,而如今则应用于高等数学之中。


C 语言在操作系统和驱动程序中已退居次要位置。因此,它现在被排除在通用编程语言之外。而伴随着语言逐渐趋向于小众化,你必须避免它们成为真正的通用语言。

三、刨根问底:我们能从古老编程语言中学到什么?


你不禁会感觉到疑惑,究竟能从那些古老的编程语言中学到些什么?下面分别带你认识一下 4 种古老的编程语言 Fortran、Perl、LISP 和 COBOL。


1.Fortran(1956)


从头说起吧!一种语言一旦流行起来,便很少会彻底“消亡”,但往往会发生“变异”;例如,Fortran 的 2008 版本与原始版本差异巨大。


一直以来,Fortran 在科学界和数学界一直备受欢迎,现在依然是超级计算机的主要编程语言,比 C 语言快得多。因此,开发人员也一直在推动 Fortran 不断向前发展。


2.Perl(1987)


Perl 是一种功能丰富的计算机编程语言。最初是为文本处理而开发,现在用于各种任务,包括:系统管理,Web 开发,网络编程,GUI 开发等。


Perl 5 版本与 Perl 1、Perl 2 极其不同,甚至不该将它们视为同种语言。Perl 5 作为独立的语言已被分离出来,Perl 6 (现在被称为 Raku)也做出了大规模的更新。


从 Perl 5 到 Perl 6 更新花费了数年,而 Perl 6 作为一种新型语言正不断向前发展。


3.LISP(1958)


LISP则是一种通用的高级计算机编程语言,长期以来垄断着人工智能领域。另一种古老的语言是 LISP,它的很多“后代”语言主要包括:Guile、Scheme、Clojure 和 Racket。


在大多数情况下,当人们谈及 LISP 语言时,并不是指具体的、原始的LISP。与Perl 1 一样,LISP 的后代发生了重大变化,但它们仍是相似的语言。


这使得学习新的 LISP 语言并不难。因为它们彼此之间有很多共同点,你能够快速流畅地共享更大的开发者社区。


4.COBOL


COBOL 是一种被专用于商业的通用语言,又被称为企业管理语言、数据处理语言,是最早出现的高级编程语言之一,也是世界上第一个商用编程语言。数百万行的 COBOL 维持了大量银行基础设施的正常运行。


虽然这种语言十分小众,也并不存在多少 COBOL 程序员,但是它已经存在了几十年,基本上没有任何改变。为摆脱 COBOL,程序员经常将其翻译成另一种语言(基本上是 Java)实现。

四、好与坏:如何评价编程语言?

那么,你到底如何评价一门古老语言究竟是好还是坏呢?


Fortran 语言曾红过半边天,它的“生死”取决于功能。与 Fortran 不同,LISP 则凭借灵活性的优点逐渐被发展起来。


问题来了,编程语言的功能是否决定了语言的好坏呢?这其实得具体情况具体分析。


如果你问 Fortran 用户:“你需要语言变得更容易编程吗?”他们会说:“我不在乎!”而 LISP 用户也不会把语言的具体功能放在首要位置。BASH 用户需要的是兼容性、稳定性和易用性并希望它能够轻松排除 bug。


也许 Ruby 或 Python 当前的用户更关心语言的功能而不是表现力;也许用户最初是由于部署方式而选择了 PHP。而专业的 Laravel 用户可能需要语言更简洁、更具表现力,并愿意为此牺牲兼容性和可用性。

五、迭代速度:决定语言的发展方向


Python 在迭代过程中进行了极其缓慢和认真的更改,使其具备了出色的向后兼容性。而 Ruby 并没有向用户过多宣传向后兼容性,因此迭代速度快。


由于迭代速度有所不同,Python 赢得了 20 年后才需要运行程序的数学/科学社区,而 Ruby 则赢得了网络开发者社区,标准需要每 5 年改变一次。


顺便说一句,这并不意味着“Ruby 对而 Python 错”。这用事实阐述了使小众用户群变得更强大的另一种方式:“接受语言在某方面表现得好而在另一方面表现得不好,那么,你就可以击败在两方面都不出色的通用语言。”


有没有一种语言可以兼顾迭代速度与功能呢?这并非不可能。但它最终将不得不与迭代较快和较慢的后代竞争。


例如,Perl 就是如此。很久以前,Perl 是唯一的一种脚本语言。对于总结大块文本文件来说十分好用。但是现在,它要与 Ruby 和 Python 同时竞争。Ruby 占领了网络开发这个利基市场,而 Perl 终将失去这个市场。

六、写在最后:如何让编程语言屹立百年不倒


日历页随风飘扬,回首向来萧瑟处,编程语言已如耄耋老人般走过近 70 年的沧桑岁月。


自 1956 年美国计算机科学家约翰·巴克斯带领团队开发出世界上第一个高级编程语言 FORTRAN 开始,潘多拉魔盒就已被打开,也随之揭开了与计算机对话的神秘面纱。 


虽然现在的编程语言五花八门、功能各异,那些古老的编程语言也并没有被世人遗忘,反倒是经过岁月的洗礼,变得愈发厚重。如今,编程语言和框架也被软件开发人员和商业人士津津乐道。


你可以读到美国著名程序员保罗·格雷厄姆(Paul Graham)对古老语言的高谈阔论。他认为:“古老语言的痕迹 100 年后仍将以可识别的形式与我们同在。”


人们常说:“一门语言要想在一百年后仍然可用,就需要具备良好的性能。”而我们更想知道,100 年后,哪些语言依然能够存在并且可用。


那么,你如何使编程语言能够“存活”百年,使其成为时代的纪念碑呢?在如此漫长的 100 年岁月里,人们会一直需要你提供的语言吗?


这需要你并不能只关注语言的特性和语法,更需要关注开发者社区。这对于 Java、Fortran、Ruby 或其它热门语言来说都是如此。


具体来讲,为保证一门语言的可持续性,你需要对社区中的开发者做出承诺,巩固它在程序员心目中的地位,如,特定的新功能是好还是坏?


话虽如此,承诺大多数情况下可能微不足道,有时,你与用户的核心理念还会相互冲突。如,在 Fortran 中,他们更看重的是表达能力而不是速度。而在 Rust 中,内存安全是最重要的。