Fortran|让程序员梦寐以求的编程语言,实现编程的完美开发(上)


Fortran|让程序员梦寐以求的编程语言,实现编程的完美开发(上)文章插图
一心让臣民行善的暴君可能是最专制的暴君 。 ——C. S. LEWIS(1898—1963 , 英国小说家)
我的朋友曾对一位著名的操作系统专家说他想要设计一种真正优秀的编程语言 。 那位专家回答 , 这是浪费时间 , 优秀的语言不一定会被市场接受 , 很可能无人使用 , 因为语言的流行不取决于它本身 。 至少 , 那位专家设计的语言就遭遇到了这种情况 。
那么 , 语言的流行到底取决于什么因素呢?流行的语言是否真的值得流行呢?还有必要尝试设计一种更好的语言吗?如果有必要的话 , 怎样才能做到这一点呢?
为了找到这些问题的答案 , 我想我们可以观察黑客 , 了解他们使用什么语言 。 编程语言本来就是为了满足黑客的需要而产生的 , 当且仅当黑客喜欢一种语言时 , 这种语言才能成为合格的编程语言 , 而不是被当作“指称语义”(denotational semantics)或者编译器设计 。
流行的秘诀没错 , 大多数人选择某一种编程语言 , 不是因为这种语言有什么独特的特点 , 而是因为听说其他人使用这种语言 。 但是我认为 , 外界因素对于编程语言的流行其实没有想象中那么大的影响力 。 我倒是觉得 , 问题出在对于什么是优秀编程语言 , 黑客的看法与大多数的语言设计者不一样 。
黑客的看法其实比语言设计者的更重要 。 编程语言不是数学定理 , 而是一种工具 , 为了便于使用 , 它们才被设计出来 。 所以 , 设计编程语言的时候必须考虑到人类的长处和短处 , 就像设计鞋子的时候必须符合人类的脚型 。 如果鞋子穿上去不舒服 , 无论它的外形多么优美 , 多么像一件艺术品 , 你也只能把它当作一双坏鞋 。
大多数程序员也许无法分辨语言的好坏 。 但是 , 这不代表优秀的编程语言会被埋没 , 专家级黑客一眼就能认出它们 , 并且会拿来使用 。 虽然他们人数很少 , 但就是这样一小群人写出了人类所有优秀软件 。 他们有着巨大的影响力 , 他们使用什么语言 , 其他程序员往往就会跟着使用 。 老实说 , 很多时候这种影响力更像是一种命令 , 对于其他程序员来说 , 专家级黑客就像自己的老板或导师 , 他们说哪种语言好用 , 自己就会乖乖地跟进 。
专家级黑客的看法不是决定一种语言流行程度的唯一因素 , 某些古老的软件(Fortran和Cobol的情况)和铺天盖地的广告宣传(Ada和Java的情况)也会起到作用 。 但是 , 我认为从长期来看 , 专家级黑客的看法是最重要的因素 。 只要有了达到“临界数量”(critical mass)的最初用户和足够长的时间 , 一种语言可能就会达到应有的流行程度 。 而流行本身又会使得这种优秀的语言更加优秀 , 进一步拉大它与平庸语言之间的好坏差异 , 因为使用者的反馈总是会导致语言的改进 。 你可以想一下 , 所有流行的编程语言从诞生至今的变化有多大 。 Perl和Fortran是极端的例子 , 除它们两个之外 , 甚至就连Lisp都发生了很大的变化 。
所以 , 即使不考虑语言本身的优秀是否能带动流行 , 我想单单流行本身就肯定会使得这种语言变得更好 , 只有流行才会让它保持优秀 。 编程语言的最高境界一直在发展之中 。 虽然语言的核心功能就像大海的深处 , 很少有变化 , 但是函数库和开发环境之类的东西就像大海的表面 , 一直在汹涌澎湃 。
当然 , 黑客必须先知道这种语言 , 才可能去用它 。 他们怎么才能知道呢?就是从其他黑客那里 。 所以不管怎样 , 一开始必须有一群黑客使用这种语言 , 然后其他人才会知道它 。 我不知道“一群”的最小数量是多少 , 多少个黑客才算达到“临界数量”呢?如果让我猜 , 我会说20人 。 如果一种语言有20个独立用户 , 就意味这20个人是自主决定使用这种语言的 , 我觉得这就说明这种语言真的有优点 。
达到这一步并非易事 。 如果说用户数从0到20比从20到1000更困难 , 我也不会感到惊讶 。 发展最早的20个用户的最好方法可能就是使用特洛伊木马:你让人们使用一种他们需要的应用程序 , 这个程序偏巧就是用某种新语言开发的 。
外部因素我们得先承认 , 确实有一个外部因素会影响到语言的流行 。 一种语言必须是某一个流行的计算机系统的脚本语言(scripting language) , 才会变得流行 。 Fortran和Cobol是早期IBM大型机的脚本语言 。 C是Unix的脚本语言 , 后来的Perl和Python也是如此 。 Tcl是Tk的脚本语言 , Visual Basic是Windows的脚本语言 , (某种形式的)Lisp是Emacs的脚本语言 , PHP是网络服务器的脚本语言 , Java和JavaScript是浏览器的脚本语言 。