2.2 程序设计语言产生的原因

    我们为了获得更轻松便捷的体验而编写程序。但轻松便捷不等于偷工减料。偷工减料在前,痛苦在后,这不是真正的便捷。

    懒惰:程序员的三大美德之一

    大家听说过“程序员的三大美德”吗? Perl 语言的设计者 Larry Wall 在其著作 Programming Perl6 中提出,优秀的程序员具有三大美德: 懒惰、急躁和傲慢(Laziness, Impatience and Hubris)。这就是俗称的程序员的三大美德。本节,我们介绍其中最重要的一项素质:懒惰。7

    6中文版为《Perl 语言编程(第 3 版)》,由中国电力出版社于 2001 年出版,何伟平译。
    7美德中“急躁”的意思是,程序员忍受不了程序执行的低效。“傲慢”的意思是,程序员容不得对错误不管不顾。
    懒惰(Laziness)
    懒惰是一项为了减少总能量支出,而不遗余力地努力的素质。为了节省工夫,设计的程序逐渐被更多的人使用。单独回答每个使用者的疑问费时费力,于是,程序中开始标有注释。所以说,懒惰是程序员最宝贵的素质。也正因如此,本书才得以展现在各位面前。请参考急躁和傲慢的解释。
    《Perl 语言编程(第 3 版)》

    Laziness 有懒惰、懒散、慵懒等不同的翻译方式,总的来说就是让自己轻松、方便。但这不是追求一时轻松,而是选择能将轻松便捷最大化的方法。也就是说,在能达到相同目的的多种方法中,选取一种效率最高、效果最好的方法。

    根据《Perl 语言编程(第 3 版)》一书,Perl 这一名字是来自 Practical extraction and report language(实用的数据获取及展示语言)。可见,Perl 是为了能方便地展示数据而发明的一种语言。

    语言们各有各的便捷

    前面说到程序设计语言是为寻求便捷而创造的。那么,为什么需要有这么多种语言呢?这是因为,大家对于便捷的理解因人而异。我们来看一下语言设计者们的目的以及他们是以何为便捷的吧。

    何为“便捷”

    语言旨在使什么变得便捷呢?是高速的代码执行?还是简单易于掌握的语言规范?抑或是轻松地理解他人编写的代码?

    比如,C++ 是一种非常重视代码执行速度的语言。为了使编程实现相同目的时,执行速度不亚于 C 语言,C++ 语言的规范相应变得复杂了。

    另外,Scheme 是一种很重视语言规则是否容易掌握的编程语言。它追求语言规范最简原则,所以它的语言规范全部加起来只有紧凑的 50 页而已 8。但是,对满是括号的书写方式存在抵抗情绪的人应该不少。

    8准确来讲,在 1998 年第五版修订版前是这样的。第五版修订版是 50 页,2007 年 的第六版放弃了规范最简原则,增加到 187 页。然而,C++ 语言有着超过 1300 页的规则说明书。相比之下,Scheme 语言算是非常紧凑的了。(这里的页数都是指日文版页数。——译者注)

    Python 是一种侧重于把代码阅读变得容易的语言。相对于 Scheme 语言,它更接近于 C 语言。熟练的编程人员会使用很多控制语句,并且会在结构层面通过缩进符来规范书写。相对应地,其速度不是特别快,语言规则也不那么少而紧凑。

    各有各的便捷

    语言的便捷之处各不相同。比如,用 PHP 语言编写 Web 服务很轻松,但它不擅长文字处理。相反,Haskell 和 OCaml 这样的 ML(Meta-Language)系列语言,编写处理语言文字的应用很便捷,但编写 Web 服务时就没有 PHP 使用得那么多了。

    在不同语言中,既有便于个人独立实现复杂算法的语言,也有便于多个人协作实现大型作业的语言,还有便于书写一次性使用的测试类语言。

    程序设计语言的选用因使用者目的不同而不同。不同语言致力于达成不同的目的。如果把为实现高速执行而设计的 C++ 语言和为了便于代码阅读而设计的 Python 语言放到一起比较,说 C++ 语言的可读性差或者 Python 的执行速度慢,这样的争论意义并不是很大。