5.1 为什么是Ruby?
现在软件生产的代表语言是Java。但Java已老,在主流市场,虽然它还会将继续存在许多年。
为什么说Java已老?很怀念Pascal的严谨、优美与高效。Java也一样,是静态语言,沉稳的同时注定了笨重,不善腾挪;而且Java是强静态语言,在需要简略的地方,依然沉稳笨重。仿佛一个绅士,在宴会大厅中彬彬有礼,在厨房里彬彬有礼,在卧室里仍然彬彬有礼。灵气沾不上Java,神来之笔沾不上Java。这一切,注定了Java与软件的快速开发无缘。
为什么不是C++,C#?从C++开始,C系列语言已经走上一条不归路。C++不仅兼容C,而且囊括了模板、范型等特性,包罗万象。无论是系统调用、网络开发、数据库操作都能显试身手,可是程序员很难掌握这些,即使想熟练应用其中某一方面也不容易。一个软件,一门语言,或是一个人,当他(它)想要得到整个世界的时候,危机已经埋下了。
当我们厌倦了静态语言的时候,当我们饱受大象思维折磨的时候,Ruby浮现出来,灵巧,快速。
5.2 Ruby会长久么?
Ruby会长久么?这很难回答。重要的是,编程语言将向动态回归,命令式语言将与函数式语言融合。终究有一天,编程语言完全智能化,人们用自然语言来编程。而Ruby有可能在编程语言的智能化发展道路上起到承上启下的作用。
Ruby灵巧,快速,但其实并不简单。
Ruby中实现一个小功能,可以有3种甚至4种完全不同的思路与方法,因为Ruby在语法层次实现了冗余① ,但是这样一来:
1).程序员深入掌握Ruby变得不很容易;
2).程序员们相互读懂代码也很难;
3).软件生产是一种大规模地、群体合作的行为。许多软件公司有自己的编码规范,促使员工编码风格统一,以便于A)程序解耦重构、B)代码复用、C)人员流动后项目如期推进。Java撇下C++,成为软件工业的支柱语言,正是得力于此。Ruby灵巧,快速,千变万化,没有统一风格,难于解耦,在目前,自然不适合工业生产。
如果说语法定义的冗余增加了灵活性,没有伤害,那么,Ruby 坚持缺陷也许是一种个性美吧。在 3.6 节我叙述 I/O 的输入方法gets 的时候,没有给出例程,是因为 Ruby for mswin32 的版本在windows 下不能正确处理标准输入和标准输出,要想使用,只好打开一个DOS 窗口,几个版本了,依旧如此。还有就是Ruby的语法中有许多容易产生歧义的地方,恕不举例,假如没有较深的功力、良好的编码风格(比如空格的使用),很容易犯错。软件生产总是偏向于成熟方案、成熟工具的。
Ruby语言具有动态特征,代码行为随时可以改变,本书后面内容都将围绕这一特征展开介绍。
产生高级编程语言以来的50年间,从没有哪一种语言像Ruby这样近似于现实世界。看看网络,数不清的信息扑面而来,你知道了什么是冗余;看看每一天的生活,环境污染,交通拥挤,日复一日,许多的无奈,你理解了什么是缺陷;生命里充满了不可预知,明天将发生什么,谁也不知道,也许是悲伤的事,也许是令人欣喜的事,这就是动态。Ruby 语言的冗余性、缺陷性和动态性正是现实世界的真实写照。
① length与size都表示数组长度,为什么Ruby要定义两个方法来表示数组长度呢?因为在英语中提到长度,有人会用length,有人会用size。这样的例子在Ruby语言里非常普遍。
完整阅读,请看我写的 Ruby语言中文教程all in one