刚刚看了《Hackers & Painters》觉得里面讲lisp语言未来会流行的那部分理论很有意思,也很有说服力。
下面讲讲我自己的想法:
机器性能本身是贬值的,按照摩尔定律,平均过去大约是每过18个月就能以原先一半的价钱买到相同性能的CPU,相对于这种贬值速度,人力资源的价值可以认为是固定不变的,也就是说人力资源相比于机器性能的价值越来越高。
所以人们在开发软件的过程中,相比于过去,越来越不重视代码的优化,具体可以参见Andy and Bill’s Law。
但是按这种逻辑,编程语言也会越来越接近自然语言,学习门槛越来越低,但是运行性能也越来越低。可是目前流行的编程语言都是很早以前发明的,都是设计给那时候的计算机运行的,为什么它们没有被现在发明的语言所淘汰?
各种热门语言的发明时间(排名不分先后,也未包含所有热门编程语言):
Python 1991
Java 1995
Ruby 1990
PHP 1994
Javascript 1995
R 1993
而且奇怪的是这几种语言都集中在1990~1995之间。
发明得早的语言,并不等于为当时的机器设计的语言。发明得早的语言,现在还活跃的并不是它的最初版,而是持续改进后的成果。事实上,过去编程语言流行有过三次浪潮,驱动力各不相同。
第一波是50~70年代,这一波是数学驱动的。
最早的编程语言都是冲着公式翻译去的,1957 年的 FORTRAN 全称是 IBM Mathematical Formula Translating System,它要为当时的机器生成代码,但高级语言设计目标之一就是要机器无关嘛,所以直到 90 年代,在数值计算领域 FORTRAN 还是占统治地位,90年代末期这块领域才逐渐 C/C++ 迁移了。
你说的 LISP 是 1958 年搞的,也非常高级。John McCarthy 当时搞人工智能研究,需要表达大量关于世界的事实,他发现列表非常合适,为了直接书写列表就搞出来这个 LISP。当时,数值计算性能比 FORTRAN 慢 10~100 倍,不过这帮搞人工智能的还是用得很开心。
当然这一波里也有异类,比如 1959 年开搞的 COBOL 就是专门为商用软件而非科学计算设计的,高级到不行,只有数字和字符串两种数据类型,语法接近英语,到90年代后期,差不多2000亿行代码支撑着世界80%的商业,直到主机衰落,才逐渐失去活力,现在还有大量遗留系统在用它。
这一波出来的程序大多有一个特点,就是学术范,有很多超越时代的思想和特性,因而生命力极强。但是时至今日,它们的优点也被吸收到性能更好的、表达能力更强、学习曲线更短的新生代语言里,所以逐渐失去影响力也是必然的。
第二波则是70~90年代,这一波是系统驱动的。
1970 PASCAL,1972 C,1983 C++ 。这些语言都非常注重性能,虽然也是高级语言,但是没有什么不容易映射到机器上的东西。这些语言至今仍旧非常活跃,比如 C 和 C++ 在 TIOBE 基本还在前三。
第三波则是90年代到2012左右,这一波是互联网驱动的。
1991 Python,1993 Ruby,1994 PHP,1995 Java,1995 JavaScript。没有互联网提供的 web 服务器端开发机会,大约前3个都火不起来,最后那个 JavaScript 完全是互联网的衍生物。服务端开发一般对计算性能不敏感,I/O什么的才是大头,而浏览器这头一般计算量也有限,所以什么语言都有可能火起来。
你特意把 C/C++ 拿掉是不对滴。第二波和第三波的语言现在都挺活跃的。
现在有点要出第四波的意思了,这一波是厂商驱动的,我的平台听我的。
Apple 搞 Swift,Google 搞 Go,IBM 貌似下注 Swift 了,希望不要出一个 Worm IDE,微软除了互联网那一波搞出来的 C#/F# 又搞了 TypeScript,FaceBook React/JSX 那个其实不能算,不知道啥时候出个正而八经的语言不?
你说 Swift、Go 和 TypeScript 不流行,也是不对滴。