过去这一年的时间里,我买了不少书,查了很多资料,可以算是认真的学习了几种主流的脚本语言,因为我一直想搞一个好用的自动化工具,来方便我们的系统维护。虽然这个愿望还没有达成,但是在这个过程中,还是学到了很多东西。今天下午,跟同事们聊天时,说到了脚本语言,这是比较难得的,也正好借这个契机,把我的一些看法说一说,有不妥和错误的地方,请大家多指正。
为什么选择脚本语言
为什么选择脚本语言,可能每个人面对的实际情况都不一样。语言本身没有好坏之分,只有合适或者不合适。因此,我所谓的选择主要是根据应用需要来选择,并非根据语言的好坏或者使用者的习惯。就我自己的情况来说,很长一段时间里,如果需要程序来辅助完成工作时,我都会选择Java。
先简单说说Java,Java是企业应用当之无愧的统治者。但是,近几年随着大家对开发语言认识的转变,Java已经让越来越多的人感到不满,取而代之的是脚本语言的迅速崛起。一个例子是,Java 7在最初的功能规划时,呼声最高的是“闭包”,而“闭包”恰恰是脚本语言最具特色的功能之一。在使用诸如Java,C之类的语言时,我们不得不面对各种复杂的数据类型、设计模式和大量看起来没用但又不能缺少的代码。而对脚本语言来说,这些问题都是天生就不存在的。现在,开发讲究敏捷,注重效率,对于一个企业来说,开发工作首先要考虑的就是成本,敏捷开发正是降低成本最有效的手段之一,而脚本语言,又是实现敏捷开发的一条可行之路。
有人说Java已经out了,但我并不这么觉得,我个人认为Java仍然是最好的跨平台方案。现在我们已经不能单纯把Java看做一门语言,它已经成为一个事实上的平台。构建在Java平台之上的优秀的Java替代产品,也已经得到大家的广泛支持和认可,如groovy、scala等等。我相信,Java仍然有它的生命力,而它的生命力可能也要得益于脚本语言。
说了半天废话,还是要回到我选择脚本语言的话题上。我的初衷很简单,我要找一个非Java平台的,C语言的替代品。为什么?第一,Java不是万能的,比如它做不了ICMP Ping;第二,C语言学习曲线过长,C程序的部署难度较高;第三,上述的脚本语言的所有优势。
本着以上几个原则,我学了几个流行的脚本语言,他们是:Perl、Python、Ruby,当然后来我也学习Java平台上的脚本语言,如Jython(Python的Java实现)、JRuby(Ruby的java实现)、Groovy。下面我想就这几个脚本语言,来做一个简单的比较,希望大家在选择脚本语言时,能有更多的参考。
脚本语言的比较
脚本语言的比较,可能比较凌乱,但我想侧重以下几个方面:学习曲线,语言本身的特色、跨平台的能力、国际化的能力,以及它在应用领域的份额。
Unix/Linux Shell
首选还是要提一提Unix/Linux Shell(包括awk、sed),它也是脚本语言,并且可能是我们日常使用最多的。我个人感觉,shell更适合做流程化的系统管理工作,而对于逻辑较为复杂的应用级产品,shell的开发和维护难度都相当高。带有个人情感的说,shell的学习难度大于大多数主流脚本语言,这和它的语法特点,调试、运行环境等等都有关系。因此,日常流程化的系统管理工作,shell仍然是一个不错的工具,除此之外,相信大家还有更好的选择。
Python/Jython
Python最大的魅力之一,就是简单易学,一个新手可以短期内(有人说是十分钟,我认为几天是完全可能的)就写出高质量并且实用的程序,它甚至被称为非计算机专业人士学习编程的最好选择。Python的功能强大,标准库的丰富程度,估计连Java也望尘莫及。Python适合做系统管理,但这并不是说它不能做大型应用程序。Python应用的成功案例,已经数不胜数,尤其是在科学计算领域更是独树一帜。Python是一门优秀的面向对象语言,但更多的Python程序员,喜欢Python面向过程的部分。我个人感觉,Python的OO不如Ruby,因为不够彻底,但这也正是Python支持者更爱它的地方。
可惜的是,Python在企业应用领域没能有更大的突破,近几年更有被后起之秀Rails(Ruby的WEB框架)抛在身后的意思。但这并不说明Python在企业应用方面不成熟(豆瓣网是离我们最近的Python案例),如果有兴趣,大家可以了解Python社区最具人气的WEB框架Django,也可以去看看简单到让人难以置信的WEB框架webpy。Python在短短几年内就成为六大主流开发语言之一,绝对不是盖的!